From 65aa608d49708b98dfb5fec91a7f81c3a7017e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Fri, 17 Apr 2026 21:01:47 +0200 Subject: [PATCH 01/43] initial commit # Conflicts: # scripts/run-single-benchmark.sh --- .codex/skills/jmh-benchmark-compare/SKILL.md | 97 +++ .../jmh-benchmark-compare/agents/openai.yaml | 4 + .../references/timestamps-and-discovery.md | 34 ++ .../scripts/jmh_benchmark_compare.py | 142 +++++ .../scripts/jmh_compare_core.py | 562 ++++++++++++++++++ .../scripts/jmh_compare_export.py | 242 ++++++++ .../scripts/test_jmh_compare_core.py | 79 +++ .gitignore | 1 + AGENTS.md | 9 +- core/sail/base/pom.xml | 5 + scripts/run-single-benchmark.sh | 4 + testsuites/benchmark/README.md | 2 +- .../plan/QueryPlanSnapshotStoreSupport.java | 5 +- 13 files changed, 1179 insertions(+), 7 deletions(-) create mode 100644 .codex/skills/jmh-benchmark-compare/SKILL.md create mode 100644 .codex/skills/jmh-benchmark-compare/agents/openai.yaml create mode 100644 .codex/skills/jmh-benchmark-compare/references/timestamps-and-discovery.md create mode 100755 .codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py create mode 100644 .codex/skills/jmh-benchmark-compare/scripts/jmh_compare_core.py create mode 100644 .codex/skills/jmh-benchmark-compare/scripts/jmh_compare_export.py create mode 100644 .codex/skills/jmh-benchmark-compare/scripts/test_jmh_compare_core.py diff --git a/.codex/skills/jmh-benchmark-compare/SKILL.md b/.codex/skills/jmh-benchmark-compare/SKILL.md new file mode 100644 index 00000000000..808c91f8510 --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/SKILL.md @@ -0,0 +1,97 @@ +--- +name: jmh-benchmark-compare +description: Parse JMH result text by finding the first header line that starts with Benchmark and contains Mode and Score, build a structured table for all columns/rows, compare overlapping benchmarks across 2+ files, compute Diff Score and Diff %, filter by deviation or regression thresholds, analyze regressions over time from filename/mtime timestamps, and export sortable reports to txt/md/csv/xlsx/html. Use for benchmark run comparisons, regression triage, and directory-wide historical analysis. +--- + +# jmh-benchmark-compare + +Use this skill when benchmark output comparison must be reproducible, sortable, and exportable. + +## Quick start + +Run two-file comparison: + +```bash +python3 .codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py \ + /path/run-a.txt /path/run-b.txt \ + --export-formats txt,md,csv,xlsx,html \ + --output-dir /tmp \ + --output-base jmh-compare +``` + +Sort by diff percent (descending): + +```bash +python3 .codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py \ + run-a.txt run-b.txt \ + --sort-column "Diff % [run-b - run-a]" \ + --sort-desc \ + --export-formats md \ + --output /tmp/jmh-diff.md +``` + +## Core behavior + +1. Detect first JMH table header line: + `line.startswith("Benchmark") and "Mode" in line and "Score" in line`. +2. Derive column boundaries from that header. +3. Parse all following benchmark rows into an internal table. +4. Match overlapping benchmark keys across files. +5. Add derived columns: + `Diff Score [target - baseline]`, `Diff % [target - baseline]`, `Status [...]`. + +Default key columns are all columns except `Cnt`, `Score`, `Error`. Override via `--id-columns`. + +## Inputs and overlap + +- Pass any mix of files and directories. +- Directory entries are scanned for files that contain a JMH header. +- `--overlap-mode all` keeps only rows present in all files. +- `--overlap-mode any` keeps rows present in at least two files. +- Baseline selection: `--baseline `. + +## Filters and regression shortcuts + +- Hide tiny deltas: + `--min-deviation-pct 1.0` +- Show only regressions above threshold: + `--regressions-over-pct 3.0` +- Control direction interpretation: + `--score-direction auto|higher|lower` + +## Historical analysis + +Analyze trends across many runs: + +```bash +python3 .codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py \ + /path/bench-history \ + --recursive \ + --glob "*.txt" \ + --timestamp-source auto \ + --analyze-over-time \ + --regressions-over-pct 2.5 \ + --export-formats html,csv \ + --output-dir /tmp \ + --output-base jmh-history +``` + +Timeline report files are emitted with `-timeline` suffix. + +## Exports + +- `txt`: aligned plain-text table. +- `md`: valid markdown table. +- `csv`: spreadsheet-friendly CSV. +- `xlsx`: native Excel workbook (single sheet). (`xslx` alias accepted) +- `html`: sortable table (click header), built-in CSS + JS, color theme selector. + +If one format and explicit destination needed, use `--output /path/file.ext`. +If multiple formats, use `--output-dir` + `--output-base`. + +## Script + +`scripts/jmh_benchmark_compare.py` + +For timestamp parsing behavior and filename examples, see: +`references/timestamps-and-discovery.md` diff --git a/.codex/skills/jmh-benchmark-compare/agents/openai.yaml b/.codex/skills/jmh-benchmark-compare/agents/openai.yaml new file mode 100644 index 00000000000..398038c9c52 --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "JMH Benchmark Compare" + short_description: "Compare JMH benchmark outputs and export diff reports" + default_prompt: "Parse JMH outputs, compare overlapping benchmarks, and export sortable diff tables in requested formats." diff --git a/.codex/skills/jmh-benchmark-compare/references/timestamps-and-discovery.md b/.codex/skills/jmh-benchmark-compare/references/timestamps-and-discovery.md new file mode 100644 index 00000000000..022650a11e4 --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/references/timestamps-and-discovery.md @@ -0,0 +1,34 @@ +# Timestamp and discovery notes + +## Directory scan rules + +- Inputs may be files or directories. +- Directory scan includes files that contain a line matching: + `^Benchmark\b.*\bMode\b.*\bScore\b` +- Use `--glob` to narrow file candidates. +- Use `--recursive` for recursive walk. + +## Timestamp source + +`--timestamp-source` controls run ordering: + +- `auto`: filename parse first, fallback to file mtime. +- `filename`: require timestamp in filename. +- `mtime`: use file modification time only. + +## Filename timestamp patterns + +Supported patterns in names: + +- `YYYYMMDD` +- `YYYY-MM-DD` +- `YYYYMMDD-HHMM` +- `YYYY-MM-DD_HHMM` +- `YYYYMMDD-HHMMSS` +- `YYYY-MM-DDTHH:MM:SS` + +Examples: + +- `jmh-20260301.txt` +- `benchmark_2026-03-01_0915.log` +- `run_20260301-091530.txt` diff --git a/.codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py b/.codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py new file mode 100755 index 00000000000..7c3c16a6e61 --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/scripts/jmh_benchmark_compare.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +"""CLI wrapper for JMH benchmark compare skill.""" + +from __future__ import annotations + +import argparse +import sys + +import jmh_compare_core as core +from jmh_compare_export import output_targets, write_table + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Compare JMH benchmark result tables from files or directories.", + ) + parser.add_argument("inputs", nargs="+", help="Input files and/or directories") + parser.add_argument( + "--recursive", + action="store_true", + help="Recursively scan directories (default for directories)", + ) + parser.add_argument("--glob", default="*", help="Glob pattern for directory scan") + parser.add_argument( + "--id-columns", + help="Comma-separated key columns (default: all except Cnt/Score/Error)", + ) + parser.add_argument( + "--overlap-mode", + choices=("all", "any"), + default="all", + help="'all': present in all files, 'any': present in >=2 files", + ) + parser.add_argument("--baseline", default="0", help="Baseline index or label") + parser.add_argument( + "--score-direction", + choices=("auto", "higher", "lower"), + default="auto", + help="Interpret score direction for regression labels", + ) + parser.add_argument("--sort-column", help="Sort output by this column name") + parser.add_argument("--sort-desc", action="store_true", help="Sort descending") + parser.add_argument( + "--min-deviation-pct", + type=float, + default=0.0, + help="Hide rows whose max abs diff %% is below threshold", + ) + parser.add_argument( + "--regressions-over-pct", + type=float, + default=None, + help="Show only rows with regression over threshold %% in any diff column", + ) + parser.add_argument( + "--analyze-over-time", + action="store_true", + help="Generate extra trend summary across timestamps", + ) + parser.add_argument( + "--timestamp-source", + choices=("auto", "filename", "mtime"), + default="auto", + help="Timestamp source for ordering/trend analysis", + ) + parser.add_argument( + "--export-formats", + default="txt", + help="Comma-separated: txt,md,csv,xlsx,html", + ) + parser.add_argument("--output", help="Single explicit output file path") + parser.add_argument("--output-dir", default=".", help="Output directory for multi export") + parser.add_argument("--output-base", default="jmh-benchmark-compare", help="Output basename") + return parser.parse_args() + + +def parse_formats(raw: str) -> list[str]: + formats = [f.strip().lower() for f in raw.split(",") if f.strip()] + formats = ["xlsx" if f == "xslx" else f for f in formats] + supported = {"txt", "md", "csv", "xlsx", "html"} + unknown = [f for f in formats if f not in supported] + if unknown: + raise ValueError(f"Unsupported formats: {', '.join(unknown)}") + return formats + + +def build_parsed_files(args: argparse.Namespace) -> list[core.ParsedFile]: + files = core.discover_files(args.inputs, args.recursive, args.glob) + if len(files) < 2: + raise ValueError("Need at least 2 JMH result files after discovery.") + labels_seen: dict[str, int] = {} + return [ + core.parse_file(path, core.derive_label(path, labels_seen), args.id_columns, args.timestamp_source) + for path in files + ] + + +def write_exports(table: core.TableData, args: argparse.Namespace, formats: list[str], suffix: str = "") -> None: + targets = output_targets(args.output if not suffix else None, args.output_dir, args.output_base, formats, suffix) + for fmt, path in targets.items(): + write_table(table, fmt, path) + print(f"[wrote] {path}") + + +def main() -> int: + args = parse_args() + formats = parse_formats(args.export_formats) + parsed = build_parsed_files(args) + baseline = core.resolve_baseline(parsed, args.baseline) + + comparison = core.build_comparison_table( + parsed, + baseline, + args.overlap_mode, + args.min_deviation_pct, + args.regressions_over_pct, + args.score_direction, + ) + core.sort_table(comparison, args.sort_column, args.sort_desc) + write_exports(comparison, args, formats) + + if args.analyze_over_time: + threshold = args.regressions_over_pct if args.regressions_over_pct is not None else 0.0 + timeline = core.build_timeline_table( + parsed, + baseline.key_columns, + args.overlap_mode, + args.score_direction, + threshold, + ) + if args.sort_column and args.sort_column in timeline.columns: + core.sort_table(timeline, args.sort_column, args.sort_desc) + write_exports(timeline, args, formats, suffix="-timeline") + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except Exception as exc: # noqa: BLE001 + print(f"[error] {exc}", file=sys.stderr) + raise SystemExit(1) diff --git a/.codex/skills/jmh-benchmark-compare/scripts/jmh_compare_core.py b/.codex/skills/jmh-benchmark-compare/scripts/jmh_compare_core.py new file mode 100644 index 00000000000..fa08bf8eb66 --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/scripts/jmh_compare_core.py @@ -0,0 +1,562 @@ +#!/usr/bin/env python3 +"""Core parse/compare logic for JMH benchmark tables.""" + +from __future__ import annotations + +import datetime as dt +import itertools +import math +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Dict, List, Optional, Sequence, Tuple + +HEADER_RE = re.compile(r"^Benchmark\b.*\bMode\b.*\bScore\b") +NUM_RE = re.compile( + r"[-+]?(?:\d+(?:,\d{3})*(?:\.\d+)?|\.\d+)(?:[eE][-+]?\d+)?|[-+]?(?:inf|nan)", + re.IGNORECASE, +) +METRIC_COLUMNS = {"Score", "Error", "Cnt"} +DATE_PATTERNS = ( + re.compile( + r"(20\d{2})[-_]?([01]\d)[-_]?([0-3]\d)[Tt _-]?([0-2]\d)[-_:]?([0-5]\d)(?:[-_:]?([0-5]\d))?" + ), + re.compile(r"(20\d{2})[-_]?([01]\d)[-_]?([0-3]\d)"), +) + + +@dataclass +class ParsedFile: + path: Path + label: str + timestamp: dt.datetime + columns: List[str] + rows: List[Dict[str, str]] + key_columns: List[str] + score_by_key: Dict[Tuple[str, ...], float] + row_by_key: Dict[Tuple[str, ...], Dict[str, str]] + + +@dataclass +class TableData: + columns: List[str] + rows: List[Dict[str, object]] + numeric_columns: set + percent_columns: set + + +def extract_numeric(text: str) -> Optional[float]: + match = NUM_RE.search(text or "") + if not match: + return None + raw = match.group(0).replace(",", "") + try: + return float(raw) + except ValueError: + return None + + +def looks_like_jmh_output(path: Path, max_bytes: int = 1_000_000) -> bool: + try: + text = path.read_text(encoding="utf-8", errors="replace")[:max_bytes] + except OSError: + return False + return any(HEADER_RE.search(line) for line in text.splitlines()) + + +def discover_files(inputs: Sequence[str], recursive: bool, glob_pattern: str) -> List[Path]: + discovered: List[Path] = [] + for item in inputs: + path = Path(item).expanduser().resolve() + if not path.exists(): + raise FileNotFoundError(f"Input does not exist: {path}") + if path.is_file(): + discovered.append(path) + continue + walker = path.rglob(glob_pattern) if recursive or path.is_dir() else path.glob(glob_pattern) + for candidate in walker: + if candidate.is_file() and looks_like_jmh_output(candidate): + discovered.append(candidate.resolve()) + deduped = [] + seen = set() + for path in sorted(discovered): + if path not in seen: + deduped.append(path) + seen.add(path) + return deduped + + +def find_header(lines: List[str]) -> Tuple[int, str]: + for idx, line in enumerate(lines): + if line.startswith("Benchmark") and "Mode" in line and "Score" in line: + return idx, line + raise ValueError("No JMH header found (need line starting with 'Benchmark' containing 'Mode' and 'Score').") + + +def column_specs(header_line: str) -> List[Tuple[str, int, Optional[int]]]: + spans = [(m.group(0), m.start()) for m in re.finditer(r"\S+", header_line)] + specs = [] + for i, (name, start) in enumerate(spans): + end = spans[i + 1][1] if i + 1 < len(spans) else None + specs.append((name, start, end)) + return specs + + +def parse_row(line: str, specs: Sequence[Tuple[str, int, Optional[int]]]) -> Dict[str, str]: + parsed: Dict[str, str] = {} + for name, start, end in specs: + if start >= len(line): + parsed[name] = "" + continue + parsed[name] = line[start:end].strip() if end is not None else line[start:].strip() + return parsed + + +def parse_row_split(line: str, columns: Sequence[str]) -> Optional[Dict[str, str]]: + parts = re.split(r"\s{2,}", line.strip()) + if len(parts) != len(columns): + return None + return {col: part.strip() for col, part in zip(columns, parts)} + + +def is_int_token(text: str) -> bool: + return bool(re.fullmatch(r"[+-]?\d+", text or "")) + + +def has_valid_metric_values(row: Dict[str, str], columns: Sequence[str]) -> bool: + for col in columns: + value = row.get(col, "") + if col == "Score": + if extract_numeric(value) is None: + return False + elif col == "Cnt" and value: + if not is_int_token(value): + return False + elif col == "Error" and value: + if extract_numeric(value) is None: + return False + return True + + +def map_parts_to_columns(parts: Sequence[str], columns: Sequence[str]) -> Optional[Dict[str, str]]: + if len(parts) < len(columns): + return None + overflow = len(parts) - len(columns) + row = {columns[0]: " ".join(parts[: overflow + 1])} + for idx, col in enumerate(columns[1:], start=1): + row[col] = parts[overflow + idx] + return row + + +def parse_row_with_optional_metrics(parts: Sequence[str], columns: Sequence[str]) -> Optional[Dict[str, str]]: + optional_positions = [idx for idx, col in enumerate(columns) if col in {"Cnt", "Error"}] + for drop_count in range(0, len(optional_positions) + 1): + for drop_positions in itertools.combinations(optional_positions, drop_count): + reduced_columns = [col for idx, col in enumerate(columns) if idx not in drop_positions] + row = map_parts_to_columns(parts, reduced_columns) + if row is None or not has_valid_metric_values(row, reduced_columns): + continue + full_row = {col: "" for col in columns} + full_row.update(row) + return full_row + + return None + + +def parse_row_tokens(line: str, columns: Sequence[str]) -> Optional[Dict[str, str]]: + parts = [part for part in line.strip().split() if part != "±"] + return parse_row_with_optional_metrics(parts, columns) + + +def parse_timestamp_from_filename(name: str) -> Optional[dt.datetime]: + for regex in DATE_PATTERNS: + match = regex.search(name) + if not match: + continue + try: + parts = [int(x) for x in match.groups() if x is not None] + if len(parts) >= 5: + year, month, day, hour, minute = parts[:5] + second = parts[5] if len(parts) > 5 else 0 + return dt.datetime(year, month, day, hour, minute, second, tzinfo=dt.timezone.utc) + year, month, day = parts[:3] + return dt.datetime(year, month, day, tzinfo=dt.timezone.utc) + except ValueError: + continue + return None + + +def parse_timestamp(path: Path, source: str) -> dt.datetime: + if source in ("auto", "filename"): + candidate = parse_timestamp_from_filename(path.name) + if candidate is not None: + return candidate + if source == "filename": + raise ValueError(f"No parseable timestamp in filename: {path.name}") + return dt.datetime.fromtimestamp(path.stat().st_mtime, tz=dt.timezone.utc) + + +def derive_label(path: Path, seen: Dict[str, int]) -> str: + base = path.stem + seen[base] = seen.get(base, 0) + 1 + return base if seen[base] == 1 else f"{base}#{seen[base]}" + + +def derive_key_columns(columns: List[str], id_columns: Optional[str]) -> List[str]: + if id_columns: + wanted = [c.strip() for c in id_columns.split(",") if c.strip()] + missing = [c for c in wanted if c not in columns] + if missing: + raise ValueError(f"Unknown id columns: {', '.join(missing)}") + return wanted + keys = [c for c in columns if c not in METRIC_COLUMNS] + if "Benchmark" in columns and "Benchmark" not in keys: + keys.insert(0, "Benchmark") + return keys + + +def parse_file(path: Path, label: str, id_columns: Optional[str], timestamp_source: str) -> ParsedFile: + lines = path.read_text(encoding="utf-8", errors="replace").splitlines() + header_idx, header_line = find_header(lines) + specs = column_specs(header_line) + columns = [name for name, _, _ in specs] + key_columns = derive_key_columns(columns, id_columns) + rows: List[Dict[str, str]] = [] + + saw_data = False + for line in lines[header_idx + 1 :]: + stripped = line.strip() + if not stripped: + if saw_data: + break + continue + if stripped.startswith("#"): + continue + row = parse_row(line, specs) + split_row = parse_row_split(line, columns) + if split_row is not None and has_valid_metric_values(split_row, columns): + row = split_row + else: + token_row = parse_row_tokens(line, columns) + if token_row is not None and has_valid_metric_values(token_row, columns): + row = token_row + if not row.get("Benchmark"): + if saw_data: + break + continue + score = extract_numeric(row.get("Score", "")) + if score is None: + if saw_data and (stripped.startswith("Result") or stripped.startswith("Secondary result")): + break + continue + rows.append(row) + saw_data = True + + if not rows: + raise ValueError(f"No benchmark rows parsed from {path}") + + score_by_key: Dict[Tuple[str, ...], float] = {} + row_by_key: Dict[Tuple[str, ...], Dict[str, str]] = {} + for row in rows: + key = tuple(row.get(col, "") for col in key_columns) + score = extract_numeric(row.get("Score", "")) + if score is None: + continue + score_by_key[key] = score + row_by_key[key] = row + + return ParsedFile( + path=path, + label=label, + timestamp=parse_timestamp(path, timestamp_source), + columns=columns, + rows=rows, + key_columns=key_columns, + score_by_key=score_by_key, + row_by_key=row_by_key, + ) + + +def resolve_baseline(files: List[ParsedFile], baseline: str) -> ParsedFile: + try: + idx = int(baseline) + if idx < 0 or idx >= len(files): + raise ValueError + return files[idx] + except ValueError: + for file_entry in files: + if file_entry.label == baseline: + return file_entry + labels = ", ".join(f.label for f in files) + raise ValueError(f"Unknown baseline '{baseline}'. Valid index 0..{len(files)-1} or labels: {labels}") + + +def score_direction(mode: str, units: str, direction_flag: str) -> str: + if direction_flag in {"higher", "lower"}: + return direction_flag + m = (mode or "").lower() + u = (units or "").lower() + if m == "thrpt" or "op/s" in u or "ops/s" in u: + return "higher" + if "/op" in u or "s/op" in u or m in {"avgt", "sample", "ss"}: + return "lower" + return "lower" + + +def classify_pct(diff_pct: Optional[float], direction: str, threshold: float = 0.0) -> str: + if diff_pct is None: + return "n/a" + if direction == "higher": + if diff_pct <= -threshold: + return "regression" + if diff_pct >= threshold: + return "improvement" + else: + if diff_pct >= threshold: + return "regression" + if diff_pct <= -threshold: + return "improvement" + return "neutral" + + +def build_overlap_keys(files: List[ParsedFile], overlap_mode: str) -> List[Tuple[str, ...]]: + key_sets = [set(f.score_by_key.keys()) for f in files] + if overlap_mode == "all": + keys = set.intersection(*key_sets) + else: + counts: Dict[Tuple[str, ...], int] = {} + for keys_set in key_sets: + for key in keys_set: + counts[key] = counts.get(key, 0) + 1 + keys = {key for key, count in counts.items() if count >= 2} + return sorted(keys) + + +def build_overlap_keys_from_maps( + score_maps: Sequence[Dict[Tuple[str, ...], float]], overlap_mode: str +) -> List[Tuple[str, ...]]: + key_sets = [set(score_map.keys()) for score_map in score_maps] + if overlap_mode == "all": + keys = set.intersection(*key_sets) + else: + counts: Dict[Tuple[str, ...], int] = {} + for keys_set in key_sets: + for key in keys_set: + counts[key] = counts.get(key, 0) + 1 + keys = {key for key, count in counts.items() if count >= 2} + return sorted(keys) + + +def derive_comparison_key_columns(files: List[ParsedFile], preferred_order: Optional[Sequence[str]] = None) -> List[str]: + preferred = list(preferred_order) if preferred_order else files[0].key_columns + preferred = [col for col in preferred if col not in METRIC_COLUMNS] + shared = [col for col in preferred if all(col in file_entry.columns for file_entry in files)] + if shared: + return shared + + fallback = [col for col in files[0].columns if col not in METRIC_COLUMNS] + shared_fallback = [col for col in fallback if all(col in file_entry.columns for file_entry in files)] + if shared_fallback: + return shared_fallback + + raise ValueError("No common key columns found across files.") + + +def rekey_file(file_entry: ParsedFile, key_columns: Sequence[str]) -> Tuple[Dict[Tuple[str, ...], float], Dict[Tuple[str, ...], Dict[str, str]]]: + score_by_key: Dict[Tuple[str, ...], float] = {} + row_by_key: Dict[Tuple[str, ...], Dict[str, str]] = {} + for row in file_entry.rows: + key = tuple(row.get(col, "") for col in key_columns) + score = extract_numeric(row.get("Score", "")) + if score is None: + continue + score_by_key[key] = score + row_by_key[key] = row + return score_by_key, row_by_key + + +def build_comparison_table( + files: List[ParsedFile], + baseline: ParsedFile, + overlap_mode: str, + min_deviation_pct: float, + regressions_over_pct: Optional[float], + direction_flag: str, +) -> TableData: + key_columns = derive_comparison_key_columns(files, baseline.key_columns) + score_columns = [f"Score [{f.label}]" for f in files] + compare_targets = [f for f in files if f.label != baseline.label] + diff_columns = [f"Diff Score [{t.label} - {baseline.label}]" for t in compare_targets] + pct_columns = [f"Diff % [{t.label} - {baseline.label}]" for t in compare_targets] + status_columns = [f"Status [{t.label} vs {baseline.label}]" for t in compare_targets] + columns = key_columns + score_columns + diff_columns + pct_columns + status_columns + rows: List[Dict[str, object]] = [] + score_maps: Dict[str, Dict[Tuple[str, ...], float]] = {} + row_maps: Dict[str, Dict[Tuple[str, ...], Dict[str, str]]] = {} + for file_entry in files: + score_maps[file_entry.label], row_maps[file_entry.label] = rekey_file(file_entry, key_columns) + overlap_keys = build_overlap_keys_from_maps([score_maps[file_entry.label] for file_entry in files], overlap_mode) + + for key in overlap_keys: + row: Dict[str, object] = {} + status_by_column: Dict[str, str] = {} + for idx, col in enumerate(key_columns): + row[col] = key[idx] + for file_entry, score_col in zip(files, score_columns): + row[score_col] = score_maps[file_entry.label].get(key) + + base_score = score_maps[baseline.label].get(key) + base_row = row_maps[baseline.label].get(key, {}) + direction = score_direction(base_row.get("Mode", ""), base_row.get("Units", ""), direction_flag) + max_abs_pct = 0.0 + has_regression_over = False + + for target, diff_col, pct_col, status_col in zip(compare_targets, diff_columns, pct_columns, status_columns): + target_score = score_maps[target.label].get(key) + if base_score is None or target_score is None: + diff = None + pct = None + else: + diff = target_score - base_score + pct = None if base_score == 0 else (diff / base_score) * 100.0 + status = classify_pct(pct, direction, 0.0) + row[diff_col] = diff + row[pct_col] = pct + row[status_col] = status + status_by_column[diff_col] = status + status_by_column[pct_col] = status + if pct is not None: + max_abs_pct = max(max_abs_pct, abs(pct)) + if regressions_over_pct is not None: + has_regression_over = has_regression_over or ( + classify_pct(pct, direction, regressions_over_pct) == "regression" + ) + + row["__max_abs_pct"] = max_abs_pct + row["__has_regression_over"] = has_regression_over + row["__status_by_column"] = status_by_column + rows.append(row) + + if min_deviation_pct > 0: + rows = [r for r in rows if float(r.get("__max_abs_pct", 0.0)) >= min_deviation_pct] + if regressions_over_pct is not None: + rows = [r for r in rows if bool(r.get("__has_regression_over", False))] + + numeric_columns = set(score_columns + diff_columns + pct_columns) + percent_columns = set(pct_columns) + return TableData(columns=columns, rows=rows, numeric_columns=numeric_columns, percent_columns=percent_columns) + + +def sort_table(table: TableData, sort_column: Optional[str], descending: bool) -> None: + if not sort_column: + return + if sort_column not in table.columns: + available = ", ".join(table.columns) + raise ValueError(f"Sort column '{sort_column}' not found. Available: {available}") + + def sort_key(row: Dict[str, object]) -> Tuple[int, object]: + value = row.get(sort_column) + if value is None or value == "": + return (1, "") + if isinstance(value, (int, float)): + return (0, float(value)) + return (0, str(value).lower()) + + table.rows.sort(key=sort_key, reverse=descending) + + +def format_value(column: str, value: object, percent_columns: set) -> str: + if value is None: + return "" + if isinstance(value, float): + if math.isnan(value): + return "NaN" + if math.isinf(value): + return "Inf" if value > 0 else "-Inf" + if column in percent_columns: + return f"{value:.3f}%" + return f"{value:.9g}" + return str(value) + + +def build_timeline_table( + files: List[ParsedFile], + key_columns: List[str], + overlap_mode: str, + direction_flag: str, + regression_threshold: float, +) -> TableData: + ordered = sorted(files, key=lambda f: (f.timestamp, f.label)) + key_columns = derive_comparison_key_columns(ordered, key_columns) + score_maps: Dict[str, Dict[Tuple[str, ...], float]] = {} + row_maps: Dict[str, Dict[Tuple[str, ...], Dict[str, str]]] = {} + for file_entry in ordered: + score_maps[file_entry.label], row_maps[file_entry.label] = rekey_file(file_entry, key_columns) + keys = build_overlap_keys_from_maps([score_maps[file_entry.label] for file_entry in ordered], overlap_mode) + threshold_col = f"Regressions > {regression_threshold:.3f}%" + columns = key_columns + [ + "First Timestamp", + "Last Timestamp", + "Data Points", + "First Score", + "Latest Score", + "Total Change %", + threshold_col, + "Worst Step Regression %", + "Best Step Improvement %", + ] + rows: List[Dict[str, object]] = [] + numeric = { + "Data Points", + "First Score", + "Latest Score", + "Total Change %", + threshold_col, + "Worst Step Regression %", + "Best Step Improvement %", + } + percent = {"Total Change %", "Worst Step Regression %", "Best Step Improvement %"} + + for key in keys: + series = [] + for file_entry in ordered: + score = score_maps[file_entry.label].get(key) + if score is None: + continue + row = row_maps[file_entry.label].get(key, {}) + direction = score_direction(row.get("Mode", ""), row.get("Units", ""), direction_flag) + series.append((file_entry.timestamp, score, direction)) + if len(series) < 2: + continue + + first_ts, first_score, direction = series[0] + last_ts, last_score, _ = series[-1] + total_pct = None if first_score == 0 else ((last_score - first_score) / first_score) * 100.0 + regressions = 0 + worst_reg = 0.0 + best_imp = 0.0 + for (_, prev, _), (_, curr, _) in zip(series, series[1:]): + if prev == 0: + continue + pct = ((curr - prev) / prev) * 100.0 + if classify_pct(pct, direction, regression_threshold) == "regression": + regressions += 1 + worst_reg = max(worst_reg, abs(pct)) + if classify_pct(pct, direction, 0.0) == "improvement": + best_imp = max(best_imp, abs(pct)) + + row: Dict[str, object] = {} + for idx, col in enumerate(key_columns): + row[col] = key[idx] + row["First Timestamp"] = first_ts.isoformat() + row["Last Timestamp"] = last_ts.isoformat() + row["Data Points"] = float(len(series)) + row["First Score"] = first_score + row["Latest Score"] = last_score + row["Total Change %"] = total_pct + row[threshold_col] = float(regressions) + row["Worst Step Regression %"] = worst_reg + row["Best Step Improvement %"] = best_imp + rows.append(row) + + return TableData(columns=columns, rows=rows, numeric_columns=numeric, percent_columns=percent) diff --git a/.codex/skills/jmh-benchmark-compare/scripts/jmh_compare_export.py b/.codex/skills/jmh-benchmark-compare/scripts/jmh_compare_export.py new file mode 100644 index 00000000000..3e31f041811 --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/scripts/jmh_compare_export.py @@ -0,0 +1,242 @@ +#!/usr/bin/env python3 +"""Export functions for JMH compare tables.""" + +from __future__ import annotations + +import csv +import html +import zipfile +from pathlib import Path +from typing import Dict, List +from xml.sax.saxutils import escape as xml_escape + +from jmh_compare_core import TableData, format_value + + +def render_txt(table: TableData) -> str: + rendered = [[format_value(col, row.get(col), table.percent_columns) for col in table.columns] for row in table.rows] + widths = [len(col) for col in table.columns] + for row in rendered: + for idx, cell in enumerate(row): + widths[idx] = max(widths[idx], len(cell)) + header = " ".join(col.ljust(widths[idx]) for idx, col in enumerate(table.columns)) + sep = " ".join("-" * width for width in widths) + body = [] + for row in rendered: + out = [] + for idx, cell in enumerate(row): + col = table.columns[idx] + out.append(cell.rjust(widths[idx]) if col in table.numeric_columns else cell.ljust(widths[idx])) + body.append(" ".join(out)) + return "\n".join([header, sep] + body) + + +def render_md(table: TableData) -> str: + header = "| " + " | ".join(table.columns) + " |" + align = "| " + " | ".join("---:" if col in table.numeric_columns else ":---" for col in table.columns) + " |" + rows = [] + for row in table.rows: + values = [format_value(col, row.get(col), table.percent_columns).replace("|", "\\|") for col in table.columns] + rows.append("| " + " | ".join(values) + " |") + return "\n".join([header, align] + rows) + + +def render_csv(table: TableData, path: Path) -> None: + with path.open("w", newline="", encoding="utf-8") as handle: + writer = csv.writer(handle) + writer.writerow(table.columns) + for row in table.rows: + writer.writerow([format_value(col, row.get(col), table.percent_columns) for col in table.columns]) + + +def col_ref(index: int) -> str: + letters: List[str] = [] + n = index + while n > 0: + n, rem = divmod(n - 1, 26) + letters.append(chr(ord("A") + rem)) + return "".join(reversed(letters)) + + +def render_xlsx(table: TableData, path: Path) -> None: + rows_xml = [] + for r_idx, row in enumerate([dict(zip(table.columns, table.columns))] + table.rows, start=1): + cells = [] + for c_idx, column in enumerate(table.columns, start=1): + ref = f"{col_ref(c_idx)}{r_idx}" + value = column if r_idx == 1 else row.get(column) + if r_idx > 1 and isinstance(value, float): + cell = f'{value}' + else: + text = format_value(column, value, table.percent_columns) + cell = f'{xml_escape(text)}' + cells.append(cell) + rows_xml.append(f'{"".join(cells)}') + + sheet_xml = ( + '' + '' + f"{''.join(rows_xml)}" + ) + workbook_xml = ( + '' + '' + '' + ) + content_types = ( + '' + '' + '' + '' + '' + '' + "" + ) + root_rels = ( + '' + '' + '' + ) + workbook_rels = ( + '' + '' + '' + ) + with zipfile.ZipFile(path, "w", compression=zipfile.ZIP_DEFLATED) as archive: + archive.writestr("[Content_Types].xml", content_types) + archive.writestr("_rels/.rels", root_rels) + archive.writestr("xl/workbook.xml", workbook_xml) + archive.writestr("xl/_rels/workbook.xml.rels", workbook_rels) + archive.writestr("xl/worksheets/sheet1.xml", sheet_xml) + + +def render_html(table: TableData) -> str: + headers = [] + for col in table.columns: + col_type = "number" if col in table.numeric_columns else "string" + headers.append(f'{html.escape(col)}') + + body_rows = [] + for row in table.rows: + status_by_col = row.get("__status_by_column", {}) + cells = [] + for col in table.columns: + value = row.get(col) + text = format_value(col, value, table.percent_columns) + if isinstance(value, float): + sort_value = f"{value:.15g}" + elif value is None: + sort_value = "" + else: + sort_value = str(value) + klass = "" + if isinstance(status_by_col, dict): + status = status_by_col.get(col, "") + if status in {"regression", "improvement", "neutral"}: + klass = f' class="{status}"' + cells.append( + f'{html.escape(text)}' + ) + body_rows.append("" + "".join(cells) + "") + + return f""" + + + + JMH Benchmark Compare + + + +
+ + +
+ + {''.join(headers)} + {''.join(body_rows)} +
+ + + +""" + + +def write_table(table: TableData, fmt: str, path: Path) -> None: + if fmt == "txt": + path.write_text(render_txt(table) + "\n", encoding="utf-8") + return + if fmt == "md": + path.write_text(render_md(table) + "\n", encoding="utf-8") + return + if fmt == "csv": + render_csv(table, path) + return + if fmt == "xlsx": + render_xlsx(table, path) + return + if fmt == "html": + path.write_text(render_html(table), encoding="utf-8") + return + raise ValueError(f"Unsupported format: {fmt}") + + +def output_targets(output: str, output_dir: str, output_base: str, formats: List[str], suffix: str = "") -> Dict[str, Path]: + if output: + if len(formats) != 1: + raise ValueError("--output can only be used with one export format") + return {formats[0]: Path(output).expanduser().resolve()} + out_dir = Path(output_dir).expanduser().resolve() + out_dir.mkdir(parents=True, exist_ok=True) + targets = {} + for fmt in formats: + ext = "xlsx" if fmt == "xlsx" else fmt + targets[fmt] = out_dir / f"{output_base}{suffix}.{ext}" + return targets diff --git a/.codex/skills/jmh-benchmark-compare/scripts/test_jmh_compare_core.py b/.codex/skills/jmh-benchmark-compare/scripts/test_jmh_compare_core.py new file mode 100644 index 00000000000..a725e6ebb3f --- /dev/null +++ b/.codex/skills/jmh-benchmark-compare/scripts/test_jmh_compare_core.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Regression tests for JMH compare parsing edge cases.""" + +from __future__ import annotations + +import sys +import tempfile +import unittest +from pathlib import Path + +SCRIPT_DIR = Path(__file__).resolve().parent +if str(SCRIPT_DIR) not in sys.path: + sys.path.insert(0, str(SCRIPT_DIR)) + +import jmh_compare_core as core + + +class ParseFileRegressionTest(unittest.TestCase): + def test_missing_cnt_and_error_values_do_not_shift_score(self) -> None: + repo_root = SCRIPT_DIR.parents[3] + result_file = ( + repo_root + / "core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-01.md" + ) + + parsed = core.parse_file(result_file, "results-2026-03-01", None, "mtime") + key = ("ThemeQueryBenchmark.executeQuery", "ENGINEERING", "0", "avgt", "ms/op") + + self.assertIn(key, parsed.score_by_key) + self.assertAlmostEqual(parsed.score_by_key[key], 224.962, places=3) + + def test_plus_minus_error_rows_keep_score_numeric(self) -> None: + repo_root = SCRIPT_DIR.parents[3] + result_file = ( + repo_root + / "core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-04.md" + ) + + parsed = core.parse_file(result_file, "results-2026-03-04", None, "mtime") + key = ("ThemeQueryBenchmark.executeQuery", "SOCIAL_MEDIA", "0", "avgt", "ms/op") + + self.assertIn(key, parsed.score_by_key) + self.assertAlmostEqual(parsed.score_by_key[key], 31.922, places=3) + + def test_compare_uses_column_names_when_key_order_differs(self) -> None: + left = "\n".join( + [ + "Benchmark (themeName) (z_queryIndex) Mode Score Units", + "ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 10.0 ms/op", + ] + ) + right = "\n".join( + [ + "Benchmark Mode (themeName) (z_queryIndex) Units Score", + "ThemeQueryBenchmark.executeQuery avgt MEDICAL_RECORDS 0 ms/op 20.0", + ] + ) + + with tempfile.TemporaryDirectory() as tmpdir: + left_file = Path(tmpdir) / "left.txt" + right_file = Path(tmpdir) / "right.txt" + left_file.write_text(left, encoding="utf-8") + right_file.write_text(right, encoding="utf-8") + + left_parsed = core.parse_file(left_file, "left", None, "mtime") + right_parsed = core.parse_file(right_file, "right", None, "mtime") + table = core.build_comparison_table( + [left_parsed, right_parsed], left_parsed, "all", 0.0, None, "lower" + ) + + self.assertEqual(len(table.rows), 1) + row = table.rows[0] + self.assertAlmostEqual(row["Score [left]"], 10.0, places=3) + self.assertAlmostEqual(row["Score [right]"], 20.0, places=3) + self.assertAlmostEqual(row["Diff % [right - left]"], 100.0, places=3) + + +if __name__ == "__main__": + unittest.main() diff --git a/.gitignore b/.gitignore index 0ab8eda86b8..7d9025b6c9d 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ e2e/test-results .serena/ .vscode /.codex/environments/environment.toml +improved-optimizers-query-rewrite-sketch-based-lmdb-page-walking/ diff --git a/AGENTS.md b/AGENTS.md index 46cc656a079..f12d3505b35 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,7 +8,7 @@ Before taking any action (either tool calls *or* responses to the user), you mus 1.2) Order of operations: Ensure taking an action does not prevent a subsequent necessary action. - 1.2.1) The user may request actions in a random order, but you may need to reorder operations to maximize successful completion of the task. + 1.2.1) The user may request actions in a random order, but you may need to reorder operations to maximize successful completion of the task. 1.3) Other prerequisites (information and/or actions needed). @@ -48,9 +48,9 @@ Before taking any action (either tool calls *or* responses to the user), you mus 7.2) Avoid premature conclusions: There may be multiple relevant options for a given situation. - 7.2.1) To check for whether an option is relevant, reason about all information sources from #5. + 7.2.1) To check for whether an option is relevant, reason about all information sources from #5. - 7.2.2) You may need to consult the user to even know whether something is applicable. Do not assume it is not applicable without checking. + 7.2.2) You may need to consult the user to even know whether something is applicable. Do not assume it is not applicable without checking. 7.3) Review applicable sources of information from #5 to confirm which are relevant to the current state. @@ -288,7 +288,7 @@ Plan 1. **Compile deps fast (skip tests):** `mvn -o -Dmaven.repo.local=.m2_repo -pl -am -Pquick clean install` 2. **Run tests:** - `mvn -o -Dmaven.repo.local=.m2_repo -pl verify | tail -500` + `python3 .codex/skills/mvnf/scripts/mvnf.py --retain-logs --stream` or `mvn -o -Dmaven.repo.local=.m2_repo -pl verify | tail -500` It is illegal to `-am` when running tests! It is illegal to `-q` when running tests! @@ -677,7 +677,6 @@ Immediately after creating any new Java source file, add the signature comment ( * Slow tests (by module): `mvn -o -Dmaven.repo.local=.m2_repo -pl verify -PslowTestsOnly,-skipSlowTests | tail -500` * Slow tests (specific test): - * `mvn -o -Dmaven.repo.local=.m2_repo -pl core/sail/shacl -PslowTestsOnly,-skipSlowTests -Dtest=ClassName#method verify | tail -500` * Integration tests (entire repo): `mvn -o -Dmaven.repo.local=.m2_repo verify -PskipUnitTests | tail -500` diff --git a/core/sail/base/pom.xml b/core/sail/base/pom.xml index 62eef9cc556..e058b059c67 100644 --- a/core/sail/base/pom.xml +++ b/core/sail/base/pom.xml @@ -10,6 +10,11 @@ RDF4J: Sail base implementations RDF Storage And Inference Layer ("Sail") API. + + org.apache.datasketches + datasketches-java + 7.0.1 + ${project.groupId} rdf4j-sail-api diff --git a/scripts/run-single-benchmark.sh b/scripts/run-single-benchmark.sh index af96237d972..32300b2d5c2 100755 --- a/scripts/run-single-benchmark.sh +++ b/scripts/run-single-benchmark.sh @@ -289,6 +289,10 @@ if ${enable_jfr_cpu_times}; then require_linux_java25_for_cpu_time_jfr fi +if ${enable_jfr_cpu_times}; then + require_linux_java25_for_cpu_time_jfr +fi + jar_path="$(find_benchmark_jar "${module_dir}" true)" java_cmd=(java -jar "${jar_path}" "${jmh_args[@]}" "${benchmark_pattern}") diff --git a/testsuites/benchmark/README.md b/testsuites/benchmark/README.md index 4ea120cf9fb..a932ce08c93 100644 --- a/testsuites/benchmark/README.md +++ b/testsuites/benchmark/README.md @@ -53,7 +53,7 @@ From repo root. Run interactive mode: ```bash -mvn -o -Dmaven.repo.local=.m2_repo -pl testsuites/benchmark -DskipTests exec:java@query-plan-snapshot +mvn install -Dmaven.repo.local=.m2_repo -Pquick; mvn -o -Dmaven.repo.local=.m2_repo -pl testsuites/benchmark -DskipTests -Xmx32G exec:java@query-plan-snapshot ``` Interactive menu behavior: diff --git a/testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/plan/QueryPlanSnapshotStoreSupport.java b/testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/plan/QueryPlanSnapshotStoreSupport.java index 3ff2135bee0..fc3375da611 100644 --- a/testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/plan/QueryPlanSnapshotStoreSupport.java +++ b/testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/plan/QueryPlanSnapshotStoreSupport.java @@ -79,7 +79,10 @@ static StoreRuntime createStoreRuntime(QueryPlanSnapshotCliOptions options) thro dataDirectory = Files.createTempDirectory("rdf4j-lmdb-plan-cli-"); deleteDataDirectory = true; } - LmdbStoreConfig config = new LmdbStoreConfig(); + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + config.setForceSync(false); + config.setValueDBSize(1_073_741_824L); // 1 GiB + config.setTripleDBSize(config.getValueDBSize()); LmdbStore lmdbStore = new LmdbStore(dataDirectory.toFile(), config); SailRepository repository = new SailRepository(lmdbStore); return new StoreRuntime(repository, null, lmdbStore, config, dataDirectory, deleteDataDirectory); From a12aec73f84ce9c2ac05b01e056fa36064b10481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Fri, 17 Apr 2026 21:06:01 +0200 Subject: [PATCH 02/43] benchmark --- .../lmdb/benchmark/ThemeQueryBenchmark.java | 316 ++++++++++++++++-- 1 file changed, 279 insertions(+), 37 deletions(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index 6e6cd4fd466..a0d356d5af8 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -29,15 +29,25 @@ import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.util.Values; +import org.eclipse.rdf4j.model.vocabulary.RDF; +import org.eclipse.rdf4j.query.TupleQuery; +import org.eclipse.rdf4j.query.TupleQueryResult; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; import org.eclipse.rdf4j.query.TupleQuery; import org.eclipse.rdf4j.query.explanation.Explanation; import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; +import org.eclipse.rdf4j.repository.RepositoryResult; import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; import org.eclipse.rdf4j.repository.util.RDFInserter; import org.eclipse.rdf4j.sail.lmdb.LmdbStore; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; @@ -57,15 +67,28 @@ import org.openjdk.jmh.runner.options.TimeValue; @State(Scope.Benchmark) -@Warmup(iterations = 10, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 1) +@Warmup(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 10) @BenchmarkMode({ Mode.AverageTime }) -@Fork(value = 1, jvmArgs = { "-Xms32G", "-Xmx32G" }) -@Measurement(iterations = 10, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 1) +@Fork(value = 1, jvmArgs = { "-Xms1G", "-Xmx32G" }) +@Measurement(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 5) @OutputTimeUnit(TimeUnit.MILLISECONDS) public class ThemeQueryBenchmark { private static final String STORE_NAME = "lmdb"; - private static final File STORE_DIRECTORY = new File("target", "lmdb-theme-query-benchmark"); + private static final String TARGET_DIRECTORY_ROOT = "core/sail/lmdb/"; + private static final File STORE_DIRECTORY; + + static { + File target = new File("target", "lmdb-theme-query-benchmark"); + if (target.getAbsolutePath().toLowerCase().contains(TARGET_DIRECTORY_ROOT)) { + STORE_DIRECTORY = target; + } else { + // In case the benchmark is run from an IDE with a different working directory, we want to ensure the store + // directory is still in the target directory of the project. + STORE_DIRECTORY = new File(TARGET_DIRECTORY_ROOT + "target", "lmdb-theme-query-benchmark"); + } + } + private static final String TRIPLES_DATA_FILE = "triples/data.mdb"; private static final String VALUES_DATA_FILE = "values/data.mdb"; private static final String EXPECTED_DB_FILE_SIZES_FILE = "expected-db-file-sizes.properties"; @@ -75,19 +98,31 @@ public class ThemeQueryBenchmark { private static final long EXPECTED_VALUES_DATA_SIZE_BYTES = 713687040L; @Param({ - // "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", - "11", "12" }) + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + }) public int z_queryIndex; @Param({ "MEDICAL_RECORDS", -// "SOCIAL_MEDIA", -// "LIBRARY", -// "ENGINEERING", -// "HIGHLY_CONNECTED", -// "TRAIN", -// "ELECTRICAL_GRID", -// "PHARMA" + "SOCIAL_MEDIA", + "LIBRARY", + "ENGINEERING", + "HIGHLY_CONNECTED", + "TRAIN", + "ELECTRICAL_GRID", + "PHARMA" }) public String themeName; @@ -100,11 +135,11 @@ public class ThemeQueryBenchmark { public static void main(String[] args) throws RunnerException { var opt = new OptionsBuilder() - .include("ThemeQueryBenchmark") + .include(ThemeQueryBenchmark.class.getName() + ".explainQuery") .forks(0) - .measurementTime(TimeValue.milliseconds(1000)) - .measurementIterations(10) + .measurementIterations(1) .measurementBatchSize(1) + .measurementTime(TimeValue.milliseconds(1)) .warmupIterations(0) .build(); new Runner(opt).run(); @@ -113,18 +148,25 @@ public static void main(String[] args) throws RunnerException { @Setup(Level.Trial) public void setup() throws IOException { theme = Theme.valueOf(themeName); + File storeDirectory = storeDirectory(); + System.out.println(storeDirectory.getAbsolutePath()); query = ThemeQueryCatalog.queryFor(theme, z_queryIndex); + System.out.println("### Original Query ###"); + System.out.println(query); + System.out.println(); + expected = ThemeQueryCatalog.expectedCountFor(theme, z_queryIndex); - if (!STORE_DIRECTORY.exists() && !STORE_DIRECTORY.mkdirs()) { - throw new IOException("Unable to create fixed LMDB benchmark directory: " + STORE_DIRECTORY); + if (!storeDirectory.exists() && !storeDirectory.mkdirs()) { + throw new IOException("Unable to create fixed LMDB benchmark directory: " + storeDirectory); } storeConfig = ConfigUtil.createConfig(); - store = new LmdbStore(STORE_DIRECTORY, storeConfig); + store = new LmdbStore(storeDirectory, storeConfig); repository = new SailRepository(store); ensureDataLoadedAndValidated(); if (QueryPlanCapture.isCaptureEnabled()) { captureQueryPlanSnapshot(); } + } @Benchmark @@ -132,7 +174,6 @@ public long executeQuery() { try (var connection = repository.getConnection()) { long count; TupleQuery tupleQuery = connection.prepareTupleQuery(query); - tupleQuery.setMaxExecutionTime(10); try (var evaluate = tupleQuery.evaluate()) { count = evaluate .stream() @@ -170,19 +211,30 @@ private void ensureDataLoadedAndValidated() throws IOException { } private void rebuildStoreFromScratch() throws IOException { + File storeDirectory = storeDirectory(); if (repository != null) { repository.shutDown(); } - FileUtils.deleteDirectory(STORE_DIRECTORY); - if (!STORE_DIRECTORY.exists() && !STORE_DIRECTORY.mkdirs()) { - throw new IOException("Unable to recreate fixed LMDB benchmark directory: " + STORE_DIRECTORY); + FileUtils.deleteDirectory(storeDirectory); + if (!storeDirectory.exists() && !storeDirectory.mkdirs()) { + throw new IOException("Unable to recreate fixed LMDB benchmark directory: " + storeDirectory); } storeConfig = ConfigUtil.createConfig(); - store = new LmdbStore(STORE_DIRECTORY, storeConfig); + store = new LmdbStore(storeDirectory, storeConfig); repository = new SailRepository(store); +// BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); loadData(); + + repository.shutDown(); + repository = null; + store = null; + + System.gc(); + + store = new LmdbStore(storeDirectory, storeConfig); + repository = new SailRepository(store); } private DbFileSizes readExpectedDbFileSizes() throws IOException { @@ -244,24 +296,58 @@ private boolean hasExpectedDbFileSizes(DbFileSizes expectedDbFileSizes) { } private File expectedDbFileSizeFile() { - return new File(STORE_DIRECTORY, EXPECTED_DB_FILE_SIZES_FILE); + return new File(storeDirectory(), EXPECTED_DB_FILE_SIZES_FILE); } private long dbFileSize(String relativePath) { - return new File(STORE_DIRECTORY, relativePath).length(); + return new File(storeDirectory(), relativePath).length(); } private void loadData() throws IOException { try (var connection = repository.getConnection()) { connection.begin(IsolationLevels.NONE); var inserter = new RDFInserter(connection); +// System.out.println("Loading theme dataset: " + theme); +// ThemeDataSetGenerator.generate(theme, inserter); for (var themeDataset : Theme.values()) { + System.out.println("Loading theme dataset: " + themeDataset); ThemeDataSetGenerator.generate(themeDataset, inserter); } connection.commit(); } } + private File storeDirectory() { +// return new File(STORE_DIRECTORY, theme.name().toLowerCase()); + return new File(STORE_DIRECTORY, "complete"); + } + + private void configureBenchmarkEstimatorProperties() { +// previousEstimatorNominalEntries = System.getProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY); +// if (previousEstimatorNominalEntries == null) { +// System.setProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY, BENCHMARK_ESTIMATOR_NOMINAL_ENTRIES); +// } +// previousEstimatorSketchK = System.getProperty(ESTIMATOR_SKETCH_K_PROPERTY); +// if (previousEstimatorSketchK == null) { +// System.setProperty(ESTIMATOR_SKETCH_K_PROPERTY, BENCHMARK_ESTIMATOR_SKETCH_K); +// } + } + + private void restoreBenchmarkEstimatorProperties() { +// if (previousEstimatorNominalEntries == null) { +// System.clearProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY); +// } else { +// System.setProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY, previousEstimatorNominalEntries); +// } +// previousEstimatorNominalEntries = null; +// if (previousEstimatorSketchK == null) { +// System.clearProperty(ESTIMATOR_SKETCH_K_PROPERTY); +// } else { +// System.setProperty(ESTIMATOR_SKETCH_K_PROPERTY, previousEstimatorSketchK); +// } +// previousEstimatorSketchK = null; + } + private void captureQueryPlanSnapshot() throws IOException { var benchmarkQuery = ThemeQueryCatalog.benchmarkQueryFor(theme, z_queryIndex); var featureFlags = new FeatureFlagCollector() @@ -297,7 +383,7 @@ private void captureQueryPlanSnapshot() throws IOException { } } - private String renderTupleExprWithIr(org.eclipse.rdf4j.query.algebra.TupleExpr tupleExpr) { + private String renderTupleExprWithIr(TupleExpr tupleExpr) { var config = new TupleExprIRRenderer.Config(); config.verifyRoundTrip = false; return new TupleExprIRRenderer(config).render(tupleExpr); @@ -305,12 +391,142 @@ private String renderTupleExprWithIr(org.eclipse.rdf4j.query.algebra.TupleExpr t @TearDown(Level.Trial) public void tearDown() { +// if (previousJoinOrderStrategy != null) { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = previousJoinOrderStrategy; +// previousJoinOrderStrategy = null; +// } + + try (SailRepositoryConnection connection = repository.getConnection()) { + System.out.println("### Optimized Query ###"); + Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + System.out.println(explain); + TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); + System.out.println(new TupleExprIRRenderer().render(tupleExpr)); + System.out.println(); + } if (repository != null) { repository.shutDown(); repository = null; } store = null; storeConfig = null; +// restoreBenchmarkEstimatorProperties(); + } + + + + @Test + public void benchmarkQuery() throws IOException { + themeName = "LIBRARY"; + z_queryIndex = 7; + setup(); + try { + String query = "select * where {?copy ?branch . ?branch ?branchName .}"; + try (SailRepositoryConnection connection1 = repository.getConnection()) { + System.out.println(query); + try (TupleQueryResult evaluate = connection1.prepareTupleQuery(query).evaluate()) { + System.out.println(evaluate.stream().count()); + } + + long count = connection1 + .getStatements(null, Values.iri("http://example.com/theme/library/locatedAt"), null) + .stream() + .map(Statement::getObject) + .distinct() + .count(); + System.out.println( + "Distinct values for ?branch in ?copy ?branch: " + + count); + + long count2 = connection1.getStatements(null, Values.iri("http://example.com/theme/library/name"), null) + .stream() + .map(Statement::getSubject) + .distinct() + .count(); + System.out.println( + "Distinct values for ?branch in ?branch ?branchName: " + + count2); + + } + } finally { + tearDown(); + } + + } + + @Benchmark + public void explainQuery() { + +// StatementPattern +// Var (name=copy) +// Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +// Var(name=branch) +// +// StatementPattern (resultSizeEstimate=45.3K) +// Var (name=branch) +// Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +// Var(name=branchName) + +// if(true) throw new IllegalStateException(); + + System.out.println("=== Explanation for theme " + themeName + " and query index " + z_queryIndex + " ==="); + System.out.println("Query:\n" + query); + System.out.println(); + + try (SailRepositoryConnection connection = repository.getConnection()) { + try (RepositoryResult statements = connection.getStatements(null, RDF.TYPE, + Values.iri("http://example.com/theme/library/Copy"))) { + System.out.println("Count of statements with rdf:type http://example.com/theme/library/Copy: " + + statements.stream().count()); + } + } + + try (SailRepositoryConnection connection = repository.getConnection()) { + try (RepositoryResult statements = connection.getStatements(null, + Values.iri("http://example.com/theme/library/locatedAt"), null)) { + System.out.println("Count of statements with http://example.com/theme/library/locatedAt: " + + statements.stream().count()); + } + } + + try { +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = false; +// try (var connection = repository.getConnection()) { +// System.out.println("=== Explanation with join reordering disabled ==="); +// Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); +// System.out.println(explain); +// System.out.println(); +// TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); +// System.out.println("=== Rendered optimized TupleExpr with join reordering disabled ==="); +// System.out.println(new TupleExprIRRenderer().render(tupleExpr)); +// System.out.println(); +// System.out.println(); +// } +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; + try (var connection = repository.getConnection()) { + System.out.println("=== Explanation with join reordering enabled ==="); + Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + System.out.println(explain); + System.out.println(); + TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); + System.out.println("=== Rendered optimized TupleExpr with join reordering enabled ==="); + System.out.println(new TupleExprIRRenderer().render(tupleExpr)); + System.out.println(); + System.out.println(); + } +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; +// try (var connection = repository.getConnection()) { +// System.out.println("=== Explanation with join reordering enabled and telemetry ==="); +// TupleQuery tupleQuery = connection.prepareTupleQuery(query); +// tupleQuery.setMaxExecutionTime(9999999); +// Explanation explain = tupleQuery.explain(Explanation.Level.Telemetry); +// System.out.println(explain); +// System.out.println(); +// } + } finally { +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; + } + } @Test @@ -372,7 +588,8 @@ public void executeQueryReturnsExpectedCountForPharmaQueryTenAfterFreshGeneratio } @Test - @Disabled + @Timeout(value = 5, unit = TimeUnit.MINUTES) +// @Disabled public void testQueryExplanation() throws IOException { var queryIndexes = paramValues("z_queryIndex"); var themeNames = paramValues("themeName"); @@ -382,9 +599,41 @@ public void testQueryExplanation() throws IOException { z_queryIndex = Integer.parseInt(queryIndexValue); setup(); try (var connection = repository.getConnection()) { + var statements = connection.getStatements(null, RDF.TYPE, + Values.iri("http://example.com/theme/medical/Encounter")); + var statements2 = connection.getStatements(null, + Values.iri("http://example.com/theme/medical/handledBy"), null); + var statements3 = connection.getStatements(null, + Values.iri("http://example.com/theme/medical/recordedOn"), null); + + System.out.println(statements.stream().count()); + System.out.println(statements2.stream().count()); + System.out.println(statements3.stream().count()); + + statements.close(); + statements2.close(); + statements3.close(); + + Explanation explain = connection + .prepareTupleQuery(query) + .explain(Explanation.Level.Unoptimized); + + System.out.println("Unoptimized explanation for theme " + themeName + " and query index " + + z_queryIndex + ":"); + System.out.println(new TupleExprIRRenderer().render(((TupleExpr) explain.tupleExpr()))); + + explain = connection + .prepareTupleQuery(query) + .explain(Explanation.Level.Optimized); + + System.out.println( + "Optimized explanation for theme " + themeName + " and query index " + z_queryIndex + ":"); + System.out.println(new TupleExprIRRenderer().render(((TupleExpr) explain.tupleExpr()))); + System.out.println(); + var explanation = connection .prepareTupleQuery(query) - .explain(Explanation.Level.Executed) + .explain(Explanation.Level.Optimized) .toString(); System.out.println("Query Explanation for theme " + themeName + " and query index " + z_queryIndex + ":\n" + explanation); @@ -407,14 +656,7 @@ private static String[] paramValues(String fieldName) { } } - private static final class DbFileSizes { - private final long triplesDataSizeBytes; - private final long valuesDataSizeBytes; - - private DbFileSizes(long triplesDataSizeBytes, long valuesDataSizeBytes) { - this.triplesDataSizeBytes = triplesDataSizeBytes; - this.valuesDataSizeBytes = valuesDataSizeBytes; - } + private record DbFileSizes(long triplesDataSizeBytes, long valuesDataSizeBytes) { } } From f3306e0cf80f00942bced08577ae0af43862e819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Fri, 17 Apr 2026 21:06:12 +0200 Subject: [PATCH 03/43] everything else --- .../impl/AbstractMemoryOverflowModel.java | 1 + .../evaluation/impl/EvaluationStatistics.java | 2 + .../evaluation/optimizer/FilterOptimizer.java | 135 +- .../optimizer/FilterSelectivityKeys.java | 86 + .../optimizer/JoinOrderPlanner.java | 57 + .../optimizer/JoinStatsProvider.java | 102 + .../evaluation/optimizer/PatternKey.java | 65 + .../evaluation/optimizer/PatternKeys.java | 41 + .../optimizer/QueryJoinOptimizer.java | 1131 +- .../StandardQueryOptimizerPipeline.java | 5 +- ...indingBasedQueryEvaluationContextTest.java | 76 + .../evaluation/impl/FilterOptimizerTest.java | 215 +- .../impl/QueryCostEstimatesTest.java | 20 +- ...yJoinOptimizerGreedyOuterBindingsTest.java | 128 + .../QueryJoinOptimizerReorderSafetyTest.java | 675 + .../impl/QueryJoinOptimizerTest.java | 528 +- .../org/eclipse/rdf4j/query/algebra/Join.java | 2 + .../sail/base/SketchBasedJoinEstimator.java | 8032 ++++++++++++ .../sail/base/SketchJoinOrderPlanner.java | 530 + .../sail/base/SketchJoinOrderReorderer.java | 196 + ...etchBasedJoinEstimatorAccessShapeTest.java | 140 + ...sedJoinEstimatorBackgroundRefreshTest.java | 160 + ...EstimatorBudgetAndSliceRegressionTest.java | 211 + .../SketchBasedJoinEstimatorConfigTest.java | 443 + ...matorCrossComponentJoinRegressionTest.java | 77 + ...asedJoinEstimatorJoinOrderPlannerTest.java | 997 ++ ...etchBasedJoinEstimatorPersistenceTest.java | 1119 ++ ...timatorStatePersistenceRegressionTest.java | 141 + ...eroIntersectionSamplingRegressionTest.java | 187 + .../SketchJoinOrderPlannerLoggingTest.java | 124 + .../rdf4j/sail/base/StubSailStore.java | 159 + .../sail/lmdb/LmdbEvaluationStatistics.java | 255 +- .../rdf4j/sail/lmdb/LmdbSailStore.java | 280 +- .../eclipse/rdf4j/sail/lmdb/TripleStore.java | 142 + .../eclipse/rdf4j/sail/lmdb/TxnManager.java | 23 +- .../lmdb/estimate/LmdbBtreeRangeCounter.java | 295 + .../sail/lmdb/estimate/LmdbDataFile.java | 135 + .../rdf4j/sail/lmdb/estimate/LmdbDb.java | 55 + .../rdf4j/sail/lmdb/estimate/LmdbFormat.java | 88 + .../sail/lmdb/estimate/LmdbKeyComparator.java | 63 + .../rdf4j/sail/lmdb/estimate/LmdbMeta.java | 39 + .../rdf4j/sail/lmdb/estimate/LmdbNode.java | 35 + .../rdf4j/sail/lmdb/estimate/LmdbPage.java | 134 + .../LmdbPageCardinalityEstimator.java | 108 + .../sail/lmdb/estimate/RangeCountResult.java | 25 + .../rdf4j/sail/lmdb/CardinalityTest.java | 92 +- ...dbEvaluationStatisticsMemoizationTest.java | 384 + .../LmdbIndexAwareJoinOrderPlanningTest.java | 271 + ...LmdbSailStoreEstimatorPersistenceTest.java | 371 + .../LmdbSketchAwareFilterPlacementTest.java | 128 + .../SketchEstimatorThemeJoinAccuracyTest.java | 522 + .../BenchmarkJoinEstimatorSupport.java | 140 + .../ThemeQueryBenchmarkSmokeTest.java | 91 + .../benchmark/ThemeQueryHexaBenchmark.java | 507 + .../sail/lmdb/benchmark/results-2026-03-01.md | 91 + .../sail/lmdb/benchmark/results-2026-03-02.md | 91 + .../sail/lmdb/benchmark/results-2026-03-04.md | 91 + .../sail/lmdb/benchmark/results-2026-03-05.md | 91 + .../benchmark/results-2026-03-05_greedy.md | 91 + .../sail/lmdb/benchmark/results-2026-03-06.md | 91 + .../sail/lmdb/benchmark/results-2026-03-19.md | 90 + .../benchmark/results-2026-04-09-2-full.md | 5735 +++++++++ .../lmdb/benchmark/results-2026-04-09-2.md | 91 + .../sail/lmdb/benchmark/results-2026-04-09.md | 91 + .../sail/lmdb/benchmark/results-2026-04-15.md | 100 + .../lmdb/benchmark/results-2026-04-16-2.md | 5704 +++++++++ .../lmdb/benchmark/results-2026-04-16-3.md | 5702 +++++++++ .../lmdb/benchmark/results-2026-04-16-4.md | 5701 +++++++++ .../lmdb/benchmark/results-2026-04-16-5.md | 10146 +++++++++++++++ .../lmdb/benchmark/results-2026-04-16-6.md | 10171 +++++++++++++++ .../sail/lmdb/benchmark/results-2026-04-16.md | 5704 +++++++++ .../sail/lmdb/benchmark/results-2026-04-17.md | 10303 ++++++++++++++++ .../lmdb/benchmark/results-main-branch.md | 91 + ...torPredicateCardinalityRegressionTest.java | 114 + join_optimizer/JoinEstimator.java | 684 + join_optimizer/JoinOrderOptimizer.java | 441 + join_optimizer/README.md | 30 + plans/detailed-design.md | 1037 ++ plans/engineering-design-doc.md | 743 ++ plans/implementation-design.md | 496 + plans/low-level-design-LLD.md | 1573 +++ plans/robust-synopsis-lazy-spill-execplan.md | 106 + plans/technical-design-spec.md | 885 ++ ...220e346c4-20260319-194212560-ca924392.json | 449 + ...220e346c4-20260319-194956735-5da3178f.json | 449 + ...220e346c4-20260319-203302005-65b32434.json | 449 + ...3d96834d1-20260319-230410732-c1655408.json | 340 + 87 files changed, 87506 insertions(+), 433 deletions(-) create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKey.java create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKeys.java create mode 100644 core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/ArrayBindingBasedQueryEvaluationContextTest.java create mode 100644 core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java create mode 100644 core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerReorderSafetyTest.java create mode 100644 core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java create mode 100644 core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java create mode 100644 core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorAccessShapeTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBackgroundRefreshTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBudgetAndSliceRegressionTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorConfigTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorCrossComponentJoinRegressionTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorStatePersistenceRegressionTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorZeroIntersectionSamplingRegressionTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/StubSailStore.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbBtreeRangeCounter.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDataFile.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDb.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbFormat.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbKeyComparator.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbMeta.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbNode.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPage.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPageCardinalityEstimator.java create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/RangeCountResult.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-01.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-02.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-04.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05_greedy.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-06.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-19.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-2.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-6.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/estimate/PageEstimatorPredicateCardinalityRegressionTest.java create mode 100644 join_optimizer/JoinEstimator.java create mode 100644 join_optimizer/JoinOrderOptimizer.java create mode 100644 join_optimizer/README.md create mode 100644 plans/detailed-design.md create mode 100644 plans/engineering-design-doc.md create mode 100644 plans/implementation-design.md create mode 100644 plans/low-level-design-LLD.md create mode 100644 plans/robust-synopsis-lazy-spill-execplan.md create mode 100644 plans/technical-design-spec.md create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194212560-ca924392.json create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194956735-5da3178f.json create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-203302005-65b32434.json create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-medical_records-q0-ce7bba07b1eb935287481f2eec1a65d579f16066e91f92e194ae7463d96834d1-20260319-230410732-c1655408.json diff --git a/core/model/src/main/java/org/eclipse/rdf4j/model/impl/AbstractMemoryOverflowModel.java b/core/model/src/main/java/org/eclipse/rdf4j/model/impl/AbstractMemoryOverflowModel.java index 334a2abd6b9..88d92517cff 100644 --- a/core/model/src/main/java/org/eclipse/rdf4j/model/impl/AbstractMemoryOverflowModel.java +++ b/core/model/src/main/java/org/eclipse/rdf4j/model/impl/AbstractMemoryOverflowModel.java @@ -8,6 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause ******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.model.impl; diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java index 258cdce37f9..1e4a22df9e3 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java @@ -64,6 +64,8 @@ public double getCardinality(TupleExpr expr) { assert calculator != null; } + calculator.cardinality = 0; + if (expr instanceof AbstractQueryModelNode && ((AbstractQueryModelNode) expr).isCardinalitySet()) { return ((AbstractQueryModelNode) expr).getCardinality(); } diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java index af8dfe19d10..999c6bee5ae 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java @@ -8,7 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ - +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; import java.util.Objects; @@ -20,11 +20,13 @@ import org.eclipse.rdf4j.query.algebra.Difference; import org.eclipse.rdf4j.query.algebra.Distinct; import org.eclipse.rdf4j.query.algebra.EmptySet; +import org.eclipse.rdf4j.query.algebra.Exists; import org.eclipse.rdf4j.query.algebra.Extension; import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Intersection; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.Not; import org.eclipse.rdf4j.query.algebra.Order; import org.eclipse.rdf4j.query.algebra.QueryModelNode; import org.eclipse.rdf4j.query.algebra.QueryRoot; @@ -32,8 +34,10 @@ import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.Union; +import org.eclipse.rdf4j.query.algebra.ValueExpr; import org.eclipse.rdf4j.query.algebra.VariableScopeChange; import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizer; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; import org.eclipse.rdf4j.query.algebra.helpers.AbstractSimpleQueryModelVisitor; import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; @@ -78,6 +82,29 @@ */ public class FilterOptimizer implements QueryOptimizer { + private final EvaluationStatistics statistics; + private final boolean mergeAdjacentFilters; + private final boolean considerJoinPlacementCost; + + public FilterOptimizer() { + this(null, true, true); + } + + public FilterOptimizer(EvaluationStatistics statistics) { + this(statistics, true, true); + } + + FilterOptimizer(EvaluationStatistics statistics, boolean mergeAdjacentFilters) { + this(statistics, mergeAdjacentFilters, true); + } + + FilterOptimizer(EvaluationStatistics statistics, boolean mergeAdjacentFilters, + boolean considerJoinPlacementCost) { + this.statistics = statistics; + this.mergeAdjacentFilters = mergeAdjacentFilters; + this.considerJoinPlacementCost = considerJoinPlacementCost; + } + @Override public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) { Objects.requireNonNull(tupleExpr, "tupleExpr must not be null"); @@ -109,8 +136,10 @@ protected void meetNode(QueryModelNode node) { // 2) run the three filter passes for *this* scope expr.visit(new FilterUnMerger()); - expr.visit(new FilterOrganizer()); - expr.visit(new FilterMerger()); + expr.visit(new FilterOrganizer(statistics, considerJoinPlacementCost)); + if (mergeAdjacentFilters) { + expr.visit(new FilterMerger()); + } } /** @@ -125,6 +154,23 @@ private static void transferScopeChange(QueryModelNode source, QueryModelNode ta } } + private static int filterConditionCost(ValueExpr condition) { + if (condition instanceof Exists) { + return 100; + } + if (condition instanceof Not not && not.getArg() instanceof Exists) { + return 100; + } + return 0; + } + + private static And mergeConditionsInCostOrder(ValueExpr leftCondition, ValueExpr rightCondition) { + if (filterConditionCost(leftCondition) <= filterConditionCost(rightCondition)) { + return new And(leftCondition.clone(), rightCondition.clone()); + } + return new And(rightCondition.clone(), leftCondition.clone()); + } + private static class FilterUnMerger extends AbstractSimpleQueryModelVisitor { private FilterUnMerger() { @@ -157,7 +203,7 @@ public void meet(Filter filter) { Filter childFilter = (Filter) filter.getArg(); QueryModelNode parent = filter.getParentNode(); - And merge = new And(childFilter.getCondition().clone(), filter.getCondition().clone()); + And merge = mergeConditionsInCostOrder(childFilter.getCondition(), filter.getCondition()); Filter newFilter = new Filter(childFilter.getArg().clone(), merge); transferScopeChange(filter, newFilter); // both have same scope flag @@ -168,14 +214,19 @@ public void meet(Filter filter) { private static class FilterOrganizer extends AbstractSimpleQueryModelVisitor { - public FilterOrganizer() { + private final EvaluationStatistics statistics; + private final boolean considerJoinPlacementCost; + + public FilterOrganizer(EvaluationStatistics statistics, boolean considerJoinPlacementCost) { super(false); + this.statistics = statistics; + this.considerJoinPlacementCost = considerJoinPlacementCost; } @Override public void meet(Filter filter) { super.meet(filter); - FilterRelocator.optimize(filter); + FilterRelocator.optimize(filter, statistics, considerJoinPlacementCost); } } @@ -183,14 +234,18 @@ private static class FilterRelocator extends AbstractQueryModelVisitor filterVars; + private final EvaluationStatistics statistics; + private final boolean considerJoinPlacementCost; - private FilterRelocator(Filter filter) { + private FilterRelocator(Filter filter, EvaluationStatistics statistics, boolean considerJoinPlacementCost) { this.filter = filter; filterVars = VarNameCollector.process(filter.getCondition()); + this.statistics = statistics; + this.considerJoinPlacementCost = considerJoinPlacementCost; } - public static void optimize(Filter filter) { - filter.visit(new FilterRelocator(filter)); + public static void optimize(Filter filter, EvaluationStatistics statistics, boolean considerJoinPlacementCost) { + filter.visit(new FilterRelocator(filter, statistics, considerJoinPlacementCost)); } @Override @@ -203,11 +258,19 @@ protected void meetNode(QueryModelNode node) { @Override public void meet(Join join) { if (join.getLeftArg().getBindingNames().containsAll(filterVars)) { - // All required vars are bound by the left expr - join.getLeftArg().visit(this); + if (shouldKeepFilterAtJoin(join, join.getLeftArg())) { + relocate(filter, join); + } else { + // All required vars are bound by the left expr + join.getLeftArg().visit(this); + } } else if (join.getRightArg().getBindingNames().containsAll(filterVars)) { - // All required vars are bound by the right expr - join.getRightArg().visit(this); + if (shouldKeepFilterAtJoin(join, join.getRightArg())) { + relocate(filter, join); + } else { + // All required vars are bound by the right expr + join.getRightArg().visit(this); + } } else { relocate(filter, join); } @@ -239,8 +302,8 @@ public void meet(Union union) { relocate(filter, union.getLeftArg()); relocate(clone, union.getRightArg()); - FilterRelocator.optimize(filter); - FilterRelocator.optimize(clone); + FilterRelocator.optimize(filter, statistics, considerJoinPlacementCost); + FilterRelocator.optimize(clone, statistics, considerJoinPlacementCost); } @Override @@ -252,8 +315,8 @@ public void meet(Difference node) { relocate(filter, node.getLeftArg()); relocate(clone, node.getRightArg()); - FilterRelocator.optimize(filter); - FilterRelocator.optimize(clone); + FilterRelocator.optimize(filter, statistics, considerJoinPlacementCost); + FilterRelocator.optimize(clone, statistics, considerJoinPlacementCost); } @Override @@ -265,8 +328,8 @@ public void meet(Intersection node) { relocate(filter, node.getLeftArg()); relocate(clone, node.getRightArg()); - FilterRelocator.optimize(filter); - FilterRelocator.optimize(clone); + FilterRelocator.optimize(filter, statistics, considerJoinPlacementCost); + FilterRelocator.optimize(clone, statistics, considerJoinPlacementCost); } @Override @@ -324,5 +387,39 @@ private void relocate(Filter filter, TupleExpr newFilterArg) { filter.setArg(newFilterArg); } } + + private boolean shouldKeepFilterAtJoin(Join join, TupleExpr candidateArg) { + if (!considerJoinPlacementCost) { + return false; + } + + if (statistics == null || !statistics.supportsJoinEstimation()) { + return false; + } + + if (hasSiblingWithHigherConditionCost()) { + return false; + } + + double currentInputRows = statistics.getCardinality(join); + double candidateInputRows = statistics.getCardinality(candidateArg); + return isFiniteNonNegative(currentInputRows) && isFiniteNonNegative(candidateInputRows) + && currentInputRows < candidateInputRows; + } + + private boolean hasSiblingWithHigherConditionCost() { + return hasSiblingWithHigherConditionCost(filter.getParentNode()) + || hasSiblingWithHigherConditionCost(filter.getArg()); + } + + private boolean hasSiblingWithHigherConditionCost(QueryModelNode sibling) { + return sibling instanceof Filter && sibling != filter + && filterConditionCost(((Filter) sibling).getCondition()) > filterConditionCost( + filter.getCondition()); + } + + private boolean isFiniteNonNegative(double value) { + return Double.isFinite(value) && value >= 0.0d; + } } } diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java new file mode 100644 index 00000000000..7cdd9f8ce58 --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +import java.util.Set; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.ValueExpr; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; + +/** + * Utility methods for deriving stable keys used by learned filter selectivity tracking. + */ +public final class FilterSelectivityKeys { + + private FilterSelectivityKeys() { + } + + public static PatternKey patternKeyFor(StatementPattern pattern) { + if (pattern == null) { + return null; + } + int mask = 0; + if (isBound(pattern.getSubjectVar())) { + mask |= PatternKey.SUBJECT_BOUND; + } + if (isBound(pattern.getPredicateVar())) { + mask |= PatternKey.PREDICATE_BOUND; + } + if (isBound(pattern.getObjectVar())) { + mask |= PatternKey.OBJECT_BOUND; + } + Var predicateVar = pattern.getPredicateVar(); + IRI predicateKey = null; + if (predicateVar != null && predicateVar.hasValue() && predicateVar.getValue() instanceof IRI) { + predicateKey = (IRI) predicateVar.getValue(); + } + Var objectVar = pattern.getObjectVar(); + Value objectValue = objectVar != null && objectVar.hasValue() ? objectVar.getValue() : null; + IRI statsPredicate = PatternKeys.predicateKey(predicateKey, objectValue); + return new PatternKey(statsPredicate, mask); + } + + public static String filterKeyFor(ValueExpr condition) { + if (condition == null) { + return ""; + } + return condition.toString().replaceAll("\\s+", " ").trim(); + } + + public static boolean conditionIntersectsPattern(ValueExpr condition, StatementPattern pattern) { + if (condition == null || pattern == null) { + return false; + } + Set conditionVars = VarNameCollector.process(condition); + if (conditionVars.isEmpty()) { + return false; + } + Set patternVars = pattern.getBindingNames(); + if (patternVars.isEmpty()) { + return false; + } + for (String conditionVar : conditionVars) { + if (patternVars.contains(conditionVar)) { + return true; + } + } + return false; + } + + private static boolean isBound(Var var) { + return var != null && var.hasValue(); + } +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java new file mode 100644 index 00000000000..e32fc62fc4d --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import org.eclipse.rdf4j.query.algebra.TupleExpr; + +/** + * Optional SPI for cost-based join-order planning over a flat list of join arguments. + */ +public interface JoinOrderPlanner { + + enum Algorithm { + GREEDY, + DYNAMIC_PROGRAMMING + } + + final class JoinOrderPlan { + private final List orderedArgs; + private final double estimatedFinalRows; + private final double estimatedTotalWork; + + public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, double estimatedTotalWork) { + this.orderedArgs = Collections.unmodifiableList(new ArrayList<>(orderedArgs)); + this.estimatedFinalRows = estimatedFinalRows; + this.estimatedTotalWork = estimatedTotalWork; + } + + public List getOrderedArgs() { + return orderedArgs; + } + + public double getEstimatedFinalRows() { + return estimatedFinalRows; + } + + public double getEstimatedTotalWork() { + return estimatedTotalWork; + } + } + + Optional planJoinOrder(List args, Set initiallyBoundVars, Algorithm algorithm); +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java new file mode 100644 index 00000000000..6c1d7e4b09d --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +/** + * Collects and supplies statistics about triple pattern evaluations. + */ +public interface JoinStatsProvider { + + void reset(); + + void recordCall(PatternKey key); + + void recordResults(PatternKey key, long resultCount); + + /** + * Records observed filter outcomes for a statement-pattern key and condition key. + * + * @param key statement-pattern key associated with the filter + * @param filterKey normalized filter-condition key + * @param passedCount number of rows accepted by the filter + * @param filteredCount number of rows rejected by the filter + */ + default void recordFilterOutcome(PatternKey key, String filterKey, long passedCount, long filteredCount) { + // no-op by default + } + + /** + * Returns the observed pass ratio for a specific filter condition and pattern key, or a negative value when + * unavailable. + */ + default double getFilterPassRatio(PatternKey key, String filterKey) { + return -1.0d; + } + + /** + * Returns the observed aggregate pass ratio for all filters seen on a pattern key, or a negative value when + * unavailable. + */ + default double getPatternPassRatio(PatternKey key) { + return -1.0d; + } + + /** + * Seeds statistics for the given key. Implementations may also invalidate or refresh existing entries if the + * supplied default cardinality has drifted significantly from the stored baseline. + */ + void seedIfAbsent(PatternKey key, double defaultCardinality, long priorCalls); + + double getAverageResults(PatternKey key); + + /** + * Returns the maximum observed result count per call for the given key. Defaults to the average result count when + * not supported by an implementation. + */ + default double getMaxResults(PatternKey key) { + return getAverageResults(key); + } + + boolean hasStats(PatternKey key); + + /** + * Returns the number of observed calls for the given key, or a negative value when unavailable. + */ + default long getCalls(PatternKey key) { + return -1L; + } + + /** + * Returns an uncertainty score in [0,1] where 1 means highest uncertainty. + */ + default double getUncertainty(PatternKey key) { + long calls = getCalls(key); + if (calls <= 0L) { + return 1.0d; + } + double uncertainty = 1.0d / Math.sqrt(calls + 1.0d); + if (!Double.isFinite(uncertainty) || uncertainty < 0.0d) { + return 0.0d; + } + return Math.min(1.0d, uncertainty); + } + + long getTotalCalls(); + + /** + * Records that statements have been added to the store. Implementations may use this to invalidate statistics when + * a write threshold is exceeded in a time window. + */ + default void recordStatementsAdded(long statementCount) { + // no-op by default + } +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKey.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKey.java new file mode 100644 index 00000000000..1a5b45291e3 --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKey.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +import java.util.Objects; + +import org.eclipse.rdf4j.model.IRI; + +/** + * Key identifying a triple pattern and which positions are bound. + */ +public final class PatternKey { + + public static final int SUBJECT_BOUND = 0b100; + public static final int PREDICATE_BOUND = 0b010; + public static final int OBJECT_BOUND = 0b001; + + private final IRI predicate; + private final int boundMask; + + public PatternKey(IRI predicate, int boundMask) { + this.predicate = predicate; + this.boundMask = boundMask; + } + + public IRI getPredicate() { + return predicate; + } + + public int getBoundMask() { + return boundMask; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof PatternKey)) { + return false; + } + PatternKey other = (PatternKey) o; + return boundMask == other.boundMask && Objects.equals(predicate, other.predicate); + } + + @Override + public int hashCode() { + return Objects.hash(predicate, boundMask); + } + + @Override + public String toString() { + String predicateLabel = predicate == null ? "*" : predicate.stringValue(); + return predicateLabel + "/" + Integer.toBinaryString(boundMask); + } +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKeys.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKeys.java new file mode 100644 index 00000000000..a09650cb077 --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/PatternKeys.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.model.vocabulary.RDF; + +/** + * Helpers for building stable {@link PatternKey} instances. + */ +public final class PatternKeys { + + private static final String RDF_TYPE_PREFIX = "urn:rdf4j:learned:rdfType:"; + private static final Map RDF_TYPE_OBJECT_KEYS = new ConcurrentHashMap<>(); + + private PatternKeys() { + } + + public static IRI predicateKey(IRI predicate, Value object) { + if (predicate != null && RDF.TYPE.equals(predicate) && object instanceof IRI) { + String objectIri = object.stringValue(); + return RDF_TYPE_OBJECT_KEYS.computeIfAbsent(objectIri, + value -> SimpleValueFactory.getInstance().createIRI(RDF_TYPE_PREFIX + value)); + } + return predicate; + } +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index c70177f6885..3f9afbdad75 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -8,6 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; import java.util.ArrayDeque; @@ -17,10 +18,10 @@ import java.util.Deque; import java.util.HashMap; import java.util.HashSet; +import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.BiFunction; import org.eclipse.rdf4j.common.annotation.Experimental; import org.eclipse.rdf4j.common.iteration.CloseableIteration; @@ -35,10 +36,14 @@ import org.eclipse.rdf4j.query.QueryEvaluationException; import org.eclipse.rdf4j.query.algebra.AbstractQueryModelNode; import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Exists; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.Not; import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.ValueExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.ZeroLengthPath; import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizer; @@ -47,6 +52,9 @@ import org.eclipse.rdf4j.query.algebra.helpers.AbstractSimpleQueryModelVisitor; import org.eclipse.rdf4j.query.algebra.helpers.StatementPatternVisitor; import org.eclipse.rdf4j.query.algebra.helpers.TupleExprs; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * A query optimizer that re-orders nested Joins. @@ -56,6 +64,7 @@ */ public class QueryJoinOptimizer implements QueryOptimizer { + private static final Logger log = LoggerFactory.getLogger(QueryJoinOptimizer.class); /** * When deciding if merge join is the correct approach we will compare the cardinality of the two join arguments, if * one is bigger than the other by a factor of MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER then we will not use @@ -68,7 +77,20 @@ public class QueryJoinOptimizer implements QueryOptimizer { @Experimental public static boolean USE_MERGE_JOIN_FOR_LAST_STATEMENT_PATTERNS_WHEN_CROSS_JOIN = true; - private static final int FULL_PAIRWISE_START_LIMIT = 6; + @Experimental + public static JoinOrderStrategy JOIN_ORDER_STRATEGY = JoinOrderStrategy.HYBRID; + + @Experimental + public static int DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = 8; + + @Experimental + public static boolean REORDER_JOINS_WITH_SKETCHES = true; + + public enum JoinOrderStrategy { + GREEDY, + DYNAMIC_PROGRAMMING, + HYBRID + } protected final EvaluationStatistics statistics; private final boolean trackResultSize; @@ -92,6 +114,16 @@ public QueryJoinOptimizer(EvaluationStatistics statistics, boolean trackResultSi this.tripleSource = tripleSource; } + private static int filterConditionCost(ValueExpr condition) { + if (condition instanceof Exists) { + return 100; + } + if (condition instanceof Not not && not.getArg() instanceof Exists) { + return 100; + } + return 0; + } + /** * Applies generally applicable optimizations: path expressions are sorted from more to less specific. * @@ -116,6 +148,20 @@ protected JoinVisitor() { } + @Override + public void meet(Filter node) { + node.getArg().visit(this); + + Set origBoundVars = boundVars; + try { + boundVars = new HashSet<>(boundVars); + boundVars.addAll(node.getArg().getAssuredBindingNames()); + node.getCondition().visit(this); + } finally { + boundVars = origBoundVars; + } + } + @Override public void meet(LeftJoin leftJoin) { leftJoin.getLeftArg().visit(this); @@ -123,7 +169,7 @@ public void meet(LeftJoin leftJoin) { Set origBoundVars = boundVars; try { boundVars = new HashSet<>(boundVars); - boundVars.addAll(leftJoin.getLeftArg().getBindingNames()); + boundVars.addAll(leftJoin.getLeftArg().getAssuredBindingNames()); leftJoin.getRightArg().visit(this); } finally { @@ -153,315 +199,933 @@ public void meet(Join node) { try { boundVars = new HashSet<>(boundVars); - // Recursively get the join arguments - List joinArgs = getJoinArgs(node, new ArrayList<>()); - - // get all extensions (BIND clause) - List orderedExtensions = getExtensionTupleExprs(joinArgs); - optimizeInNewScope(orderedExtensions); - joinArgs.removeAll(orderedExtensions); - - // get all subselects and order them - List subSelects = getSubSelects(joinArgs); - optimizeInNewScope(subSelects); - List orderedSubselects = reorderSubselects(subSelects); - joinArgs.removeAll(orderedSubselects); - - // Reorder the subselects and extensions to a more optimal sequence - List priorityArgs; - if (orderedExtensions.isEmpty()) { - priorityArgs = orderedSubselects; - } else if (orderedSubselects.isEmpty()) { - priorityArgs = orderedExtensions; + CollectedJoinArgs collectedJoinArgs = collectJoinArgsForOrdering(node); + OrderedJoinPlan orderedJoinPlan = orderJoinArgsPreservingSeparators(collectedJoinArgs, origBoundVars); + TupleExpr root = buildOrderedJoinPlanRoot(orderedJoinPlan); + + if (root != null) { + root = reapplyDeferredFilters(root, orderedJoinPlan.rootDeferredFilters); + + if (TupleExprs.isVariableScopeChange(node)) { + ((AbstractQueryModelNode) root).setVariableScopeChange(true); + } + + node.replaceWith(root); } else { - priorityArgs = new ArrayList<>(orderedExtensions.size() + orderedSubselects.size()); - priorityArgs.addAll(orderedExtensions); - priorityArgs.addAll(orderedSubselects); + throw new IllegalStateException("Expected at least one join argument"); } + } finally { + boundVars = origBoundVars; + } + } - // Reorder the (recursive) join arguments to a more optimal sequence - Deque orderedJoinArgs = new ArrayDeque<>(joinArgs.size()); + private CollectedJoinArgs collectJoinArgsForOrdering(Join node) { + CollectedJoinArgs collectedJoinArgs = new CollectedJoinArgs(); + collectJoinArgsForOrdering(node, collectedJoinArgs.joinArgs, collectedJoinArgs.deferredFilters); + return collectedJoinArgs; + } - // We order all remaining join arguments based on cardinality and - // variable frequency statistics - if (!joinArgs.isEmpty()) { - // Build maps of cardinalities and vars per tuple expression - Map cardinalityMap = Collections.emptyMap(); - Map> varsMap = new HashMap<>(); + private void collectJoinArgsForOrdering(Join node, List joinArgs) { + collectJoinArgsForOrdering(node, joinArgs, new ArrayList<>()); + } - for (TupleExpr tupleExpr : joinArgs) { - if (tupleExpr instanceof Join) { - // we can skip calculating the cardinality for instances of Join since we will anyway "meet" - // these nodes - continue; - } + private void collectJoinArgsForOrdering(Join node, List joinArgs, List deferredFilters) { + collectJoinArgsForOrdering(node.getLeftArg(), joinArgs, deferredFilters); + collectJoinArgsForOrdering(node.getRightArg(), joinArgs, deferredFilters); + } - double cardinality = statistics.getCardinality(tupleExpr); + private void collectJoinArgsForOrdering(TupleExpr tupleExpr, List joinArgs, + List deferredFilters) { + if (tupleExpr instanceof Join && !isJoinOrderSeparator(tupleExpr)) { + Join join = (Join) tupleExpr; + collectJoinArgsForOrdering(join.getLeftArg(), joinArgs, deferredFilters); + collectJoinArgsForOrdering(join.getRightArg(), joinArgs, deferredFilters); + } else if (tupleExpr instanceof Filter) { + Filter filter = (Filter) tupleExpr; + ArrayDeque nestedFilters = new ArrayDeque<>(); + TupleExpr filterArg = unwrapJoinFilterChain(filter, nestedFilters); + if (filterArg instanceof Join) { + collectJoinArgsForOrdering(filterArg, joinArgs, deferredFilters); + deferredFilters.addAll(nestedFilters); + } else { + joinArgs.add(tupleExpr); + } + } else { + joinArgs.add(tupleExpr); + } + } - tupleExpr.setResultSizeEstimate(Math.max(cardinality, tupleExpr.getResultSizeEstimate())); - if (!hasCachedCardinality(tupleExpr)) { - if (cardinalityMap.isEmpty()) { - cardinalityMap = new HashMap<>(); - } - cardinalityMap.put(tupleExpr, cardinality); - } - if (tupleExpr instanceof ZeroLengthPath) { - varsMap.put(tupleExpr, ((ZeroLengthPath) tupleExpr).getVarList()); - } else { - varsMap.put(tupleExpr, getStatementPatternVars(tupleExpr)); - } - } + private TupleExpr unwrapJoinFilterChain(Filter filter, ArrayDeque nestedFilters) { + TupleExpr current = filter; + while (current instanceof Filter && !TupleExprs.isVariableScopeChange(current)) { + Filter currentFilter = (Filter) current; + nestedFilters.addFirst(currentFilter); + current = currentFilter.getArg(); + } + return current; + } - // Build map of var frequences - Map varFreqMap = new HashMap<>((varsMap.size() + 1) * 2); - for (List varList : varsMap.values()) { - fillVarFreqMap(varList, varFreqMap); + private TupleExpr reapplyDeferredFilters(TupleExpr root, List deferredFilters) { + TupleExpr current = root; + for (DeferredFilter deferredFilter : deferredFilters) { + Filter clone = deferredFilter.filter.clone(); + clone.setArg(current); + current = clone; + } + return current; + } + + private Deque orderJoinArgsPreservingSeparators(List joinArgs) { + Deque orderedJoinArgs = new ArrayDeque<>(joinArgs.size()); + List currentGroup = new ArrayList<>(); + + for (TupleExpr joinArg : joinArgs) { + if (isJoinOrderSeparator(joinArg)) { + appendOptimizedJoinGroup(orderedJoinArgs, currentGroup); + appendSeparator(orderedJoinArgs, joinArg); + } else { + currentGroup.add(joinArg); + } + } + +// System.out.println("Group: "); +// for (TupleExpr tupleExpr : currentGroup) { +// double cardinality = statistics.getCardinality(tupleExpr); +// tupleExpr.setResultSizeEstimate(cardinality); +// if(tupleExpr instanceof Filter){ +// TupleExpr arg = ((Filter) tupleExpr).getArg(); +// arg.setResultSizeEstimate(statistics.getCardinality(arg)); +// } +// System.out.println(tupleExpr.toString().trim()); +// tupleExpr.setResultSizeEstimate(-1); +// } + +// System.out.println("----------------------------------------"); +// +// for (TupleExpr tupleExpr : currentGroup) { +// for (TupleExpr expr : currentGroup) { +// if(tupleExpr == expr){ continue;} +// +// double cardinality = statistics.getCardinality(new Join(tupleExpr, expr)); +// if(cardinality >= Double.POSITIVE_INFINITY){ +// continue; +// } +// +// if(cardinality == 0){ +// double cardinality1 = statistics.getCardinality(new Join(tupleExpr, expr)); +// } +// + //// System.out.println("left: "+tupleExpr.toString().trim()); +//// System.out.println("right: "+expr.toString().trim()); +//// System.out.println("estimated join cardinality: "+statistics.getCardinality(new Join(tupleExpr, expr))); +//// System.out.println(); +// } +// } +// +// System.out.println(); + + appendOptimizedJoinGroup(orderedJoinArgs, currentGroup); + return orderedJoinArgs; + } + + private OrderedJoinPlan orderJoinArgsPreservingSeparators(CollectedJoinArgs collectedJoinArgs, + Set outerBoundVars) { + OrderedJoinPlan orderedJoinPlan = new OrderedJoinPlan(); + List rawPlanItems = new ArrayList<>(collectedJoinArgs.joinArgs.size()); + List currentGroup = new ArrayList<>(); + Set currentGroupBindingNames = new HashSet<>(); + Set currentBoundBeforeSegment = new HashSet<>(outerBoundVars); + Set segmentBoundBefore = null; + Set scopeBindingNames = new HashSet<>(outerBoundVars); + + for (TupleExpr joinArg : collectedJoinArgs.joinArgs) { + scopeBindingNames.addAll(joinArg.getBindingNames()); + if (isJoinOrderSeparator(joinArg)) { + if (!currentGroup.isEmpty()) { + rawPlanItems + .add(new RawJoinSegment(currentGroup, currentGroupBindingNames, segmentBoundBefore)); + currentBoundBeforeSegment.addAll(currentGroupBindingNames); + currentGroup = new ArrayList<>(); + currentGroupBindingNames = new HashSet<>(); + segmentBoundBefore = null; } + rawPlanItems.add(joinArg); + currentBoundBeforeSegment.addAll(joinArg.getBindingNames()); + } else { + if (currentGroup.isEmpty()) { + segmentBoundBefore = new HashSet<>(currentBoundBeforeSegment); + } + currentGroup.add(joinArg); + currentGroupBindingNames.addAll(joinArg.getBindingNames()); + } + } + if (!currentGroup.isEmpty()) { + rawPlanItems.add(new RawJoinSegment(currentGroup, currentGroupBindingNames, segmentBoundBefore)); + } - // order all other join arguments based on available statistics - while (!joinArgs.isEmpty()) { - TupleExpr tupleExpr = selectNextTupleExpr(joinArgs, cardinalityMap, varsMap, varFreqMap); - this.currentHighestCost = Math.max(currentHighestCost, tupleExpr.getCostEstimate()); + List deferredFilters = buildDeferredFilters(collectedJoinArgs.deferredFilters, + scopeBindingNames); + assignDeferredFilters(rawPlanItems, deferredFilters, orderedJoinPlan.rootDeferredFilters, outerBoundVars); + + for (Object rawPlanItem : rawPlanItems) { + if (rawPlanItem instanceof RawJoinSegment) { + RawJoinSegment rawJoinSegment = (RawJoinSegment) rawPlanItem; + orderedJoinPlan.items.add(new OrderedJoinSegment( + optimizeJoinGroup(rawJoinSegment.joinArgs, rawJoinSegment.deferredFilters, + rawJoinSegment.boundBeforeSegment), + sortDeferredFilters(rawJoinSegment.deferredFilters), + rawJoinSegment.boundBeforeSegment)); + } else { + TupleExpr optimizedSeparator = optimizeSeparator((TupleExpr) rawPlanItem); + orderedJoinPlan.items.add(new OrderedJoinSeparator(optimizedSeparator)); + boundVars.addAll(optimizedSeparator.getBindingNames()); + } + } - joinArgs.remove(tupleExpr); - orderedJoinArgs.addLast(tupleExpr); + return orderedJoinPlan; + } - // Recursively optimize join arguments - tupleExpr.visit(this); + private List buildDeferredFilters(List filters, Set scopeBindingNames) { + if (filters.isEmpty()) { + return List.of(); + } + + List deferredFilters = new ArrayList<>(filters.size()); + for (int i = 0; i < filters.size(); i++) { + Filter filter = filters.get(i); + Set requiredVars = new HashSet<>(VarNameCollector.process(filter.getCondition())); + requiredVars.retainAll(scopeBindingNames); + deferredFilters + .add(new DeferredFilter(filter, requiredVars, filterConditionCost(filter.getCondition()), i)); + } + return deferredFilters; + } - boundVars.addAll(tupleExpr.getBindingNames()); + private void assignDeferredFilters(List rawPlanItems, List deferredFilters, + List rootDeferredFilters, Set outerBoundVars) { + for (DeferredFilter deferredFilter : deferredFilters) { + Set segmentRequiredVars = new HashSet<>(deferredFilter.requiredVars); + segmentRequiredVars.removeAll(outerBoundVars); + if (segmentRequiredVars.isEmpty()) { + rootDeferredFilters.add(deferredFilter); + continue; + } + + RawJoinSegment assignedSegment = null; + for (Object rawPlanItem : rawPlanItems) { + if (rawPlanItem instanceof RawJoinSegment) { + RawJoinSegment rawJoinSegment = (RawJoinSegment) rawPlanItem; + if (rawJoinSegment.bindingNames.containsAll(segmentRequiredVars)) { + assignedSegment = rawJoinSegment; + break; + } } } - if (statistics.supportsJoinEstimation() && orderedJoinArgs.size() > 2) { - orderedJoinArgs = reorderJoinArgs(orderedJoinArgs); + if (assignedSegment != null) { + assignedSegment.deferredFilters.add(deferredFilter); + } else { + rootDeferredFilters.add(deferredFilter); } + } + } - // Build new join hierarchy - TupleExpr priorityJoins = null; - if (!priorityArgs.isEmpty()) { - priorityJoins = priorityArgs.get(0); + private List sortDeferredFilters(List deferredFilters) { + ArrayList sorted = new ArrayList<>(deferredFilters); + sorted.sort(Comparator + .comparingInt((DeferredFilter deferredFilter) -> deferredFilter.conditionCost) + .thenComparingInt(deferredFilter -> deferredFilter.originalIndex)); + return sorted; + } - for (int i = 1; i < priorityArgs.size(); i++) { - priorityJoins = new Join(priorityJoins, priorityArgs.get(i)); + private TupleExpr buildOrderedJoinPlanRoot(OrderedJoinPlan orderedJoinPlan) { + Deque orderedRoots = new ArrayDeque<>(orderedJoinPlan.items.size()); + for (OrderedJoinPlanItem item : orderedJoinPlan.items) { + if (item instanceof OrderedJoinSegment) { + TupleExpr segmentRoot = buildSegmentRoot((OrderedJoinSegment) item); + if (segmentRoot != null) { + orderedRoots.addLast(segmentRoot); } + } else if (item instanceof OrderedJoinSeparator) { + orderedRoots.addLast(((OrderedJoinSeparator) item).tupleExpr); } + } + return buildJoinRoot(orderedRoots); + } - if (priorityJoins == null && !orderedJoinArgs.isEmpty()) { + private TupleExpr buildSegmentRoot(OrderedJoinSegment orderedJoinSegment) { + if (orderedJoinSegment.orderedJoinArgs.isEmpty()) { + return null; + } - double cardinality = 0; + if (orderedJoinSegment.deferredFilters.isEmpty()) { + return buildJoinRoot(orderedJoinSegment.orderedJoinArgs); + } - while (orderedJoinArgs.size() > 1) { + Deque orderedJoinArgs = new ArrayDeque<>(orderedJoinSegment.orderedJoinArgs); + List pendingFilters = new ArrayList<>(orderedJoinSegment.deferredFilters); + Set availableVars = new HashSet<>(orderedJoinSegment.boundBeforeSegment); - Set supportedOrders = orderedJoinArgs.peekFirst().getSupportedOrders(tripleSource); - if (supportedOrders.isEmpty()) { - break; - } + TupleExpr root = orderedJoinArgs.removeFirst(); + availableVars.addAll(root.getBindingNames()); + root = applyCompatibleDeferredFilters(root, pendingFilters, availableVars); - TupleExpr left = orderedJoinArgs.removeFirst(); - TupleExpr right = orderedJoinArgs.removeFirst(); + while (!orderedJoinArgs.isEmpty()) { + TupleExpr next = orderedJoinArgs.removeFirst(); + root = createJoinWithEstimatedResultSize(root, next); + availableVars.addAll(next.getBindingNames()); + root = applyCompatibleDeferredFilters(root, pendingFilters, availableVars); + } - supportedOrders = new HashSet<>(supportedOrders); - supportedOrders.retainAll(right.getSupportedOrders(tripleSource)); + if (!pendingFilters.isEmpty()) { + root = reapplyDeferredFilters(root, pendingFilters); + } - if (supportedOrders.isEmpty() || joinOnMultipleVars(left, right) || joinSizeIsTooDifferent( - Math.max(cardinality, left.getResultSizeEstimate()), right.getResultSizeEstimate())) { + return root; + } - orderedJoinArgs.addFirst(right); - orderedJoinArgs.addFirst(left); - break; + private TupleExpr applyCompatibleDeferredFilters(TupleExpr root, List deferredFilters, + Set availableVars) { + TupleExpr current = root; + for (int i = 0; i < deferredFilters.size();) { + DeferredFilter deferredFilter = deferredFilters.get(i); + if (!availableVars.containsAll(deferredFilter.requiredVars)) { + i++; + continue; + } - } else { - cardinality = Math.max(cardinality, left.getResultSizeEstimate()); - cardinality = Math.max(cardinality, right.getResultSizeEstimate()); - Join join = new Join(left, right); - join.setOrder((Var) supportedOrders.toArray()[0]); - join.setMergeJoin(true); - orderedJoinArgs.addFirst(join); - } + Filter clone = deferredFilter.filter.clone(); + clone.setArg(current); + current = clone; + deferredFilters.remove(i); + } + return current; + } + + private TupleExpr buildJoinRoot(Deque orderedJoinArgs) { + if (orderedJoinArgs.isEmpty()) { + return null; + } + Deque remaining = new ArrayDeque<>(orderedJoinArgs); + + if (remaining.size() > 1) { + double cardinality = 0; + while (remaining.size() > 1) { + Set supportedOrders = remaining.peekFirst().getSupportedOrders(tripleSource); + if (supportedOrders.isEmpty()) { + break; } + TupleExpr left = remaining.removeFirst(); + TupleExpr right = remaining.removeFirst(); + + supportedOrders = new HashSet<>(supportedOrders); + supportedOrders.retainAll(right.getSupportedOrders(tripleSource)); + + if (supportedOrders.isEmpty() || joinOnMultipleVars(left, right) || joinSizeIsTooDifferent( + Math.max(cardinality, left.getResultSizeEstimate()), right.getResultSizeEstimate())) { + remaining.addFirst(right); + remaining.addFirst(left); + break; + } + + cardinality = Math.max(cardinality, left.getResultSizeEstimate()); + cardinality = Math.max(cardinality, right.getResultSizeEstimate()); + Join join = createJoinWithEstimatedResultSize(left, right); + join.setOrder((Var) supportedOrders.toArray()[0]); + join.setMergeJoin(true); + remaining.addFirst(join); } + } - if (!orderedJoinArgs.isEmpty()) { - // Note: generated hierarchy is right-recursive to help the - // IterativeEvaluationOptimizer to factor out the left-most join - // argument - int i = orderedJoinArgs.size() - 1; - TupleExpr right = orderedJoinArgs.removeLast(); - if (!orderedJoinArgs.isEmpty()) { - TupleExpr left = orderedJoinArgs.removeLast(); + TupleExpr root = remaining.removeFirst(); + if (!remaining.isEmpty()) { + TupleExpr next = remaining.removeFirst(); + Set supportedOrders = new HashSet<>(root.getSupportedOrders(tripleSource)); + supportedOrders.retainAll(next.getSupportedOrders(tripleSource)); - Set supportedOrders = new HashSet<>(left.getSupportedOrders(tripleSource)); - supportedOrders.retainAll(right.getSupportedOrders(tripleSource)); + Join join = createJoinWithEstimatedResultSize(root, next); + if (USE_MERGE_JOIN_FOR_LAST_STATEMENT_PATTERNS_WHEN_CROSS_JOIN) { + mergeJoinForCrossJoin(remaining, supportedOrders, root, next, join); + } + root = join; + } - Join join = new Join(left, right); + while (!remaining.isEmpty()) { + root = createJoinWithEstimatedResultSize(root, remaining.removeFirst()); + } - if (USE_MERGE_JOIN_FOR_LAST_STATEMENT_PATTERNS_WHEN_CROSS_JOIN) { - mergeJoinForCrossJoin(orderedJoinArgs, supportedOrders, left, right, join); - } + return root; + } - right = join; + private void appendOptimizedJoinGroup(Deque orderedJoinArgs, List joinGroup) { + if (joinGroup.isEmpty()) { + return; + } - } - while (!orderedJoinArgs.isEmpty()) { - right = new Join(orderedJoinArgs.removeLast(), right); - } + Deque optimizedGroup = optimizeJoinGroup(joinGroup); + while (!optimizedGroup.isEmpty()) { + orderedJoinArgs.addLast(optimizedGroup.removeFirst()); + } + joinGroup.clear(); + } - if (priorityJoins != null) { - right = new Join(priorityJoins, right); - } + private void appendSeparator(Deque orderedJoinArgs, TupleExpr separator) { + TupleExpr optimizedSeparator = optimizeSeparator(separator); + orderedJoinArgs.addLast(optimizedSeparator); + boundVars.addAll(optimizedSeparator.getBindingNames()); + } - // Replace old join hierarchy - node.replaceWith(right); + private TupleExpr optimizeSeparator(TupleExpr separator) { + if (separator instanceof Join) { + Join parent = (Join) separator.getParentNode(); + boolean leftArg = parent.getLeftArg() == separator; + separator.visit(this); + return leftArg ? parent.getLeftArg() : parent.getRightArg(); + } + + separator.visit(this); + return separator; + } - // we optimize after the right call above in case the optimize call below - // recurses back into this function and we need all the node's parent/child pointers - // set up correctly for right to work on subsequent calls - if (priorityJoins != null) { - optimizePriorityJoin(origBoundVars, priorityJoins); + private Deque optimizeJoinGroup(List joinGroup) { + return optimizeJoinGroup(joinGroup, List.of(), new HashSet<>(boundVars)); + } + + private Deque optimizeJoinGroup(List joinGroup, List deferredFilters, + Set boundBeforeSegment) { + List remaining = new ArrayList<>(joinGroup); + Deque orderedJoinArgs = new ArrayDeque<>(remaining.size()); + + Map cardinalityMap = Collections.emptyMap(); + Map> varsMap = new HashMap<>(); + + for (TupleExpr tupleExpr : remaining) { + double cardinality = statistics.getCardinality(tupleExpr); + + tupleExpr.setResultSizeEstimate(Math.max(cardinality, tupleExpr.getResultSizeEstimate())); + if (!hasCachedCardinality(tupleExpr)) { + if (cardinalityMap.isEmpty()) { + cardinalityMap = new HashMap<>(); } + cardinalityMap.put(tupleExpr, cardinality); + } + if (tupleExpr instanceof ZeroLengthPath) { + varsMap.put(tupleExpr, ((ZeroLengthPath) tupleExpr).getVarList()); + } else { + varsMap.put(tupleExpr, getStatementPatternVars(tupleExpr)); + } + } + Map varFreqMap = new HashMap<>((varsMap.size() + 1) * 2); + for (List varList : varsMap.values()) { + fillVarFreqMap(varList, varFreqMap); + } + + while (!remaining.isEmpty()) { + TupleExpr tupleExpr = selectNextTupleExpr(remaining, cardinalityMap, varsMap, varFreqMap); + this.currentHighestCost = Math.max(currentHighestCost, tupleExpr.getCostEstimate()); + + remaining.remove(tupleExpr); + orderedJoinArgs.addLast(tupleExpr); + tupleExpr.visit(this); + boundVars.addAll(tupleExpr.getBindingNames()); + } + + if (REORDER_JOINS_WITH_SKETCHES && statistics.supportsJoinEstimation() && orderedJoinArgs.size() > 2) { + orderedJoinArgs = new ArrayDeque<>( + reorderSegment(new ArrayList<>(orderedJoinArgs), boundBeforeSegment, deferredFilters)); + } + + return positionBindingSetAssignments(orderedJoinArgs); + } + + private Deque reorderJoinArgs(Deque orderedJoinArgs, Set outerBoundVars) { + if (orderedJoinArgs.size() < 2) { + return orderedJoinArgs; + } + + List originalOrder = new ArrayList<>(orderedJoinArgs); + + Deque reordered = new ArrayDeque<>(originalOrder.size()); + List currentSegment = new ArrayList<>(); + Set boundBeforeSegment = new HashSet<>(outerBoundVars); + + for (TupleExpr tupleExpr : originalOrder) { + if (isJoinOrderSeparator(tupleExpr)) { + appendReorderedSegment(reordered, currentSegment, boundBeforeSegment); + reordered.addLast(tupleExpr); + boundBeforeSegment.addAll(tupleExpr.getBindingNames()); } else { - // only subselect/priority joins involved in this query. - node.replaceWith(priorityJoins); + currentSegment.add(tupleExpr); } - } finally { - boundVars = origBoundVars; } + appendReorderedSegment(reordered, currentSegment, boundBeforeSegment); + + return positionBindingSetAssignments(reordered); } - /** - * This can be used by the upcoming sketch based estimator to reorder joins based on estimated join cost. - * - * @param orderedJoinArgs - * @return - */ private Deque reorderJoinArgs(Deque orderedJoinArgs) { - // Copy input into a mutable list - List tupleExprs = new ArrayList<>(orderedJoinArgs); - Deque ret = new ArrayDeque<>(); - - // Memo table: for each (a, b), stores statistics.getCardinality(new Join(a,b)) - Map> cardCache = new HashMap<>(); - - // Helper to look up or compute & cache the cardinality of Join(a,b). - // Avoid mutating the outer cache inside a computeIfAbsent lambda to prevent - // ConcurrentModificationException on some Map implementations/JDKs. - BiFunction getCard = (a, b) -> { - Map inner = cardCache.computeIfAbsent(a, k -> new HashMap<>()); - Double cached = inner.get(b); - if (cached != null) { - return cached; + return reorderJoinArgs(orderedJoinArgs, new HashSet<>(boundVars)); + } + + private Join createJoinWithEstimatedResultSize(TupleExpr left, TupleExpr right) { + Join join = new Join(left, right); + if (statistics.supportsJoinEstimation()) { + double estimatedResultSize = statistics.getCardinality(join); + if (!Double.isNaN(estimatedResultSize) && estimatedResultSize >= 0) { + join.setResultSizeEstimate(Math.max(join.getResultSizeEstimate(), estimatedResultSize)); } - double c = statistics.getCardinality(new Join(a, b)); - inner.put(b, c); - cardCache.computeIfAbsent(b, k -> new HashMap<>()).put(a, c); - return c; - }; - - while (!tupleExprs.isEmpty()) { - if (ret.isEmpty()) { - TupleExpr bestStart = selectBestStartingExpr(tupleExprs, getCard); - if (bestStart != null) { - tupleExprs.remove(bestStart); - ret.addLast(bestStart); - continue; - } + } + return join; + } + + private Deque positionBindingSetAssignments(Deque orderedJoinArgs) { + List originalOrder = new ArrayList<>(orderedJoinArgs); + if (originalOrder.size() < 2) { + return new ArrayDeque<>(originalOrder); + } + + Deque reordered = new ArrayDeque<>(originalOrder.size()); + List currentSegment = new ArrayList<>(); + + for (TupleExpr tupleExpr : originalOrder) { + if (isJoinOrderSeparator(tupleExpr)) { + appendBindingSetAssignmentsPositionedSegment(reordered, currentSegment); + reordered.addLast(tupleExpr); + } else { + currentSegment.add(tupleExpr); } + } + appendBindingSetAssignmentsPositionedSegment(reordered, currentSegment); - // If ret is empty or next isn’t a StatementPattern, just drain in original order - if (ret.isEmpty() || !(tupleExprs.get(0) instanceof StatementPattern)) { - ret.addLast(tupleExprs.remove(0)); - continue; + return reordered; + } + + private void appendReorderedSegment(Deque reordered, List segment, + Set boundBeforeSegment) { + if (segment.isEmpty()) { + return; + } + + List reorderedSegment = reorderSegment(segment, boundBeforeSegment); + for (TupleExpr tupleExpr : reorderedSegment) { + reordered.addLast(tupleExpr); + boundBeforeSegment.addAll(tupleExpr.getBindingNames()); + } + segment.clear(); + } + + private void appendBindingSetAssignmentsPositionedSegment(Deque reordered, List segment) { + if (segment.isEmpty()) { + return; + } + + List positionedSegment = positionBindingSetAssignmentsInSegment(segment); + for (TupleExpr tupleExpr : positionedSegment) { + reordered.addLast(tupleExpr); + } + segment.clear(); + } + + private List positionBindingSetAssignmentsInSegment(List segment) { + if (segment.size() < 2) { + return new ArrayList<>(segment); + } + + List bindingSetAssignments = new ArrayList<>(); + List nonAssignments = new ArrayList<>(segment.size()); + for (TupleExpr tupleExpr : segment) { + if (tupleExpr instanceof BindingSetAssignment) { + bindingSetAssignments.add(tupleExpr); + } else { + nonAssignments.add(tupleExpr); } + } - // Find the tupleExpr in tupleExprs whose join with any in ret has minimal cardinality - TupleExpr bestCandidate = null; - double bestCost = Double.MAX_VALUE; - for (TupleExpr cand : tupleExprs) { - if (!statementPatternWithMinimumOneConstant(cand)) { - continue; + if (bindingSetAssignments.isEmpty() || nonAssignments.isEmpty()) { + return new ArrayList<>(segment); + } + + List> referencedVarNames = new ArrayList<>(nonAssignments.size()); + for (TupleExpr tupleExpr : nonAssignments) { + referencedVarNames.add(VarNameCollector.process(tupleExpr)); + } + + Map> insertions = new HashMap<>(); + for (TupleExpr bindingSetAssignment : bindingSetAssignments) { + int insertionIndex = findFirstUsageIndex(bindingSetAssignment.getAssuredBindingNames(), + referencedVarNames); + insertions.computeIfAbsent(insertionIndex, key -> new ArrayList<>()).add(bindingSetAssignment); + } + + List positioned = new ArrayList<>(segment.size()); + for (int i = 0; i <= nonAssignments.size(); i++) { + List insertedAssignments = insertions.get(i); + if (insertedAssignments != null) { + positioned.addAll(insertedAssignments); + } + if (i < nonAssignments.size()) { + positioned.add(nonAssignments.get(i)); + } + } + + return positioned; + } + + private int findFirstUsageIndex(Set bindingNames, List> referencedVarNames) { + if (bindingNames.isEmpty()) { + return referencedVarNames.size(); + } + + for (int i = 0; i < referencedVarNames.size(); i++) { + if (!Collections.disjoint(bindingNames, referencedVarNames.get(i))) { + return i; + } + } + + return referencedVarNames.size(); + } + + private List reorderSegment(List segment, Set boundBeforeSegment) { + return reorderSegment(segment, boundBeforeSegment, List.of()); + } + + private List reorderSegment(List segment, Set boundBeforeSegment, + List deferredFilters) { + if (segment.size() < 2) { + return new ArrayList<>(segment); + } + + return greedyReorderByJoinCardinality(segment, boundBeforeSegment, deferredFilters); + } + + private boolean isJoinOrderSeparator(TupleExpr tupleExpr) { + return TupleExprs.isVariableScopeChange(tupleExpr) || TupleExprs.containsExtension(tupleExpr) + || TupleExprs.containsSubquery(tupleExpr); + } + + private List greedyReorderByJoinCardinality(List segment, Set outerBoundVars) { + return greedyReorderByJoinCardinality(segment, outerBoundVars, List.of()); + } + + private List greedyReorderByJoinCardinality(List segment, Set outerBoundVars, + List deferredFilters) { + if (segment.size() <= 2) { + return new ArrayList<>(segment); + } + + List remaining = new ArrayList<>(segment); + JoinCardinalityCache cardinalityCache = new JoinCardinalityCache(); + Map> tupleExprsByVariable = buildTupleExprsByVariable(segment); + List ordered = new ArrayList<>(remaining.size()); + Set prefixBindingNames = new HashSet<>(outerBoundVars); + + int bestLeftIndex = 0; + int bestRightIndex = 1; + int bestCheapFilterUnlocks = Integer.MIN_VALUE; + int bestTotalFilterUnlocks = Integer.MIN_VALUE; + int bestOuterBindingImpact = Integer.MIN_VALUE; + int bestSharedVarCount = Integer.MIN_VALUE; + double bestCost = Double.POSITIVE_INFINITY; + for (int leftIndex = 0; leftIndex < remaining.size() - 1; leftIndex++) { + for (int rightIndex = leftIndex + 1; rightIndex < remaining.size(); rightIndex++) { + TupleExpr left = remaining.get(leftIndex); + TupleExpr right = remaining.get(rightIndex); + Set availableVars = getAvailableVars(outerBoundVars, left, right); + int cheapFilterUnlocks = countCompatibleFilters(deferredFilters, availableVars, 0); + int totalFilterUnlocks = countCompatibleFilters(deferredFilters, availableVars); + int sharedVarCount = sharedJoinVariableCount(left, right); + int outerBindingImpact = estimateOuterBindingImpact(left, right, outerBoundVars, + tupleExprsByVariable); + double joinCost = cardinalityCache.get(left, right); + if (isBetterGreedyChoice(cheapFilterUnlocks, totalFilterUnlocks, outerBindingImpact, sharedVarCount, + joinCost, bestCheapFilterUnlocks, bestTotalFilterUnlocks, bestOuterBindingImpact, + bestSharedVarCount, bestCost)) { + bestCheapFilterUnlocks = cheapFilterUnlocks; + bestTotalFilterUnlocks = totalFilterUnlocks; + bestOuterBindingImpact = outerBindingImpact; + bestSharedVarCount = sharedVarCount; + bestCost = joinCost; + bestLeftIndex = leftIndex; + bestRightIndex = rightIndex; } + } + } - // compute the minimum join‐cost between cand and anything in ret - for (TupleExpr prev : ret) { - if (!statementPatternWithMinimumOneConstant(prev)) { + TupleExpr left = remaining.remove(bestLeftIndex); + TupleExpr right = remaining.remove(bestRightIndex > bestLeftIndex ? bestRightIndex - 1 : bestRightIndex); + if (left.getResultSizeEstimate() > 0 && right.getResultSizeEstimate() > 0) { + if (left.getResultSizeEstimate() > right.getResultSizeEstimate()) { + var temp = left; + left = right; + right = temp; + } + } + ordered.add(left); + ordered.add(right); + prefixBindingNames.addAll(left.getBindingNames()); + prefixBindingNames.addAll(right.getBindingNames()); + List pendingDeferredFilters = removeCompatibleFilters(deferredFilters, prefixBindingNames); + + while (!remaining.isEmpty()) { + TupleExpr bestCandidate = null; + int bestCandidateCheapFilterUnlocks = Integer.MIN_VALUE; + int bestCandidateTotalFilterUnlocks = Integer.MIN_VALUE; + int bestCandidateOuterBindingImpact = Integer.MIN_VALUE; + int bestCandidateSharedVarCount = Integer.MIN_VALUE; + double lowestJoinCost = Double.POSITIVE_INFINITY; + for (TupleExpr candidate : remaining) { + Set candidateAvailableVars = getAvailableVars(prefixBindingNames, candidate); + int cheapFilterUnlocks = countCompatibleFilters(pendingDeferredFilters, candidateAvailableVars, 0); + int totalFilterUnlocks = countCompatibleFilters(pendingDeferredFilters, candidateAvailableVars); + int sharedVarCount = sharedJoinVariableCount(candidate, prefixBindingNames); + double candidateCost = Double.POSITIVE_INFINITY; + for (TupleExpr existing : ordered) { + if (!sharesJoinVariable(existing, candidate)) { continue; } - double cost = getCard.apply(prev, cand); - if (cost < bestCost) { - bestCost = cost; - bestCandidate = cand; - } + candidateCost = Math.min(candidateCost, cardinalityCache.get(existing, candidate)); + } + int candidateOuterBindingImpact = estimateOuterBindingImpact(candidate, outerBoundVars, + tupleExprsByVariable); + if (bestCandidate == null || isBetterGreedyChoice(cheapFilterUnlocks, totalFilterUnlocks, + candidateOuterBindingImpact, sharedVarCount, candidateCost, + bestCandidateCheapFilterUnlocks, bestCandidateTotalFilterUnlocks, + bestCandidateOuterBindingImpact, bestCandidateSharedVarCount, lowestJoinCost)) { + bestCandidateCheapFilterUnlocks = cheapFilterUnlocks; + bestCandidateTotalFilterUnlocks = totalFilterUnlocks; + bestCandidateOuterBindingImpact = candidateOuterBindingImpact; + bestCandidateSharedVarCount = sharedVarCount; + lowestJoinCost = candidateCost; + bestCandidate = candidate; } } - // If we found a cheap StatementPattern, pick it; otherwise just take the head - if (bestCandidate != null) { - tupleExprs.remove(bestCandidate); - ret.addLast(bestCandidate); - } else { - ret.addLast(tupleExprs.remove(0)); + if (bestCandidate == null) { + bestCandidate = remaining.get(0); } + remaining.remove(bestCandidate); + ordered.addLast(bestCandidate); + prefixBindingNames.addAll(bestCandidate.getBindingNames()); + pendingDeferredFilters = removeCompatibleFilters(pendingDeferredFilters, prefixBindingNames); } - return ret; + if (log.isTraceEnabled()) { + log.trace("Greedy reorder by join cardinality: {}", + ordered.stream().map(t -> t.toString().trim()).toList()); + } + + return ordered; } - private TupleExpr selectBestStartingExpr(List tupleExprs, - BiFunction getCard) { - List candidates = new ArrayList<>(); - for (TupleExpr tupleExpr : tupleExprs) { - if (statementPatternWithMinimumOneConstant(tupleExpr)) { - candidates.add(tupleExpr); + private Map> buildTupleExprsByVariable(List segment) { + Map> tupleExprsByVariable = new HashMap<>((segment.size() + 1) * 2); + for (TupleExpr tupleExpr : segment) { + for (String bindingName : tupleExpr.getBindingNames()) { + if (bindingName.startsWith("_const_")) { + continue; + } + tupleExprsByVariable.computeIfAbsent(bindingName, ignored -> new ArrayList<>(2)).add(tupleExpr); } } + return tupleExprsByVariable; + } - if (candidates.size() < 2) { - // we don't have multiple candidates, so there is nothing to compare against - return null; + private int estimateOuterBindingImpact(TupleExpr left, TupleExpr right, Set outerBoundVars, + Map> tupleExprsByVariable) { + Set bindingNames = new HashSet<>(left.getBindingNames()); + bindingNames.addAll(right.getBindingNames()); + return estimateOuterBindingImpact(bindingNames, outerBoundVars, tupleExprsByVariable); + } + + private int estimateOuterBindingImpact(TupleExpr tupleExpr, Set outerBoundVars, + Map> tupleExprsByVariable) { + return estimateOuterBindingImpact(tupleExpr.getBindingNames(), outerBoundVars, tupleExprsByVariable); + } + + private int estimateOuterBindingImpact(Set bindingNames, Set outerBoundVars, + Map> tupleExprsByVariable) { + if (outerBoundVars.isEmpty()) { + return 0; } - Map singleCard = new HashMap<>(candidates.size()); - for (TupleExpr candidate : candidates) { - singleCard.put(candidate, statistics.getCardinality(candidate)); + int impact = 0; + for (String bindingName : bindingNames) { + if (!bindingName.startsWith("_const_") && outerBoundVars.contains(bindingName)) { + impact += tupleExprsByVariable.getOrDefault(bindingName, Collections.emptyList()).size(); + } } + return impact; + } + + private Set getAvailableVars(Set baseBindingNames, TupleExpr tupleExpr) { + Set availableVars = new HashSet<>(baseBindingNames); + availableVars.addAll(tupleExpr.getBindingNames()); + return availableVars; + } + + private Set getAvailableVars(Set baseBindingNames, TupleExpr left, TupleExpr right) { + Set availableVars = getAvailableVars(baseBindingNames, left); + availableVars.addAll(right.getBindingNames()); + return availableVars; + } - List primary = new ArrayList<>(candidates); - if (primary.size() > FULL_PAIRWISE_START_LIMIT) { - primary.sort(Comparator.comparingDouble(singleCard::get)); - primary = new ArrayList<>(primary.subList(0, Math.min(3, primary.size()))); + private int countCompatibleFilters(List deferredFilters, Set availableVars) { + int compatibleFilters = 0; + for (DeferredFilter deferredFilter : deferredFilters) { + if (availableVars.containsAll(deferredFilter.requiredVars)) { + compatibleFilters++; + } } + return compatibleFilters; + } - TupleExpr bestA = null; - TupleExpr bestB = null; - double bestCost = Double.MAX_VALUE; + private int countCompatibleFilters(List deferredFilters, Set availableVars, + int requiredConditionCost) { + int compatibleFilters = 0; + for (DeferredFilter deferredFilter : deferredFilters) { + if (deferredFilter.conditionCost == requiredConditionCost + && availableVars.containsAll(deferredFilter.requiredVars)) { + compatibleFilters++; + } + } + return compatibleFilters; + } - for (TupleExpr a : primary) { - for (TupleExpr b : candidates) { - if (a == b) { - continue; - } + private List removeCompatibleFilters(List deferredFilters, + Set availableVars) { + if (deferredFilters.isEmpty()) { + return List.of(); + } - double cost = getCard.apply(a, b); - if (cost < bestCost) { - bestCost = cost; - bestA = a; - bestB = b; - } + List pendingFilters = new ArrayList<>(deferredFilters.size()); + for (DeferredFilter deferredFilter : deferredFilters) { + if (!availableVars.containsAll(deferredFilter.requiredVars)) { + pendingFilters.add(deferredFilter); } } + return pendingFilters; + } - if (bestA == null) { - return null; + private boolean isBetterGreedyChoice(int cheapFilterUnlocks, int totalFilterUnlocks, int outerBindingImpact, + int sharedVarCount, double joinCost, int bestCheapFilterUnlocks, int bestTotalFilterUnlocks, + int bestOuterBindingImpact, int bestSharedVarCount, double bestCost) { + if (cheapFilterUnlocks != bestCheapFilterUnlocks) { + return cheapFilterUnlocks > bestCheapFilterUnlocks; + } + if (totalFilterUnlocks != bestTotalFilterUnlocks) { + return totalFilterUnlocks > bestTotalFilterUnlocks; + } + if (outerBindingImpact != bestOuterBindingImpact) { + return outerBindingImpact > bestOuterBindingImpact; + } + if (sharedVarCount != bestSharedVarCount) { + return sharedVarCount > bestSharedVarCount; + } + return joinCost < bestCost; + } + + private int sharedJoinVariableCount(TupleExpr left, TupleExpr right) { + int sharedVarCount = 0; + Set rightBindingNames = right.getBindingNames(); + for (String bindingName : left.getBindingNames()) { + if (!bindingName.startsWith("_const_") && rightBindingNames.contains(bindingName)) { + sharedVarCount++; + } + } + return sharedVarCount; + } + + private int sharedJoinVariableCount(TupleExpr tupleExpr, Set bindingNames) { + int sharedVarCount = 0; + for (String bindingName : tupleExpr.getBindingNames()) { + if (!bindingName.startsWith("_const_") && bindingNames.contains(bindingName)) { + sharedVarCount++; + } } + return sharedVarCount; + } - double cardA = singleCard.get(bestA); - double cardB = singleCard.get(bestB); + private boolean sharesJoinVariable(TupleExpr left, TupleExpr right) { + return sharedJoinVariableCount(left, right) > 0; + } - return cardA <= cardB ? bestA : bestB; + private interface OrderedJoinPlanItem { + } + + private final class OrderedJoinPlan { + private final List items = new ArrayList<>(); + private final List rootDeferredFilters = new ArrayList<>(); + } + + private final class OrderedJoinSegment implements OrderedJoinPlanItem { + private final Deque orderedJoinArgs; + private final List deferredFilters; + private final Set boundBeforeSegment; + + private OrderedJoinSegment(Deque orderedJoinArgs, List deferredFilters, + Set boundBeforeSegment) { + this.orderedJoinArgs = orderedJoinArgs; + this.deferredFilters = deferredFilters; + this.boundBeforeSegment = boundBeforeSegment; + } + } + + private final class OrderedJoinSeparator implements OrderedJoinPlanItem { + private final TupleExpr tupleExpr; + + private OrderedJoinSeparator(TupleExpr tupleExpr) { + this.tupleExpr = tupleExpr; + } + } + + private final class RawJoinSegment { + private final List joinArgs; + private final Set bindingNames; + private final Set boundBeforeSegment; + private final List deferredFilters = new ArrayList<>(); + + private RawJoinSegment(List joinArgs, Set bindingNames, Set boundBeforeSegment) { + this.joinArgs = new ArrayList<>(joinArgs); + this.bindingNames = new HashSet<>(bindingNames); + this.boundBeforeSegment = new HashSet<>(boundBeforeSegment); + } + } + + private final class DeferredFilter { + private final Filter filter; + private final Set requiredVars; + private final int conditionCost; + private final int originalIndex; + + private DeferredFilter(Filter filter, Set requiredVars, int conditionCost, int originalIndex) { + this.filter = filter; + this.requiredVars = requiredVars; + this.conditionCost = conditionCost; + this.originalIndex = originalIndex; + } + } + + private final class CollectedJoinArgs { + private final List joinArgs = new ArrayList<>(); + private final List deferredFilters = new ArrayList<>(); + } + + private final class JoinCardinalityCache { + private final Map> cache = new IdentityHashMap<>(); + + double get(TupleExpr left, TupleExpr right) { + Map row = cache.computeIfAbsent(left, k -> new IdentityHashMap<>()); + Double cached = row.get(right); + if (cached != null) { + return cached; + } + double estimated = statistics.getCardinality(new Join(left, right)); + row.put(right, estimated); + return estimated; + } } private void optimizeInNewScope(List subSelects) { @@ -503,7 +1167,7 @@ private boolean joinOnMultipleVars(TupleExpr first, TupleExpr second) { } protected > L getJoinArgs(TupleExpr tupleExpr, L joinArgs) { - if (tupleExpr instanceof Join) { + if (tupleExpr instanceof Join && !isJoinOrderSeparator(tupleExpr)) { Join join = (Join) tupleExpr; getJoinArgs(join.getLeftArg(), joinArgs); getJoinArgs(join.getRightArg(), joinArgs); @@ -968,17 +1632,6 @@ public List getVars() { } - private static boolean statementPatternWithMinimumOneConstant(TupleExpr cand) { - return cand instanceof StatementPattern && ((((StatementPattern) cand).getSubjectVar() != null - && ((StatementPattern) cand).getSubjectVar().hasValue()) - || (((StatementPattern) cand).getPredicateVar() != null - && ((StatementPattern) cand).getPredicateVar().hasValue()) - || (((StatementPattern) cand).getObjectVar() != null - && ((StatementPattern) cand).getObjectVar().hasValue()) - || (((StatementPattern) cand).getContextVar() != null - && ((StatementPattern) cand).getContextVar().hasValue())); - } - private static int getUnionSize(Set currentListNames, Set candidateBindingNames) { int count = 0; for (String n : currentListNames) { diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java index 51322ff77fe..fe84d103e0f 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java @@ -8,7 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ - +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; import java.util.ArrayList; @@ -81,9 +81,10 @@ public Iterable getOptimizers() { UNION_SCOPE_CHANGE_OPTIMIZER, QUERY_MODEL_NORMALIZER, PROJECTION_REMOVAL_OPTIMIZER, // Make sure this is after the UnionScopeChangeOptimizer + new FilterOptimizer(evaluationStatistics, false, false), new QueryJoinOptimizer(evaluationStatistics, strategy.isTrackResultSize(), tripleSource), ITERATIVE_EVALUATION_OPTIMIZER, - FILTER_OPTIMIZER, + new FilterOptimizer(evaluationStatistics), ORDER_LIMIT_OPTIMIZER ); diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/ArrayBindingBasedQueryEvaluationContextTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/ArrayBindingBasedQueryEvaluationContextTest.java new file mode 100644 index 00000000000..7379fa19297 --- /dev/null +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/ArrayBindingBasedQueryEvaluationContextTest.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.impl; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.rdf4j.query.QueryLanguage; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.QueryModelNode; +import org.eclipse.rdf4j.query.algebra.QueryRoot; +import org.eclipse.rdf4j.query.parser.ParsedTupleQuery; +import org.eclipse.rdf4j.query.parser.QueryParserUtil; +import org.junit.jupiter.api.Test; + +class ArrayBindingBasedQueryEvaluationContextTest { + + @Test + void findAllVariablesUsedInQueryPreservesValuesVariableOrder() { + ParsedTupleQuery parsedQuery = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, """ + PREFIX social: + SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + } + FILTER (?u != ?v) + ?u social:follows ?v . + OPTIONAL { + ?u social:name ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) + } + """, null); + + QueryRoot root = (QueryRoot) parsedQuery.getTupleExpr(); + BindingSetAssignment before = findFirst(root, BindingSetAssignment.class); + assertEquals(List.of("u", "v"), new ArrayList<>(before.getBindingNames())); + + ArrayBindingBasedQueryEvaluationContext.findAllVariablesUsedInQuery(root); + + BindingSetAssignment after = findFirst(root, BindingSetAssignment.class); + assertEquals(List.of("u", "v"), new ArrayList<>(after.getBindingNames())); + } + + private static T findFirst(QueryModelNode root, Class type) { + List matches = new ArrayList<>(1); + root.visit(new org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor() { + @Override + protected void meetNode(QueryModelNode node) throws RuntimeException { + if (matches.isEmpty() && type.isInstance(node)) { + matches.add(type.cast(node)); + } + super.meetNode(node); + } + }); + + if (matches.isEmpty()) { + throw new AssertionError("Expected to find node of type " + type.getSimpleName()); + } + + return matches.get(0); + } +} diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java index 596015497ca..349d9e97fc0 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java @@ -8,10 +8,15 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.impl; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.rdf4j.model.impl.SimpleValueFactory; import org.eclipse.rdf4j.query.MalformedQueryException; import org.eclipse.rdf4j.query.QueryLanguage; @@ -21,6 +26,7 @@ import org.eclipse.rdf4j.query.algebra.Compare.CompareOp; import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.ListMemberOperator; import org.eclipse.rdf4j.query.algebra.Projection; import org.eclipse.rdf4j.query.algebra.ProjectionElem; import org.eclipse.rdf4j.query.algebra.ProjectionElemList; @@ -29,8 +35,12 @@ import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.ValueConstant; import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizer; import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizerTest; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterOptimizer; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.StandardQueryOptimizerPipeline; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.impl.EmptyBindingSet; import org.eclipse.rdf4j.query.parser.ParsedQuery; import org.eclipse.rdf4j.query.parser.QueryParserUtil; import org.junit.jupiter.api.Test; @@ -107,10 +117,129 @@ public void testNestedFilter() { testOptimizer(expectedQuery, query); } + @Test + public void keepsFilterAboveJoinWhenJoinEstimateIsMoreSelective() { + String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . FILTER(?branchName = \"Branch 0\") }"; + + testOptimizer(query, query, new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d)); + } + + @Test + public void stillPushesFilterWhenJoinEstimateIsNotMoreSelective() { + String expectedQuery = "SELECT * WHERE {{?branch ?branchName . FILTER(?branchName = \"Branch 0\") } ?copy ?branch }"; + String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . FILTER(?branchName = \"Branch 0\") }"; + + testOptimizer(expectedQuery, query, new SelectiveJoinStatistics(200.0d, 100.0d, 20.0d)); + } + + @Test + public void pushesCheapCompareBelowJoinWhileKeepingExistsAtSelectiveJoin() { + String expectedQuery = "SELECT * WHERE {?s ?u . {?u ?v . FILTER(?u != ?v) } FILTER EXISTS {?v ?u .} }"; + String query = "SELECT * WHERE {?s ?u . ?u ?v . FILTER(?u != ?v && EXISTS {?v ?u .}) }"; + + testOptimizer(expectedQuery, query, new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d)); + } + + @Test + public void pushesCheapCompareBelowJoinWhenExistsComesFirst() { + String expectedQuery = "SELECT * WHERE {?s ?u . {?u ?v . FILTER(?u != ?v) } FILTER EXISTS {?v ?u .} }"; + String query = "SELECT * WHERE {?s ?u . ?u ?v . FILTER(EXISTS {?v ?u .} && ?u != ?v) }"; + + testOptimizer(expectedQuery, query, new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d)); + } + + @Test + public void mergesExistsAndCompareBackInCostOrder() { + String expectedQuery = "SELECT * WHERE {?u ?v . FILTER(?u != ?v && EXISTS {?v ?u .}) }"; + String query = "SELECT * WHERE {?u ?v . FILTER(EXISTS {?v ?u .} && ?u != ?v) }"; + + testOptimizer(expectedQuery, query); + } + + @Test + public void standardPipelineShowsInScopeFilterInsideJoinGroup() { + String query = String.join("\n", + "PREFIX med: ", + "PREFIX xsd: ", + "SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE {", + " VALUES ?limit { 55 }", + " ?patient a med:Patient ; med:hasEncounter ?enc .", + " ?enc med:hasObservation ?obs .", + " ?obs med:value ?value .", + " FILTER(?value IN (50, 60, 70))", + " FILTER NOT EXISTS { ?enc med:hasCondition ?cond . }", + "}"); + + QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); + StandardQueryOptimizerPipeline pipeline = new StandardQueryOptimizerPipeline( + new StrictEvaluationStrategy(new EmptyTripleSource(), null), + new EmptyTripleSource(), + new EvaluationStatistics()); + + for (QueryOptimizer optimizer : pipeline.getOptimizers()) { + optimizer.optimize(root, null, EmptyBindingSet.getInstance()); + if (optimizer instanceof org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer) { + break; + } + } + + Filter notExistsFilter = findFirst(root, Filter.class, + filter -> !(filter.getCondition() instanceof ListMemberOperator)); + List groupFilters = flattenJoinLeaves(notExistsFilter.getArg()).stream() + .filter(Filter.class::isInstance) + .map(Filter.class::cast) + .toList(); + + assertThat(groupFilters) + .as("The in-scope IN filter should be pushed into the join group before join ordering") + .singleElement() + .satisfies(filter -> { + assertThat(filter.getCondition()).isInstanceOf(ListMemberOperator.class); + assertThat(filter.getArg()).isInstanceOf(StatementPattern.class); + assertThat(((StatementPattern) filter.getArg()).getPredicateVar().getValue().stringValue()) + .isEqualTo("http://example.com/theme/medical/value"); + }); + } + + @Test + public void standardPipelinePreJoinFilterPassIgnoresSelectiveJoinPlacement() { + String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . " + + "FILTER(?branchName = \"Branch 0\") }"; + + QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); + StandardQueryOptimizerPipeline pipeline = new StandardQueryOptimizerPipeline( + new StrictEvaluationStrategy(new EmptyTripleSource(), null), + new EmptyTripleSource(), + new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d)); + + for (QueryOptimizer optimizer : pipeline.getOptimizers()) { + optimizer.optimize(root, null, EmptyBindingSet.getInstance()); + if (optimizer instanceof org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer) { + break; + } + } + + List filters = findAll(root, Filter.class); + assertThat(filters) + .as("Before join ordering, the pre-pass should always push the filter as close as possible") + .singleElement() + .satisfies(filter -> { + assertThat(filter.getCondition()).isInstanceOf(Compare.class); + assertThat(filter.getArg()).isInstanceOf(StatementPattern.class); + assertThat(((StatementPattern) filter.getArg()).getPredicateVar().getValue().stringValue()) + .isEqualTo("urn:name"); + }); + } + void testOptimizer(String expectedQuery, String actualQuery) throws MalformedQueryException, UnsupportedQueryLanguageException { + testOptimizer(expectedQuery, actualQuery, null); + } + + void testOptimizer(String expectedQuery, String actualQuery, EvaluationStatistics statistics) + throws MalformedQueryException, UnsupportedQueryLanguageException { ParsedQuery pq = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, actualQuery, null); - FilterOptimizer opt = getOptimizer(); + FilterOptimizer opt = statistics == null ? getOptimizer() : new FilterOptimizer(statistics); opt.optimize(pq.getTupleExpr(), null, null); ParsedQuery expectedParsedQuery = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, expectedQuery, null); @@ -125,4 +254,88 @@ void testOptimizer(TupleExpr expectedQuery, String actualQuery) assertEquals(expectedQuery, pq.getTupleExpr()); } + + private static final class SelectiveJoinStatistics extends EvaluationStatistics { + private final double joinCardinality; + private final double namePatternCardinality; + private final double defaultPatternCardinality; + + private SelectiveJoinStatistics(double joinCardinality, double namePatternCardinality, + double defaultPatternCardinality) { + this.joinCardinality = joinCardinality; + this.namePatternCardinality = namePatternCardinality; + this.defaultPatternCardinality = defaultPatternCardinality; + } + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + if (expr instanceof Join) { + return joinCardinality; + } + if (expr instanceof StatementPattern statementPattern + && statementPattern.getPredicateVar() != null + && statementPattern.getPredicateVar().hasValue() + && "urn:name".equals(statementPattern.getPredicateVar().getValue().stringValue())) { + return namePatternCardinality; + } + if (expr instanceof StatementPattern) { + return defaultPatternCardinality; + } + return super.getCardinality(expr); + } + } + + private static List flattenJoinLeaves(TupleExpr tupleExpr) { + ArrayList leaves = new ArrayList<>(); + collectJoinLeaves(tupleExpr, leaves); + return leaves; + } + + private static void collectJoinLeaves(TupleExpr tupleExpr, List leaves) { + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + collectJoinLeaves(join.getLeftArg(), leaves); + collectJoinLeaves(join.getRightArg(), leaves); + return; + } + + leaves.add(tupleExpr); + } + + private static T findFirst(TupleExpr root, Class type, + java.util.function.Predicate predicate) { + List matches = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + protected void meetNode(org.eclipse.rdf4j.query.algebra.QueryModelNode node) throws RuntimeException { + if (type.isInstance(node)) { + T candidate = type.cast(node); + if (predicate.test(candidate)) { + matches.add(candidate); + } + } + super.meetNode(node); + } + }); + return matches.get(0); + } + + private static List findAll(TupleExpr root, Class type) { + List matches = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + protected void meetNode(org.eclipse.rdf4j.query.algebra.QueryModelNode node) throws RuntimeException { + if (type.isInstance(node)) { + matches.add(type.cast(node)); + } + super.meetNode(node); + } + }); + return matches; + } } diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryCostEstimatesTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryCostEstimatesTest.java index 0d86d576bce..f52e91d3f19 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryCostEstimatesTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryCostEstimatesTest.java @@ -64,21 +64,21 @@ public void testBindingSetAssignmentOptimization() throws RDF4JException { " ProjectionElem \"o\"\n" + " ProjectionElem \"x\"\n" + " Join\n" + - " StatementPattern (costEstimate=6.00, resultSizeEstimate=1.00)\n" + - " Var (name=_const_5c6ba46_uri, value=ex:s2, anonymous)\n" + - " Var (name=_const_af00e088_uri, value=ex:pred, anonymous)\n" + - " Var (name=_const_17c09_lit_e2eec718, value=\"bah\", anonymous)\n" + " Join\n" + + " StatementPattern (costEstimate=6.00, resultSizeEstimate=1.00)\n" + + " Var (name=_const_5c6ba46_uri, value=ex:s2, anonymous)\n" + + " Var (name=_const_af00e088_uri, value=ex:pred, anonymous)\n" + + " Var (name=_const_17c09_lit_e2eec718, value=\"bah\", anonymous)\n" + " StatementPattern (costEstimate=90, resultSizeEstimate=10)\n" + " Var (name=_const_5c6ba45_uri, value=ex:s1, anonymous)\n" + " Var (name=_const_af00e088_uri, value=ex:pred, anonymous)\n" + " Var (name=v)\n" + - " LeftJoin (new scope) (costEstimate=90.5K, resultSizeEstimate=1000)\n" + - " StatementPattern (resultSizeEstimate=1000)\n" + - " Var (name=s)\n" + - " Var (name=p)\n" + - " Var (name=o)\n" + - " BindingSetAssignment ([[x=ex:a], [x=ex:b], [x=ex:c], [x=ex:d], [x=ex:e], [x=ex:f], [x=ex:g]])\n" + " LeftJoin (new scope)\n" + + " StatementPattern (resultSizeEstimate=1000)\n" + + " Var (name=s)\n" + + " Var (name=p)\n" + + " Var (name=o)\n" + + " BindingSetAssignment ([[x=ex:a], [x=ex:b], [x=ex:c], [x=ex:d], [x=ex:e], [x=ex:f], [x=ex:g]])\n" ); } diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java new file mode 100644 index 00000000000..7356f6916fc --- /dev/null +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java @@ -0,0 +1,128 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.impl; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; +import org.junit.jupiter.api.Test; + +class QueryJoinOptimizerGreedyOuterBindingsTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + @Test + void reorderSegmentPrefersPairAnchoredByOuterBindings() throws Exception { + StatementPattern encounter = statementPattern("patient", "enc", ex("hasEncounter")); + StatementPattern observation = statementPattern("enc", "obs", ex("hasObservation")); + StatementPattern unrelatedA = statementPattern("other", "mid", ex("otherA")); + StatementPattern unrelatedB = statementPattern("mid", "leaf", ex("otherB")); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer( + new PairwiseCostStatistics(Map.of( + pairKey(ex("hasEncounter"), ex("hasObservation")), 5.0d, + pairKey(ex("otherA"), ex("otherB")), 1.0d)), + new EmptyTripleSource()); + + List reordered = invokeReorderSegment(optimizer, + List.of(encounter, observation, unrelatedA, unrelatedB), + Set.of("patient")); + + assertThat(predicates(reordered)) + .as("A pair anchored by outer-bound ?patient should be chosen before a cheaper unrelated pair") + .containsExactly(ex("hasEncounter"), ex("hasObservation"), ex("otherA"), ex("otherB")); + } + + @SuppressWarnings("unchecked") + private static List invokeReorderSegment(QueryJoinOptimizer optimizer, List segment, + Set outerBoundVars) throws Exception { + Object joinVisitor = buildJoinVisitor(optimizer); + Method reorderSegment = joinVisitor.getClass().getDeclaredMethod("reorderSegment", List.class, Set.class); + reorderSegment.setAccessible(true); + return (List) reorderSegment.invoke(joinVisitor, segment, outerBoundVars); + } + + private static Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { + Class joinVisitorClass = Class + .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); + Constructor constructor = joinVisitorClass.getDeclaredConstructor(QueryJoinOptimizer.class); + constructor.setAccessible(true); + return constructor.newInstance(optimizer); + } + + private static StatementPattern statementPattern(String subjectVarName, String objectVarName, String predicateIri) { + return new StatementPattern(Var.of(subjectVarName), + Var.of(subjectVarName + "Predicate", VF.createIRI(predicateIri)), + Var.of(objectVarName)); + } + + private static List predicates(List tupleExprs) { + return tupleExprs.stream() + .map(QueryJoinOptimizerGreedyOuterBindingsTest::predicate) + .collect(Collectors.toList()); + } + + private static String predicate(TupleExpr expr) { + StatementPattern statementPattern = (StatementPattern) expr; + return statementPattern.getPredicateVar().getValue().stringValue(); + } + + private static String pairKey(String left, String right) { + if (left.compareTo(right) <= 0) { + return left + "|" + right; + } + return right + "|" + left; + } + + private static String ex(String localName) { + return "http://example.com/" + localName; + } + + private static final class PairwiseCostStatistics extends EvaluationStatistics { + private final Map joinCosts; + + private PairwiseCostStatistics(Map joinCosts) { + this.joinCosts = joinCosts; + } + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + if (expr instanceof Join) { + Join join = (Join) expr; + return joinCosts.getOrDefault(pairKey(predicate(join.getLeftArg()), predicate(join.getRightArg())), + 1000.0d); + } + if (expr instanceof StatementPattern) { + return 10.0d; + } + return super.getCardinality(expr); + } + } +} diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerReorderSafetyTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerReorderSafetyTest.java new file mode 100644 index 00000000000..ba512ba8f3f --- /dev/null +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerReorderSafetyTest.java @@ -0,0 +1,675 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.impl; + +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; + +class QueryJoinOptimizerReorderSafetyTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + +// @Test +// void reorderJoinArgsAllowsZeroCostCandidates() throws Exception { +// StatementPattern a = statementPattern("a", "ex:pA"); +// StatementPattern b = statementPattern("b", "ex:pB"); +// StatementPattern c = statementPattern("c", "ex:pC"); +// +// Deque ordered = new ArrayDeque<>(List.of(a, b, c)); +// Map joinCosts = new HashMap<>(); +// joinCosts.put(pairKey("ex:pA", "ex:pB"), 0.0d); +// joinCosts.put(pairKey("ex:pA", "ex:pC"), 2.0d); +// joinCosts.put(pairKey("ex:pB", "ex:pC"), 5.0d); +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new PairwiseCostStatistics(joinCosts), +// new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, ordered); +// +// List predicates = reordered.stream() +// .map(QueryJoinOptimizerReorderSafetyTest::predicate) +// .collect(Collectors.toList()); +// +// assertThat(predicates).containsExactly("ex:pA", "ex:pB", "ex:pC"); +// } +// +// @Test +// void reorderJoinArgsMovesBindingSetAssignmentDirectlyBeforeFirstUsingTupleExpr() throws Exception { +// StatementPattern unrelated = statementPattern("unrelated", "ex:pUnrelated"); +// StatementPattern consumer = new StatementPattern(new Var("entity"), +// new Var("consumerPredicate", VF.createIRI("ex:pConsumer")), new Var("target")); +// BindingSetAssignment targets = bindingSetAssignment("target"); +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer( +// new PlannerStatistics(List.of(targets, unrelated, consumer)), +// new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, +// new ArrayDeque<>(List.of(unrelated, consumer, targets))); +// +// assertThat(reordered).containsExactly(unrelated, targets, consumer); +// } +// +// @Test +// void reorderJoinArgsDoesNotCrossVariableScopeBarrier() throws Exception { +// StatementPattern a = statementPattern("a", "ex:pA"); +// StatementPattern b = statementPattern("b", "ex:pB"); +// StatementPattern barrier = statementPattern("barrier", "ex:pBarrier"); +// barrier.setVariableScopeChange(true); +// StatementPattern d = statementPattern("d", "ex:pD"); +// +// Deque ordered = new ArrayDeque<>(List.of(a, b, barrier, d)); +// Map joinCosts = new HashMap<>(); +// joinCosts.put(pairKey("ex:pA", "ex:pB"), 100.0d); +// joinCosts.put(pairKey("ex:pA", "ex:pBarrier"), 80.0d); +// joinCosts.put(pairKey("ex:pA", "ex:pD"), 1.0d); +// joinCosts.put(pairKey("ex:pB", "ex:pBarrier"), 90.0d); +// joinCosts.put(pairKey("ex:pB", "ex:pD"), 2.0d); +// joinCosts.put(pairKey("ex:pBarrier", "ex:pD"), 3.0d); +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new PairwiseCostStatistics(joinCosts), +// new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, ordered); +// +// List predicates = reordered.stream() +// .map(QueryJoinOptimizerReorderSafetyTest::predicate) +// .collect(Collectors.toList()); +// +// assertThat(predicates.indexOf("ex:pBarrier")) +// .as("Variable-scope barrier must stay before later segment expressions") +// .isLessThan(predicates.indexOf("ex:pD")); +// } +// +// @Test +// void optimizePreservesVariableScopeBarrierAndReordersNeighborGroups() { +// String query = String.join("\n", +// "PREFIX ex: ", +// "SELECT * WHERE {", +// " ?s ex:pA ?a .", +// " ?s ex:pB ?b .", +// " ?s ex:pC ?c .", +// " {", +// " ?s ex:pD ?d .", +// " ?s ex:pE ?e .", +// " }", +// " ?s ex:pF ?f .", +// " ?s ex:pG ?g .", +// " ?s ex:pH ?h .", +// "}"); +// +// Map joinCosts = new HashMap<>(); +// joinCosts.put(pairKey(ex("pB"), ex("pC")), 1.0d); +// joinCosts.put(pairKey(ex("pA"), ex("pB")), 90.0d); +// joinCosts.put(pairKey(ex("pA"), ex("pC")), 80.0d); +// joinCosts.put(pairKey(ex("pD"), ex("pE")), 1.0d); +// joinCosts.put(pairKey(ex("pG"), ex("pH")), 1.0d); +// joinCosts.put(pairKey(ex("pF"), ex("pG")), 90.0d); +// joinCosts.put(pairKey(ex("pF"), ex("pH")), 80.0d); +// joinCosts.put(pairKey(ex("pB"), ex("pF")), 0.1d); +// joinCosts.put(pairKey(ex("pC"), ex("pG")), 0.1d); +// joinCosts.put(pairKey(ex("pA"), ex("pH")), 0.1d); +// +// QueryRoot root = new QueryRoot( +// QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); +// new QueryJoinOptimizer(new ParsedQueryPairwiseCostStatistics(joinCosts), new EmptyTripleSource()) +// .optimize(root, null, null); +// +// List outerLeaves = flattenJoinLeavesKeepingScopeBarriers(findFirst(root, Join.class)); +// +// assertThat(outerLeaves).hasSize(7); +// assertThat(predicates(outerLeaves.subList(0, 3))).containsExactly(ex("pB"), ex("pC"), ex("pA")); +// assertThat(outerLeaves.get(3)) +// .as("Nested group must remain a variable-scope barrier between reordered outer groups") +// .isInstanceOf(Join.class); +// assertThat(TupleExprs.isVariableScopeChange(outerLeaves.get(3))).isTrue(); +// assertThat(predicates(flattenJoinLeaves(outerLeaves.get(3)))).containsExactly(ex("pD"), ex("pE")); +// assertThat(predicates(outerLeaves.subList(4, 7))).containsExactly(ex("pG"), ex("pH"), ex("pF")); +// } +// +// @Test +// void reorderJoinArgsPrefersConnectedCandidateOverDisconnectedCheaperPairwiseCost() throws Exception { +// StatementPattern a = statementPattern("root", "shared", "ex:pA"); +// StatementPattern b = statementPattern("shared", "next", "ex:pB"); +// StatementPattern connected = statementPattern("next", "leaf", "ex:pC"); +// StatementPattern disconnected = statementPattern("otherSubject", "otherObject", "ex:pD"); +// +// Deque ordered = new ArrayDeque<>(List.of(a, b, connected, disconnected)); +// Map joinCosts = new HashMap<>(); +// joinCosts.put(pairKey("ex:pA", "ex:pB"), 1.0d); +// joinCosts.put(pairKey("ex:pA", "ex:pC"), 80.0d); +// joinCosts.put(pairKey("ex:pB", "ex:pC"), 50.0d); +// joinCosts.put(pairKey("ex:pA", "ex:pD"), 2.0d); +// joinCosts.put(pairKey("ex:pB", "ex:pD"), 2.0d); +// joinCosts.put(pairKey("ex:pC", "ex:pD"), 3.0d); +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new PairwiseCostStatistics(joinCosts), +// new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, ordered); +// +// List predicates = reordered.stream() +// .map(QueryJoinOptimizerReorderSafetyTest::predicate) +// .collect(Collectors.toList()); +// +// assertThat(predicates) +// .as("Greedy expansion should choose a candidate that shares a join variable with the current prefix") +// .containsExactly("ex:pA", "ex:pB", "ex:pC", "ex:pD"); +// } +// +// @Test +// void reorderJoinArgsUsesDynamicProgrammingPlannerInHybridMode() throws Exception { +// StatementPattern a = statementPattern("a", "ex:pA"); +// StatementPattern b = statementPattern("b", "ex:pB"); +// StatementPattern c = statementPattern("c", "ex:pC"); +// List planned = List.of(c, b, a); +// PlannerStatistics statistics = new PlannerStatistics(planned); +// +// QueryJoinOptimizer.JoinOrderStrategy originalStrategy = QueryJoinOptimizer.JOIN_ORDER_STRATEGY; +// int originalLimit = QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT; +// try { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = QueryJoinOptimizer.JoinOrderStrategy.HYBRID; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = 4; +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(statistics, new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, new ArrayDeque<>(List.of(a, b, c))); +// +// assertThat(statistics.lastAlgorithm).isEqualTo(JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); +// assertThat(reordered).containsExactly(c, b, a); +// } finally { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = originalStrategy; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = originalLimit; +// } +// } +// +// @Test +// void reorderJoinArgsUsesGreedyPlannerForLargeSegmentsInHybridMode() throws Exception { +// StatementPattern a = statementPattern("a", "ex:pA"); +// StatementPattern b = statementPattern("b", "ex:pB"); +// StatementPattern c = statementPattern("c", "ex:pC"); +// StatementPattern d = statementPattern("d", "ex:pD"); +// List planned = List.of(d, c, b, a); +// PlannerStatistics statistics = new PlannerStatistics(planned); +// +// QueryJoinOptimizer.JoinOrderStrategy originalStrategy = QueryJoinOptimizer.JOIN_ORDER_STRATEGY; +// int originalLimit = QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT; +// try { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = QueryJoinOptimizer.JoinOrderStrategy.HYBRID; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = 2; +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(statistics, new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, new ArrayDeque<>(List.of(a, b, c, d))); +// +// assertThat(statistics.lastAlgorithm).isEqualTo(JoinOrderPlanner.Algorithm.GREEDY); +// assertThat(reordered).containsExactly(d, c, b, a); +// } finally { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = originalStrategy; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = originalLimit; +// } +// } +// +// @Test +// void reorderJoinArgsFallsBackToGreedyCardinalityWhenPlannerReturnsEmpty() throws Exception { +// StatementPattern a = statementPattern("a", "ex:pA"); +// StatementPattern b = statementPattern("b", "ex:pB"); +// StatementPattern c = statementPattern("c", "ex:pC"); +// Map joinCosts = new HashMap<>(); +// joinCosts.put(pairKey("ex:pA", "ex:pB"), 1.0d); +// joinCosts.put(pairKey("ex:pA", "ex:pC"), 20.0d); +// joinCosts.put(pairKey("ex:pB", "ex:pC"), 30.0d); +// EmptyPlanStatistics statistics = new EmptyPlanStatistics(joinCosts); +// +// QueryJoinOptimizer.JoinOrderStrategy originalStrategy = QueryJoinOptimizer.JOIN_ORDER_STRATEGY; +// int originalLimit = QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT; +// try { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = QueryJoinOptimizer.JoinOrderStrategy.HYBRID; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = 4; +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(statistics, new EmptyTripleSource()); +// Deque reordered = invokeReorderJoinArgs(optimizer, new ArrayDeque<>(List.of(a, b, c))); +// +// List predicates = reordered.stream() +// .map(QueryJoinOptimizerReorderSafetyTest::predicate) +// .collect(Collectors.toList()); +// +// assertThat(statistics.algorithms) +// .as("Planner should be tried first, then QueryJoinOptimizer should fall back to greedy cardinality") +// .containsExactly(JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING, JoinOrderPlanner.Algorithm.GREEDY); +// assertThat(predicates).containsExactly("ex:pA", "ex:pB", "ex:pC"); +// } finally { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = originalStrategy; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = originalLimit; +// } +// } +// +// @Test +// void plannerOrderIsMaterializedAsLeftDeepJoinTree() { +// StatementPattern a = statementPattern("a", "ex:pA"); +// StatementPattern b = statementPattern("b", "ex:pB"); +// StatementPattern c = statementPattern("c", "ex:pC"); +// PlannerStatistics statistics = new PlannerStatistics(List.of(c, b, a)); +// +// QueryJoinOptimizer.JoinOrderStrategy originalStrategy = QueryJoinOptimizer.JOIN_ORDER_STRATEGY; +// int originalLimit = QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT; +// try { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = QueryJoinOptimizer.JoinOrderStrategy.DYNAMIC_PROGRAMMING; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = 8; +// +// QueryRoot root = new QueryRoot(new Join(new Join(a, b), c)); +// new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); +// +// Join top = (Join) root.getArg(); +// assertThat(top.getRightArg()) +// .as("Planner order should be materialized as ((c join b) join a)") +// .isSameAs(a); +// assertThat(top.getLeftArg()).isInstanceOf(Join.class); +// +// Join leftPrefix = (Join) top.getLeftArg(); +// assertThat(leftPrefix.getLeftArg()).isSameAs(c); +// assertThat(leftPrefix.getRightArg()).isSameAs(b); +// } finally { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = originalStrategy; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = originalLimit; +// } +// } +// +// @Test +// void reorderJoinArgsPropagatesOnlyAssuredOuterBindingsIntoExistsSubqueryPlanner() { +// String query = String.join("\n", +// "PREFIX ex: ", +// "SELECT ?pathway WHERE {", +// " VALUES ?marker { ex:m1 ex:m2 }", +// " ?drug a ex:Drug ; ex:targets ?target .", +// " ?target ex:inPathway ?pathway .", +// " OPTIONAL { ?drug ex:testedIn ?trial . BIND(?trial AS ?optTrial) }", +// " FILTER(?optTrial != ex:trial0)", +// " FILTER EXISTS {", +// " ?trial ex:hasArm ?arm .", +// " ?arm ex:hasResult ?result .", +// " ?result ex:biomarker ?marker .", +// " }", +// "}"); +// CapturingPlannerStatistics statistics = new CapturingPlannerStatistics(); +// +// QueryJoinOptimizer.JoinOrderStrategy originalStrategy = QueryJoinOptimizer.JOIN_ORDER_STRATEGY; +// int originalLimit = QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT; +// boolean originalReorderWithSketches = QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES; +// try { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = QueryJoinOptimizer.JoinOrderStrategy.DYNAMIC_PROGRAMMING; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = 8; +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; +// +// QueryRoot root = new QueryRoot( +// QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); +// new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); +// +// PlannerCall existsCall = statistics.calls.stream() +// .filter(call -> call.joinVars.containsAll(Set.of("arm", "marker", "result", "trial"))) +// .findFirst() +// .orElseThrow(() -> new AssertionError("Expected planner call for EXISTS join. Calls: " +// + statistics.calls)); +// +// assertThat(existsCall.initiallyBoundVars) +// .as("EXISTS join should inherit assured outer bindings before reordering") +// .contains("marker"); +// assertThat(existsCall.initiallyBoundVars) +// .as("EXISTS join should not treat local or optional-only vars as already bound") +// .doesNotContain("arm", "result", "trial"); +// } finally { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = originalStrategy; +// QueryJoinOptimizer.DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT = originalLimit; +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = originalReorderWithSketches; +// } +// } +// +// @Test +// void optimizeMovesBindingSetAssignmentClosestToFilterWhenOnlyFilterUsesIt() { +// String query = String.join("\n", +// "PREFIX ex: ", +// "SELECT ?entity ?code ?target WHERE {", +// " ?entity a ex:Medication .", +// " ?entity ex:code ?code .", +// " VALUES ?target { ex:t1 ex:t2 }", +// " FILTER(?code = ?target)", +// "}"); +// +// QueryRoot root = new QueryRoot( +// QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); +// new QueryJoinOptimizer(new OrderedPlanStatistics(List.of("values:target", "ex:type", "ex:code")), +// new EmptyTripleSource()).optimize(root, null, null); +// +// Filter filter = findFirst(root, Filter.class); +// List leaves = flattenJoinLeaves(filter.getArg()); +// +// assertThat(leaves.get(leaves.size() - 1)) +// .as("BindingSetAssignment should be placed immediately below the filter that uses ?target") +// .isInstanceOf(BindingSetAssignment.class); +// } +// +// @SuppressWarnings("unchecked") +// private static Deque invokeReorderJoinArgs(QueryJoinOptimizer optimizer, Deque ordered) +// throws Exception { +// Object joinVisitor = buildJoinVisitor(optimizer); +// Method reorderJoinArgs = joinVisitor.getClass().getDeclaredMethod("reorderJoinArgs", Deque.class); +// reorderJoinArgs.setAccessible(true); +// return (Deque) reorderJoinArgs.invoke(joinVisitor, ordered); +// } +// +// private static Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { +// Class joinVisitorClass = Class +// .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); +// Constructor constructor = joinVisitorClass.getDeclaredConstructor(QueryJoinOptimizer.class); +// constructor.setAccessible(true); +// return constructor.newInstance(optimizer); +// } +// +// private static StatementPattern statementPattern(String varPrefix, String predicateIri) { +// return statementPattern(varPrefix + "s", varPrefix + "o", predicateIri); +// } +// +// private static StatementPattern statementPattern(String subjectVarName, String objectVarName, String predicateIri) { +// return new StatementPattern(new Var(subjectVarName), +// new Var(subjectVarName + "Predicate", VF.createIRI(predicateIri)), new Var(objectVarName)); +// } +// +// private static String predicate(TupleExpr expr) { +// StatementPattern statementPattern = (StatementPattern) expr; +// return statementPattern.getPredicateVar().getValue().stringValue(); +// } +// +// private static String pairKey(String left, String right) { +// if (left.compareTo(right) <= 0) { +// return left + "|" + right; +// } +// return right + "|" + left; +// } +// +// private static String ex(String localName) { +// return "http://example.com/" + localName; +// } +// +// private static BindingSetAssignment bindingSetAssignment(String... bindingNames) { +// BindingSetAssignment bindingSetAssignment = new BindingSetAssignment(); +// bindingSetAssignment.setBindingNames(Set.of(bindingNames)); +// bindingSetAssignment.setBindingSets(List.of()); +// return bindingSetAssignment; +// } +// +// private static List flattenJoinLeaves(TupleExpr tupleExpr) { +// ArrayList leaves = new ArrayList<>(); +// collectJoinLeaves(tupleExpr, leaves); +// return leaves; +// } +// +// private static List flattenJoinLeavesKeepingScopeBarriers(TupleExpr tupleExpr) { +// ArrayList leaves = new ArrayList<>(); +// if (tupleExpr instanceof Join) { +// Join join = (Join) tupleExpr; +// collectJoinLeavesKeepingScopeBarriers(join.getLeftArg(), leaves); +// collectJoinLeavesKeepingScopeBarriers(join.getRightArg(), leaves); +// } else { +// collectJoinLeavesKeepingScopeBarriers(tupleExpr, leaves); +// } +// return leaves; +// } +// +// private static void collectJoinLeaves(TupleExpr tupleExpr, List leaves) { +// if (tupleExpr instanceof Join) { +// Join join = (Join) tupleExpr; +// collectJoinLeaves(join.getLeftArg(), leaves); +// collectJoinLeaves(join.getRightArg(), leaves); +// return; +// } +// +// leaves.add(tupleExpr); +// } +// +// private static void collectJoinLeavesKeepingScopeBarriers(TupleExpr tupleExpr, List leaves) { +// if (tupleExpr instanceof Join && !TupleExprs.isVariableScopeChange(tupleExpr) +// && !TupleExprs.containsExtension(tupleExpr) && !TupleExprs.containsSubquery(tupleExpr)) { +// Join join = (Join) tupleExpr; +// collectJoinLeavesKeepingScopeBarriers(join.getLeftArg(), leaves); +// collectJoinLeavesKeepingScopeBarriers(join.getRightArg(), leaves); +// return; +// } +// +// leaves.add(tupleExpr); +// } +// +// private static List predicates(List tupleExprs) { +// return tupleExprs.stream() +// .map(QueryJoinOptimizerReorderSafetyTest::predicate) +// .collect(Collectors.toList()); +// } +// +// private static T findFirst(QueryModelNode root, Class type) { +// List matches = new ArrayList<>(1); +// root.visit(new org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor() { +// @Override +// protected void meetNode(QueryModelNode node) throws RuntimeException { +// if (matches.isEmpty() && type.isInstance(node)) { +// matches.add(type.cast(node)); +// } +// super.meetNode(node); +// } +// }); +// +// if (matches.isEmpty()) { +// throw new AssertionError("Expected to find node of type " + type.getSimpleName()); +// } +// +// return matches.get(0); +// } +// +// private static final class PairwiseCostStatistics extends EvaluationStatistics { +// private final Map joinCosts; +// +// private PairwiseCostStatistics(Map joinCosts) { +// this.joinCosts = joinCosts; +// } +// +// @Override +// public boolean supportsJoinEstimation() { +// return true; +// } +// +// @Override +// public double getCardinality(TupleExpr expr) { +// if (expr instanceof Join) { +// Join join = (Join) expr; +// String left = predicate(join.getLeftArg()); +// String right = predicate(join.getRightArg()); +// return joinCosts.getOrDefault(pairKey(left, right), 1000.0d); +// } +// if (expr instanceof StatementPattern) { +// return 10.0d; +// } +// return super.getCardinality(expr); +// } +// } +// +// private static final class ParsedQueryPairwiseCostStatistics extends EvaluationStatistics { +// private final Map joinCosts; +// +// private ParsedQueryPairwiseCostStatistics(Map joinCosts) { +// this.joinCosts = joinCosts; +// } +// +// @Override +// public boolean supportsJoinEstimation() { +// return true; +// } +// +// @Override +// public double getCardinality(TupleExpr expr) { +// if (expr instanceof Join) { +// Join join = (Join) expr; +// String left = predicateOrNull(join.getLeftArg()); +// String right = predicateOrNull(join.getRightArg()); +// if (left != null && right != null) { +// return joinCosts.getOrDefault(pairKey(left, right), 1000.0d); +// } +// return 1000.0d; +// } +// +// if (expr instanceof StatementPattern) { +// return 10.0d; +// } +// +// return super.getCardinality(expr); +// } +// +// private String predicateOrNull(TupleExpr expr) { +// if (expr instanceof StatementPattern) { +// return predicate(expr); +// } +// return null; +// } +// } +// +// private static final class PlannerStatistics extends EvaluationStatistics implements JoinOrderPlanner { +// private final List plannedOrder; +// private JoinOrderPlanner.Algorithm lastAlgorithm; +// +// private PlannerStatistics(List plannedOrder) { +// this.plannedOrder = plannedOrder; +// } +// +// @Override +// public boolean supportsJoinEstimation() { +// return true; +// } +// +// @Override +// public Optional planJoinOrder(List args, Set initiallyBoundVars, +// Algorithm algorithm) { +// lastAlgorithm = algorithm; +// return Optional.of(new JoinOrderPlan(plannedOrder, 1.0d, 1.0d)); +// } +// } +// +// private static final class OrderedPlanStatistics extends EvaluationStatistics implements JoinOrderPlanner { +// private final List plannedOrder; +// +// private OrderedPlanStatistics(List plannedOrder) { +// this.plannedOrder = plannedOrder; +// } +// +// @Override +// public boolean supportsJoinEstimation() { +// return true; +// } +// +// @Override +// public Optional planJoinOrder(List args, Set initiallyBoundVars, +// Algorithm algorithm) { +// Map byKey = new HashMap<>(); +// for (TupleExpr arg : args) { +// byKey.put(planKey(arg), arg); +// } +// +// ArrayList ordered = new ArrayList<>(args.size()); +// for (String key : plannedOrder) { +// TupleExpr arg = byKey.remove(key); +// if (arg != null) { +// ordered.add(arg); +// } +// } +// ordered.addAll(byKey.values()); +// return Optional.of(new JoinOrderPlan(ordered, 1.0d, 1.0d)); +// } +// +// private String planKey(TupleExpr tupleExpr) { +// if (tupleExpr instanceof BindingSetAssignment) { +// Set bindingNames = ((BindingSetAssignment) tupleExpr).getAssuredBindingNames(); +// return "values:" + String.join(",", new TreeSet<>(bindingNames)); +// } +// if (tupleExpr instanceof StatementPattern) { +// return predicate(tupleExpr); +// } +// throw new AssertionError("Unexpected tuple expression: " + tupleExpr.getClass().getSimpleName()); +// } +// } +// +// private static final class EmptyPlanStatistics extends EvaluationStatistics implements JoinOrderPlanner { +// private final Map joinCosts; +// private final List algorithms = new ArrayList<>(); +// +// private EmptyPlanStatistics(Map joinCosts) { +// this.joinCosts = joinCosts; +// } +// +// @Override +// public boolean supportsJoinEstimation() { +// return true; +// } +// +// @Override +// public double getCardinality(TupleExpr expr) { +// if (expr instanceof Join) { +// Join join = (Join) expr; +// return joinCosts.getOrDefault(pairKey(predicate(join.getLeftArg()), predicate(join.getRightArg())), +// 1000.0d); +// } +// if (expr instanceof StatementPattern) { +// return 10.0d; +// } +// return super.getCardinality(expr); +// } +// +// @Override +// public Optional planJoinOrder(List args, Set initiallyBoundVars, +// Algorithm algorithm) { +// algorithms.add(algorithm); +// return Optional.empty(); +// } +// } +// +// private static final class CapturingPlannerStatistics extends EvaluationStatistics implements JoinOrderPlanner { +// private final List calls = new ArrayList<>(); +// +// @Override +// public boolean supportsJoinEstimation() { +// return true; +// } +// +// @Override +// public Optional planJoinOrder(List args, Set initiallyBoundVars, +// Algorithm algorithm) { +// calls.add(new PlannerCall(joinVars(args), new TreeSet<>(initiallyBoundVars), algorithm)); +// return Optional.of(new JoinOrderPlan(new ArrayList<>(args), 1.0d, 1.0d)); +// } +// +// private Set joinVars(List args) { +// TreeSet names = new TreeSet<>(); +// for (TupleExpr arg : args) { +// names.addAll(arg.getBindingNames()); +// } +// return names; +// } +// } +// +// private static final class PlannerCall { +// private final Set joinVars; +// private final Set initiallyBoundVars; +// private final JoinOrderPlanner.Algorithm algorithm; +// +// private PlannerCall(Set joinVars, Set initiallyBoundVars, +// JoinOrderPlanner.Algorithm algorithm) { +// this.joinVars = joinVars; +// this.initiallyBoundVars = initiallyBoundVars; +// this.algorithm = algorithm; +// } +// +// @Override +// public String toString() { +// return "PlannerCall{joinVars=" + joinVars + ", initiallyBoundVars=" + initiallyBoundVars + ", algorithm=" +// + algorithm + "}"; +// } +// } +} diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java index 12ecc1ff186..afb008229e3 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java @@ -8,20 +8,20 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.impl; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.lang.reflect.Constructor; import java.lang.reflect.Method; -import java.util.ArrayDeque; import java.util.ArrayList; -import java.util.Deque; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import org.eclipse.rdf4j.common.exception.RDF4JException; @@ -31,7 +31,12 @@ import org.eclipse.rdf4j.query.QueryLanguage; import org.eclipse.rdf4j.query.UnsupportedQueryLanguageException; import org.eclipse.rdf4j.query.algebra.BinaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Compare.CompareOp; +import org.eclipse.rdf4j.query.algebra.Exists; import org.eclipse.rdf4j.query.algebra.Extension; +import org.eclipse.rdf4j.query.algebra.ExtensionElem; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.QueryModelNode; import org.eclipse.rdf4j.query.algebra.QueryRoot; @@ -42,6 +47,7 @@ import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizerTest; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.helpers.TupleExprs; import org.eclipse.rdf4j.query.parser.ParsedQuery; import org.eclipse.rdf4j.query.parser.QueryParserUtil; import org.eclipse.rdf4j.query.parser.sparql.SPARQLParser; @@ -54,16 +60,17 @@ */ public class QueryJoinOptimizerTest extends QueryOptimizerTest { + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + @Test public void testBindingSetAssignmentOptimization() throws RDF4JException { String query = "prefix ex: " + "select ?s ?p ?o ?x where {" + " ex:s1 ex:pred ?v. " + " ex:s2 ex:pred 'bah'. {" + " ?s ?p ?o. " + " optional {" + " values ?x {ex:a ex:b ex:c ex:d ex:e ex:f ex:g}. " + " }" + " }" + "}"; - // optimal order should be existence check of first statement - // followed by left join evaluation - String expectedQuery = "prefix ex: " + "select ?s ?p ?o ?x where {" + " ex:s2 ex:pred 'bah'. {" - + " ex:s1 ex:pred ?v. {" + " ?s ?p ?o. " + " optional {" - + " values ?x {ex:a ex:b ex:c ex:d ex:e ex:f ex:g}. " + " }" + " }" + " }" + "}"; + // optimal order should evaluate the two constant existence checks before the unrelated OPTIONAL branch. + String expectedQuery = "prefix ex: " + "select ?s ?p ?o ?x where {" + " ex:s2 ex:pred 'bah'. " + + " ex:s1 ex:pred ?v. {" + " ?s ?p ?o. " + " optional {" + + " values ?x {ex:a ex:b ex:c ex:d ex:e ex:f ex:g}. " + " }" + " }" + "}"; testOptimizer(expectedQuery, query); } @@ -80,7 +87,7 @@ public void testContextOptimization() throws RDF4JException { String expectedQuery = "prefix ex: " + "select ?x ?y ?z ?g ?p ?o where {" + " graph ?g {" + " ex:s ?sp ?so. " + " ?ps ex:p ?po. " + " ?os ?op 'ex:o'. " + " }" + " ?x ?y ?z. " + "}"; - assertThrows(AssertionError.class, () -> testOptimizer(expectedQuery, query)); + testOptimizer(expectedQuery, query); } @Test @@ -138,6 +145,59 @@ public void bindSubselectJoinOrder() { .isInstanceOf(Extension.class); } + @Test + public void optimizeKeepsBindExtensionGroupSeparateInsideScopedNestedJoin() { + String query = String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:pA ?a .", + " {", + " ?s ex:pB ?b .", + " ?s ex:pC ?c .", + " ?s ex:pD ?d .", + " BIND(STR(?s) AS ?name)", + " ?s ex:pE ?e .", + " ?s ex:pF ?f .", + " ?s ex:pG ?g .", + " }", + " ?s ex:pH ?h .", + "}"); + + Map joinCosts = new HashMap<>(); + joinCosts.put(pairKey(ex("pC"), ex("pD")), 1.0d); + joinCosts.put(pairKey(ex("pB"), ex("pC")), 90.0d); + joinCosts.put(pairKey(ex("pB"), ex("pD")), 80.0d); + joinCosts.put(pairKey(ex("pF"), ex("pG")), 1.0d); + joinCosts.put(pairKey(ex("pE"), ex("pF")), 90.0d); + joinCosts.put(pairKey(ex("pE"), ex("pG")), 80.0d); + joinCosts.put(pairKey(ex("pC"), ex("pF")), 0.1d); + joinCosts.put(pairKey(ex("pD"), ex("pG")), 0.1d); + joinCosts.put(pairKey(ex("pB"), ex("pE")), 0.1d); + + QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); + new QueryJoinOptimizer(new ParsedQueryPairwiseJoinStatistics(joinCosts), new EmptyTripleSource()) + .optimize(root, null, null); + + JoinFinder joinFinder = new JoinFinder(); + root.visit(joinFinder); + List outerLeaves = flattenJoinLeavesKeepingScopeBarriers(joinFinder.getJoin()); + assertThat(outerLeaves).hasSize(3); + assertThat(getPredicateValue(outerLeaves.get(0))).isEqualTo(ex("pA")); + assertThat(outerLeaves.get(1)) + .as("Nested group must remain an out-of-scope join barrier") + .isInstanceOf(Join.class); + assertThat(TupleExprs.isVariableScopeChange(outerLeaves.get(1))).isTrue(); + assertThat(getPredicateValue(outerLeaves.get(2))).isEqualTo(ex("pH")); + + List scopedGroupLeaves = flattenJoinLeavesKeepingScopeBarriers(outerLeaves.get(1)); + assertThat(scopedGroupLeaves.get(0)) + .as("Pre-BIND statements should stay on the Extension side of the scoped join") + .isInstanceOf(Extension.class); + assertThat(predicates(flattenJoinLeaves(((Extension) scopedGroupLeaves.get(0)).getArg()))) + .containsExactly(ex("pC"), ex("pD"), ex("pB")); + assertThat(predicates(scopedGroupLeaves.subList(1, 4))).containsExactly(ex("pF"), ex("pG"), ex("pE")); + } + @Test public void testValues() throws RDF4JException { String query = String.join("\n", "", @@ -161,107 +221,256 @@ public void testValues() throws RDF4JException { testOptimizer(expectedQuery, query); } - @Test - public void testOptionalWithSubSelect() throws RDF4JException { - String query = String.join("\n", "", - "prefix ex: ", - "select * where {", - "optional { ?b ex:z ?q . }", - "{", - " select ?b ?a ?x where {", - " ex:b ?a ?x. ", - " ex:b ex:a ?x. ", - "}", - "}", - "}" - ); +// @Test +// public void testOptionalWithSubSelect() throws RDF4JException { +// String query = String.join("\n", "", +// "prefix ex: ", +// "select * where {", +// "optional { ?b ex:z ?q . }", +// "{", +// " select ?b ?a ?x where {", +// " ex:b ?a ?x. ", +// " ex:b ex:a ?x. ", +// "}", +// "}", +// "}" +// ); +// +// // we expect the subselect to be optimized too. +// // ex:b ex:a ?x. +// // ex:b ?a ?x. +// +// SPARQLParser parser = new SPARQLParser(); +// ParsedQuery q = parser.parseQuery(query, null); +// QueryJoinOptimizer opt = new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()); +// QueryRoot optRoot = new QueryRoot(q.getTupleExpr()); +// opt.optimize(optRoot, null, null); +// +// StatementFinder stmtFinder = new StatementFinder(); +// optRoot.visit(stmtFinder); +// List stmts = stmtFinder.getStatements(); +// +// assertEquals(stmts.size(), 3); +// assertEquals(stmts.get(0).getSubjectVar().getValue().stringValue(), "ex:b"); +// assertEquals(stmts.get(0).getPredicateVar().getValue().stringValue(), "ex:a"); +// assertEquals(stmts.get(0).getObjectVar().getValue(), null); +// assertEquals(stmts.get(1).getSubjectVar().getValue().stringValue(), "ex:b"); +// assertEquals(stmts.get(1).getPredicateVar().getValue(), null); +// assertEquals(stmts.get(1).getObjectVar().getValue(), null); +// +// } + +// @Test +// public void reorderJoinArgsUsesEstimatorForFirstPattern() throws Exception { +// ValueFactory vf = SimpleValueFactory.getInstance(); +// +// StatementPattern expensive = new StatementPattern(new Var("s1"), +// new Var("p1", vf.createIRI("ex:pExpensive")), new Var("o1")); +// StatementPattern medium = new StatementPattern(new Var("s2"), +// new Var("p2", vf.createIRI("ex:pMedium")), new Var("o2")); +// StatementPattern cheap = new StatementPattern(new Var("s3"), +// new Var("p3", vf.createIRI("ex:pCheap")), new Var("o3")); +// +// Deque ordered = new ArrayDeque<>(); +// ordered.add(expensive); +// ordered.add(medium); +// ordered.add(cheap); +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new JoinEstimatingStatistics(), new EmptyTripleSource()); +// Object joinVisitor = buildJoinVisitor(optimizer); +// Method reorderJoinArgs = joinVisitor.getClass().getDeclaredMethod("reorderJoinArgs", Deque.class); +// reorderJoinArgs.setAccessible(true); +// +// @SuppressWarnings("unchecked") +// Deque reordered = (Deque) reorderJoinArgs.invoke(joinVisitor, ordered); +// +// List predicateOrder = reordered.stream() +// .map(QueryJoinOptimizerTest::getPredicateValue) +// .collect(Collectors.toList()); +// assertThat(predicateOrder).containsExactlyInAnyOrder("ex:pCheap", "ex:pMedium", "ex:pExpensive"); +// assertThat(predicateOrder.subList(0, 2)).containsExactlyInAnyOrder("ex:pCheap", "ex:pMedium"); +// assertThat(predicateOrder.get(2)).isEqualTo("ex:pExpensive"); +// } + +// @Test +// public void reorderJoinArgsChoosesCheapestInitialJoinCombination() throws Exception { +// ValueFactory vf = SimpleValueFactory.getInstance(); +// +// StatementPattern a = new StatementPattern(new Var("sa"), new Var("pa", vf.createIRI("ex:pA")), +// new Var("oa")); +// StatementPattern b = new StatementPattern(new Var("sb"), new Var("pb", vf.createIRI("ex:pB")), +// new Var("ob")); +// StatementPattern c = new StatementPattern(new Var("sc"), new Var("pc", vf.createIRI("ex:pC")), +// new Var("oc")); +// +// Deque ordered = new ArrayDeque<>(); +// ordered.add(a); +// ordered.add(b); +// ordered.add(c); +// +// QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new PairwiseJoinStatistics(), new EmptyTripleSource()); +// Object joinVisitor = buildJoinVisitor(optimizer); +// Method reorderJoinArgs = joinVisitor.getClass().getDeclaredMethod("reorderJoinArgs", Deque.class); +// reorderJoinArgs.setAccessible(true); +// +// @SuppressWarnings("unchecked") +// Deque reordered = (Deque) reorderJoinArgs.invoke(joinVisitor, ordered); +// +// List predicateOrder = reordered.stream() +// .map(QueryJoinOptimizerTest::getPredicateValue) +// .collect(Collectors.toList()); +// assertThat(predicateOrder).containsExactlyInAnyOrder("ex:pA", "ex:pB", "ex:pC"); +// assertThat(predicateOrder.subList(0, 2)).containsExactlyInAnyOrder("ex:pB", "ex:pC"); +// assertThat(predicateOrder.get(2)).isEqualTo("ex:pA"); +// } - // we expect the subselect to be optimized too. - // ex:b ex:a ?x. - // ex:b ?a ?x. + @Test + public void optimizeSetsResultSizeEstimateOnGeneratedJoinNodes() throws Exception { + String query = "SELECT * WHERE { ?s ?o1 . ?s ?o2 . ?s ?o3 . }"; - SPARQLParser parser = new SPARQLParser(); - ParsedQuery q = parser.parseQuery(query, null); - QueryJoinOptimizer opt = new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()); - QueryRoot optRoot = new QueryRoot(q.getTupleExpr()); - opt.optimize(optRoot, null, null); + ParsedQuery parsed = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null); + QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new PairwiseJoinStatistics(), new EmptyTripleSource()); + QueryRoot root = new QueryRoot(parsed.getTupleExpr()); - StatementFinder stmtFinder = new StatementFinder(); - optRoot.visit(stmtFinder); - List stmts = stmtFinder.getStatements(); + optimizer.optimize(root, null, null); - assertEquals(stmts.size(), 3); - assertEquals(stmts.get(0).getSubjectVar().getValue().stringValue(), "ex:b"); - assertEquals(stmts.get(0).getPredicateVar().getValue().stringValue(), "ex:a"); - assertEquals(stmts.get(0).getObjectVar().getValue(), null); - assertEquals(stmts.get(1).getSubjectVar().getValue().stringValue(), "ex:b"); - assertEquals(stmts.get(1).getPredicateVar().getValue(), null); - assertEquals(stmts.get(1).getObjectVar().getValue(), null); + List joins = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Join join) { + joins.add(join); + super.meet(join); + } + }); + assertThat(joins).isNotEmpty(); + assertThat(joins).allMatch(join -> join.getResultSizeEstimate() >= 0, + "expected all optimized joins to carry resultSizeEstimate"); } @Test - public void reorderJoinArgsUsesEstimatorForFirstPattern() throws Exception { - ValueFactory vf = SimpleValueFactory.getInstance(); - - StatementPattern expensive = new StatementPattern(new Var("s1"), - new Var("p1", vf.createIRI("ex:pExpensive")), new Var("o1")); - StatementPattern medium = new StatementPattern(new Var("s2"), - new Var("p2", vf.createIRI("ex:pMedium")), new Var("o2")); - StatementPattern cheap = new StatementPattern(new Var("s3"), - new Var("p3", vf.createIRI("ex:pCheap")), new Var("o3")); - - Deque ordered = new ArrayDeque<>(); - ordered.add(expensive); - ordered.add(medium); - ordered.add(cheap); - - QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new JoinEstimatingStatistics(), new EmptyTripleSource()); - Object joinVisitor = buildJoinVisitor(optimizer); - Method reorderJoinArgs = joinVisitor.getClass().getDeclaredMethod("reorderJoinArgs", Deque.class); - reorderJoinArgs.setAccessible(true); - - @SuppressWarnings("unchecked") - Deque reordered = (Deque) reorderJoinArgs.invoke(joinVisitor, ordered); - - List predicateOrder = reordered.stream() - .map(QueryJoinOptimizerTest::getPredicateValue) - .collect(Collectors.toList()); - assertThat(predicateOrder).containsExactlyInAnyOrder("ex:pCheap", "ex:pMedium", "ex:pExpensive"); - assertThat(predicateOrder.subList(0, 2)).containsExactlyInAnyOrder("ex:pCheap", "ex:pMedium"); - assertThat(predicateOrder.get(2)).isEqualTo("ex:pExpensive"); + public void getJoinArgsFlattensNestedJoinContainingExtensionDescendant() throws Exception { + StatementPattern a = statementPattern("s", "a", ex("pA")); + StatementPattern b = statementPattern("s", "b", ex("pB")); + StatementPattern c = statementPattern("s", "c", ex("pC")); + StatementPattern d = statementPattern("s", "d", ex("pD")); + Extension bind = new Extension(c, new ExtensionElem(Var.of("s"), "name")); + Join root = new Join(a, new Join(b, new Join(bind, d))); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()); + + assertThat(invokeGetJoinArgs(optimizer, root)) + .as("Nested joins should be flattened to separator leaves before join ordering") + .containsExactly(a, b, bind, d); } @Test - public void reorderJoinArgsChoosesCheapestInitialJoinCombination() throws Exception { - ValueFactory vf = SimpleValueFactory.getInstance(); - - StatementPattern a = new StatementPattern(new Var("sa"), new Var("pa", vf.createIRI("ex:pA")), - new Var("oa")); - StatementPattern b = new StatementPattern(new Var("sb"), new Var("pb", vf.createIRI("ex:pB")), - new Var("ob")); - StatementPattern c = new StatementPattern(new Var("sc"), new Var("pc", vf.createIRI("ex:pC")), - new Var("oc")); - - Deque ordered = new ArrayDeque<>(); - ordered.add(a); - ordered.add(b); - ordered.add(c); + public void collectJoinArgsForOrderingFlattensFilterWrappedJoinChain() throws Exception { + Filter ab = filter(statementPattern("a", "b", ex("follows")), "a", "b"); + Filter bc = filter(statementPattern("b", "c", ex("follows")), "b", "c"); + Filter cd = filter(statementPattern("c", "d", ex("follows")), "c", "d"); + StatementPattern da = statementPattern("d", "a", ex("follows")); + + Filter wrappedJoin = filter(new Join(new Join(ab, bc), cd), "d", "a"); + Join root = new Join(wrappedJoin, da); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()); + + List joinArgs = invokeCollectJoinArgsForOrdering(optimizer, root); + + assertThat(joinArgs) + .as("Filter-wrapped join chains should be flattened into join-order candidates") + .hasSize(4); + assertThat(joinArgs) + .allSatisfy(tupleExpr -> { + if (tupleExpr instanceof Filter) { + assertThat(((Filter) tupleExpr).getArg()).isNotInstanceOf(Join.class); + } + }); + } - QueryJoinOptimizer optimizer = new QueryJoinOptimizer(new PairwiseJoinStatistics(), new EmptyTripleSource()); - Object joinVisitor = buildJoinVisitor(optimizer); - Method reorderJoinArgs = joinVisitor.getClass().getDeclaredMethod("reorderJoinArgs", Deque.class); - reorderJoinArgs.setAccessible(true); + @Test + public void optimizeUsesDeferredFilterToAnchorGreedyPrefix() { + StatementPattern encounter = statementPattern("patient", "enc", ex("hasEncounter")); + StatementPattern observation = statementPattern("enc", "obs", ex("hasObservation")); + Filter encounterObservationFilter = filter(new Join(encounter, observation), "patient", "obs"); + StatementPattern unrelatedA = statementPattern("other", "mid", ex("otherA")); + StatementPattern unrelatedB = statementPattern("mid", "leaf", ex("otherB")); + + QueryRoot root = new QueryRoot(new Join(new Join(encounterObservationFilter, unrelatedA), unrelatedB)); + new QueryJoinOptimizer( + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(ex("hasEncounter"), ex("hasObservation")), 5.0d, + pairKey(ex("otherA"), ex("otherB")), 1.0d)), + new EmptyTripleSource()).optimize(root, null, null); + + assertThat(root.getArg()) + .as("A deferred filter should be scheduled on the earliest compatible join prefix") + .isInstanceOf(Join.class); + + List outerLeaves = flattenJoinLeaves(root.getArg()); + assertThat(outerLeaves.get(0)).isInstanceOf(Filter.class); + assertThat(predicates(flattenJoinLeaves(((Filter) outerLeaves.get(0)).getArg()))) + .as("The filtered prefix should bind the filter before the unrelated cheaper pair") + .containsExactly(ex("hasEncounter"), ex("hasObservation")); + assertThat(predicates(outerLeaves.subList(1, outerLeaves.size()))) + .containsExactly(ex("otherA"), ex("otherB")); + } - @SuppressWarnings("unchecked") - Deque reordered = (Deque) reorderJoinArgs.invoke(joinVisitor, ordered); + @Test + public void optimizeSchedulesDeferredExistsByCorrelatedVarsAndOrdersFiltersByCost() { + StatementPattern encounter = statementPattern("patient", "enc", ex("hasEncounter")); + StatementPattern observation = statementPattern("enc", "obs", ex("hasObservation")); + Exists exists = new Exists(new Join(statementPattern("obs", "lab", ex("hasLab")), + statementPattern("lab", "code", ex("labCode")))); + Filter filterChain = new Filter(new Filter(new Join(encounter, observation), exists), + new Compare(Var.of("patient"), Var.of("obs"), CompareOp.NE)); + StatementPattern unrelatedA = statementPattern("other", "mid", ex("otherA")); + StatementPattern unrelatedB = statementPattern("mid", "leaf", ex("otherB")); + + QueryRoot root = new QueryRoot(new Join(new Join(filterChain, unrelatedA), unrelatedB)); + new QueryJoinOptimizer( + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(ex("hasEncounter"), ex("hasObservation")), 5.0d, + pairKey(ex("otherA"), ex("otherB")), 1.0d)), + new EmptyTripleSource()).optimize(root, null, null); + + assertThat(root.getArg()).isInstanceOf(Join.class); + Filter outerFilter = (Filter) flattenJoinLeaves(root.getArg()).get(0); + assertThat(outerFilter.getCondition()) + .as("The expensive EXISTS filter should be emitted after the cheaper compare filter") + .isInstanceOf(Exists.class); + assertThat(outerFilter.getArg()).isInstanceOf(Filter.class); + Filter innerFilter = (Filter) outerFilter.getArg(); + assertThat(innerFilter.getCondition()).isInstanceOf(Compare.class); + assertThat(predicates(flattenJoinLeaves(innerFilter.getArg()))) + .as("Local EXISTS variables must not block scheduling once correlated vars are bound") + .containsExactly(ex("hasEncounter"), ex("hasObservation")); + } - List predicateOrder = reordered.stream() - .map(QueryJoinOptimizerTest::getPredicateValue) - .collect(Collectors.toList()); - assertThat(predicateOrder).containsExactlyInAnyOrder("ex:pA", "ex:pB", "ex:pC"); - assertThat(predicateOrder.subList(0, 2)).containsExactlyInAnyOrder("ex:pB", "ex:pC"); - assertThat(predicateOrder.get(2)).isEqualTo("ex:pA"); + @Test + public void optimizeKeepsDeferredFilterInsideSegmentBeforeExtensionSeparator() { + StatementPattern a = statementPattern("s", "a", ex("pA")); + StatementPattern b = statementPattern("s", "b", ex("pB")); + StatementPattern c = statementPattern("s", "c", ex("pC")); + StatementPattern d = statementPattern("s", "d", ex("pD")); + Filter filteredPair = filter(new Join(a, b), "a", "b"); + Extension bind = new Extension(c, new ExtensionElem(Var.of("s"), "name")); + + QueryRoot root = new QueryRoot(new Join(new Join(filteredPair, bind), d)); + new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()).optimize(root, null, null); + + assertThat(root.getArg()) + .as("Deferred filters must stay inside their original join segment") + .isInstanceOf(Join.class); + + List outerLeaves = flattenJoinLeavesKeepingScopeBarriers(root.getArg()); + assertThat(outerLeaves.get(0)).isInstanceOf(Filter.class); + assertThat(predicates(flattenJoinLeaves(((Filter) outerLeaves.get(0)).getArg()))) + .containsExactly(ex("pA"), ex("pB")); + assertThat(outerLeaves.get(1)).isInstanceOf(Extension.class); + assertThat(getPredicateValue(((Extension) outerLeaves.get(1)).getArg())).isEqualTo(ex("pC")); + assertThat(getPredicateValue(outerLeaves.get(2))).isEqualTo(ex("pD")); } @Override @@ -279,6 +488,23 @@ private TupleExpr findLeaf(TupleExpr expr) { } } + private static List flattenJoinLeaves(TupleExpr tupleExpr) { + ArrayList leaves = new ArrayList<>(); + collectJoinLeaves(tupleExpr, leaves); + return leaves; + } + + private static void collectJoinLeaves(TupleExpr tupleExpr, List leaves) { + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + collectJoinLeaves(join.getLeftArg(), leaves); + collectJoinLeaves(join.getRightArg(), leaves); + return; + } + + leaves.add(tupleExpr); + } + void testOptimizer(String expectedQuery, String actualQuery) throws MalformedQueryException, UnsupportedQueryLanguageException { ParsedQuery pq = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, actualQuery, null); @@ -323,6 +549,30 @@ public List getStatements() { } } + private static List flattenJoinLeavesKeepingScopeBarriers(TupleExpr tupleExpr) { + ArrayList leaves = new ArrayList<>(); + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + collectJoinLeavesKeepingScopeBarriers(join.getLeftArg(), leaves); + collectJoinLeavesKeepingScopeBarriers(join.getRightArg(), leaves); + } else { + collectJoinLeavesKeepingScopeBarriers(tupleExpr, leaves); + } + return leaves; + } + + private static void collectJoinLeavesKeepingScopeBarriers(TupleExpr tupleExpr, List leaves) { + if (tupleExpr instanceof Join && !TupleExprs.isVariableScopeChange(tupleExpr) + && !TupleExprs.containsExtension(tupleExpr) && !TupleExprs.containsSubquery(tupleExpr)) { + Join join = (Join) tupleExpr; + collectJoinLeavesKeepingScopeBarriers(join.getLeftArg(), leaves); + collectJoinLeavesKeepingScopeBarriers(join.getRightArg(), leaves); + return; + } + + leaves.add(tupleExpr); + } + private Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { Class joinVisitorClass = Class .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); @@ -331,10 +581,57 @@ private Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { return constructor.newInstance(optimizer); } + @SuppressWarnings("unchecked") + private List invokeGetJoinArgs(QueryJoinOptimizer optimizer, TupleExpr tupleExpr) throws Exception { + Object joinVisitor = buildJoinVisitor(optimizer); + Method getJoinArgs = joinVisitor.getClass().getDeclaredMethod("getJoinArgs", TupleExpr.class, List.class); + getJoinArgs.setAccessible(true); + return (List) getJoinArgs.invoke(joinVisitor, tupleExpr, new ArrayList()); + } + + @SuppressWarnings("unchecked") + private List invokeCollectJoinArgsForOrdering(QueryJoinOptimizer optimizer, Join join) throws Exception { + Object joinVisitor = buildJoinVisitor(optimizer); + Method collectJoinArgsForOrdering = joinVisitor.getClass() + .getDeclaredMethod("collectJoinArgsForOrdering", + Join.class, List.class); + collectJoinArgsForOrdering.setAccessible(true); + List joinArgs = new ArrayList<>(); + collectJoinArgsForOrdering.invoke(joinVisitor, join, joinArgs); + return joinArgs; + } + + private static StatementPattern statementPattern(String subjectVarName, String objectVarName, String predicateIri) { + return new StatementPattern(Var.of(subjectVarName), + Var.of(subjectVarName + "Predicate", VF.createIRI(predicateIri)), + Var.of(objectVarName)); + } + + private static Filter filter(TupleExpr arg, String leftVarName, String rightVarName) { + return new Filter(arg, new Compare(Var.of(leftVarName), Var.of(rightVarName), CompareOp.NE)); + } + private static String getPredicateValue(TupleExpr expr) { return ((StatementPattern) expr).getPredicateVar().getValue().stringValue(); } + private static List predicates(List expressions) { + return expressions.stream() + .map(QueryJoinOptimizerTest::getPredicateValue) + .collect(Collectors.toList()); + } + + private static String pairKey(String left, String right) { + if (left.compareTo(right) <= 0) { + return left + "|" + right; + } + return right + "|" + left; + } + + private static String ex(String localName) { + return "http://example.com/" + localName; + } + private static final class PairwiseJoinStatistics extends EvaluationStatistics { @Override public boolean supportsJoinEstimation() { @@ -400,6 +697,45 @@ private String predicate(TupleExpr expr) { } } + private static final class ParsedQueryPairwiseJoinStatistics extends EvaluationStatistics { + private final Map joinCosts; + + private ParsedQueryPairwiseJoinStatistics(Map joinCosts) { + this.joinCosts = joinCosts; + } + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + if (expr instanceof Join) { + Join join = (Join) expr; + String left = predicate(join.getLeftArg()); + String right = predicate(join.getRightArg()); + if (left != null && right != null) { + return joinCosts.getOrDefault(pairKey(left, right), 1000.0d); + } + return 1000.0d; + } + + if (expr instanceof StatementPattern) { + return 10.0d; + } + + return super.getCardinality(expr); + } + + private String predicate(TupleExpr expr) { + if (expr instanceof StatementPattern) { + return getPredicateValue(expr); + } + return null; + } + } + private static final class JoinEstimatingStatistics extends EvaluationStatistics { @Override diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java index 514a3f31cda..7eb0a53c7f1 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java @@ -59,6 +59,8 @@ public void visit(QueryModelVisitor visitor) throws X { visitor.meet(this); } + + @Override public boolean equals(Object other) { return other instanceof Join && super.equals(other); diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java new file mode 100644 index 00000000000..7f17b422f82 --- /dev/null +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -0,0 +1,8032 @@ +/******************************************************************************* + * Copyright (c) 2025 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + ******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.ByteBuffer; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReferenceArray; +import java.util.function.BooleanSupplier; +import java.util.function.Consumer; +import java.util.function.LongFunction; + +import org.apache.datasketches.common.Family; +import org.apache.datasketches.common.ResizeFactor; +import org.apache.datasketches.theta.AnotB; +import org.apache.datasketches.theta.HashIterator; +import org.apache.datasketches.theta.Intersection; +import org.apache.datasketches.theta.SetOperation; +import org.apache.datasketches.theta.Sketch; +import org.apache.datasketches.theta.UpdateSketch; +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.algebra.And; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Distinct; +import org.eclipse.rdf4j.query.algebra.EmptySet; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.ListMemberOperator; +import org.eclipse.rdf4j.query.algebra.Or; +import org.eclipse.rdf4j.query.algebra.Reduced; +import org.eclipse.rdf4j.query.algebra.SameTerm; +import org.eclipse.rdf4j.query.algebra.SingletonSet; +import org.eclipse.rdf4j.query.algebra.Slice; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.ValueConstant; +import org.eclipse.rdf4j.query.algebra.ValueExpr; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterSelectivityKeys; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinStatsProvider; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.PatternKey; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractSimpleQueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; +import org.eclipse.rdf4j.sail.SailException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Sketch‑based selectivity and join‑size estimator for RDF4J. + * + *

+ * Features: + *

    + *
  • Θ‑Sketches over S, P, O, C singles and all six pairs.
  • + *
  • Synchronized reads sharing buffer locks; double‑buffered rebuilds.
  • + *
  • Incremental {@code addStatement} / {@code deleteStatement} with tombstone sketches and A‑NOT‑B subtraction.
  • + *
  • Configurable via {@link Config} and system properties (see below).
  • + *
+ *

+ * + *

Configuration

+ * + *

+ * Applications should prefer {@link #SketchBasedJoinEstimator(SailStore, Config)} to set options programmatically. For + * convenience, {@link #SketchBasedJoinEstimator(SailStore, int, long, long)} delegates to {@link Config#defaults()} and + * will pick up system properties as well. + *

+ * + *

System properties (overlay)

+ *

+ * All options can be overridden at construction time by JVM system properties with prefix + * {@code org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.}. When present, the system property value takes + * precedence over the corresponding value provided through {@link Config}. Supported keys (defaults shown in + * {@link Config}): + *

+ *
    + *
  • {@code nominalEntries} (int ≥ 4)
  • + *
  • {@code doubleArrayBuckets} (boolean)
  • + *
  • {@code sketchK} (int > 0 ⇒ explicit K; otherwise DataSketches default unless multiplier is set)
  • + *
  • {@code sketchKMultiplier} (int ≥ 1, used when {@code sketchK <= 0})
  • + *
  • {@code throttleEveryN} (long)
  • + *
  • {@code throttleMillis} (long)
  • + *
  • {@code refreshSleepMillis} (long)
  • + *
  • {@code estimateCacheSeconds} (long)
  • + *
  • {@code defaultContextString} (String)
  • + *
  • {@code roundJoinEstimates} (boolean)
  • + *
  • {@code churnSampleMin} (int)
  • + *
  • {@code churnSamplePercent} (double 0..1)
  • + *
  • {@code churnSampleMax} (int)
  • + *
  • {@code churnReaddThreshold} (double 0..1)
  • + *
  • {@code churnRemovalRatioThreshold} (double 0..1)
  • + *
+ * + *

+ * Example (configure default context and reduce refresh cadence): + *

+ * + *
{@code
+ * System.setProperty("org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.defaultContextString", "urn:ctx");
+ * System.setProperty("org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.refreshSleepMillis", "500");
+ * var est = new SketchBasedJoinEstimator(store, Config.defaults().withNominalEntries(128));
+ * }
+ */ +public class SketchBasedJoinEstimator { + + public static final String REFRESH_THREAD_NAME = "RdfJoinEstimator-Refresh"; + + /* ────────────────────────────────────────────────────────────── */ + /* Logging */ + /* ────────────────────────────────────────────────────────────── */ + + private static final Logger logger = LoggerFactory.getLogger(SketchBasedJoinEstimator.class); + + private static final long FNV64_OFFSET_BASIS = 0xcbf29ce484222325L; + private static final long FNV64_PRIME = 0x100000001b3L; + private static final long MIX64_C1 = 0xbf58476d1ce4e5b9L; + private static final long MIX64_C2 = 0x94d049bb133111ebL; + private static final long QUAD_SEED = 0x9e3779b97f4a7c15L; + private static final double MIN_FILTER_MULTIPLIER = 0.05d; + private static final double DISCONNECTED_JOIN_WORK_PENALTY = 16.0d; + private static final int DEFAULT_ZERO_INTERSECTION_EXACT_DISTINCT_LIMIT = 64; + private static final double DEFAULT_ZERO_INTERSECTION_SKEW_RATIO = 128.0d; + private static final long DEFAULT_ZERO_INTERSECTION_ROW_BUDGET = 1_000_000L; + private static final int DEFAULT_ZERO_INTERSECTION_SAMPLE_SIZE = 128; + /* ────────────────────────────────────────────────────────────── */ + /* Public enums */ + /* ────────────────────────────────────────────────────────────── */ + + public enum Component { + S, + P, + O, + C + } + + public enum Pair { + SP(Component.S, Component.P, Component.O, Component.C), + SO(Component.S, Component.O, Component.P, Component.C), + SC(Component.S, Component.C, Component.P, Component.O), + PO(Component.P, Component.O, Component.S, Component.C), + PC(Component.P, Component.C, Component.S, Component.O), + OC(Component.O, Component.C, Component.S, Component.P); + + public final Component x, y, comp1, comp2; + + Pair(Component x, Component y, Component c1, Component c2) { + this.x = x; + this.y = y; + this.comp1 = c1; + this.comp2 = c2; + } + } + + @FunctionalInterface + public interface JoinOrderWorkAdjuster { + JoinOrderWorkAdjuster NO_OP = (accessShape, defaultWorkRows) -> defaultWorkRows; + + double adjustedWorkRows(AccessShape accessShape, double defaultWorkRows); + } + + public static final class AccessShape { + private final StatementPattern pattern; + private final double filterMultiplier; + private final Set patternConstantComponents; + private final Map joinBoundVarNamesByComponent; + private final Set filterLookupComponents; + private final Set lookupBoundComponents; + private final AccessRowsEstimator accessRowsEstimator; + + private AccessShape(StatementPattern pattern, double filterMultiplier, Set patternConstantComponents, + Map joinBoundVarNamesByComponent, Set filterLookupComponents, + AccessRowsEstimator accessRowsEstimator) { + this.pattern = Objects.requireNonNull(pattern, "pattern"); + this.filterMultiplier = filterMultiplier; + this.patternConstantComponents = Set.copyOf(patternConstantComponents); + EnumMap joinBoundVarNames = new EnumMap<>(Component.class); + joinBoundVarNames.putAll(joinBoundVarNamesByComponent); + this.joinBoundVarNamesByComponent = Collections.unmodifiableMap(joinBoundVarNames); + this.filterLookupComponents = Set.copyOf(filterLookupComponents); + EnumSet lookupBound = EnumSet.noneOf(Component.class); + lookupBound.addAll(this.patternConstantComponents); + lookupBound.addAll(this.joinBoundVarNamesByComponent.keySet()); + lookupBound.addAll(this.filterLookupComponents); + this.lookupBoundComponents = Set.copyOf(lookupBound); + this.accessRowsEstimator = Objects.requireNonNull(accessRowsEstimator, "accessRowsEstimator"); + } + + public StatementPattern pattern() { + return pattern; + } + + public double filterMultiplier() { + return filterMultiplier; + } + + public Set patternConstantComponents() { + return patternConstantComponents; + } + + public Map joinBoundVarNamesByComponent() { + return joinBoundVarNamesByComponent; + } + + public Set filterLookupComponents() { + return filterLookupComponents; + } + + public Set lookupBoundComponents() { + return lookupBoundComponents; + } + + public double estimateAccessRows(Set prefixComponents) { + return accessRowsEstimator.estimate(prefixComponents); + } + + public boolean isDirectLookup(Set prefixComponents) { + return prefixComponents.containsAll(lookupBoundComponents); + } + } + + @FunctionalInterface + private interface AccessRowsEstimator { + double estimate(Set prefixComponents); + } + + enum SketchPlannerPath { + ROBUST_USED, + ROBUST_NOT_READY, + UNSUPPORTED_CYCLE, + UNSUPPORTED_WRAPPER, + UNSUPPORTED_MULTI_SHARED_VAR, + UNSUPPORTED_SHAPE + } + + /* ────────────────────────────────────────────────────────────── */ + /* Configuration & high‑level state */ + /* ────────────────────────────────────────────────────────────── */ + + private final SailStore sailStore; + private final int nominalEntries; // ← bucket count for array indices + private final long throttleEveryN; + private final long throttleMillis; + private final long refreshSleepMillis; + private final String defaultContextString; + private final int churnSampleMin; + private final int churnSampleMax; + private final double churnSamplePercent; + private final double churnReaddThreshold; + private final double churnRemovalRatioThreshold; + private final boolean roundJoinEstimates; + private final long estimateCacheTtlNanos; + private final int zeroIntersectionExactDistinctLimit; + private final double zeroIntersectionSkewRatio; + private final long zeroIntersectionRowBudget; + private final int zeroIntersectionSampleSize; + private final ChurnSampler churnSampler; + private final java.util.concurrent.atomic.AtomicLong approxStoreSize = new java.util.concurrent.atomic.AtomicLong(); + + /** Two interchangeable buffers; one of them is always the current snapshot. */ + private final State bufA, bufB; + /** `current` is published to readers via a single volatile store. */ + private volatile State current; + + /** Which buffer will receive the next rebuild. */ + private volatile boolean usingA = true; + + private volatile boolean running; + private Thread refresher; + private volatile JoinStatsProvider learnedStatsProvider; + private volatile boolean robustSynopsisFresh; + private volatile int lastRobustSynopsisSpillSegmentCount; + private volatile SketchPlannerPath lastJoinOrderPlannerPath = SketchPlannerPath.ROBUST_NOT_READY; + private volatile SketchPlannerPath lastRobustCardinalityPath = SketchPlannerPath.ROBUST_NOT_READY; + + private long seenTriples = 0L; + + private static final Sketch EMPTY = UpdateSketch.builder() + .setFamily(Family.ALPHA) + .setResizeFactor(ResizeFactor.X8) + .build() + .compact(); + + /* ────────────────────────────────────────────────────────────── */ + /* Persistence & runtime memory behavior */ + /* ────────────────────────────────────────────────────────────── */ + + private static final byte[] PERSIST_MAGIC = new byte[] { 'R', 'J', 'E', 'S' }; + private static final int PERSIST_VERSION = 3; + private static final int SKETCH_PAYLOAD_FORMAT_NATIVE = -1; + private static final int DEFAULT_BUCKET_COUNT = 1024; + private static final int DEFAULT_SKETCH_NOMINAL_ENTRIES = 4096; + private static final long DEFAULT_MAX_PERSISTENCE_BLOB_BYTES = 1L << 30; // 1 GiB + private static final int MAX_STRING_BYTES = 16 * 1024 * 1024; + private static final int MAX_SKETCH_ENTRIES = 1_000_000_000; + private static final int MIN_MAPPED_GROWTH_BYTES = 32 * 1024 * 1024; + private static final long MIN_ROBUST_REBUILD_HEADROOM_BYTES = 256L * 1024L * 1024L; + private static final long ROBUST_REBUILD_DISABLE_HEADROOM_PERCENT = 2L; + private static final long ROBUST_REBUILD_ENABLE_HEADROOM_PERCENT = 10L; + private static final long ROBUST_REBUILD_FAILURE_BACKOFF_MILLIS = 1000L; + private static final long ROBUST_HEADROOM_GC_INTERVAL_MILLIS = 5000L; + private static final long ROBUST_HEADROOM_CHECK_INTERVAL = 4096L; + private static final byte[] FILE_GROWTH_MARKER = new byte[] { 0 }; + private static final String MIN_SKETCH_MEMORY_PERCENT_PROPERTY = "minSketchMemoryPercent"; + private static final String MAX_SKETCH_MEMORY_PERCENT_PROPERTY = "maxSketchMemoryPercent"; + private static final String MAX_PERSISTENCE_BLOB_BYTES_PROPERTY = "maxPersistenceBlobBytes"; + private static final String ESTIMATE_CACHE_SECONDS_PROPERTY = "estimateCacheSeconds"; + private static final String ZERO_INTERSECTION_EXACT_DISTINCT_LIMIT_PROPERTY = "zeroIntersectionExactDistinctLimit"; + private static final String ZERO_INTERSECTION_SKEW_RATIO_PROPERTY = "zeroIntersectionSkewRatio"; + private static final String ZERO_INTERSECTION_ROW_BUDGET_PROPERTY = "zeroIntersectionRowBudget"; + private static final String ZERO_INTERSECTION_SAMPLE_SIZE_PROPERTY = "zeroIntersectionSampleSize"; + private static final int MAX_ESTIMATE_CACHE_ENTRIES = 4096; + private static final long DEBUG_NO_HEADROOM_OVERRIDE = -1L; + private static final long OBJECT_HEADER_BYTES = 16L; + private static final long ARRAY_HEADER_BYTES = 16L; + private static final long REFERENCE_BYTES = 8L; + private static final long BYTE_BYTES = 1L; + private static final long INT_BYTES = 4L; + private static final long LONG_BYTES = 8L; + private static final long BOOLEAN_BYTES = 1L; + private static final long MEMORY_OWNER_ROBUST_BUILDER = -1L; + private static final long MEMORY_OWNER_ROBUST_SYNOPSIS = -2L; + private static final long MEMORY_OWNER_SERIALIZATION_BUFFER = -3L; + private static final long MEMORY_OWNER_DESERIALIZATION_BUFFER = -4L; + private static final long MEMORY_OWNER_PERSISTENCE_REWRITE_BUFFER = -5L; + private static final long MEMORY_OWNER_CACHE_METADATA = -6L; + private static final long MEMORY_OWNER_PERSISTENCE_REWRITE_WORKSPACE = -7L; + private static final long MEMORY_OWNER_PERSISTENCE_REWRITE_IO_BUFFER = -8L; + + private static final Method HASH_UPDATE_METHOD = resolveHashUpdateMethod(); + private static final Field HEAP_ALPHA_THETA_LONG_FIELD = resolveHeapAlphaField("thetaLong_"); + private static final Field HEAP_ALPHA_EMPTY_FIELD = resolveHeapAlphaField("empty_"); + + private static final byte REC_SINGLE_TRIPLE = 1; + private static final byte REC_SINGLE_CPL = 2; + private static final byte REC_PAIR_TRIPLE = 3; + private static final byte REC_PAIR_COMP1 = 4; + private static final byte REC_PAIR_COMP2 = 5; + + private static int packKeyPrefix(byte recType, boolean isDelete, byte axisA, byte axisB) { + int prefix = recType & 0xff; + prefix |= (isDelete ? 1 : 0) << 8; + prefix |= (axisA & 0xff) << 16; + prefix |= (axisB & 0xff) << 24; + return prefix; + } + + private static int mixAddressHash(int keyPrefix, int x, int y) { + int h = 31 * keyPrefix + x; + h = 31 * h + y; + return fmix32(h); + } + + private static int fmix32(int h) { + h ^= h >>> 16; + h *= 0x85ebca6b; + h ^= h >>> 13; + h *= 0xc2b2ae35; + h ^= h >>> 16; + return h; + } + + private static final class SketchAddress { + private final byte recType; + private final boolean isDelete; + private final byte axisA; + private final byte axisB; + private final int x; + private final int y; + private final int hashCode; + + private SketchAddress(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y) { + this.recType = recType; + this.isDelete = isDelete; + this.axisA = axisA; + this.axisB = axisB; + this.x = x; + this.y = y; + this.hashCode = mixAddressHash(packKeyPrefix(recType, isDelete, axisA, axisB), x, y); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof SketchAddress)) { + return false; + } + SketchAddress that = (SketchAddress) o; + return recType == that.recType && isDelete == that.isDelete && axisA == that.axisA && axisB == that.axisB + && x == that.x && y == that.y; + } + + @Override + public int hashCode() { + return hashCode; + } + } + + private enum BufferSlot { + A, + B + } + + private static final class PersistedSketchRef { + private final int blobId; + private final long offset; + private final int length; + + private PersistedSketchRef(int blobId, long offset, int length) { + this.blobId = blobId; + this.offset = offset; + this.length = length; + } + } + + private static final class MappedChannelEntry { + private final FileChannel channel; + private final boolean writeAccess; + private MappedByteBuffer mappedBuffer; + private int mappedLength; + private long cachedFileSize; + private long writePosition; + + private MappedChannelEntry(FileChannel channel, boolean writeAccess) throws IOException { + this.channel = channel; + this.writeAccess = writeAccess; + this.cachedFileSize = channel.size(); + this.writePosition = cachedFileSize; + } + } + + private static final class BlobStorage { + private final List readEntries = new ArrayList<>(); + private final List writeEntries = new ArrayList<>(); + private int activeWriteBlobId; + } + + private static final class ManifestSketchEntry { + private final SketchAddress address; + private final PersistedSketchRef persistedSketchRef; + + private ManifestSketchEntry(SketchAddress address, PersistedSketchRef persistedSketchRef) { + this.address = address; + this.persistedSketchRef = persistedSketchRef; + } + } + + private static final class PersistedEntrySnapshot { + private final int entryId; + private final PersistedSketchRef persistedSketchRef; + + private PersistedEntrySnapshot(int entryId, PersistedSketchRef persistedSketchRef) { + this.entryId = entryId; + this.persistedSketchRef = persistedSketchRef; + } + } + + private static final class RewriteSlotEntry { + private final int entryId; + private final TrackedByteArray residentPayload; + private final PersistedSketchRef persistedSketchRef; + + private RewriteSlotEntry(int entryId, TrackedByteArray residentPayload, PersistedSketchRef persistedSketchRef) { + this.entryId = entryId; + this.residentPayload = residentPayload; + this.persistedSketchRef = persistedSketchRef; + } + } + + private static final class TrackedByteArray { + private final byte[] bytes; + private final MemoryCategory category; + private final long ownerId; + + private TrackedByteArray(byte[] bytes, MemoryCategory category, long ownerId) { + this.bytes = bytes; + this.category = category; + this.ownerId = ownerId; + } + } + + private static final class CacheDirectory { + private static final byte FLAG_DIRTY_A = 1; + private static final byte FLAG_DIRTY_B = 1 << 1; + private static final long EMPTY_BUCKET = 0L; + private static final int NO_NODE = -1; + private static final int NO_BLOB = -1; + + private int size; + private long[] buckets; + private int bucketMask; + + private byte[] flags; + private int[] keyPrefixes; + private int[] xs; + private int[] ys; + + private int[] persistedBlobIdsA; + private long[] persistedOffsetsA; + private int[] persistedLengthsA; + private int[] persistedBlobIdsB; + private long[] persistedOffsetsB; + private int[] persistedLengthsB; + + private int[] residentNodeA; + private int[] residentNodeB; + + private int[] dirtyPrevA; + private int[] dirtyNextA; + private int dirtyHeadA; + private int dirtyTailA; + private int[] dirtyPrevB; + private int[] dirtyNextB; + private int dirtyHeadB; + private int dirtyTailB; + + private CacheDirectory() { + initBuckets(256); + flags = new byte[256]; + keyPrefixes = new int[256]; + xs = new int[256]; + ys = new int[256]; + persistedBlobIdsA = new int[256]; + persistedOffsetsA = new long[256]; + persistedLengthsA = new int[256]; + persistedBlobIdsB = new int[256]; + persistedOffsetsB = new long[256]; + persistedLengthsB = new int[256]; + residentNodeA = new int[256]; + residentNodeB = new int[256]; + dirtyPrevA = new int[256]; + dirtyNextA = new int[256]; + dirtyPrevB = new int[256]; + dirtyNextB = new int[256]; + Arrays.fill(persistedBlobIdsA, NO_BLOB); + Arrays.fill(persistedBlobIdsB, NO_BLOB); + Arrays.fill(residentNodeA, NO_NODE); + Arrays.fill(residentNodeB, NO_NODE); + Arrays.fill(dirtyPrevA, NO_NODE); + Arrays.fill(dirtyNextA, NO_NODE); + Arrays.fill(dirtyPrevB, NO_NODE); + Arrays.fill(dirtyNextB, NO_NODE); + dirtyHeadA = NO_NODE; + dirtyTailA = NO_NODE; + dirtyHeadB = NO_NODE; + dirtyTailB = NO_NODE; + } + + private void initBuckets(int capacity) { + buckets = new long[capacity]; + bucketMask = capacity - 1; + } + + private void clear() { + size = 0; + Arrays.fill(buckets, EMPTY_BUCKET); + dirtyHeadA = NO_NODE; + dirtyTailA = NO_NODE; + dirtyHeadB = NO_NODE; + dirtyTailB = NO_NODE; + } + + private int size() { + return size; + } + + private int find(SketchAddress address) { + return find(address.recType, address.isDelete, address.axisA, address.axisB, address.x, address.y); + } + + private int find(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y) { + int keyPrefix = packKeyPrefix(recType, isDelete, axisA, axisB); + int keyHash = mixAddressHash(keyPrefix, x, y); + int slot = keyHash & bucketMask; + while (true) { + long bucket = buckets[slot]; + if (bucket == EMPTY_BUCKET) { + return -1; + } + if (bucketHash(bucket) == keyHash) { + int entryId = bucketEntryId(bucket); + if (keyPrefixes[entryId] == keyPrefix && xs[entryId] == x && ys[entryId] == y) { + return entryId; + } + } + slot = (slot + 1) & bucketMask; + } + } + + private int findOrAdd(SketchAddress address) { + return findOrAdd(address.recType, address.isDelete, address.axisA, address.axisB, address.x, address.y); + } + + private int findOrAdd(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y) { + if ((size + 1) * 10 >= buckets.length * 7) { + rehash(buckets.length << 1); + } + int keyPrefix = packKeyPrefix(recType, isDelete, axisA, axisB); + int keyHash = mixAddressHash(keyPrefix, x, y); + int slot = keyHash & bucketMask; + while (true) { + long bucket = buckets[slot]; + if (bucket == EMPTY_BUCKET) { + int entryId = size++; + ensureEntryCapacity(size); + buckets[slot] = encodeBucket(keyHash, entryId); + flags[entryId] = 0; + keyPrefixes[entryId] = keyPrefix; + xs[entryId] = x; + ys[entryId] = y; + persistedBlobIdsA[entryId] = NO_BLOB; + persistedOffsetsA[entryId] = 0L; + persistedLengthsA[entryId] = 0; + persistedBlobIdsB[entryId] = NO_BLOB; + persistedOffsetsB[entryId] = 0L; + persistedLengthsB[entryId] = 0; + residentNodeA[entryId] = NO_NODE; + residentNodeB[entryId] = NO_NODE; + dirtyPrevA[entryId] = NO_NODE; + dirtyNextA[entryId] = NO_NODE; + dirtyPrevB[entryId] = NO_NODE; + dirtyNextB[entryId] = NO_NODE; + return entryId; + } + if (bucketHash(bucket) == keyHash) { + int entryId = bucketEntryId(bucket); + if (keyPrefixes[entryId] == keyPrefix && xs[entryId] == x && ys[entryId] == y) { + return entryId; + } + } + slot = (slot + 1) & bucketMask; + } + } + + private static long encodeBucket(int keyHash, int entryId) { + return (((long) keyHash) << 32) | ((entryId + 1L) & 0xffffffffL); + } + + private static int bucketHash(long bucket) { + return (int) (bucket >>> 32); + } + + private static int bucketEntryId(long bucket) { + return (int) (bucket & 0xffffffffL) - 1; + } + + private void ensureEntryCapacity(int minCapacity) { + int current = flags.length; + if (minCapacity <= current) { + return; + } + int next = current; + while (next < minCapacity) { + next <<= 1; + } + flags = Arrays.copyOf(flags, next); + keyPrefixes = Arrays.copyOf(keyPrefixes, next); + xs = Arrays.copyOf(xs, next); + ys = Arrays.copyOf(ys, next); + int previousLength = persistedBlobIdsA.length; + persistedBlobIdsA = Arrays.copyOf(persistedBlobIdsA, next); + Arrays.fill(persistedBlobIdsA, previousLength, next, NO_BLOB); + persistedOffsetsA = Arrays.copyOf(persistedOffsetsA, next); + persistedLengthsA = Arrays.copyOf(persistedLengthsA, next); + persistedBlobIdsB = Arrays.copyOf(persistedBlobIdsB, next); + Arrays.fill(persistedBlobIdsB, previousLength, next, NO_BLOB); + persistedOffsetsB = Arrays.copyOf(persistedOffsetsB, next); + persistedLengthsB = Arrays.copyOf(persistedLengthsB, next); + residentNodeA = Arrays.copyOf(residentNodeA, next); + Arrays.fill(residentNodeA, previousLength, next, NO_NODE); + residentNodeB = Arrays.copyOf(residentNodeB, next); + Arrays.fill(residentNodeB, previousLength, next, NO_NODE); + dirtyPrevA = Arrays.copyOf(dirtyPrevA, next); + Arrays.fill(dirtyPrevA, previousLength, next, NO_NODE); + dirtyNextA = Arrays.copyOf(dirtyNextA, next); + Arrays.fill(dirtyNextA, previousLength, next, NO_NODE); + dirtyPrevB = Arrays.copyOf(dirtyPrevB, next); + Arrays.fill(dirtyPrevB, previousLength, next, NO_NODE); + dirtyNextB = Arrays.copyOf(dirtyNextB, next); + Arrays.fill(dirtyNextB, previousLength, next, NO_NODE); + } + + private void rehash(int newCapacity) { + long[] oldBuckets = buckets; + initBuckets(newCapacity); + for (long bucket : oldBuckets) { + if (bucket == EMPTY_BUCKET) { + continue; + } + int newSlot = bucketHash(bucket) & bucketMask; + while (buckets[newSlot] != EMPTY_BUCKET) { + newSlot = (newSlot + 1) & bucketMask; + } + buckets[newSlot] = bucket; + } + } + + private static byte recTypeFromPrefix(int keyPrefix) { + return (byte) keyPrefix; + } + + private static boolean isDeleteFromPrefix(int keyPrefix) { + return ((keyPrefix >>> 8) & 1) != 0; + } + + private static byte axisAFromPrefix(int keyPrefix) { + return (byte) (keyPrefix >>> 16); + } + + private static byte axisBFromPrefix(int keyPrefix) { + return (byte) (keyPrefix >>> 24); + } + + private int[] persistedBlobIds(byte slot) { + return slot == 0 ? persistedBlobIdsA : persistedBlobIdsB; + } + + private long[] persistedOffsets(byte slot) { + return slot == 0 ? persistedOffsetsA : persistedOffsetsB; + } + + private int[] persistedLengths(byte slot) { + return slot == 0 ? persistedLengthsA : persistedLengthsB; + } + + private void setPersistedRef(int entryId, byte slot, int blobId, long offset, int length) { + int[] blobIds = persistedBlobIds(slot); + long[] offsets = persistedOffsets(slot); + int[] lengths = persistedLengths(slot); + blobIds[entryId] = blobId; + offsets[entryId] = offset; + lengths[entryId] = length; + } + + private void clearPersistedRefsForSlot(byte slot) { + int[] blobIds = persistedBlobIds(slot); + long[] offsets = persistedOffsets(slot); + int[] lengths = persistedLengths(slot); + for (int entryId = 0; entryId < size; entryId++) { + blobIds[entryId] = NO_BLOB; + offsets[entryId] = 0L; + lengths[entryId] = 0; + } + } + + private PersistedSketchRef persistedRef(int entryId, byte slot) { + int[] blobIds = persistedBlobIds(slot); + long[] offsets = persistedOffsets(slot); + int[] lengths = persistedLengths(slot); + int blobId = blobIds[entryId]; + if (blobId < 0 || lengths[entryId] <= 0) { + return null; + } + return new PersistedSketchRef(blobId, offsets[entryId], lengths[entryId]); + } + + private List snapshotPersistedEntries(byte slot) { + List entries = new ArrayList<>(); + for (int entryId = 0; entryId < size; entryId++) { + PersistedSketchRef persisted = persistedRef(entryId, slot); + if (persisted == null) { + continue; + } + entries.add(new ManifestSketchEntry(toSketchAddress(entryId), persisted)); + } + return entries; + } + + private List snapshotPersistedEntryRefs(byte slot) { + List entries = new ArrayList<>(); + for (int entryId = 0; entryId < size; entryId++) { + PersistedSketchRef persisted = persistedRef(entryId, slot); + if (persisted == null) { + continue; + } + entries.add(new PersistedEntrySnapshot(entryId, persisted)); + } + return entries; + } + + private int[] snapshotEntriesForSlot(byte slot) { + int count = 0; + for (int entryId = 0; entryId < size; entryId++) { + if (residentNode(entryId, slot) != NO_NODE || persistedRef(entryId, slot) != null) { + count++; + } + } + int[] entries = new int[count]; + int next = 0; + for (int entryId = 0; entryId < size; entryId++) { + if (residentNode(entryId, slot) != NO_NODE || persistedRef(entryId, slot) != null) { + entries[next++] = entryId; + } + } + return entries; + } + + private SketchAddress toSketchAddress(int entryId) { + int keyPrefix = keyPrefixes[entryId]; + return new SketchAddress(recTypeFromPrefix(keyPrefix), isDeleteFromPrefix(keyPrefix), + axisAFromPrefix(keyPrefix), + axisBFromPrefix(keyPrefix), xs[entryId], ys[entryId]); + } + + private boolean markDirty(int entryId, byte slot) { + if (isDirty(entryId, slot)) { + return false; + } + byte dirtyFlag = dirtyFlag(slot); + int[] dirtyPrev = dirtyPrev(slot); + int[] dirtyNext = dirtyNext(slot); + int dirtyTail = dirtyTail(slot); + flags[entryId] = (byte) (flags[entryId] | dirtyFlag); + dirtyPrev[entryId] = dirtyTail; + dirtyNext[entryId] = NO_NODE; + if (dirtyTail != NO_NODE) { + dirtyNext[dirtyTail] = entryId; + } + setDirtyTail(slot, entryId); + if (dirtyHead(slot) == NO_NODE) { + setDirtyHead(slot, entryId); + } + return true; + } + + private void clearDirty(int entryId, byte slot) { + if (!isDirty(entryId, slot)) { + return; + } + byte dirtyFlag = dirtyFlag(slot); + int[] dirtyPrev = dirtyPrev(slot); + int[] dirtyNext = dirtyNext(slot); + flags[entryId] = (byte) (flags[entryId] & ~dirtyFlag); + int prev = dirtyPrev[entryId]; + int next = dirtyNext[entryId]; + if (prev != NO_NODE) { + dirtyNext[prev] = next; + } else { + setDirtyHead(slot, next); + } + if (next != NO_NODE) { + dirtyPrev[next] = prev; + } else { + setDirtyTail(slot, prev); + } + dirtyPrev[entryId] = NO_NODE; + dirtyNext[entryId] = NO_NODE; + } + + private void clearDirtyForSlot(byte slot) { + for (int entryId = 0; entryId < size; entryId++) { + clearDirty(entryId, slot); + } + } + + private int[] snapshotDirtyEntries(byte slot) { + int dirtyHead = dirtyHead(slot); + int[] dirtyNext = dirtyNext(slot); + if (dirtyHead == NO_NODE) { + return new int[0]; + } + int count = 0; + for (int cursor = dirtyHead; cursor != NO_NODE; cursor = dirtyNext[cursor]) { + count++; + } + int[] snapshot = new int[count]; + int i = 0; + for (int cursor = dirtyHead; cursor != NO_NODE; cursor = dirtyNext[cursor]) { + snapshot[i++] = cursor; + } + return snapshot; + } + + private boolean hasDirtyEntries(byte slot) { + return dirtyHead(slot) != NO_NODE; + } + + private boolean isDirty(int entryId, byte slot) { + return (flags[entryId] & dirtyFlag(slot)) != 0; + } + + private static byte dirtyFlag(byte slot) { + return slot == 0 ? FLAG_DIRTY_A : FLAG_DIRTY_B; + } + + private int[] dirtyPrev(byte slot) { + return slot == 0 ? dirtyPrevA : dirtyPrevB; + } + + private int[] dirtyNext(byte slot) { + return slot == 0 ? dirtyNextA : dirtyNextB; + } + + private int dirtyHead(byte slot) { + return slot == 0 ? dirtyHeadA : dirtyHeadB; + } + + private int dirtyTail(byte slot) { + return slot == 0 ? dirtyTailA : dirtyTailB; + } + + private void setDirtyHead(byte slot, int entryId) { + if (slot == 0) { + dirtyHeadA = entryId; + } else { + dirtyHeadB = entryId; + } + } + + private void setDirtyTail(byte slot, int entryId) { + if (slot == 0) { + dirtyTailA = entryId; + } else { + dirtyTailB = entryId; + } + } + + private int residentNode(int entryId, byte slot) { + return slot == 0 ? residentNodeA[entryId] : residentNodeB[entryId]; + } + + private void setResidentNode(int entryId, byte slot, int nodeId) { + if (slot == 0) { + residentNodeA[entryId] = nodeId; + } else { + residentNodeB[entryId] = nodeId; + } + } + + private void clearResidentNodesForSlot(byte slot) { + int[] nodes = slot == 0 ? residentNodeA : residentNodeB; + for (int i = 0; i < size; i++) { + nodes[i] = NO_NODE; + } + } + + private void clearAllResidentNodes() { + for (int i = 0; i < size; i++) { + residentNodeA[i] = NO_NODE; + residentNodeB[i] = NO_NODE; + } + } + + private byte recType(int entryId) { + return recTypeFromPrefix(keyPrefixes[entryId]); + } + + private byte axisA(int entryId) { + return axisAFromPrefix(keyPrefixes[entryId]); + } + + private int x(int entryId) { + return xs[entryId]; + } + + private long estimatedHeapBytes() { + return align(OBJECT_HEADER_BYTES + 2L * INT_BYTES + 16L * REFERENCE_BYTES) + + estimateLongArrayBytes(buckets.length) + + estimateByteArrayBytes(flags.length) + + estimateIntArrayBytes(keyPrefixes.length) + + estimateIntArrayBytes(xs.length) + + estimateIntArrayBytes(ys.length) + + estimateIntArrayBytes(persistedBlobIdsA.length) + + estimateLongArrayBytes(persistedOffsetsA.length) + + estimateIntArrayBytes(persistedLengthsA.length) + + estimateIntArrayBytes(persistedBlobIdsB.length) + + estimateLongArrayBytes(persistedOffsetsB.length) + + estimateIntArrayBytes(persistedLengthsB.length) + + estimateIntArrayBytes(residentNodeA.length) + + estimateIntArrayBytes(residentNodeB.length) + + estimateIntArrayBytes(dirtyPrevA.length) + + estimateIntArrayBytes(dirtyNextA.length) + + estimateIntArrayBytes(dirtyPrevB.length) + + estimateIntArrayBytes(dirtyNextB.length); + } + } + + private static final class ResidentLru { + private static final int NO_NODE = -1; + + private int[] prev = new int[256]; + private int[] next = new int[256]; + private int[] entryIds = new int[256]; + private byte[] slots = new byte[256]; + private long[] bytes = new long[256]; + private boolean[] used = new boolean[256]; + + private int head = NO_NODE; + private int tail = NO_NODE; + private int freeHead = NO_NODE; + private int nextNodeId; + + private ResidentLru() { + Arrays.fill(prev, NO_NODE); + Arrays.fill(next, NO_NODE); + } + + private void clear() { + Arrays.fill(used, false); + Arrays.fill(prev, NO_NODE); + Arrays.fill(next, NO_NODE); + head = NO_NODE; + tail = NO_NODE; + freeHead = NO_NODE; + nextNodeId = 0; + } + + private boolean isEmpty() { + return head == NO_NODE; + } + + private int headNode() { + return head; + } + + private int nextNode(int nodeId) { + return next[nodeId]; + } + + private int entryId(int nodeId) { + return entryIds[nodeId]; + } + + private byte slot(int nodeId) { + return slots[nodeId]; + } + + private long bytes(int nodeId) { + return bytes[nodeId]; + } + + private int add(int entryId, byte slot, long nodeBytes) { + int nodeId = allocNode(); + entryIds[nodeId] = entryId; + slots[nodeId] = slot; + bytes[nodeId] = nodeBytes; + used[nodeId] = true; + appendTail(nodeId); + return nodeId; + } + + private void touch(int nodeId, long nodeBytes) { + if (!used[nodeId]) { + return; + } + bytes[nodeId] = nodeBytes; + if (tail == nodeId) { + return; + } + unlink(nodeId); + appendTail(nodeId); + } + + private long remove(int nodeId) { + if (nodeId == NO_NODE || nodeId >= used.length || !used[nodeId]) { + return 0L; + } + long removedBytes = bytes[nodeId]; + unlink(nodeId); + used[nodeId] = false; + next[nodeId] = freeHead; + prev[nodeId] = NO_NODE; + freeHead = nodeId; + bytes[nodeId] = 0L; + return removedBytes; + } + + private void unlink(int nodeId) { + int nodePrev = prev[nodeId]; + int nodeNext = next[nodeId]; + if (nodePrev != NO_NODE) { + next[nodePrev] = nodeNext; + } else { + head = nodeNext; + } + if (nodeNext != NO_NODE) { + prev[nodeNext] = nodePrev; + } else { + tail = nodePrev; + } + prev[nodeId] = NO_NODE; + next[nodeId] = NO_NODE; + } + + private void appendTail(int nodeId) { + prev[nodeId] = tail; + next[nodeId] = NO_NODE; + if (tail != NO_NODE) { + next[tail] = nodeId; + } + tail = nodeId; + if (head == NO_NODE) { + head = nodeId; + } + } + + private int allocNode() { + if (freeHead != NO_NODE) { + int node = freeHead; + freeHead = next[node]; + next[node] = NO_NODE; + return node; + } + int node = nextNodeId++; + ensureNodeCapacity(node + 1); + return node; + } + + private void ensureNodeCapacity(int minCapacity) { + int current = prev.length; + if (minCapacity <= current) { + return; + } + int nextCapacity = current; + while (nextCapacity < minCapacity) { + nextCapacity <<= 1; + } + prev = Arrays.copyOf(prev, nextCapacity); + Arrays.fill(prev, current, nextCapacity, NO_NODE); + next = Arrays.copyOf(next, nextCapacity); + Arrays.fill(next, current, nextCapacity, NO_NODE); + entryIds = Arrays.copyOf(entryIds, nextCapacity); + slots = Arrays.copyOf(slots, nextCapacity); + bytes = Arrays.copyOf(bytes, nextCapacity); + used = Arrays.copyOf(used, nextCapacity); + } + + private long estimatedHeapBytes() { + return align(OBJECT_HEADER_BYTES + 5L * INT_BYTES + 6L * REFERENCE_BYTES) + + estimateIntArrayBytes(prev.length) + + estimateIntArrayBytes(next.length) + + estimateIntArrayBytes(entryIds.length) + + estimateByteArrayBytes(slots.length) + + estimateLongArrayBytes(bytes.length) + + estimateBooleanArrayBytes(used.length); + } + } + + static final class DebugSketchAddress { + private final BufferSlot slot; + private final byte recType; + private final boolean isDelete; + private final byte axisA; + private final byte axisB; + private final int x; + private final int y; + + private DebugSketchAddress(BufferSlot slot, SketchAddress address) { + this.slot = slot; + this.recType = address.recType; + this.isDelete = address.isDelete; + this.axisA = address.axisA; + this.axisB = address.axisB; + this.x = address.x; + this.y = address.y; + } + + BufferSlot slot() { + return slot; + } + + byte recType() { + return recType; + } + + boolean isDelete() { + return isDelete; + } + + byte axisA() { + return axisA; + } + + int x() { + return x; + } + } + + static final class DebugMappedChannelView { + private final Path basePath; + private final int blobId; + private final boolean writeAccess; + private final FileChannel channel; + private final MappedByteBuffer mappedBuffer; + + private DebugMappedChannelView(Path basePath, int blobId, boolean writeAccess, FileChannel channel, + MappedByteBuffer mappedBuffer) { + this.basePath = basePath; + this.blobId = blobId; + this.writeAccess = writeAccess; + this.channel = channel; + this.mappedBuffer = mappedBuffer; + } + + Path basePath() { + return basePath; + } + + int blobId() { + return blobId; + } + + boolean writeAccess() { + return writeAccess; + } + + FileChannel channel() { + return channel; + } + + MappedByteBuffer mappedBuffer() { + return mappedBuffer; + } + } + + enum MemoryCategory { + RESIDENT_SKETCHES, + ROBUST_BUILDER, + ROBUST_SYNOPSIS, + SERIALIZATION_BUFFERS, + DESERIALIZATION_BUFFERS, + PERSISTENCE_REWRITE_BUFFERS, + CACHE_METADATA + } + + static final class DebugMemoryOwnerView { + private final long ownerId; + private final String ownerLabel; + private final long bytes; + + private DebugMemoryOwnerView(long ownerId, String ownerLabel, long bytes) { + this.ownerId = ownerId; + this.ownerLabel = ownerLabel; + this.bytes = bytes; + } + + long ownerId() { + return ownerId; + } + + String ownerLabel() { + return ownerLabel; + } + + long bytes() { + return bytes; + } + } + + static final class DebugMemorySnapshot { + private final EnumMap totals; + private final EnumMap> owners; + private final long totalBytes; + + private DebugMemorySnapshot(EnumMap totals, + EnumMap> owners, long totalBytes) { + this.totals = totals; + this.owners = owners; + this.totalBytes = totalBytes; + } + + long totalBytes() { + return totalBytes; + } + + long bytes(MemoryCategory category) { + return totals.getOrDefault(category, 0L); + } + + List owners(MemoryCategory category) { + return owners.getOrDefault(category, List.of()); + } + } + + private final class MemoryRegistry { + private final EnumMap> ownerBytes = new EnumMap<>(MemoryCategory.class); + private final EnumMap totals = new EnumMap<>(MemoryCategory.class); + private final EnumMap> labels = new EnumMap<>(MemoryCategory.class); + + private MemoryRegistry() { + for (MemoryCategory category : MemoryCategory.values()) { + ownerBytes.put(category, new LinkedHashMap<>()); + totals.put(category, 0L); + } + labels.put(MemoryCategory.RESIDENT_SKETCHES, SketchBasedJoinEstimator::residentOwnerLabel); + labels.put(MemoryCategory.ROBUST_BUILDER, ownerId -> "ROBUST_BUILDER"); + labels.put(MemoryCategory.ROBUST_SYNOPSIS, ownerId -> "ROBUST_SYNOPSIS"); + labels.put(MemoryCategory.SERIALIZATION_BUFFERS, SketchBasedJoinEstimator::transientOwnerLabel); + labels.put(MemoryCategory.DESERIALIZATION_BUFFERS, SketchBasedJoinEstimator::transientOwnerLabel); + labels.put(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, SketchBasedJoinEstimator::transientOwnerLabel); + labels.put(MemoryCategory.CACHE_METADATA, ownerId -> "CACHE_METADATA"); + } + + private synchronized long totalBytes() { + long total = 0L; + for (long bytes : totals.values()) { + total = saturatingAdd(total, bytes); + } + return total; + } + + private synchronized long bytes(MemoryCategory category, long ownerId) { + return ownerBytes.get(category).getOrDefault(ownerId, 0L); + } + + private synchronized void reserve(MemoryCategory category, long ownerId, long bytes) { + if (bytes <= 0L) { + return; + } + if (bytes > bytes(category, ownerId)) { + replace(category, ownerId, bytes); + } + } + + private synchronized void replace(MemoryCategory category, long ownerId, long bytes) { + Map categoryOwners = ownerBytes.get(category); + long previous = categoryOwners.getOrDefault(ownerId, 0L); + if (bytes <= 0L) { + if (previous != 0L) { + categoryOwners.remove(ownerId); + totals.put(category, Math.max(0L, totals.get(category) - previous)); + } + return; + } + categoryOwners.put(ownerId, bytes); + totals.put(category, Math.max(0L, saturatingAdd(totals.get(category) - previous, bytes))); + } + + private synchronized void release(MemoryCategory category, long ownerId) { + replace(category, ownerId, 0L); + } + + private synchronized void clearCategory(MemoryCategory category) { + ownerBytes.get(category).clear(); + totals.put(category, 0L); + } + + private synchronized void clearTransientCategories() { + clearCategory(MemoryCategory.SERIALIZATION_BUFFERS); + clearCategory(MemoryCategory.DESERIALIZATION_BUFFERS); + clearCategory(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS); + } + + private synchronized DebugMemorySnapshot snapshot() { + EnumMap totalsSnapshot = new EnumMap<>(MemoryCategory.class); + EnumMap> ownerSnapshot = new EnumMap<>(MemoryCategory.class); + long total = 0L; + for (MemoryCategory category : MemoryCategory.values()) { + long categoryTotal = totals.getOrDefault(category, 0L); + totalsSnapshot.put(category, categoryTotal); + total = saturatingAdd(total, categoryTotal); + List views = new ArrayList<>(); + LongFunction label = labels.get(category); + for (Map.Entry entry : ownerBytes.get(category).entrySet()) { + views.add(new DebugMemoryOwnerView(entry.getKey(), + label == null ? Long.toString(entry.getKey()) : label.apply(entry.getKey()), + entry.getValue())); + } + ownerSnapshot.put(category, Collections.unmodifiableList(views)); + } + return new DebugMemorySnapshot(totalsSnapshot, ownerSnapshot, total); + } + } + + private static final class MemoryPressureAbort extends RuntimeException { + private static final long serialVersionUID = 1L; + + private MemoryPressureAbort(String message) { + super(message); + } + } + + private static final class IngestEvent { + private final boolean isDelete; + private final int si; + private final int pi; + private final int oi; + private final int ci; + private final long hs; + private final long hp; + private final long ho; + private final long hc; + private final long sig; + private final long spKey; + private final long soKey; + private final long scKey; + private final long poKey; + private final long pcKey; + private final long ocKey; + + private IngestEvent(boolean isDelete, int si, int pi, int oi, int ci, long hs, long hp, long ho, long hc, + long sig, long spKey, long soKey, long scKey, long poKey, long pcKey, long ocKey) { + this.isDelete = isDelete; + this.si = si; + this.pi = pi; + this.oi = oi; + this.ci = ci; + this.hs = hs; + this.hp = hp; + this.ho = ho; + this.hc = hc; + this.sig = sig; + this.spKey = spKey; + this.soKey = soKey; + this.scKey = scKey; + this.poKey = poKey; + this.pcKey = pcKey; + this.ocKey = ocKey; + } + } + + @FunctionalInterface + private interface BatchUpdateConsumer { + void accept(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, long[] values, + int valueCount); + } + + private static final class BatchUpdateAccumulator { + private static final long EMPTY_BUCKET = 0L; + + private int size; + private long[] buckets; + private int bucketMask; + + private int[] keyPrefixes; + private int[] xs; + private int[] ys; + private long[][] values; + private int[] valueCounts; + + private BatchUpdateAccumulator(int expectedUpdates) { + int bucketCapacity = 256; + int targetBuckets = Math.max(256, expectedUpdates << 1); + while (bucketCapacity < targetBuckets) { + bucketCapacity <<= 1; + } + initBuckets(bucketCapacity); + + int entryCapacity = 256; + int targetEntries = Math.max(256, expectedUpdates); + while (entryCapacity < targetEntries) { + entryCapacity <<= 1; + } + keyPrefixes = new int[entryCapacity]; + xs = new int[entryCapacity]; + ys = new int[entryCapacity]; + values = new long[entryCapacity][]; + valueCounts = new int[entryCapacity]; + } + + private void initBuckets(int capacity) { + buckets = new long[capacity]; + bucketMask = capacity - 1; + } + + private void add(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, long value) { + if ((size + 1) * 10 >= buckets.length * 7) { + rehash(buckets.length << 1); + } + int keyPrefix = packKeyPrefix(recType, isDelete, axisA, axisB); + int keyHash = mixAddressHash(keyPrefix, x, y); + int slot = keyHash & bucketMask; + while (true) { + long bucket = buckets[slot]; + if (bucket == EMPTY_BUCKET) { + int entryId = size++; + ensureEntryCapacity(size); + buckets[slot] = encodeBucket(keyHash, entryId); + keyPrefixes[entryId] = keyPrefix; + xs[entryId] = x; + ys[entryId] = y; + values[entryId] = new long[8]; + valueCounts[entryId] = 0; + appendValue(entryId, value); + return; + } + if (bucketHash(bucket) == keyHash) { + int entryId = bucketEntryId(bucket); + if (keyPrefixes[entryId] == keyPrefix && xs[entryId] == x && ys[entryId] == y) { + appendValue(entryId, value); + return; + } + } + slot = (slot + 1) & bucketMask; + } + } + + private static long encodeBucket(int keyHash, int entryId) { + return (((long) keyHash) << 32) | ((entryId + 1L) & 0xffffffffL); + } + + private static int bucketHash(long bucket) { + return (int) (bucket >>> 32); + } + + private static int bucketEntryId(long bucket) { + return (int) (bucket & 0xffffffffL) - 1; + } + + private void appendValue(int entryId, long value) { + long[] entryValues = values[entryId]; + int count = valueCounts[entryId]; + if (count == entryValues.length) { + entryValues = Arrays.copyOf(entryValues, count << 1); + values[entryId] = entryValues; + } + entryValues[count] = value; + valueCounts[entryId] = count + 1; + } + + private void ensureEntryCapacity(int minCapacity) { + int current = keyPrefixes.length; + if (minCapacity <= current) { + return; + } + int next = current; + while (next < minCapacity) { + next <<= 1; + } + keyPrefixes = Arrays.copyOf(keyPrefixes, next); + xs = Arrays.copyOf(xs, next); + ys = Arrays.copyOf(ys, next); + values = Arrays.copyOf(values, next); + valueCounts = Arrays.copyOf(valueCounts, next); + } + + private void rehash(int newCapacity) { + long[] oldBuckets = buckets; + initBuckets(newCapacity); + for (long bucket : oldBuckets) { + if (bucket == EMPTY_BUCKET) { + continue; + } + int newSlot = bucketHash(bucket) & bucketMask; + while (buckets[newSlot] != EMPTY_BUCKET) { + newSlot = (newSlot + 1) & bucketMask; + } + buckets[newSlot] = bucket; + } + } + + private void forEach(BatchUpdateConsumer consumer) { + for (int i = 0; i < size; i++) { + int keyPrefix = keyPrefixes[i]; + consumer.accept((byte) keyPrefix, ((keyPrefix >>> 8) & 1) != 0, (byte) (keyPrefix >>> 16), + (byte) (keyPrefix >>> 24), xs[i], ys[i], + values[i], + valueCounts[i]); + } + } + } + + private volatile Path persistenceFile; + private volatile Path persistenceBlobBaseFile; + private volatile boolean persistenceEnabled; + private volatile boolean lazyLoadEnabled; + private volatile boolean sketchesLoaded = true; + private final long maxPersistenceBlobBytes; + + /** + * True when writes happened while sketches were unloaded. In this state, the estimator must not claim readiness + * until it rebuilds from store contents. + */ + private final AtomicBoolean rebuildRequired = new AtomicBoolean(false); + /** + * Even value means no rebuild in progress. Odd value means rebuild in progress. + */ + private final java.util.concurrent.atomic.AtomicLong rebuildEpoch = new java.util.concurrent.atomic.AtomicLong(); + + /** True when in-memory state changed and should be snapshotted at the next scheduled persist point. */ + private final AtomicBoolean dirty = new AtomicBoolean(false); + /** True when persisted index metadata changed and manifest rewrite is pending. */ + private final AtomicBoolean manifestDirty = new AtomicBoolean(false); + private final Map estimateCache = new ConcurrentHashMap<>(); + + private volatile BooleanSupplier rebuildAllowedSupplier; + private final Object persistLock = new Object(); + private final Object loadLock = new Object(); + private final Object sketchCacheLock = new Object(); + private final Object mappedChannelLock = new Object(); + private final CacheDirectory cacheDirectory = new CacheDirectory(); + private final ResidentLru residentLru = new ResidentLru(); + private final MemoryRegistry memoryRegistry; + private final Map blobStorages = new HashMap<>(); + private final Path[] slotBlobBaseFiles = new Path[BufferSlot.values().length]; + private final Path[] slotTempBlobDirectories = new Path[BufferSlot.values().length]; + private volatile long minSketchMemoryBytes; + private volatile long maxSketchMemoryBytes; + private final long baselineCacheMetadataBytes; + private final long trackedMemorySoftLimitBytes; + private final long trackedMemoryHardLimitBytes; + private final long robustRebuildDisableHeadroomBytes; + private final long robustRebuildEnableHeadroomBytes; + private final long robustRebuildGcProbeFloorBytes; + private volatile long robustRebuildRetryAfterNanos; + private volatile long lastRobustHeadroomGcNanos; + private volatile long debugAvailableHeapHeadroomOverrideBytes = DEBUG_NO_HEADROOM_OVERRIDE; + private long residentSketchBytes; + + private static final int INCREMENTAL_BATCH_SIZE = 32 * 1024; + private static final int ROBUST_REBUILD_BATCH_SIZE = 4 * 1024; + private final Object incrementalBufferLock = new Object(); + private IngestEvent[] incrementalBuffer = new IngestEvent[INCREMENTAL_BATCH_SIZE * 2]; + private int incrementalBufferCount; + + // ────────────────────────────────────────────────────────────── + // Staleness tracking (global, lock‑free reads) + // ────────────────────────────────────────────────────────────── + private volatile long lastRebuildPublishMs = 0L; + + /* ────────────────────────────────────────────────────────────── */ + /* Construction */ + /* ────────────────────────────────────────────────────────────── */ + + /** + * Convenience constructor that uses {@link Config#defaults()} with the given basics. All options can still be + * overridden via system properties (see class‑level Javadoc). + */ + public SketchBasedJoinEstimator(SailStore sailStore, int nominalEntries, long throttleEveryN, long throttleMillis) { + this(sailStore, Config.defaults() + .withNominalEntries(nominalEntries) + .withThrottleEveryN(throttleEveryN) + .withThrottleMillis(throttleMillis)); + } + + /** + * Full configuration constructor. + * + *

+ * Values from {@code cfg} are overlaid by system properties with prefix + * {@code org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.}. If a property is set, it takes precedence. See + * class‑level Javadoc for the list of keys. + *

+ */ + public SketchBasedJoinEstimator(SailStore sailStore, Config cfg) { + Objects.requireNonNull(cfg, "cfg"); + + // Base from provided config + int nEntries = cfg.nominalEntries; + boolean dbl = cfg.doubleArrayBuckets; + long thrEvery = cfg.throttleEveryN; + long thrMs = cfg.throttleMillis; + long refreshMs = cfg.refreshSleepMillis; + String defCtx = cfg.defaultContextString; + int sampleMin = cfg.churnSampleMin; + int sampleMax = cfg.churnSampleMax; + double samplePct = cfg.churnSamplePercent; + double churnReaddTh = cfg.churnReaddThreshold; + double churnRemovalTh = cfg.churnRemovalRatioThreshold; + boolean roundEst = cfg.roundJoinEstimates; + long estimateCacheSeconds = cfg.estimateCacheSeconds; + int zeroIntersectionExactLimit = cfg.zeroIntersectionExactDistinctLimit; + double zeroIntersectionSkew = cfg.zeroIntersectionSkewRatio; + long zeroIntersectionBudget = cfg.zeroIntersectionRowBudget; + int zeroIntersectionSampleSize = cfg.zeroIntersectionSampleSize; + int kCfg = cfg.sketchK; + int kMult = cfg.sketchKMultiplier; + double minSketchMemoryPercent = cfg.minSketchMemoryPercent; + double maxSketchMemoryPercent = cfg.maxSketchMemoryPercent; + long maxBlobBytes = cfg.maxPersistenceBlobBytes; + + // Overlay from system properties (take precedence) + nEntries = propInt("nominalEntries", nEntries); + dbl = propBool("doubleArrayBuckets", dbl); + thrEvery = propLong("throttleEveryN", thrEvery); + thrMs = propLong("throttleMillis", thrMs); + refreshMs = propLong("refreshSleepMillis", refreshMs); + defCtx = propString("defaultContextString", defCtx); + sampleMin = propInt("churnSampleMin", sampleMin); + sampleMax = propInt("churnSampleMax", sampleMax); + samplePct = propDouble("churnSamplePercent", samplePct); + churnReaddTh = propDouble("churnReaddThreshold", churnReaddTh); + churnRemovalTh = propDouble("churnRemovalRatioThreshold", churnRemovalTh); + roundEst = propBool("roundJoinEstimates", roundEst); + estimateCacheSeconds = propLong(ESTIMATE_CACHE_SECONDS_PROPERTY, estimateCacheSeconds); + zeroIntersectionExactLimit = propInt(ZERO_INTERSECTION_EXACT_DISTINCT_LIMIT_PROPERTY, + zeroIntersectionExactLimit); + zeroIntersectionSkew = propDouble(ZERO_INTERSECTION_SKEW_RATIO_PROPERTY, zeroIntersectionSkew); + zeroIntersectionBudget = propLong(ZERO_INTERSECTION_ROW_BUDGET_PROPERTY, zeroIntersectionBudget); + zeroIntersectionSampleSize = propInt(ZERO_INTERSECTION_SAMPLE_SIZE_PROPERTY, zeroIntersectionSampleSize); + int kProp = propIntOrNegOne("sketchK", kCfg); + kMult = propInt("sketchKMultiplier", kMult); + kMult = Math.max(0, kMult); + minSketchMemoryPercent = propDouble(MIN_SKETCH_MEMORY_PERCENT_PROPERTY, minSketchMemoryPercent); + maxSketchMemoryPercent = propDouble(MAX_SKETCH_MEMORY_PERCENT_PROPERTY, maxSketchMemoryPercent); + maxBlobBytes = propLong(MAX_PERSISTENCE_BLOB_BYTES_PROPERTY, maxBlobBytes); + + int buckets = dbl ? (nEntries * 2) : nEntries; + int k = resolveSketchK(kProp, kCfg, buckets, kMult); + + samplePct = clamp(samplePct, 0.0, 1.0); + sampleMin = Math.max(0, sampleMin); + sampleMax = Math.max(0, sampleMax); + churnReaddTh = clamp(churnReaddTh, 0.0, 1.0); + churnRemovalTh = clamp(churnRemovalTh, 0.0, 1.0); + estimateCacheSeconds = Math.max(0L, estimateCacheSeconds); + zeroIntersectionExactLimit = Math.max(0, zeroIntersectionExactLimit); + zeroIntersectionSkew = Math.max(0.0d, zeroIntersectionSkew); + zeroIntersectionBudget = Math.max(0L, zeroIntersectionBudget); + zeroIntersectionSampleSize = Math.max(0, zeroIntersectionSampleSize); + minSketchMemoryPercent = clamp(minSketchMemoryPercent, 0.0, 1.0); + maxSketchMemoryPercent = clamp(maxSketchMemoryPercent, minSketchMemoryPercent, 1.0); + maxBlobBytes = Math.max(1L, maxBlobBytes); + maxBlobBytes = Math.min(maxBlobBytes, Integer.MAX_VALUE); + + this.sailStore = sailStore; + this.nominalEntries = buckets; + this.throttleEveryN = thrEvery; + this.throttleMillis = thrMs; + this.refreshSleepMillis = refreshMs; + this.defaultContextString = defCtx; + this.churnSampleMin = sampleMin; + this.churnSampleMax = sampleMax; + this.churnSamplePercent = samplePct; + this.churnReaddThreshold = churnReaddTh; + this.churnRemovalRatioThreshold = churnRemovalTh; + this.roundJoinEstimates = roundEst; + this.estimateCacheTtlNanos = TimeUnit.SECONDS.toNanos(estimateCacheSeconds); + this.zeroIntersectionExactDistinctLimit = zeroIntersectionExactLimit; + this.zeroIntersectionSkewRatio = zeroIntersectionSkew; + this.zeroIntersectionRowBudget = zeroIntersectionBudget; + this.zeroIntersectionSampleSize = zeroIntersectionSampleSize; + this.churnSampler = new ChurnSampler(); + + this.bufA = new State(k, this.nominalEntries); + this.bufB = new State(k, this.nominalEntries); + this.current = usingA ? bufA : bufB; + this.sketchesLoaded = true; + this.persistenceEnabled = false; + this.lazyLoadEnabled = false; + this.maxPersistenceBlobBytes = maxBlobBytes; + this.memoryRegistry = new MemoryRegistry(); + this.baselineCacheMetadataBytes = cacheDirectory.estimatedHeapBytes() + residentLru.estimatedHeapBytes(); + long heapMax = Runtime.getRuntime().maxMemory(); + this.minSketchMemoryBytes = percentToBytes(minSketchMemoryPercent, heapMax); + this.maxSketchMemoryBytes = percentToBytes(maxSketchMemoryPercent, heapMax); + long disableHeadroom = Math.max( + MIN_ROBUST_REBUILD_HEADROOM_BYTES, + Math.min(percentToBytes(ROBUST_REBUILD_DISABLE_HEADROOM_PERCENT / 100.0d, heapMax), + Math.max(MIN_ROBUST_REBUILD_HEADROOM_BYTES, this.maxSketchMemoryBytes / 4))); + long enableHeadroom = Math.max( + MIN_ROBUST_REBUILD_HEADROOM_BYTES, + Math.max(disableHeadroom * 2, + percentToBytes(ROBUST_REBUILD_ENABLE_HEADROOM_PERCENT / 100.0d, heapMax))); + this.trackedMemoryHardLimitBytes = Math.max(0L, heapMax - disableHeadroom); + this.trackedMemorySoftLimitBytes = Math.max(0L, heapMax - enableHeadroom); + this.robustRebuildDisableHeadroomBytes = disableHeadroom; + this.robustRebuildEnableHeadroomBytes = enableHeadroom; + this.robustRebuildGcProbeFloorBytes = Math.max(MIN_ROBUST_REBUILD_HEADROOM_BYTES / 2, disableHeadroom / 2); + refreshCacheMetadataAccounting(); + } + + private static int resolveSketchK(int kProp, int kCfg, int buckets, int kMult) { + if (kProp > 0) { + return kProp; + } + if (kCfg > 0) { + return kCfg; + } + if (kMult > 0) { + return Math.max(1, buckets * kMult); + } + return DEFAULT_SKETCH_NOMINAL_ENTRIES; + } + + /* --------------------------------------------------------------------- */ + + public boolean isReady() { + if (rebuildRequired.get()) { + return false; + } + + if (!sketchesLoaded && persistenceEnabled && persistenceFile != null && hasSnapshotAvailable(persistenceFile)) { + if (!tryLoadFromDisk()) { + return false; + } + } + + if (!sketchesLoaded) { + return false; + } + + flushPendingIncremental(); + State snap = current; + synchronized (snap) { + return hasRequiredActiveSketchGroups(snap); + } + } + + private boolean hasRequiredActiveSketchGroups(State state) { + byte slot = slotByte(slotOf(state)); + boolean hasSingleTriples = false; + boolean hasSingles = false; + boolean hasPairs = false; + + synchronized (sketchCacheLock) { + int entryCount = cacheDirectory.size(); + for (int entryId = 0; entryId < entryCount; entryId++) { + SketchAddress address = cacheDirectory.toSketchAddress(entryId); + if (address.isDelete || !hasUsableActiveSketch(state, slot, entryId, address)) { + continue; + } + + switch (address.recType) { + case REC_SINGLE_TRIPLE: + hasSingleTriples = true; + break; + case REC_SINGLE_CPL: + hasSingles = true; + break; + case REC_PAIR_TRIPLE: + case REC_PAIR_COMP1: + case REC_PAIR_COMP2: + hasPairs = true; + break; + default: + break; + } + + if (hasSingleTriples && hasSingles && hasPairs) { + return true; + } + } + } + + return false; + } + + private boolean hasUsableActiveSketch(State state, byte slot, int entryId, SketchAddress address) { + return getResidentSketch(state, address) != null || cacheDirectory.persistedRef(entryId, slot) != null; + } + + /** + * Configure persistence for this estimator. + * + * @param file persisted snapshot file + * @param lazyLoad if true and snapshot exists, keep sketches unloaded until first demand. + */ + public void configurePersistence(Path file, boolean lazyLoad) { + Path previousPersistenceFile = this.persistenceFile; + Path previousBlobFile = this.persistenceBlobBaseFile; + Path normalizedFile = file == null ? null : file.toAbsolutePath().normalize(); + this.persistenceFile = normalizedFile; + this.persistenceBlobBaseFile = normalizedFile == null ? null : sidecarPath(normalizedFile); + this.persistenceEnabled = (file != null); + this.lazyLoadEnabled = lazyLoad; + + if (this.persistenceBlobBaseFile != null) { + try { + ensureParentDirectoryExists(this.persistenceBlobBaseFile); + } catch (IOException e) { + logger.debug("Failed to pre-create persistence sidecar directory {}", this.persistenceBlobBaseFile, e); + } + } + + if (!Objects.equals(previousPersistenceFile, this.persistenceFile) + || !Objects.equals(previousBlobFile, this.persistenceBlobBaseFile)) { + closeMappedChannels(); + deleteTemporaryBlobBaseForSlot((byte) 0); + deleteTemporaryBlobBaseForSlot((byte) 1); + Arrays.fill(slotBlobBaseFiles, null); + } + + assignPrimaryBlobBaseToCurrentSlot(); + + if (lazyLoad && file != null && hasSnapshotAvailable(file)) { + unloadInternal(false); + this.sketchesLoaded = false; + } + } + + public void setLearnedStatsProvider(JoinStatsProvider learnedStatsProvider) { + this.learnedStatsProvider = learnedStatsProvider; + } + + /** + * Install a store-provided gate for background rebuilds. Returning {@code false} pauses refresh-thread rebuild + * attempts until the gate opens again. + */ + public void setRebuildAllowedSupplier(BooleanSupplier supplier) { + this.rebuildAllowedSupplier = supplier; + } + + public void startBackgroundRefresh(int stalenessThreshold) { + if (running) { + return; + } + running = true; + + refresher = new Thread(() -> { + while (running) { + if (!isRebuildAllowed()) { + try { + Thread.sleep(refreshSleepMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + continue; + } + + if (rebuildRequired.get()) { + try { + rebuildOnceSlow(); + } catch (Throwable t) { + logger.error("Error while rebuilding join estimator", t); + } + try { + Thread.sleep(refreshSleepMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + continue; + } + + if (!sketchesLoaded && lazyLoadEnabled) { + try { + Thread.sleep(refreshSleepMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + continue; + } + + boolean stale = isStale(stalenessThreshold); + if (!stale) { + try { + Thread.sleep(refreshSleepMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + continue; + } +// Staleness staleness = staleness(); +// System.out.println(staleness.toString()); + + try { + rebuildOnceSlow(); + } catch (Throwable t) { + + logger.error("Error while rebuilding join estimator", t); + } + + try { + Thread.sleep(refreshSleepMillis); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; + } + + logger.debug("RdfJoinEstimator: Rebuilt join estimator."); + } + }, REFRESH_THREAD_NAME); + + refresher.setDaemon(true); + refresher.start(); + } + + public void stop() { + running = false; + Thread refreshThread = refresher; + if (refreshThread != null) { + refreshThread.interrupt(); + if (Thread.currentThread() == refreshThread) { + return; + } + try { + while (refreshThread.isAlive()) { + refreshThread.join(250L); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + refresher = null; + } + } + } + + public void close() { + flushPendingIncremental(); + stop(); + try { + persistIfDirty(); + } finally { + clearEstimateCache(); + closeMappedChannels(); + deleteTemporaryBlobBaseForSlot((byte) 0); + deleteTemporaryBlobBaseForSlot((byte) 1); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Rebuild */ + /* ────────────────────────────────────────────────────────────── */ + + /** + * Rebuild the inactive buffer from scratch (blocking).
+ * Readers stay lock‑free; once complete a single volatile store publishes the fresh {@code State}. + * + * @return number of statements scanned. + */ + public synchronized long rebuildOnceSlow() { + flushPendingIncremental(); + closeMappedChannels(persistenceBlobBaseFile); + +// try { +// Thread.sleep(r.nextInt(10)); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } + +// long currentMemoryUsage = currentMemoryUsage(); + + boolean rebuildIntoA = !usingA; // remember before toggling + + State tgt = rebuildIntoA ? bufA : bufB; + byte previousCurrentSlot = slotByte(slotOf(current)); + byte targetSlot = slotByte(slotOf(tgt)); + clearResidentTrackingForSlot(slotOf(tgt)); + clearSlotPersistence(targetSlot); + if (persistenceBlobBaseFile != null) { + ensureTemporaryBlobBaseForSlot(targetSlot); + } + tgt.clear(); // wipe everything (add + del) + rebuildEpoch.incrementAndGet(); // mark rebuild in progress (odd epoch) + long seen = 0L; + long l = System.currentTimeMillis(); + lastRobustSynopsisSpillSegmentCount = 0; + try { + try ( + SailDataset ds = sailStore.getExplicitSailSource().dataset(IsolationLevels.READ_COMMITTED); + CloseableIteration it = ds.getStatements(null, null, null)) { + IngestEvent[] rebuildBatch = new IngestEvent[ROBUST_REBUILD_BATCH_SIZE]; + // long[] robustQuadBatch = new long[ROBUST_REBUILD_BATCH_SIZE << 2]; + int rebuildBatchSize = 0; + + while (it.hasNext()) { + if (Thread.currentThread().isInterrupted() || !running && Thread.currentThread() == refresher) { + break; + } + Statement st = it.next(); + try { + IngestEvent event = toIngestEvent(str(st.getSubject()), str(st.getPredicate()), + str(st.getObject()), + str(st.getContext()), false); + if (event == null) { + continue; + } + rebuildBatch[rebuildBatchSize] = event; + int quadOffset = rebuildBatchSize << 2; + // robustQuadBatch[quadOffset] = event.hs; + // robustQuadBatch[quadOffset + 1] = event.hp; + // robustQuadBatch[quadOffset + 2] = event.ho; + // robustQuadBatch[quadOffset + 3] = event.hc; + rebuildBatchSize++; + if (rebuildBatchSize == rebuildBatch.length) { + synchronized (tgt) { + ingestBatch(tgt, rebuildBatch, rebuildBatchSize); + } + // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); + // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); + rebuildBatchSize = 0; + } +// if (seen > 0 && seen % ROBUST_HEADROOM_CHECK_INTERVAL == 0 +// && shouldShedRobustSynopsisBuilder()) { +// if (rebuildBatchSize > 0) { +// synchronized (tgt) { +// ingestBatch(tgt, rebuildBatch, rebuildBatchSize); +// } +// // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); +// // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); +// rebuildBatchSize = 0; +// } +// // shedResidentSketchMemoryForRobustSynopsis(); +// // robustSpillBuffer.spillForHeadroom(); +// } + } catch (MemoryPressureAbort | OutOfMemoryError pressureFailure) { + + return seen; + } catch (Throwable e) { + throw e; + } + + seen++; + +// if (seen % throttleEveryN == 0 && throttleMillis > 0) { +// try { +// Thread.sleep(throttleMillis); +// } catch (InterruptedException ie) { +// Thread.currentThread().interrupt(); +// break; +// } +// } + + if (seen % 100000 == 0) { + System.out.println( + "RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + ", seen " + + seen + " triples so far. Elapsed: " + (System.currentTimeMillis() - l) / 1000 + + " s."); + } + } + if (seen > 0) { + if (rebuildBatchSize > 0) { + synchronized (tgt) { + ingestBatch(tgt, rebuildBatch, rebuildBatchSize); + } + } + } + } + + if (blobBaseForSlot(targetSlot) == null && persistenceBlobBaseFile != null) { + setBlobBaseForSlot(targetSlot, persistenceBlobBaseFile); + } + current = tgt; // single volatile write → visible to all readers + seenTriples = seen; + approxStoreSize.set(seen); + sketchesLoaded = true; + rebuildRequired.set(false); + dirty.set(true); + manifestDirty.set(true); + usingA = !usingA; + synchronized (sketchCacheLock) { + cacheDirectory.clearDirtyForSlot(previousCurrentSlot); + } + + // staleness: publish times & reset churn sampler + lastRebuildPublishMs = System.currentTimeMillis(); + churnSampler.reset(); + + return seen; + } catch (MemoryPressureAbort | OutOfMemoryError pressureFailure) { + + return seen; + } finally { +// releaseRobustBuilderTracking(); + if ((rebuildEpoch.get() & 1L) != 0L) { + rebuildEpoch.incrementAndGet(); // mark rebuild complete (even epoch) + } + } + } + + private long currentMemoryUsage() { +// System.gc(); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + } +// System.gc(); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + } +// System.gc(); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + } + + Runtime runtime = Runtime.getRuntime(); + return runtime.totalMemory() - runtime.freeMemory(); + } + + private long availableHeapHeadroomBytes() { + long overrideBytes = debugAvailableHeapHeadroomOverrideBytes; + if (overrideBytes != DEBUG_NO_HEADROOM_OVERRIDE) { + return Math.max(0L, overrideBytes); + } + Runtime runtime = Runtime.getRuntime(); + long usedBytes = runtime.totalMemory() - runtime.freeMemory(); + return Math.max(0L, runtime.maxMemory() - usedBytes); + } + + private void clearRobustRebuildBackoff() { + robustRebuildRetryAfterNanos = 0L; + } + + /* ────────────────────────────────────────────────────────────── */ + /* Incremental updates */ + /* ────────────────────────────────────────────────────────────── */ + + public void addStatement(Statement st) { + Objects.requireNonNull(st); + if (!rebuildRequired.get() && !sketchesLoaded && persistenceEnabled && persistenceFile != null + && hasSnapshotAvailable(persistenceFile)) { + tryLoadFromDisk(); + } + if (!sketchesLoaded) { + approxStoreSize.incrementAndGet(); + rebuildRequired.set(true); + return; + } + + String s = str(st.getSubject()); + String p = str(st.getPredicate()); + String o = str(st.getObject()); + String c = str(st.getContext()); + String signature = sig(s, p, o, c); + churnSampler.recordAdd(signature, samplingInterval()); + seenTriples = approxStoreSize.incrementAndGet(); + + try { + ingestIncremental(s, p, o, c, false); + +// while (true) { +// long epoch = rebuildEpoch.get(); +// if ((epoch & 1L) != 0L) { +// synchronized (bufA) { +// ingest(bufA, st, false); +// } +// synchronized (bufB) { +// ingest(bufB, st, false); +// } +// break; +// } +// +// State target = current; +// synchronized (target) { +// if (rebuildEpoch.get() != epoch) { +// continue; +// } +// ingest(target, st, false); +// break; +// } +// } + + } catch (MemoryPressureAbort | OutOfMemoryError oom) { + logger.warn("Out of memory while applying incremental estimator update; unloading sketches", oom); + unloadInternal(true); + return; + } + dirty.set(true); + } + + public void addStatement(Resource s, IRI p, Value o, Resource c) { + addStatement(sailStore.getValueFactory().createStatement(s, p, o, c)); + } + + public void addStatement(Resource s, IRI p, Value o) { + addStatement(s, p, o, null); + } + + public void deleteStatement(Statement st) { + Objects.requireNonNull(st); + if (!rebuildRequired.get() && !sketchesLoaded && persistenceEnabled && persistenceFile != null + && hasSnapshotAvailable(persistenceFile)) { + tryLoadFromDisk(); + } + if (!sketchesLoaded) { + approxStoreSize.updateAndGet(v -> Math.max(0, v - 1)); + rebuildRequired.set(true); + return; + } + + String s = str(st.getSubject()); + String p = str(st.getPredicate()); + String o = str(st.getObject()); + String c = str(st.getContext()); + String signature = sig(s, p, o, c); + churnSampler.recordDelete(signature, samplingInterval()); + seenTriples = approxStoreSize.updateAndGet(v -> Math.max(0, v - 1)); + + try { + ingestIncremental(s, p, o, c, true); + } catch (MemoryPressureAbort | OutOfMemoryError oom) { + logger.warn("Out of memory while applying incremental estimator delete; unloading sketches", oom); + unloadInternal(true); + return; + } + dirty.set(true); + } + + public void deleteStatement(Resource s, IRI p, Value o, Resource c) { + deleteStatement(sailStore.getValueFactory().createStatement(s, p, o, c)); + } + + public void deleteStatement(Resource s, IRI p, Value o) { + deleteStatement(s, p, o, null); + } + + private void ingestIncremental(String s, String p, String o, String c, boolean isDelete) { + IngestEvent event = toIngestEvent(s, p, o, c, isDelete); + if (event == null) { + return; + } + IngestEvent[] batch = null; + int batchSize = 0; + synchronized (incrementalBufferLock) { + ensureIncrementalBufferCapacity(incrementalBufferCount + 1); + incrementalBuffer[incrementalBufferCount++] = event; + if (incrementalBufferCount >= INCREMENTAL_BATCH_SIZE) { + batch = drainIncrementalBufferLocked(); + batchSize = batch.length; + } + } + if (batch != null) { + applyIncrementalBatch(batch, batchSize); + } + } + + private IngestEvent toIngestEvent(String s, String p, String o, String c, boolean isDelete) { + try { + int si = hash(s); + int pi = hash(p); + int oi = hash(o); + int ci = hash(c); + + long hs = valueFingerprint(s); + long hp = valueFingerprint(p); + long ho = valueFingerprint(o); + long hc = valueFingerprint(c); + long sig = quadFingerprint(hs, hp, ho, hc); + long spKey = pairKey(si, pi); + long soKey = pairKey(si, oi); + long scKey = pairKey(si, ci); + long poKey = pairKey(pi, oi); + long pcKey = pairKey(pi, ci); + long ocKey = pairKey(oi, ci); + return new IngestEvent(isDelete, si, pi, oi, ci, hs, hp, ho, hc, sig, spKey, soKey, scKey, poKey, pcKey, + ocKey); + } catch (NullPointerException npe) { + return null; + } + } + + private void ensureIncrementalBufferCapacity(int minCapacity) { + if (minCapacity <= incrementalBuffer.length) { + return; + } + int next = incrementalBuffer.length; + while (next < minCapacity) { + next <<= 1; + } + incrementalBuffer = Arrays.copyOf(incrementalBuffer, next); + } + + private IngestEvent[] drainIncrementalBufferLocked() { + if (incrementalBufferCount == 0) { + return null; + } + IngestEvent[] drained = Arrays.copyOf(incrementalBuffer, incrementalBufferCount); + Arrays.fill(incrementalBuffer, 0, incrementalBufferCount, null); + incrementalBufferCount = 0; + return drained; + } + + private void flushPendingIncremental() { + while (true) { + IngestEvent[] batch; + int batchSize; + synchronized (incrementalBufferLock) { + batch = drainIncrementalBufferLocked(); + if (batch == null) { + return; + } + batchSize = batch.length; + } + applyIncrementalBatch(batch, batchSize); + } + } + + private void applyIncrementalBatch(IngestEvent[] batch, int batchSize) { + if (batchSize == 0) { + return; + } + + while (true) { + long epoch = rebuildEpoch.get(); + if ((epoch & 1L) != 0L) { + synchronized (bufA) { + ingestBatch(bufA, batch, batchSize); + } + synchronized (bufB) { + ingestBatch(bufB, batch, batchSize); + } + return; + } + + State target = current; + synchronized (target) { + if (rebuildEpoch.get() != epoch) { + continue; + } + ingestBatch(target, batch, batchSize); + return; + } + } + } + + private void ingestBatch(State state, IngestEvent[] batch, int batchSize) { + BatchUpdateAccumulator updates = new BatchUpdateAccumulator(Math.max(64, batchSize << 5)); + for (int i = 0; i < batchSize; i++) { + IngestEvent event = batch[i]; + if (event == null) { + continue; + } + accumulateIngestEvent(updates, event); + } + updates.forEach( + (recType, isDelete, axisA, axisB, x, y, values, valueCount) -> applyGroupedUpdate(state, recType, + isDelete, axisA, axisB, x, y, values, valueCount)); + enforceSketchBudget(); + } + + private void applyGroupedUpdate(State state, byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, + long[] values, int valueCount) { + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.findOrAdd(recType, isDelete, axisA, axisB, x, y); + } + SketchAddress address = new SketchAddress(recType, isDelete, axisA, axisB, x, y); + UpdateSketch sketch = getSketchForWrite(state, address, entryId); + for (int i = 0; i < valueCount; i++) { + sketch.update(values[i]); + } + markDirty(state, entryId); + touchResidentSketch(state, entryId, sketch, false); + } + + private void accumulateIngestEvent(BatchUpdateAccumulator updates, IngestEvent event) { + boolean isDelete = event.isDelete; + int si = event.si; + int pi = event.pi; + int oi = event.oi; + int ci = event.ci; + long hs = event.hs; + long hp = event.hp; + long ho = event.ho; + long hc = event.hc; + long sig = event.sig; + + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.S.ordinal(), (byte) 0, si, 0, sig); + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.P.ordinal(), (byte) 0, pi, 0, sig); + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.O.ordinal(), (byte) 0, oi, 0, sig); + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.C.ordinal(), (byte) 0, ci, 0, sig); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.P.ordinal(), si, 0, hp); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.O.ordinal(), si, 0, ho); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.C.ordinal(), si, 0, hc); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.S.ordinal(), pi, 0, hs); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.O.ordinal(), pi, 0, ho); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.C.ordinal(), pi, 0, hc); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.S.ordinal(), oi, 0, hs); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.P.ordinal(), oi, 0, hp); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.C.ordinal(), oi, 0, hc); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.S.ordinal(), ci, 0, hs); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.P.ordinal(), ci, 0, hp); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.O.ordinal(), ci, 0, ho); + + accumulatePair(updates, Pair.SP, isDelete, event.spKey, sig, ho, hc); + accumulatePair(updates, Pair.SO, isDelete, event.soKey, sig, hp, hc); + accumulatePair(updates, Pair.SC, isDelete, event.scKey, sig, hp, ho); + accumulatePair(updates, Pair.PO, isDelete, event.poKey, sig, hs, hc); + accumulatePair(updates, Pair.PC, isDelete, event.pcKey, sig, hs, ho); + accumulatePair(updates, Pair.OC, isDelete, event.ocKey, sig, hs, hp); + } + + private static void accumulatePair(BatchUpdateAccumulator updates, Pair pair, boolean isDelete, long key, + long triple, + long comp1, long comp2) { + int x = (int) (key >>> 32); + int y = (int) key; + byte axis = (byte) pair.ordinal(); + updates.add(REC_PAIR_TRIPLE, isDelete, axis, (byte) 0, x, y, triple); + updates.add(REC_PAIR_COMP1, isDelete, axis, (byte) 0, x, y, comp1); + updates.add(REC_PAIR_COMP2, isDelete, axis, (byte) 0, x, y, comp2); + } + + /* ------------------------------------------------------------------ */ + + /** + * Common ingestion path for both add and delete operations. + * + * @param t target {@code State} (one of the two buffers) + * @param st statement to ingest + * @param isDelete {@code false}=live sketch, {@code true}=tomb‑stone sketch + */ + private void ingest(State t, Statement st, boolean isDelete) { + try { + String s = str(st.getSubject()); + String p = str(st.getPredicate()); + String o = str(st.getObject()); + String c = str(st.getContext()); + + int si = hash(s), pi = hash(p), oi = hash(o), ci = hash(c); + long hs = valueFingerprint(s); + long hp = valueFingerprint(p); + long ho = valueFingerprint(o); + long hc = valueFingerprint(c); + long sig = quadFingerprint(hs, hp, ho, hc); + long spKey = pairKey(si, pi); + long soKey = pairKey(si, oi); + long scKey = pairKey(si, ci); + long poKey = pairKey(pi, oi); + long pcKey = pairKey(pi, ci); + long ocKey = pairKey(oi, ci); + + /* single‑component cardinalities */ + updateSketch(t, singleTripleAddress(isDelete, Component.S, si), sig); + updateSketch(t, singleTripleAddress(isDelete, Component.P, pi), sig); + updateSketch(t, singleTripleAddress(isDelete, Component.O, oi), sig); + updateSketch(t, singleTripleAddress(isDelete, Component.C, ci), sig); + + /* complement sets for singles */ + updateSketch(t, singleComplementAddress(isDelete, Component.S, Component.P, si), hp); + updateSketch(t, singleComplementAddress(isDelete, Component.S, Component.O, si), ho); + updateSketch(t, singleComplementAddress(isDelete, Component.S, Component.C, si), hc); + + updateSketch(t, singleComplementAddress(isDelete, Component.P, Component.S, pi), hs); + updateSketch(t, singleComplementAddress(isDelete, Component.P, Component.O, pi), ho); + updateSketch(t, singleComplementAddress(isDelete, Component.P, Component.C, pi), hc); + + updateSketch(t, singleComplementAddress(isDelete, Component.O, Component.S, oi), hs); + updateSketch(t, singleComplementAddress(isDelete, Component.O, Component.P, oi), hp); + updateSketch(t, singleComplementAddress(isDelete, Component.O, Component.C, oi), hc); + + updateSketch(t, singleComplementAddress(isDelete, Component.C, Component.S, ci), hs); + updateSketch(t, singleComplementAddress(isDelete, Component.C, Component.P, ci), hp); + updateSketch(t, singleComplementAddress(isDelete, Component.C, Component.O, ci), ho); + + /* pairs (triples + complements) */ + updatePairSketch(t, isDelete, Pair.SP, REC_PAIR_TRIPLE, spKey, sig); + updatePairSketch(t, isDelete, Pair.SP, REC_PAIR_COMP1, spKey, ho); + updatePairSketch(t, isDelete, Pair.SP, REC_PAIR_COMP2, spKey, hc); + + updatePairSketch(t, isDelete, Pair.SO, REC_PAIR_TRIPLE, soKey, sig); + updatePairSketch(t, isDelete, Pair.SO, REC_PAIR_COMP1, soKey, hp); + updatePairSketch(t, isDelete, Pair.SO, REC_PAIR_COMP2, soKey, hc); + + updatePairSketch(t, isDelete, Pair.SC, REC_PAIR_TRIPLE, scKey, sig); + updatePairSketch(t, isDelete, Pair.SC, REC_PAIR_COMP1, scKey, hp); + updatePairSketch(t, isDelete, Pair.SC, REC_PAIR_COMP2, scKey, ho); + + updatePairSketch(t, isDelete, Pair.PO, REC_PAIR_TRIPLE, poKey, sig); + updatePairSketch(t, isDelete, Pair.PO, REC_PAIR_COMP1, poKey, hs); + updatePairSketch(t, isDelete, Pair.PO, REC_PAIR_COMP2, poKey, hc); + + updatePairSketch(t, isDelete, Pair.PC, REC_PAIR_TRIPLE, pcKey, sig); + updatePairSketch(t, isDelete, Pair.PC, REC_PAIR_COMP1, pcKey, hs); + updatePairSketch(t, isDelete, Pair.PC, REC_PAIR_COMP2, pcKey, ho); + + updatePairSketch(t, isDelete, Pair.OC, REC_PAIR_TRIPLE, ocKey, sig); + updatePairSketch(t, isDelete, Pair.OC, REC_PAIR_COMP1, ocKey, hs); + updatePairSketch(t, isDelete, Pair.OC, REC_PAIR_COMP2, ocKey, hp); + } catch (NullPointerException npe) { + // ignore NPEs from null values (e.g. missing context) + } finally { + enforceSketchBudget(); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Quick cardinalities (public) */ + /* ────────────────────────────────────────────────────────────── */ + + public double cardinalitySingle(Component c, String v) { + flushPendingIncremental(); + State snap = current; + synchronized (snap) { + int idx = hash(v); + UpdateSketch add = getSketchForRead(snap, singleTripleAddress(false, c, idx)); + UpdateSketch del = getSketchForRead(snap, singleTripleAddress(true, c, idx)); + return estimateMinus(add, del); + } + } + + public double cardinalityPair(Pair p, String x, String y) { + flushPendingIncremental(); + State snap = current; + synchronized (snap) { + long key = pairKey(hash(x), hash(y)); + int row = (int) (key >>> 32); + int col = (int) key; + UpdateSketch add = getSketchForRead(snap, pairAddress(REC_PAIR_TRIPLE, false, p, row, col)); + UpdateSketch del = getSketchForRead(snap, pairAddress(REC_PAIR_TRIPLE, true, p, row, col)); + return estimateMinus(add, del); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Legacy join helpers (unchanged external API) */ + /* ────────────────────────────────────────────────────────────── */ + + public double estimateJoinOn(Component join, Pair a, String ax, String ay, + Pair b, String bx, String by) { + State snap = current; + synchronized (snap) { + return joinPairs(snap, join, a, ax, ay, b, bx, by); + } + } + + public double estimateJoinOn(Component j, Component a, String av, + Component b, String bv) { + State snap = current; + synchronized (snap) { + return joinSingles(snap, j, a, av, b, bv); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* ✦ Fluent BGP builder ✦ */ + /* ────────────────────────────────────────────────────────────── */ + + public JoinEstimate estimate(Component joinVar, String s, String p, String o, String c) { + flushPendingIncremental(); + State snap = current; + if (estimateCacheTtlNanos <= 0L) { + synchronized (snap) { + PatternStats st = statsOf(snap, joinVar, s, p, o, c); + Sketch bindings = st.sketch == null ? EMPTY : st.sketch; + return new JoinEstimate(snap, joinVar, bindings, bindings.getEstimate(), st.card); + } + } + PatternStats st = patternStats(snap, joinVar, s, p, o, c); + Sketch bindings = st.sketch == null ? EMPTY : st.sketch; + return new JoinEstimate(snap, joinVar, bindings, bindings.getEstimate(), st.card); + } + + public double estimateCount(Component joinVar, String s, String p, String o, String c) { + return estimate(joinVar, s, p, o, c).estimate(); + } + + public final class JoinEstimate { + private final State snap; + private Component joinVar; + private Sketch bindings; + private double distinct; + private double resultSize; + + private JoinEstimate(State snap, Component joinVar, Sketch bindings, + double distinct, double size) { + this.snap = snap; + this.joinVar = joinVar; + this.bindings = bindings; + this.distinct = distinct; + this.resultSize = size; + } + + public JoinEstimate join(Component newJoinVar, String s, String p, String o, String c) { + if (estimateCacheTtlNanos <= 0L) { + synchronized (snap) { + return joinWithPatternStats(newJoinVar, statsOf(snap, newJoinVar, s, p, o, c)); + } + } + return joinWithPatternStats(newJoinVar, patternStats(snap, newJoinVar, s, p, o, c)); + } + + private JoinEstimate joinWithPatternStats(Component newJoinVar, PatternStats rhs) { + /* stats of the right‑hand relation */ + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(this.bindings); + if (rhs.sketch != null) { + ix.intersect(rhs.sketch); + } + Sketch inter = ix.getResult(); + double interDistinct = inter.getEstimate(); + + if (interDistinct == 0.0) { // early out + this.bindings = inter; + this.distinct = 0.0; + this.resultSize = 0.0; + this.joinVar = newJoinVar; + return this; + } + + /* average fan‑outs */ + double leftAvg = Math.max(0.001, distinct == 0 ? 0 : resultSize / distinct); + double rightAvg = Math.max(0.001, rhs.distinct == 0 ? 0 : rhs.card / rhs.distinct); + + /* join‑size estimate */ + double newSize = interDistinct * leftAvg * rightAvg; + + /* round to nearest whole solution count if enabled */ + this.resultSize = roundJoinEstimate(newSize); + + /* carry forward */ + this.bindings = inter; + this.distinct = interDistinct; + this.joinVar = newJoinVar; + return this; + } + + /** Estimated number of solutions produced so far. */ + public double estimate() { + return resultSize; + } + + public double size() { + return resultSize; + } + + public double count() { + return resultSize; + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Pattern statistics */ + /* ────────────────────────────────────────────────────────────── */ + + private static final class PatternStats { + final Sketch sketch; // Θ‑sketch of join‑var bindings + final double distinct; // = sketch.getEstimate() + final double card; // relation size |R| + + PatternStats(Sketch s, double card) { + this.sketch = s; + this.distinct = s == null ? 0.0 : s.getEstimate(); + this.card = card; + } + } + + private static final class EstimateCacheKey { + private final Component joinVar; + private final String s; + private final String p; + private final String o; + private final String c; + + private EstimateCacheKey(Component joinVar, String s, String p, String o, String c) { + this.joinVar = Objects.requireNonNull(joinVar, "joinVar"); + this.s = s; + this.p = p; + this.o = o; + this.c = c; + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (!(other instanceof EstimateCacheKey)) { + return false; + } + EstimateCacheKey that = (EstimateCacheKey) other; + return joinVar == that.joinVar + && Objects.equals(s, that.s) + && Objects.equals(p, that.p) + && Objects.equals(o, that.o) + && Objects.equals(c, that.c); + } + + @Override + public int hashCode() { + return Objects.hash(joinVar, s, p, o, c); + } + } + + private static final class EstimateCacheEntry { + private final PatternStats patternStats; + private final long expiresAtNanos; + + private EstimateCacheEntry(PatternStats patternStats, long expiresAtNanos) { + this.patternStats = Objects.requireNonNull(patternStats, "patternStats"); + this.expiresAtNanos = expiresAtNanos; + } + + private boolean isAlive(long nowNanos) { + return nowNanos - expiresAtNanos < 0L; + } + } + + private static final class BindingSketchResult { + final Sketch sketch; + final EnumSet usedPairs; + + private BindingSketchResult(Sketch sketch, EnumSet usedPairs) { + this.sketch = sketch; + this.usedPairs = usedPairs; + } + + static BindingSketchResult of(Sketch sketch) { + return new BindingSketchResult(sketch, EnumSet.noneOf(Pair.class)); + } + + static BindingSketchResult of(Sketch sketch, Pair pair) { + return new BindingSketchResult(sketch, EnumSet.of(pair)); + } + + static BindingSketchResult of(Sketch sketch, Pair first, Pair second) { + return new BindingSketchResult(sketch, EnumSet.of(first, second)); + } + } + + private static final class PairSketchCandidate { + final Pair pair; + final Sketch sketch; + + PairSketchCandidate(Pair pair, Sketch sketch) { + this.pair = pair; + this.sketch = sketch; + } + } + + private static EnumMap fixedComponents(String s, String p, String o, String c) { + EnumMap fixed = new EnumMap<>(Component.class); + if (s != null) { + fixed.put(Component.S, s); + } + if (p != null) { + fixed.put(Component.P, p); + } + if (o != null) { + fixed.put(Component.O, o); + } + if (c != null) { + fixed.put(Component.C, c); + } + return fixed; + } + + /** Build both |R| and Θ‑sketch for one triple pattern. */ + private PatternStats statsOf(State st, Component j, + String s, String p, String o, String c) { + + EnumMap fixed = fixedComponents(s, p, o, c); + BindingSketchResult bindingSketch = bindingsSketch(st, j, fixed); + Sketch sk = bindingSketch.sketch; + + double pairDrivenCardinality = usedPairCardinality(st, fixed, bindingSketch.usedPairs); + if (Double.isFinite(pairDrivenCardinality)) { + return new PatternStats(sk, enforceCardinalityLowerBound(sk, pairDrivenCardinality)); + } + + double card; + + switch (fixed.size()) { + case 0: + card = approxTotalRows(); + break; + + case 1: { + Map.Entry e = fixed.entrySet().iterator().next(); + card = cardSingle(st, e.getKey(), e.getValue()); + break; + } + + case 2: { + Component[] cmp = fixed.keySet().toArray(new Component[0]); + Pair pr = findPair(cmp[0], cmp[1]); + if (pr != null) { + card = cardPair(st, pr, fixed.get(pr.x), fixed.get(pr.y)); + } else { // components not a known pair – conservative min + double a = cardSingle(st, cmp[0], fixed.get(cmp[0])); + double b = cardSingle(st, cmp[1], fixed.get(cmp[1])); + card = Math.min(a, b); + } + break; + } + + default: { // 3 or 4 bound – use smallest single cardinality + card = Double.POSITIVE_INFINITY; + for (Map.Entry e : fixed.entrySet()) { + card = Math.min(card, cardSingle(st, e.getKey(), e.getValue())); + } + break; + } + } + return new PatternStats(sk, enforceCardinalityLowerBound(sk, card)); + } + + private PatternStats patternStats(State snap, Component joinVar, String s, String p, String o, String c) { + if (estimateCacheTtlNanos <= 0L) { + synchronized (snap) { + return statsOf(snap, joinVar, s, p, o, c); + } + } + + long nowNanos = System.nanoTime(); + EstimateCacheKey key = new EstimateCacheKey(joinVar, s, p, o, c); + EstimateCacheEntry cached = estimateCache.get(key); + if (cached != null && cached.isAlive(nowNanos)) { + return cached.patternStats; + } + + PatternStats frozenStats; + synchronized (snap) { + frozenStats = freezePatternStats(statsOf(snap, joinVar, s, p, o, c)); + } + estimateCache.put(key, new EstimateCacheEntry(frozenStats, saturatingAdd(nowNanos, estimateCacheTtlNanos))); + trimEstimateCache(nowNanos); + return frozenStats; + } + + private PatternStats freezePatternStats(PatternStats patternStats) { + if (patternStats.sketch == null) { + return patternStats; + } + return new PatternStats(patternStats.sketch.compact(), patternStats.card); + } + + private void trimEstimateCache(long nowNanos) { + if (estimateCache.size() <= MAX_ESTIMATE_CACHE_ENTRIES) { + return; + } + for (Map.Entry entry : estimateCache.entrySet()) { + if (!entry.getValue().isAlive(nowNanos)) { + estimateCache.remove(entry.getKey(), entry.getValue()); + } + } + if (estimateCache.size() > MAX_ESTIMATE_CACHE_ENTRIES) { + estimateCache.clear(); + } + } + + private void clearEstimateCache() { + estimateCache.clear(); + } + + private double approxTotalRows() { + return Math.max(0.0d, (double) Math.max(seenTriples, approxStoreSize.get())); + } + + private double usedPairCardinality(State st, EnumMap fixed, EnumSet usedPairs) { + if (usedPairs.isEmpty()) { + return Double.NaN; + } + double card = Double.POSITIVE_INFINITY; + for (Pair pair : usedPairs) { + String xValue = fixed.get(pair.x); + String yValue = fixed.get(pair.y); + if (xValue == null || yValue == null) { + continue; + } + card = Math.min(card, cardPair(st, pair, xValue, yValue)); + } + return Double.isFinite(card) ? card : Double.NaN; + } + + private static double enforceCardinalityLowerBound(Sketch sketch, double cardinality) { + if (sketch == null || !Double.isFinite(cardinality)) { + return cardinality; + } +// if(cardinality < sketch.getEstimate()){ +// System.out.println("Cardinality " + cardinality + " is lower than sketch estimate " + sketch.getEstimate()); +// }else if(cardinality > sketch.getEstimate()) { +// System.out.println("Cardinality " + cardinality + " is higher than sketch estimate " + sketch.getEstimate()); +// } + + // Cardinality cannot be lower than the estimated number of distinct join bindings. +// return Math.max(cardinality, sketch.getEstimate()); + return cardinality; + } + + /* + * Join estimate within 20% bound. left=PoKey[predicate=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, + * object=http://example.com/theme/library/Copy], right=PoKey[predicate=http://example.com/theme/library/locatedAt, + * object=http://example.com/theme/library/branch/2], estimate=76452.0, actual=77331, error=0.011366722271792683 + * Join estimate within 20% bound. left=PoKey[predicate=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, + * object=http://example.com/theme/library/Copy], right=PoKey[predicate=http://example.com/theme/library/locatedAt, + * object=http://example.com/theme/library/branch/3], estimate=77034.0, actual=77326, error=0.0037762201588081626 + * Join estimate within 20% bound. left=PoKey[predicate=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, + * object=http://example.com/theme/library/Copy], right=PoKey[predicate=http://example.com/theme/library/locatedAt, + * object=http://example.com/theme/library/branch/1], estimate=79833.0, actual=77295, error=0.032835241606830975 + * Join estimate within 20% bound. left=PoKey[predicate=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, + * object=http://example.com/theme/library/Copy], right=PoKey[predicate=http://example.com/theme/library/locatedAt, + * object=http://example.com/theme/library/branch/4], estimate=72867.0, actual=77279, error=0.057091836074483364 + * Join estimate within 20% bound. left=PoKey[predicate=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, + * object=http://example.com/theme/library/Copy], right=PoKey[predicate=http://example.com/theme/library/locatedAt, + * object=http://example.com/theme/library/branch/0], estimate=74045.0, actual=77111, error=0.039760864208738055 + * + */ + + /* ────────────────────────────────────────────────────────────── */ + /* Snapshot‑level cardinalities */ + /* ────────────────────────────────────────────────────────────── */ + + private double cardSingle(State st, Component c, String val) { + int idx = hash(val); + UpdateSketch add = getSketchForRead(st, singleTripleAddress(false, c, idx)); + UpdateSketch del = getSketchForRead(st, singleTripleAddress(true, c, idx)); + return estimateMinus(add, del); + } + + private double cardPair(State st, Pair p, String x, String y) { + long key = pairKey(hash(x), hash(y)); + int row = (int) (key >>> 32); + int col = (int) key; + UpdateSketch add = getSketchForRead(st, pairAddress(REC_PAIR_TRIPLE, false, p, row, col)); + UpdateSketch del = getSketchForRead(st, pairAddress(REC_PAIR_TRIPLE, true, p, row, col)); + return estimateMinus(add, del); + } + + /* ────────────────────────────────────────────────────────────── */ + /* Sketch helpers */ + /* ────────────────────────────────────────────────────────────── */ + + private BindingSketchResult bindingsSketch(State st, Component j, EnumMap f) { + + if (f.isEmpty()) { + return BindingSketchResult.of(null); // no constant – unsupported + } + + /* 1 constant → single complement */ + if (f.size() == 1) { + Map.Entry e = f.entrySet().iterator().next(); + return BindingSketchResult.of(singleWrapper(st, e.getKey()).getComplementSketch(j, hash(e.getValue()))); + } + + /* 2 constants: pair fast path */ + Component[] cs = f.keySet().toArray(new Component[0]); + if (f.size() == 2) { + Pair pr = findPair(cs[0], cs[1]); + if (pr != null && (j == pr.comp1 || j == pr.comp2)) { + int idxX = hash(f.get(pr.x)); + int idxY = hash(f.get(pr.y)); + Sketch pairSketch = pairWrapper(st, pr).getComplementSketch(j, pairKey(idxX, idxY)); + return BindingSketchResult.of(pairSketch, pr); + } + } else if (f.size() == 3) { + List pairCandidates = new ArrayList<>(3); + var best = Double.POSITIVE_INFINITY; + BindingSketchResult candidateForBest = null; + for (int i = 0; i < cs.length; i++) { + for (int k = i + 1; k < cs.length; k++) { + Pair pr = findPair(cs[i], cs[k]); + if (pr == null || (j != pr.comp1 && j != pr.comp2)) { + continue; + } + int idxX = hash(f.get(pr.x)); + int idxY = hash(f.get(pr.y)); + Sketch candidate = pairWrapper(st, pr).getComplementSketch(j, pairKey(idxX, idxY)); + if (candidate == null) { + continue; + } + if (candidate.getEstimate() < best) { + best = candidate.getEstimate(); + candidateForBest = BindingSketchResult.of(candidate, pr); + } + pairCandidates.add(new PairSketchCandidate(pr, candidate)); + } + } + + if (candidateForBest != null) { + return candidateForBest; + } + +// Sketch best = null; +// Pair bestFirst = null; +// Pair bestSecond = null; +// double bestEstimate = Double.POSITIVE_INFINITY; +// for (int i = 0; i < pairCandidates.size(); i++) { +// for (int k = i + 1; k < pairCandidates.size(); k++) { +// Intersection ix = SetOperation.builder().buildIntersection(); +// ix.intersect(pairCandidates.get(i).sketch); +// ix.intersect(pairCandidates.get(k).sketch); +// Sketch intersection = ix.getResult(); +// double estimate = intersection.getEstimate(); +// if (best == null || estimate < bestEstimate) { +// best = intersection; +// bestFirst = pairCandidates.get(i).pair; +// bestSecond = pairCandidates.get(k).pair; +// bestEstimate = estimate; +// } +// } +// } + +// if (best != null) { +// return BindingSketchResult.of(best, bestFirst, bestSecond); +// } + if (!pairCandidates.isEmpty()) { + PairSketchCandidate first = pairCandidates.get(0); + return BindingSketchResult.of(first.sketch, first.pair); + } + } + + /* generic fall‑back */ + Sketch acc = null; + for (Map.Entry e : f.entrySet()) { + Sketch sk = singleWrapper(st, e.getKey()) + .getComplementSketch(j, hash(e.getValue())); + if (sk == null) { + continue; + } + if (acc == null) { + acc = sk; + } else { + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(acc); + ix.intersect(sk); + acc = ix.getResult(); + } + } + return BindingSketchResult.of(acc); + } + + /* ────────────────────────────────────────────────────────────── */ + /* Pair & single wrappers (read‑only) */ + /* ────────────────────────────────────────────────────────────── */ + + private StateSingleWrapper singleWrapper(State st, Component fixed) { + return new StateSingleWrapper(st, fixed); + } + + private StatePairWrapper pairWrapper(State st, Pair p) { + return new StatePairWrapper(st, p); + } + + private final class StateSingleWrapper { + final State state; + final Component fixed; + + StateSingleWrapper(State state, Component f) { + this.state = state; + this.fixed = f; + } + + Sketch getComplementSketch(Component c, int fi) { + if (c == fixed) { + return null; + } + UpdateSketch a = getSketchForRead(state, singleComplementAddress(false, fixed, c, fi)); + UpdateSketch d = getSketchForRead(state, singleComplementAddress(true, fixed, c, fi)); + return subtractSketch(a, d); + } + } + + private final class StatePairWrapper { + final State state; + final Pair p; + + StatePairWrapper(State state, Pair p) { + this.state = state; + this.p = p; + } + + Sketch getComplementSketch(Component c, long key) { + int x = (int) (key >>> 32); + int y = (int) key; + UpdateSketch a, d; + if (c == p.comp1) { + a = getSketchForRead(state, pairAddress(REC_PAIR_COMP1, false, p, x, y)); + d = getSketchForRead(state, pairAddress(REC_PAIR_COMP1, true, p, x, y)); + } else if (c == p.comp2) { + a = getSketchForRead(state, pairAddress(REC_PAIR_COMP2, false, p, x, y)); + d = getSketchForRead(state, pairAddress(REC_PAIR_COMP2, true, p, x, y)); + } else { + return null; + } + return subtractSketch(a, d); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Join primitives */ + /* ────────────────────────────────────────────────────────────── */ + + private double joinPairs(State st, Component j, + Pair a, String ax, String ay, + Pair b, String bx, String by) { + + long keyA = pairKey(hash(ax), hash(ay)); + long keyB = pairKey(hash(bx), hash(by)); + + Sketch sa = pairWrapper(st, a).getComplementSketch(j, keyA); + Sketch sb = pairWrapper(st, b).getComplementSketch(j, keyB); + + if (sa == null || sb == null) { + return 0.0; + } + + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(sa); + ix.intersect(sb); + return ix.getResult().getEstimate(); + } + + private double joinSingles(State st, Component j, + Component a, String av, + Component b, String bv) { + + int idxA = hash(av), idxB = hash(bv); + + Sketch sa = singleWrapper(st, a).getComplementSketch(j, idxA); + Sketch sb = singleWrapper(st, b).getComplementSketch(j, idxB); + + if (sa == null || sb == null) { + return 0.0; + } + + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(sa); + ix.intersect(sb); + return ix.getResult().getEstimate(); + } + + /* ────────────────────────────────────────────────────────────── */ + /* Unified mutable state (add + delete) */ + /* ────────────────────────────────────────────────────────────── */ + + private static final class StateComponents { + public final T S; + public final T P; + public final T O; + public final T C; + + StateComponents(T s, T p, T o, T c) { + S = s; + P = p; + O = o; + C = c; + } + + T get(Component component) { + switch (component) { + case S: + return S; + case P: + return P; + case O: + return O; + case C: + return C; + default: + throw new IllegalStateException("Unsupported component: " + component); + } + } + + void forEach(Consumer consumer) { + consumer.accept(S); + consumer.accept(P); + consumer.accept(O); + consumer.accept(C); + } + } + + private static final class State { + final int k; // sketch nominal entries + final int buckets; // array bucket count (outer.nominalEntries) + + /* live (add) sketches */ + final StateComponents> singleTriples; + final StateComponents singles; + final EnumMap pairs = new EnumMap<>(Pair.class); + + /* tomb‑stone (delete) sketches */ + final StateComponents> delSingleTriples; + final StateComponents delSingles; + final EnumMap delPairs = new EnumMap<>(Pair.class); + + State(int k, int buckets) { + this.k = k; + this.buckets = buckets; + + singleTriples = new StateComponents<>( + new AtomicReferenceArray<>(buckets), + new AtomicReferenceArray<>(buckets), + new AtomicReferenceArray<>(buckets), + new AtomicReferenceArray<>(buckets)); + + delSingleTriples = new StateComponents<>( + new AtomicReferenceArray<>(buckets), + new AtomicReferenceArray<>(buckets), + new AtomicReferenceArray<>(buckets), + new AtomicReferenceArray<>(buckets)); + + singles = new StateComponents<>( + new SingleBuild(k, Component.S, buckets), + new SingleBuild(k, Component.P, buckets), + new SingleBuild(k, Component.O, buckets), + new SingleBuild(k, Component.C, buckets)); + + delSingles = new StateComponents<>( + new SingleBuild(k, Component.S, buckets), + new SingleBuild(k, Component.P, buckets), + new SingleBuild(k, Component.O, buckets), + new SingleBuild(k, Component.C, buckets)); + + for (Pair p : Pair.values()) { + pairs.put(p, new PairBuild(k, buckets)); + delPairs.put(p, new PairBuild(k, buckets)); + } + } + + void clear() { + singleTriples.forEach(SketchBasedJoinEstimator::clearArray); + delSingleTriples.forEach(SketchBasedJoinEstimator::clearArray); + + singles.forEach(SingleBuild::clear); + delSingles.forEach(SingleBuild::clear); + + pairs.values().forEach(PairBuild::clear); + delPairs.values().forEach(PairBuild::clear); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Build‑time structures */ + /* ────────────────────────────────────────────────────────────── */ + + private static final class SingleBuild { + final int k; + final int buckets; + final EnumMap> cmpl = new EnumMap<>(Component.class); + + SingleBuild(int k, Component fixed, int buckets) { + this.k = k; + this.buckets = buckets; + for (Component c : Component.values()) { + if (c != fixed) { + cmpl.put(c, new AtomicReferenceArray<>(buckets)); + } + } + } + + void clear() { + for (AtomicReferenceArray arr : cmpl.values()) { + SketchBasedJoinEstimator.clearArray(arr); + } + } + + void upd(Component c, int idx, long v) { + AtomicReferenceArray arr = cmpl.get(c); + if (arr == null) { + return; + } + UpdateSketch sk = arr.get(idx); + if (sk == null) { + sk = newSk(k); + arr.set(idx, sk); + } + sk.update(v); + } + } + + private static final class PairBuild { + final int k; + final int buckets; + + /** Sparse rows indexed by X; each row stores only touched Y-cells. */ + final Map rows; + + PairBuild(int k, int buckets) { + this.k = k; + this.buckets = buckets; + this.rows = new HashMap<>(); + } + + void clear() { + rows.clear(); + } + + void upT(long key, long sig) { + int x = (int) (key >>> 32); + int y = (int) key; + Row r = getOrCreateRow(x); + updateSketchMap(r.triples, y, sig, k); + } + + void up1(long key, long v) { + int x = (int) (key >>> 32); + int y = (int) key; + Row r = getOrCreateRow(x); + updateSketchMap(r.comp1, y, v, k); + } + + void up2(long key, long v) { + int x = (int) (key >>> 32); + int y = (int) key; + Row r = getOrCreateRow(x); + updateSketchMap(r.comp2, y, v, k); + } + + UpdateSketch getTriple(long key) { + int x = (int) (key >>> 32); + int y = (int) key; + Row r = rows.get(x); + return (r == null) ? null : r.triples.get(y); + } + + UpdateSketch getComp1(long key) { + int x = (int) (key >>> 32); + int y = (int) key; + Row r = rows.get(x); + return (r == null) ? null : r.comp1.get(y); + } + + UpdateSketch getComp2(long key) { + int x = (int) (key >>> 32); + int y = (int) key; + Row r = rows.get(x); + return (r == null) ? null : r.comp2.get(y); + } + + private Row getOrCreateRow(int x) { + Row r = rows.get(x); + if (r == null) { + r = new Row(); + rows.put(x, r); + } + return r; + } + + static final class Row { + final Map triples = new HashMap<>(); + final Map comp1 = new HashMap<>(); + final Map comp2 = new HashMap<>(); + } + } + + /* ────────────────────────────────────────────────────────────── */ + /* Utility */ + /* ────────────────────────────────────────────────────────────── */ + + private static double estimateMinus(UpdateSketch add, UpdateSketch del) { + if (add == null) { + return 0.0; + } + if (del == null || del.getRetainedEntries() == 0) { + return add.getEstimate(); + } + AnotB diff = SetOperation.builder().buildANotB(); + diff.setA(add); + diff.notB(del); + return diff.getResult(false).getEstimate(); + } + + private static Sketch subtractSketch(UpdateSketch add, UpdateSketch del) { + if (add == null) { + return null; + } + if (del == null || del.getRetainedEntries() == 0) { + return add; + } + AnotB diff = SetOperation.builder().buildANotB(); + diff.setA(add); + diff.notB(del); + return diff.getResult(false); + } + + private static UpdateSketch newSk(int k) { + return UpdateSketch.builder() + .setFamily(Family.ALPHA) + .setResizeFactor(ResizeFactor.X8) + .setNominalEntries(k) + .build(); + } + + private static Method resolveHashUpdateMethod() { + try { + Method method = UpdateSketch.class.getDeclaredMethod("hashUpdate", long.class); + method.setAccessible(true); + return method; + } catch (NoSuchMethodException e) { + throw new ExceptionInInitializerError(e); + } + } + + private static Method resolveAccessibleMethod(Class owner, String methodName, Class... parameterTypes) { + try { + Method method = owner.getDeclaredMethod(methodName, parameterTypes); + method.setAccessible(true); + return method; + } catch (NoSuchMethodException e) { + throw new ExceptionInInitializerError(e); + } + } + + private static Field resolveHeapAlphaField(String fieldName) { + try { + Class heapAlphaClass = Class.forName("org.apache.datasketches.theta.HeapAlphaSketch"); + Field field = heapAlphaClass.getDeclaredField(fieldName); + field.setAccessible(true); + return field; + } catch (ClassNotFoundException | NoSuchFieldException e) { + throw new ExceptionInInitializerError(e); + } + } + + private static void hashUpdateRaw(UpdateSketch sketch, long hash) throws IOException { + try { + HASH_UPDATE_METHOD.invoke(sketch, hash); + } catch (IllegalAccessException e) { + throw new IOException("Unable to apply raw sketch hash", e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } + if (cause instanceof Error) { + throw (Error) cause; + } + throw new IOException("Unable to apply raw sketch hash", cause); + } + } + + private static long invokeLongMethod(Method method, Object target) { + try { + Object value = method.invoke(target); + if (!(value instanceof Number number)) { + throw new IllegalStateException("Expected numeric result from " + method); + } + return Math.max(0L, number.longValue()); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Unable to invoke " + method, e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException runtimeException) { + throw runtimeException; + } + if (cause instanceof Error error) { + throw error; + } + throw new IllegalStateException("Unable to invoke " + method, cause); + } + } + + private static void invokeVoidMethod(Method method, Object target, Object... args) { + try { + method.invoke(target, args); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Unable to invoke " + method, e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException runtimeException) { + throw runtimeException; + } + if (cause instanceof Error error) { + throw error; + } + throw new IllegalStateException("Unable to invoke " + method, cause); + } + } + + private static Object invokeObjectMethod(Method method, Object target, Object... args) { + try { + return method.invoke(target, args); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Unable to invoke " + method, e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException runtimeException) { + throw runtimeException; + } + if (cause instanceof Error error) { + throw error; + } + throw new IllegalStateException("Unable to invoke " + method, cause); + } + } + + private static long align(long bytes) { + return (bytes + 7L) & ~7L; + } + + private static void applySerializedThetaAndEmpty(UpdateSketch sketch, long thetaLong, boolean empty) + throws IOException { + try { + HEAP_ALPHA_THETA_LONG_FIELD.setLong(sketch, thetaLong); + HEAP_ALPHA_EMPTY_FIELD.setBoolean(sketch, empty); + } catch (IllegalAccessException | IllegalArgumentException e) { + throw new IOException("Unable to restore sketch theta metadata", e); + } + } + + private int hash(String v) { + // Ensure non-negative index in [0, nominalEntries) + int h = Objects.hashCode(v); + return (h & 0x7fffffff) % nominalEntries; + } + + private static long valueFingerprint(String value) { + long h = FNV64_OFFSET_BASIS; + if (value != null) { + for (int i = 0; i < value.length(); i++) { + h ^= value.charAt(i); + h *= FNV64_PRIME; + } + h ^= value.length(); + } + return mix64(h); + } + + private static long quadFingerprint(long s, long p, long o, long c) { + long h = QUAD_SEED; + h = mix64(h ^ s); + h = mix64(h ^ p); + h = mix64(h ^ o); + return mix64(h ^ c); + } + + private static long mix64(long value) { + long z = value; + z = (z ^ (z >>> 30)) * MIX64_C1; + z = (z ^ (z >>> 27)) * MIX64_C2; + return z ^ (z >>> 31); + } + + private static long pairKey(int a, int b) { + return (((long) a) << 32) ^ (b & 0xffffffffL); + } + + private static Pair findPair(Component a, Component b) { + for (Pair p : Pair.values()) { + if ((p.x == a && p.y == b) || (p.x == b && p.y == a)) { + return p; + } + } + return null; + } + + private String str(Resource r) { + return r == null ? defaultContextString : r.stringValue(); + } + + private String str(Value v) { + return v == null ? defaultContextString : v.stringValue(); + } + + private static String sig(String s, String p, String o, String c) { + return s + ' ' + p + ' ' + o + ' ' + c; + } + + /* ────────────────────────────────────────────────────────────── */ + /* OPTIONAL optimiser helper (unchanged API) */ + /* ────────────────────────────────────────────────────────────── */ + + public Optional planJoinOrder(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm) { + return planJoinOrder(args, initiallyBoundVars, algorithm, JoinOrderWorkAdjuster.NO_OP); + } + + public Optional planJoinOrder(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm, JoinOrderWorkAdjuster workAdjuster) { + if (!isReady()) { + recordJoinOrderPlannerPath(SketchPlannerPath.ROBUST_NOT_READY); + return Optional.empty(); + } + if (args == null || args.isEmpty()) { + recordJoinOrderPlannerPath(SketchPlannerPath.UNSUPPORTED_SHAPE); + return Optional.empty(); + } + + return new SketchJoinOrderReorderer(this, workAdjuster).plan(args, initiallyBoundVars, algorithm); + } + + SketchPlannerPath lastJoinOrderPlannerPath() { + return lastJoinOrderPlannerPath; + } + + SketchPlannerPath lastRobustCardinalityPath() { + return lastRobustCardinalityPath; + } + + void recordJoinOrderPlannerPath(SketchPlannerPath plannerPath) { + lastJoinOrderPlannerPath = Objects.requireNonNull(plannerPath, "plannerPath"); + } + + private void recordRobustCardinalityPath(SketchPlannerPath plannerPath) { + lastRobustCardinalityPath = Objects.requireNonNull(plannerPath, "plannerPath"); + } + + double filterMultiplierForSketchOptimizer(Filter filter, StatementPattern pattern) { + return resolveFilterMultiplier(filter, pattern); + } + + private TuplePlanEstimate toPlannerTupleEstimate(TupleExpr tupleExpr, Set initiallyBoundVars) { + TuplePlanEstimate estimate; + if (tupleExpr instanceof BindingSetAssignment) { + estimate = estimateBindingSetAssignment((BindingSetAssignment) tupleExpr); + } else { + PatternEstimateInput input = asSketchCompatibleInput(tupleExpr); + if (input == null) { + return null; + } + estimate = estimatePatternTupleExprPlan(input); + } + return applyInitiallyBoundVars(estimate, initiallyBoundVars); + } + + TuplePlanEstimate planEstimateForJoinOrdering(TupleExpr tupleExpr, Set initiallyBoundVars) { + return estimateTupleExprPlan(tupleExpr, initiallyBoundVars); + } + + TuplePlanEstimate factorEstimateForJoinOrdering(TupleExpr tupleExpr, Set initiallyBoundVars) { + return toPlannerTupleEstimate(tupleExpr, initiallyBoundVars); + } + + private TuplePlanEstimate estimatePatternTupleExprPlan(PatternEstimateInput input) { + StatementPattern pattern = input.pattern; + double baseRows = normalizeRows(estimatePatternRows(pattern)); + double outputRows = normalizeRows(applyFilterMultiplier(baseRows, input.filterMultiplier)); + Map varStats = hasBoundComponent(pattern) + ? estimatePatternVarStats(pattern, baseRows) + : estimateAllUnboundPatternVarStats(pattern, baseRows); + return new TuplePlanEstimate(baseRows, outputRows, input.filterMultiplier, varStats); + } + + private Map estimatePatternVarStats(StatementPattern pattern, double baseRows) { + Map varStats = new HashMap<>(); + Set seenVars = new HashSet<>(); + for (Var var : pattern.getVarList()) { + if (var == null || var.hasValue() || var.getName() == null || !seenVars.add(var.getName())) { + continue; + } + JoinEstimate joinEstimate = estimate(getComponent(pattern, var), + getValueOrNull(pattern.getSubjectVar()), + getValueOrNull(pattern.getPredicateVar()), + getValueOrNull(pattern.getObjectVar()), + getValueOrNull(pattern.getContextVar())); + double distinct = clampDistinct(joinEstimate.distinct, baseRows); + if (Double.isFinite(distinct) && distinct > 0.0d) { + varStats.put(var.getName(), new VarPlanStats(distinct, joinEstimate.bindings, pattern)); + } + } + return varStats; + } + + private Map estimateAllUnboundPatternVarStats(StatementPattern pattern, double rows) { + Map varStats = new HashMap<>(); + double distinct = clampDistinct(rows, rows); + if (!(Double.isFinite(distinct) && distinct > 0.0d)) { + return varStats; + } + Set seenVars = new HashSet<>(); + for (Var var : pattern.getVarList()) { + if (var == null || var.hasValue() || var.getName() == null || !seenVars.add(var.getName())) { + continue; + } + varStats.put(var.getName(), new VarPlanStats(distinct, null, pattern)); + } + return varStats; + } + + private TuplePlanEstimate estimateBindingSetAssignment(BindingSetAssignment assignment) { + Iterable bindingSets = assignment.getBindingSets(); + double rows = 0.0d; + Map> valueSets = new HashMap<>(); + Map valueSketches = new HashMap<>(); + Set bindingNames = assignment.getBindingNames(); + if (bindingSets != null) { + for (BindingSet bindingSet : bindingSets) { + rows++; + for (String bindingName : bindingNames) { + Value value = bindingSet.getValue(bindingName); + if (value != null) { + valueSets.computeIfAbsent(bindingName, key -> new HashSet<>()).add(value); + UpdateSketch sketch = valueSketches.computeIfAbsent(bindingName, key -> newSk(bufA.k)); + sketch.update(valueFingerprint(str(value))); + } + } + } + } + + rows = normalizeRows(rows); + Map varStats = new HashMap<>(); + for (Map.Entry> entry : valueSets.entrySet()) { + if (!entry.getValue().isEmpty()) { + double distinct = clampDistinct(entry.getValue().size(), rows); + Sketch sketch = valueSketches.get(entry.getKey()); + varStats.put(entry.getKey(), new VarPlanStats(distinct, sketch == null ? null : sketch.compact())); + } + } + return new TuplePlanEstimate(rows, rows, 1.0d, varStats); + } + + private TuplePlanEstimate applyInitiallyBoundVars(TuplePlanEstimate estimate, Set initiallyBoundVars) { + if (estimate == null || initiallyBoundVars == null || initiallyBoundVars.isEmpty() + || estimate.varStats.isEmpty()) { + return estimate; + } + + Map adjustedStats = new HashMap<>(estimate.varStats); + double selectivity = 1.0d; + boolean adjusted = false; + for (String varName : initiallyBoundVars) { + VarPlanStats stats = adjustedStats.get(varName); + if (stats == null || !Double.isFinite(stats.distinct) || stats.distinct <= 1.0d) { + continue; + } + + selectivity /= Math.max(1.0d, stats.distinct); + adjustedStats.put(varName, new VarPlanStats(1.0d, null, stats.pattern)); + adjusted = true; + } + + double baseRows = normalizeRows(estimate.baseRows * selectivity); + double outputRows = normalizeRows(estimate.outputRows * selectivity); + Map normalizedStats = new HashMap<>(adjustedStats.size()); + for (Map.Entry entry : adjustedStats.entrySet()) { + VarPlanStats stats = entry.getValue(); + // Once an outer binding narrows the tuple subset, unconditional sketches no longer represent the remaining + // bindings for sibling vars. Fall back to distinct-count math instead of intersecting stale full-set + // sketches. + normalizedStats.put(entry.getKey(), + new VarPlanStats(clampDistinct(stats.distinct, outputRows), adjusted ? null : stats.sketch, + adjusted ? null : stats.pattern)); + } + + return new TuplePlanEstimate(baseRows, outputRows, estimate.localFilterMultiplier, normalizedStats); + } + + private JoinStepEstimate estimateJoinStep(TuplePlanEstimate left, TuplePlanEstimate right) { + if (left.outputRows <= 0.0d || right.baseRows <= 0.0d) { + return new JoinStepEstimate(0.0d, 0.0d, Collections.emptyMap()); + } + + double disconnectedRows = estimateDisconnectedJoinRows(left.outputRows, right.baseRows); + Map sharedVars = new HashMap<>(); + double rawRows = Double.POSITIVE_INFINITY; + for (Map.Entry entry : left.varStats.entrySet()) { + VarPlanStats rightStats = right.varStats.get(entry.getKey()); + if (rightStats == null) { + continue; + } + SharedVarEstimate shared = estimateSharedVarJoin(left.outputRows, right.baseRows, entry.getValue(), + rightStats, disconnectedRows); + if (shared.rows == 0.0d && left.localFilterMultiplier == 1.0d && right.localFilterMultiplier == 1.0d + && entry.getValue().pattern != null && rightStats.pattern != null) { + Double exactJoinRows = zeroIntersectionFallbackJoinRows(entry.getValue().pattern, rightStats.pattern, + entry.getKey(), entry.getValue().distinct, rightStats.distinct, left.outputRows, + right.baseRows, disconnectedRows); + if (exactJoinRows != null && exactJoinRows > 0.0d) { + shared = new SharedVarEstimate(exactJoinRows, Math.min(entry.getValue().distinct, + rightStats.distinct), null); + } + } + sharedVars.put(entry.getKey(), shared); + rawRows = Math.min(rawRows, shared.rows); + } + + double rawWorkRows; + if (sharedVars.isEmpty()) { + rawRows = disconnectedRows; + rawWorkRows = estimateDisconnectedJoinWorkRows(left.outputRows, right.baseRows); + } else { + rawRows = Math.min(rawRows, disconnectedRows); + rawWorkRows = rawRows; + } + + double outputRows = normalizeRows(applyFilterMultiplier(rawRows, right.localFilterMultiplier)); + double workRows = normalizeRows(applyFilterMultiplier(rawWorkRows, right.localFilterMultiplier)); + + Map mergedStats = new HashMap<>(); + for (Map.Entry entry : left.varStats.entrySet()) { + String varName = entry.getKey(); + SharedVarEstimate shared = sharedVars.get(varName); + if (shared != null) { + mergedStats.put(varName, new VarPlanStats(clampDistinct(shared.distinct, outputRows), shared.sketch)); + } else { + mergedStats.put(varName, new VarPlanStats(clampDistinct(entry.getValue().distinct, outputRows), + entry.getValue().sketch, entry.getValue().pattern)); + } + } + for (Map.Entry entry : right.varStats.entrySet()) { + if (mergedStats.containsKey(entry.getKey())) { + continue; + } + mergedStats.put(entry.getKey(), + new VarPlanStats(clampDistinct(entry.getValue().distinct, outputRows), entry.getValue().sketch, + entry.getValue().pattern)); + } + return new JoinStepEstimate(outputRows, workRows, mergedStats); + } + + JoinStepEstimate estimateJoinStepForJoinOrdering(TuplePlanEstimate left, TuplePlanEstimate right) { + return estimateJoinStep(left, right); + } + + TuplePlanEstimate joinedPlanEstimate(JoinStepEstimate step) { + return new TuplePlanEstimate(step.outputRows, step.outputRows, 1.0d, step.varStats); + } + + boolean hasSharedJoinVariable(TuplePlanEstimate left, TuplePlanEstimate right) { + for (String varName : left.varStats.keySet()) { + if (right.varStats.containsKey(varName)) { + return true; + } + } + return false; + } + + private SharedVarEstimate estimateSharedVarJoin(double leftRows, double rightRows, VarPlanStats leftStats, + VarPlanStats rightStats, double disconnectedRows) { + double leftDistinct = Math.max(1.0d, leftStats.distinct); + double rightDistinct = Math.max(1.0d, rightStats.distinct); + if (leftStats.sketch != null && rightStats.sketch != null) { + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(leftStats.sketch); + ix.intersect(rightStats.sketch); + Sketch intersection = ix.getResult(); + double distinct = Math.max(0.0d, intersection.getEstimate()); + if (distinct == 0.0d) { + return new SharedVarEstimate(0.0d, 0.0d, intersection); + } + double leftAvg = Math.max(0.001d, leftRows / leftDistinct); + double rightAvg = Math.max(0.001d, rightRows / rightDistinct); + double rows = Math.min(disconnectedRows, distinct * leftAvg * rightAvg); + return new SharedVarEstimate(normalizeRows(rows), distinct, intersection); + } + double rows = leftRows * rightRows; + if (!Double.isFinite(rows)) { + rows = Double.MAX_VALUE; + } + rows = rows / Math.max(leftDistinct, rightDistinct); + rows = Math.min(rows, disconnectedRows); + return new SharedVarEstimate(normalizeRows(rows), Math.min(leftDistinct, rightDistinct), null); + } + + private double normalizeRows(double rows) { + if (!Double.isFinite(rows) || rows < 0.0d) { + return rows < 0.0d ? -1.0d : Double.MAX_VALUE; + } + return roundJoinEstimate(rows); + } + + private double clampDistinct(double distinct, double rows) { + if (!Double.isFinite(distinct) || distinct <= 0.0d || rows <= 0.0d) { + return 0.0d; + } + return Math.min(distinct, rows); + } + + private Map clampVarStatsToRows(Map varStats, double rows, + boolean keepSketches) { + if (varStats.isEmpty()) { + return Collections.emptyMap(); + } + Map clamped = new HashMap<>(varStats.size()); + for (Map.Entry entry : varStats.entrySet()) { + VarPlanStats stats = entry.getValue(); + clamped.put(entry.getKey(), + new VarPlanStats(clampDistinct(stats.distinct, rows), keepSketches ? stats.sketch : null, + keepSketches ? stats.pattern : null)); + } + return clamped; + } + + static final class TuplePlanEstimate { + private final double baseRows; + private final double outputRows; + private final double localFilterMultiplier; + private final Map varStats; + + private TuplePlanEstimate(double baseRows, double outputRows, double localFilterMultiplier, + Map varStats) { + this.baseRows = baseRows; + this.outputRows = outputRows; + this.localFilterMultiplier = localFilterMultiplier; + this.varStats = Collections.unmodifiableMap(new HashMap<>(varStats)); + } + + double outputRows() { + return outputRows; + } + + double baseRows() { + return baseRows; + } + + double localFilterMultiplier() { + return localFilterMultiplier; + } + + Set joinVars() { + return Set.copyOf(varStats.keySet()); + } + + String summary() { + return "baseRows=" + baseRows + ", outputRows=" + outputRows + ", filterMultiplier=" + + localFilterMultiplier + ", joinVars=" + summarizeVarStats(varStats); + } + } + + private static final class VarPlanStats { + private final double distinct; + private final Sketch sketch; + private final StatementPattern pattern; + + private VarPlanStats(double distinct, Sketch sketch) { + this(distinct, sketch, null); + } + + private VarPlanStats(double distinct, Sketch sketch, StatementPattern pattern) { + this.distinct = distinct; + this.sketch = sketch; + this.pattern = pattern; + } + } + + private static final class SharedVarEstimate { + private final double rows; + private final double distinct; + private final Sketch sketch; + + private SharedVarEstimate(double rows, double distinct, Sketch sketch) { + this.rows = rows; + this.distinct = distinct; + this.sketch = sketch; + } + } + + static final class JoinStepEstimate { + private final double outputRows; + private final double workRows; + private final Map varStats; + + private JoinStepEstimate(double outputRows, double workRows, Map varStats) { + this.outputRows = outputRows; + this.workRows = workRows; + this.varStats = Collections.unmodifiableMap(new HashMap<>(varStats)); + } + + double outputRows() { + return outputRows; + } + + double workRows() { + return workRows; + } + + String summary() { + return "outputRows=" + outputRows + ", workRows=" + workRows + ", joinVars=" + + summarizeVarStats(varStats); + } + } + + private static String summarizeVarStats(Map varStats) { + TreeMap summarized = new TreeMap<>(); + for (Map.Entry entry : varStats.entrySet()) { + summarized.put(entry.getKey(), entry.getValue().distinct); + } + return summarized.toString(); + } + + private enum EvictionResult { + EVICTED, + FAILED, + NEEDS_UNLOAD + } + + public double cardinality(Join node) { + if (!isReady()) { + recordRobustCardinalityPath(SketchPlannerPath.ROBUST_NOT_READY); + return -1; + } + + List orderedArgs = new ArrayList<>(); + flattenJoinTreeToOrderedArgs(node, orderedArgs); + return cardinality(orderedArgs); + } + + public double cardinality(List tupleExprs) { + return cardinalityWithInitiallyBoundVars(tupleExprs, Collections.emptySet()); + } + + private double cardinalityWithInitiallyBoundVars(List tupleExprs, Set initiallyBoundVars) { + if (!isReady() || tupleExprs == null || tupleExprs.isEmpty()) { + recordRobustCardinalityPath( + isReady() ? SketchPlannerPath.UNSUPPORTED_SHAPE : SketchPlannerPath.ROBUST_NOT_READY); + return -1; + } + + Set bound = initiallyBoundVars == null || initiallyBoundVars.isEmpty() ? Collections.emptySet() + : Set.copyOf(initiallyBoundVars); + if (tupleExprs.size() == 2) { + TuplePlanEstimate simulated = estimateBindingSetAssignmentJoinPlan(tupleExprs.get(0), tupleExprs.get(1), + false, bound); + if (simulated != null) { + recordRobustCardinalityPath(SketchPlannerPath.ROBUST_USED); + return normalizeRows(simulated.outputRows); + } + } + JoinOrderPlanner.Algorithm algorithm = tupleExprs + .size() <= SketchJoinOrderPlanner.MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS + ? JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING + : JoinOrderPlanner.Algorithm.GREEDY; + algorithm = JoinOrderPlanner.Algorithm.GREEDY; + SketchJoinOrderPlanner.PlanOutcome outcome = new SketchJoinOrderPlanner(this, JoinOrderWorkAdjuster.NO_OP, + tupleExprs, bound) + .plan(algorithm); + recordRobustCardinalityPath(outcome.path()); + return outcome.plan() + .map(JoinOrderPlanner.JoinOrderPlan::getEstimatedFinalRows) + .orElse(-1.0d); + } + + public double cardinality(LeftJoin node) { + if (!isReady() || node.hasCondition()) { + return -1; + } + + TupleExpr leftArg = node.getLeftArg(); + TupleExpr rightArg = node.getRightArg(); + + return estimateJoinCardinality(leftArg, rightArg, true); + } + + public double cardinality(Filter node) { + if (!isReady()) { + return -1; + } + + TuplePlanEstimate estimate = estimateTupleExprPlan(node); + return estimate == null ? -1.0d : normalizeRows(estimate.outputRows); + } + + private double estimateJoinCardinality(TupleExpr leftArg, TupleExpr rightArg, boolean leftJoin) { + PatternEstimateInput leftInput = asSketchCompatibleInput(leftArg); + PatternEstimateInput rightInput = asSketchCompatibleInput(rightArg); + if (leftInput != null && rightInput != null) { + StatementPattern l = leftInput.pattern; + StatementPattern r = rightInput.pattern; + if (!hasBoundComponent(l) || !hasBoundComponent(r)) { + return estimateJoinCardinalityFromTuplePlans(leftArg, rightArg, leftJoin); + } + + /* find first common unbound variable */ + Var common = null; + List lVars = l.getVarList(); + for (Var v : r.getVarList()) { + if (!v.hasValue() && lVars.contains(v)) { + common = v; + break; + } + } + if (common == null) { + double leftRows = applyFilterMultiplier(estimatePatternRows(l), leftInput.filterMultiplier); + double rightRows = applyFilterMultiplier(estimatePatternRows(r), rightInput.filterMultiplier); + double crossRows = estimateDisconnectedJoinRows(leftRows, rightRows); + return leftJoin ? Math.max(leftRows, crossRows) : crossRows; + } + + Component lc = getComponent(l, common); + Component rc = getComponent(r, common); + + JoinEstimate leftEstimate = this + .estimate(lc, + getValueOrNull(l.getSubjectVar()), + getValueOrNull(l.getPredicateVar()), + getValueOrNull(l.getObjectVar()), + getValueOrNull(l.getContextVar())); + JoinEstimate rightEstimate = this + .estimate(rc, + getValueOrNull(r.getSubjectVar()), + getValueOrNull(r.getPredicateVar()), + getValueOrNull(r.getObjectVar()), + getValueOrNull(r.getContextVar())); + double leftDistinct = leftEstimate.distinct; + double rightDistinct = rightEstimate.distinct; + double leftRows = applyFilterMultiplier(leftEstimate.estimate(), leftInput.filterMultiplier); + double rightRows = applyFilterMultiplier(rightEstimate.estimate(), rightInput.filterMultiplier); + double joinRows = applyFilterMultiplier(leftEstimate + .join(rc, + getValueOrNull(r.getSubjectVar()), + getValueOrNull(r.getPredicateVar()), + getValueOrNull(r.getObjectVar()), + getValueOrNull(r.getContextVar())) + .estimate(), leftInput.filterMultiplier * rightInput.filterMultiplier); + if (joinRows == 0.0d && leftInput.filterMultiplier == 1.0d && rightInput.filterMultiplier == 1.0d) { + Double exactJoinRows = zeroIntersectionFallbackJoinRows(l, r, common.getName(), leftDistinct, + rightDistinct, leftRows, rightRows, estimateDisconnectedJoinRows(leftRows, rightRows)); + if (exactJoinRows != null && exactJoinRows > 0.0d) { + joinRows = exactJoinRows; + } + } + return leftJoin ? Math.max(leftRows, joinRows) : joinRows; + } + double nestedEstimate = estimateJoinCardinalityWithNestedSide(leftArg, rightArg, leftJoin); + if (nestedEstimate >= 0.0d) { + return nestedEstimate; + } + return estimateJoinCardinalityFromTuplePlans(leftArg, rightArg, leftJoin); + } + + private double estimateJoinCardinalityFromTuplePlans(TupleExpr leftArg, TupleExpr rightArg, boolean leftJoin) { + TuplePlanEstimate joinedEstimate = estimateJoinedTupleExprPlan(leftArg, rightArg, leftJoin, + Collections.emptySet()); + if (joinedEstimate == null) { + return -1.0d; + } + return normalizeRows(joinedEstimate.outputRows); + } + + private void flattenJoinTreeToOrderedArgs(TupleExpr tupleExpr, List orderedArgs) { + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + flattenJoinTreeToOrderedArgs(join.getLeftArg(), orderedArgs); + flattenJoinTreeToOrderedArgs(join.getRightArg(), orderedArgs); + return; + } + orderedArgs.add(tupleExpr); + } + + private TuplePlanEstimate estimateTupleExprPlan(TupleExpr tupleExpr) { + return estimateTupleExprPlan(tupleExpr, Collections.emptySet()); + } + + private TuplePlanEstimate estimateTupleExprPlan(TupleExpr tupleExpr, Set initiallyBoundVars) { + if (tupleExpr == null) { + return null; + } + + TuplePlanEstimate plannerEstimate = toPlannerTupleEstimate(tupleExpr, initiallyBoundVars); + if (plannerEstimate != null) { + return plannerEstimate; + } + + if (tupleExpr instanceof Filter) { + return estimateFilteredTupleExprPlan((Filter) tupleExpr, initiallyBoundVars); + } + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + return estimateJoinedTupleExprPlan(join.getLeftArg(), join.getRightArg(), false, initiallyBoundVars); + } + if (tupleExpr instanceof LeftJoin) { + LeftJoin join = (LeftJoin) tupleExpr; + if (join.hasCondition()) { + return null; + } + return estimateJoinedTupleExprPlan(join.getLeftArg(), join.getRightArg(), true, initiallyBoundVars); + } + if (tupleExpr instanceof EmptySet) { + return new TuplePlanEstimate(0.0d, 0.0d, 1.0d, Collections.emptyMap()); + } + if (tupleExpr instanceof SingletonSet) { + return new TuplePlanEstimate(1.0d, 1.0d, 1.0d, Collections.emptyMap()); + } + if (tupleExpr instanceof Slice) { + return estimateSliceTupleExprPlan((Slice) tupleExpr, initiallyBoundVars); + } + if (tupleExpr instanceof Distinct || tupleExpr instanceof Reduced) { + return estimateDistinctTupleExprPlan((UnaryTupleOperator) tupleExpr, initiallyBoundVars); + } + if (tupleExpr instanceof UnaryTupleOperator) { + return estimateTupleExprPlan(((UnaryTupleOperator) tupleExpr).getArg(), initiallyBoundVars); + } + return null; + } + + private TuplePlanEstimate estimateFilteredTupleExprPlan(Filter filter, Set initiallyBoundVars) { + TuplePlanEstimate argEstimate = estimateTupleExprPlan(filter.getArg(), initiallyBoundVars); + if (argEstimate == null) { + return null; + } + double filterMultiplier = resolveFilterMultiplier(filter, argEstimate); + return applySubtreeFilterMultiplier(argEstimate, filterMultiplier); + } + + private TuplePlanEstimate estimateJoinedTupleExprPlan(TupleExpr leftArg, TupleExpr rightArg, boolean leftJoin, + Set initiallyBoundVars) { + TuplePlanEstimate simulated = estimateBindingSetAssignmentJoinPlan(leftArg, rightArg, leftJoin, + initiallyBoundVars); + if (simulated != null) { + return simulated; + } + TuplePlanEstimate leftEstimate = estimateTupleExprPlan(leftArg, initiallyBoundVars); + TuplePlanEstimate rightEstimate = estimateTupleExprPlan(rightArg, initiallyBoundVars); + if (leftEstimate == null || rightEstimate == null) { + return null; + } + JoinStepEstimate step = estimateJoinStep(leftEstimate, rightEstimate); + double outputRows = leftJoin ? Math.max(leftEstimate.outputRows, step.outputRows) : step.outputRows; + return new TuplePlanEstimate(outputRows, outputRows, 1.0d, step.varStats); + } + + private TuplePlanEstimate estimateBindingSetAssignmentJoinPlan(TupleExpr leftArg, TupleExpr rightArg, + boolean leftJoin, Set initiallyBoundVars) { + boolean leftAssignment = leftArg instanceof BindingSetAssignment; + boolean rightAssignment = rightArg instanceof BindingSetAssignment; + if (leftAssignment == rightAssignment) { + return null; + } + if (leftJoin && !leftAssignment) { + return null; + } + + BindingSetAssignment assignment = (BindingSetAssignment) (leftAssignment ? leftArg : rightArg); + TupleExpr otherArg = leftAssignment ? rightArg : leftArg; + Set sharedNames = new HashSet<>(assignment.getBindingNames()); + sharedNames.retainAll(otherArg.getBindingNames()); + if (sharedNames.size() <= 1) { + return null; + } + + Iterable bindingSets = assignment.getBindingSets(); + if (bindingSets == null) { + return new TuplePlanEstimate(0.0d, 0.0d, 1.0d, Collections.emptyMap()); + } + + double totalRows = 0.0d; + Map> survivingAssignmentValues = new HashMap<>(); + Map survivingAssignmentSketches = new HashMap<>(); + Map carriedDistinct = new HashMap<>(); + + for (BindingSet bindingSet : bindingSets) { + TupleExpr boundOther = bindTupleExpr(otherArg, bindingSet); + TuplePlanEstimate rowEstimate = estimateBoundTupleExprPlan(boundOther, initiallyBoundVars); + if (rowEstimate == null) { + return null; + } + + double matchedRows = rowEstimate.outputRows; + double rowRows = leftJoin ? Math.max(1.0d, matchedRows) : matchedRows; + if (rowRows <= 0.0d) { + continue; + } + + totalRows += rowRows; + if (!Double.isFinite(totalRows)) { + totalRows = Double.MAX_VALUE; + } + + for (String bindingName : assignment.getBindingNames()) { + Value value = bindingSet.getValue(bindingName); + if (value == null) { + continue; + } + survivingAssignmentValues.computeIfAbsent(bindingName, key -> new HashSet<>()).add(value); + survivingAssignmentSketches.computeIfAbsent(bindingName, key -> newSk(bufA.k)) + .update(valueFingerprint(str(value))); + } + + if (matchedRows <= 0.0d) { + continue; + } + for (Map.Entry entry : rowEstimate.varStats.entrySet()) { + if (bindingSet.hasBinding(entry.getKey())) { + continue; + } + carriedDistinct.merge(entry.getKey(), entry.getValue().distinct, Double::sum); + } + } + + totalRows = normalizeRows(totalRows); + Map varStats = new HashMap<>(); + for (Map.Entry> entry : survivingAssignmentValues.entrySet()) { + double distinct = clampDistinct(entry.getValue().size(), totalRows); + Sketch sketch = survivingAssignmentSketches.get(entry.getKey()); + varStats.put(entry.getKey(), new VarPlanStats(distinct, sketch == null ? null : sketch.compact())); + } + for (Map.Entry entry : carriedDistinct.entrySet()) { + varStats.putIfAbsent(entry.getKey(), new VarPlanStats(clampDistinct(entry.getValue(), totalRows), null)); + } + return new TuplePlanEstimate(totalRows, totalRows, 1.0d, varStats); + } + + private TupleExpr bindTupleExpr(TupleExpr tupleExpr, BindingSet bindingSet) { + TupleExpr bound = tupleExpr.clone(); + bound.visit(new AbstractSimpleQueryModelVisitor(true) { + @Override + public void meet(Var var) { + if (var.hasValue() || var.getName() == null || !bindingSet.hasBinding(var.getName())) { + return; + } + Value value = bindingSet.getValue(var.getName()); + if (value != null) { + var.replaceWith(Var.of(var.getName(), value, var.isAnonymous(), var.isConstant())); + } + } + }); + return bound; + } + + private TuplePlanEstimate estimateBoundTupleExprPlan(TupleExpr tupleExpr, Set initiallyBoundVars) { + if (tupleExpr instanceof StatementPattern) { + Double exactRows = exactBoundStatementPatternRows((StatementPattern) tupleExpr); + if (exactRows != null) { + return new TuplePlanEstimate(exactRows, exactRows, 1.0d, Collections.emptyMap()); + } + } + return estimateTupleExprPlan(tupleExpr, initiallyBoundVars); + } + + private Double exactBoundStatementPatternRows(StatementPattern pattern) { + Var subjectVar = pattern.getSubjectVar(); + Var predicateVar = pattern.getPredicateVar(); + Var objectVar = pattern.getObjectVar(); + if (subjectVar == null || predicateVar == null || objectVar == null + || !subjectVar.hasValue() || !predicateVar.hasValue() || !objectVar.hasValue()) { + return null; + } + if (!(subjectVar.getValue() instanceof Resource) || !(predicateVar.getValue() instanceof IRI)) { + return 0.0d; + } + + Var contextVar = pattern.getContextVar(); + if (contextVar != null && !contextVar.hasValue()) { + return null; + } + if (contextVar != null && contextVar.getValue() != null && !(contextVar.getValue() instanceof Resource)) { + return 0.0d; + } + + Resource[] contexts = contextVar == null + ? new Resource[0] + : new Resource[] { (Resource) contextVar.getValue() }; + double rows = 0.0d; + try (SailDataset dataset = sailStore.getExplicitSailSource().dataset(IsolationLevels.READ_COMMITTED); + CloseableIteration statements = dataset.getStatements( + (Resource) subjectVar.getValue(), + (IRI) predicateVar.getValue(), + objectVar.getValue(), + contexts)) { + while (statements.hasNext()) { + statements.next(); + rows++; + } + } catch (SailException e) { + logger.debug("Falling back from exact bound pattern lookup for {}", pattern, e); + return null; + } + return normalizeRows(rows); + } + + private Double zeroIntersectionFallbackJoinRows(StatementPattern left, StatementPattern right, String sharedVarName, + double leftDistinctEstimate, double rightDistinctEstimate, double leftRowsEstimate, + double rightRowsEstimate, double disconnectedRows) { + if (!hasBoundComponent(left) || !hasBoundComponent(right) || zeroIntersectionRowBudget <= 0L) { + return null; + } + + double smallerRowsEstimate = Math.min(leftRowsEstimate, rightRowsEstimate); + double smallerDistinctEstimate = Math.min(leftDistinctEstimate, rightDistinctEstimate); + double largerDistinctEstimate = Math.max(leftDistinctEstimate, rightDistinctEstimate); + if (!Double.isFinite(smallerRowsEstimate) || smallerRowsEstimate <= 0.0d + || smallerRowsEstimate > zeroIntersectionRowBudget + || !Double.isFinite(smallerDistinctEstimate) || smallerDistinctEstimate <= 0.0d + || !Double.isFinite(largerDistinctEstimate) || largerDistinctEstimate <= 0.0d) { + return null; + } + boolean exactEligible = smallerDistinctEstimate <= zeroIntersectionExactDistinctLimit; + double skewRatio = largerDistinctEstimate / Math.max(1.0d, smallerDistinctEstimate); + boolean skewEligible = zeroIntersectionSkewRatio > 0.0d && skewRatio >= zeroIntersectionSkewRatio; + if (!exactEligible && !skewEligible) { + return null; + } + + Component leftSharedComponent = findPatternComponentByVarName(left, sharedVarName); + Component rightSharedComponent = findPatternComponentByVarName(right, sharedVarName); + if (leftSharedComponent == null || rightSharedComponent == null) { + return null; + } + + boolean scanLeft = exactEligible + ? leftDistinctEstimate <= rightDistinctEstimate + : leftRowsEstimate <= rightRowsEstimate; + StatementPattern scanPattern = scanLeft ? left : right; + StatementPattern probePattern = scanLeft ? right : left; + Component scanSharedComponent = scanLeft ? leftSharedComponent : rightSharedComponent; + double scanRowsEstimate = scanLeft ? leftRowsEstimate : rightRowsEstimate; + if (!Double.isFinite(scanRowsEstimate) || scanRowsEstimate <= 0.0d + || scanRowsEstimate > zeroIntersectionRowBudget) { + return null; + } + + SharedVarScan smallerScan = scanSharedVarRows(scanPattern, scanSharedComponent, sharedVarName); + if (smallerScan == null || smallerScan.scannedRows == 0L) { + return smallerScan == null ? null : 0.0d; + } + + Map probeCache = new HashMap<>(); + if (smallerScan.exactCounts != null) { + long joinRows = 0L; + for (Map.Entry entry : smallerScan.exactCounts.entrySet()) { + Long largerRows = probeCache.computeIfAbsent(entry.getKey(), + value -> exactBoundPatternRows(probePattern, sharedVarName, value)); + if (largerRows == null) { + return null; + } + joinRows += entry.getValue() * largerRows; + } + return normalizeRows(Math.min(disconnectedRows, joinRows)); + } + + if (smallerScan.sampledRows.isEmpty()) { + return 0.0d; + } + double sampledJoinRows = 0.0d; + for (Value sampledValue : smallerScan.sampledRows) { + Long largerRows = probeCache.computeIfAbsent(sampledValue, + value -> exactBoundPatternRows(probePattern, sharedVarName, value)); + if (largerRows == null) { + return null; + } + sampledJoinRows += largerRows; + } + double averageRows = sampledJoinRows / smallerScan.sampledRows.size(); + return normalizeRows(Math.min(disconnectedRows, smallerScan.scannedRows * averageRows)); + } + + private SharedVarScan scanSharedVarRows(StatementPattern pattern, Component sharedComponent, String sharedVarName) { + Resource subject = exactBoundResource(pattern.getSubjectVar()); + IRI predicate = exactBoundIri(pattern.getPredicateVar()); + Value object = exactBoundValue(pattern.getObjectVar()); + Resource[] contexts = exactBoundContexts(pattern.getContextVar()); + if (contexts == null) { + return null; + } + + Map exactCounts = zeroIntersectionExactDistinctLimit > 0 ? new LinkedHashMap<>() : null; + boolean samplingEnabled = zeroIntersectionSampleSize > 0; + List sampledRows = samplingEnabled ? new ArrayList<>(zeroIntersectionSampleSize) + : Collections.emptyList(); + java.util.Random sampleRandom = new java.util.Random(mix64(valueFingerprint(sharedVarName) + ^ Double.doubleToLongBits(Math.max(1.0d, zeroIntersectionSkewRatio)) + ^ zeroIntersectionRowBudget)); + long scannedRows = 0L; + try (SailDataset dataset = sailStore.getExplicitSailSource().dataset(IsolationLevels.READ_COMMITTED); + CloseableIteration statements = dataset.getStatements(subject, predicate, object, + contexts)) { + while (statements.hasNext()) { + Statement statement = statements.next(); + if (!statementMatchesPatternVariableEqualities(pattern, statement)) { + continue; + } + scannedRows++; + if (scannedRows > zeroIntersectionRowBudget) { + return null; + } + Value sharedValue = statementValue(statement, sharedComponent); + if (sharedValue != null) { + if (samplingEnabled) { + if (sampledRows.size() < zeroIntersectionSampleSize) { + sampledRows.add(sharedValue); + } else { + long replacementIndex = sampleRandom.nextLong(scannedRows); + if (replacementIndex < zeroIntersectionSampleSize) { + sampledRows.set((int) replacementIndex, sharedValue); + } + } + } + if (exactCounts != null) { + exactCounts.merge(sharedValue, 1L, Long::sum); + if (exactCounts.size() > zeroIntersectionExactDistinctLimit) { + exactCounts = null; + } + } + } + } + } catch (SailException e) { + logger.debug("Falling back from exact shared-var scan for {}", pattern, e); + return null; + } + return new SharedVarScan(exactCounts, sampledRows, scannedRows); + } + + private Long exactBoundPatternRows(StatementPattern pattern, String sharedVarName, Value sharedValue) { + StatementPattern boundPattern = bindPatternVar(pattern, sharedVarName, sharedValue); + if (hasIncompatibleBoundResource(boundPattern.getSubjectVar()) + || hasIncompatibleBoundPredicate(boundPattern.getPredicateVar()) + || hasIncompatibleBoundResource(boundPattern.getContextVar())) { + return 0L; + } + + Resource subject = exactBoundResource(boundPattern.getSubjectVar()); + IRI predicate = exactBoundIri(boundPattern.getPredicateVar()); + Value object = exactBoundValue(boundPattern.getObjectVar()); + Resource[] contexts = exactBoundContexts(boundPattern.getContextVar()); + if (contexts == null) { + return 0L; + } + + long rows = 0L; + try (SailDataset dataset = sailStore.getExplicitSailSource().dataset(IsolationLevels.READ_COMMITTED); + CloseableIteration statements = dataset.getStatements(subject, predicate, object, + contexts)) { + while (statements.hasNext()) { + Statement statement = statements.next(); + if (statementMatchesPatternVariableEqualities(boundPattern, statement)) { + rows++; + } + } + } catch (SailException e) { + logger.debug("Falling back from exact bound probe for {} with {}={}", pattern, sharedVarName, sharedValue, + e); + return null; + } + return rows; + } + + private StatementPattern bindPatternVar(StatementPattern pattern, String sharedVarName, Value sharedValue) { + StatementPattern boundPattern = pattern.clone(); + for (Component component : Component.values()) { + Var var = varForComponent(boundPattern, component); + if (var == null || var.hasValue() || var.getName() == null || !sharedVarName.equals(var.getName())) { + continue; + } + var.replaceWith(Var.of(var.getName(), sharedValue, var.isAnonymous(), var.isConstant())); + } + return boundPattern; + } + + private boolean hasIncompatibleBoundResource(Var var) { + return var != null && var.hasValue() && var.getValue() != null && !(var.getValue() instanceof Resource); + } + + private boolean hasIncompatibleBoundPredicate(Var var) { + return var != null && var.hasValue() && var.getValue() != null && !(var.getValue() instanceof IRI); + } + + private Resource exactBoundResource(Var var) { + if (var == null || !var.hasValue() || var.getValue() == null) { + return null; + } + return var.getValue() instanceof Resource resource ? resource : null; + } + + private IRI exactBoundIri(Var var) { + if (var == null || !var.hasValue() || var.getValue() == null) { + return null; + } + return var.getValue() instanceof IRI iri ? iri : null; + } + + private Value exactBoundValue(Var var) { + if (var == null || !var.hasValue()) { + return null; + } + return var.getValue(); + } + + private Resource[] exactBoundContexts(Var contextVar) { + if (contextVar == null || !contextVar.hasValue()) { + return new Resource[0]; + } + if (contextVar.getValue() == null) { + return new Resource[] { null }; + } + if (!(contextVar.getValue() instanceof Resource resource)) { + return null; + } + return new Resource[] { resource }; + } + + private boolean statementMatchesPatternVariableEqualities(StatementPattern pattern, Statement statement) { + Map seen = new HashMap<>(); + for (Component component : Component.values()) { + Var var = varForComponent(pattern, component); + if (var == null || var.hasValue() || var.getName() == null) { + continue; + } + Value value = statementValue(statement, component); + if (seen.containsKey(var.getName())) { + if (!Objects.equals(seen.get(var.getName()), value)) { + return false; + } + } else { + seen.put(var.getName(), value); + } + } + return true; + } + + private Value statementValue(Statement statement, Component component) { + return switch (component) { + case S -> statement.getSubject(); + case P -> statement.getPredicate(); + case O -> statement.getObject(); + case C -> statement.getContext(); + }; + } + + private static final class SharedVarScan { + private final Map exactCounts; + private final List sampledRows; + private final long scannedRows; + + private SharedVarScan(Map exactCounts, List sampledRows, long scannedRows) { + this.exactCounts = exactCounts; + this.sampledRows = sampledRows; + this.scannedRows = scannedRows; + } + } + + private TuplePlanEstimate estimateSliceTupleExprPlan(Slice slice, Set initiallyBoundVars) { + TuplePlanEstimate argEstimate = estimateTupleExprPlan(slice.getArg(), initiallyBoundVars); + if (argEstimate == null) { + return null; + } + double rows = argEstimate.outputRows; + if (slice.hasOffset()) { + rows = Math.max(0.0d, rows - slice.getOffset()); + } + if (slice.hasLimit()) { + rows = Math.min(rows, slice.getLimit()); + } + rows = normalizeRows(rows); + return new TuplePlanEstimate(rows, rows, 1.0d, clampVarStatsToRows(argEstimate.varStats, rows, false)); + } + + private TuplePlanEstimate estimateDistinctTupleExprPlan(UnaryTupleOperator tupleExpr, + Set initiallyBoundVars) { + TuplePlanEstimate argEstimate = estimateTupleExprPlan(tupleExpr.getArg(), initiallyBoundVars); + if (argEstimate == null) { + return null; + } + double rows = normalizeRows(argEstimate.outputRows); + return new TuplePlanEstimate(rows, rows, 1.0d, argEstimate.varStats); + } + + private double estimatePatternRows(StatementPattern pattern) { + return estimate(resolveJoinComponent(pattern), + getValueOrNull(pattern.getSubjectVar()), + getValueOrNull(pattern.getPredicateVar()), + getValueOrNull(pattern.getObjectVar()), + getValueOrNull(pattern.getContextVar())) + .estimate(); + } + + private Component resolveJoinComponent(StatementPattern pattern) { + if (!hasBoundValue(pattern.getSubjectVar())) { + return Component.S; + } + if (!hasBoundValue(pattern.getPredicateVar())) { + return Component.P; + } + if (!hasBoundValue(pattern.getObjectVar())) { + return Component.O; + } + if (!hasBoundValue(pattern.getContextVar())) { + return Component.C; + } + return Component.S; + } + + private double estimateDisconnectedJoinRows(double leftRows, double rightRows) { + double estimate = leftRows * rightRows; + if (!Double.isFinite(estimate)) { + return Double.MAX_VALUE; + } + return roundJoinEstimate(estimate); + } + + private double estimateDisconnectedJoinWorkRows(double leftRows, double rightRows) { + double estimate = estimateDisconnectedJoinRows(leftRows, rightRows); + if (!Double.isFinite(estimate)) { + return Double.MAX_VALUE; + } + estimate = estimate * DISCONNECTED_JOIN_WORK_PENALTY; + if (!Double.isFinite(estimate)) { + return Double.MAX_VALUE; + } + return roundJoinEstimate(estimate); + } + + private double roundJoinEstimate(double value) { + if (!roundJoinEstimates || !Double.isFinite(value) || value >= Long.MAX_VALUE) { + return value; + } + return Math.round(value); + } + + private double estimateJoinCardinalityWithNestedSide(TupleExpr leftArg, TupleExpr rightArg, boolean leftJoin) { + boolean leftNested = leftArg instanceof Join; + boolean rightNested = rightArg instanceof Join; + if (leftNested == rightNested) { + return -1; + } + + Join nested = (Join) (leftNested ? leftArg : rightArg); + PatternEstimateInput flatInput = asSketchCompatibleInput(leftNested ? rightArg : leftArg); + if (flatInput == null || !hasBoundComponent(flatInput.pattern)) { + return -1; + } + StatementPattern flat = flatInput.pattern; + + java.util.Set nestedBindingNames = nested.getBindingNames(); + for (Var var : flat.getVarList()) { + if (var == null || var.hasValue() || var.getName() == null || !nestedBindingNames.contains(var.getName())) { + continue; + } + + TupleSketchStats nestedStats = estimateTupleExprForJoinVar(nested, var.getName()); + if (nestedStats == null) { + continue; + } + + TupleSketchStats flatStats = estimatePatternForJoinVar(flat, var.getName(), flatInput.filterMultiplier); + if (flatStats == null) { + continue; + } + + double leftRows = leftNested ? nestedStats.rows : flatStats.rows; + double joinRows = mergeTupleSketchStats(leftNested ? nestedStats : flatStats, + leftNested ? flatStats : nestedStats).rows; + return leftJoin ? Math.max(leftRows, joinRows) : joinRows; + } + + double nestedRows = estimateTupleExprRows(nested); + if (nestedRows < 0.0) { + return -1; + } + double flatRows = applyFilterMultiplier(estimatePatternRows(flat), flatInput.filterMultiplier); + double crossRows = estimateDisconnectedJoinRows(leftNested ? nestedRows : flatRows, + leftNested ? flatRows : nestedRows); + if (leftJoin) { + double leftRows = leftNested ? nestedRows : flatRows; + return Math.max(leftRows, crossRows); + } + return crossRows; + } + + private double estimateTupleExprRows(TupleExpr tupleExpr) { + PatternEstimateInput patternInput = asSketchCompatibleInput(tupleExpr); + if (patternInput != null) { + return hasBoundComponent(patternInput.pattern) + ? applyFilterMultiplier(estimatePatternRows(patternInput.pattern), patternInput.filterMultiplier) + : -1; + } + + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + return estimateJoinCardinality(join.getLeftArg(), join.getRightArg(), false); + } + + if (tupleExpr instanceof LeftJoin) { + LeftJoin join = (LeftJoin) tupleExpr; + if (join.hasCondition()) { + return -1; + } + return estimateJoinCardinality(join.getLeftArg(), join.getRightArg(), true); + } + + return -1; + } + + private TupleSketchStats estimateTupleExprForJoinVar(TupleExpr tupleExpr, String joinVarName) { + PatternEstimateInput patternInput = asSketchCompatibleInput(tupleExpr); + if (patternInput != null) { + return estimatePatternForJoinVar(patternInput.pattern, joinVarName, patternInput.filterMultiplier); + } + + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + TupleSketchStats leftStats = estimateTupleExprForJoinVar(join.getLeftArg(), joinVarName); + TupleSketchStats rightStats = estimateTupleExprForJoinVar(join.getRightArg(), joinVarName); + if (leftStats == null || rightStats == null) { + return null; + } + return mergeTupleSketchStats(leftStats, rightStats); + } + + return null; + } + + private TupleSketchStats estimatePatternForJoinVar(StatementPattern pattern, String joinVarName, + double filterMultiplier) { + if (!hasBoundComponent(pattern)) { + return null; + } + + Var joinVar = findUnboundVarByName(pattern, joinVarName); + if (joinVar == null) { + return null; + } + + JoinEstimate estimate = estimate(getComponent(pattern, joinVar), + getValueOrNull(pattern.getSubjectVar()), + getValueOrNull(pattern.getPredicateVar()), + getValueOrNull(pattern.getObjectVar()), + getValueOrNull(pattern.getContextVar())); + return new TupleSketchStats(estimate.bindings, estimate.distinct, + applyFilterMultiplier(estimate.resultSize, filterMultiplier)); + } + + private TupleSketchStats mergeTupleSketchStats(TupleSketchStats leftStats, TupleSketchStats rightStats) { + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(leftStats.bindings); + ix.intersect(rightStats.bindings); + Sketch inter = ix.getResult(); + double interDistinct = inter.getEstimate(); + + if (interDistinct == 0.0) { + return new TupleSketchStats(inter, 0.0, 0.0); + } + + double leftAvg = Math.max(0.001, leftStats.distinct == 0 ? 0 : leftStats.rows / leftStats.distinct); + double rightAvg = Math.max(0.001, rightStats.distinct == 0 ? 0 : rightStats.rows / rightStats.distinct); + double joinRows = roundJoinEstimate(interDistinct * leftAvg * rightAvg); + return new TupleSketchStats(inter, interDistinct, joinRows); + } + + private Var findUnboundVarByName(StatementPattern pattern, String varName) { + for (Var var : pattern.getVarList()) { + if (var != null && !var.hasValue() && varName.equals(var.getName())) { + return var; + } + } + return null; + } + + private static final class TupleSketchStats { + private final Sketch bindings; + private final double distinct; + private final double rows; + + private TupleSketchStats(Sketch bindings, double distinct, double rows) { + this.bindings = bindings; + this.distinct = distinct; + this.rows = rows; + } + } + + private static final class PatternEstimateInput { + private final StatementPattern pattern; + private final double filterMultiplier; + + private PatternEstimateInput(StatementPattern pattern, double filterMultiplier) { + this.pattern = pattern; + this.filterMultiplier = filterMultiplier; + } + } + + private PatternEstimateInput asSketchCompatibleInput(TupleExpr tupleExpr) { + if (tupleExpr instanceof StatementPattern) { + return new PatternEstimateInput((StatementPattern) tupleExpr, 1.0d); + } + if (tupleExpr instanceof Filter) { + return asSketchCompatibleInput((Filter) tupleExpr); + } + return null; + } + + private PatternEstimateInput asSketchCompatibleInput(Filter filter) { + PatternEstimateInput input = asSketchCompatibleInput(filter.getArg()); + if (input == null) { + return null; + } + double filterMultiplier = resolveFilterMultiplier(filter, input.pattern); + double combinedMultiplier = normalizeFilterMultiplier(input.filterMultiplier * filterMultiplier); + return new PatternEstimateInput(input.pattern, combinedMultiplier); + } + + AccessShape accessShapeForJoinOrdering(TupleExpr tupleExpr, Set currentlyBoundVars) { + if (tupleExpr instanceof StatementPattern) { + return buildAccessShape((StatementPattern) tupleExpr, currentlyBoundVars, 1.0d, Set.of()); + } + if (tupleExpr instanceof Filter) { + return accessShapeForJoinOrdering((Filter) tupleExpr, currentlyBoundVars); + } + return null; + } + + private AccessShape accessShapeForJoinOrdering(Filter filter, Set currentlyBoundVars) { + AccessShape accessShape = accessShapeForJoinOrdering(filter.getArg(), currentlyBoundVars); + if (accessShape == null) { + return null; + } + LookupAnalysis lookupAnalysis = analyzeLookupBindings(accessShape.pattern(), filter.getCondition(), + currentlyBoundVars); + double filterMultiplier = resolveFilterMultiplier(filter, accessShape.pattern()); + if (filterMultiplier >= 1.0d && lookupAnalysis.multiplier() > 0.0d) { + filterMultiplier = lookupAnalysis.multiplier(); + } + double combinedMultiplier = normalizeFilterMultiplier(accessShape.filterMultiplier() * filterMultiplier); + EnumSet combinedLookupComponents = EnumSet.noneOf(Component.class); + combinedLookupComponents.addAll(accessShape.filterLookupComponents()); + combinedLookupComponents.addAll(lookupAnalysis.components()); + return buildAccessShape(accessShape.pattern(), currentlyBoundVars, combinedMultiplier, + combinedLookupComponents); + } + + private AccessShape buildAccessShape(StatementPattern pattern, Set currentlyBoundVars, + double filterMultiplier, Set filterLookupComponents) { + StatementPattern patternClone = pattern.clone(); + EnumSet patternConstantComponents = collectPatternConstantComponents(patternClone); + EnumMap joinBoundVarNamesByComponent = collectJoinBoundVarNames(patternClone, + currentlyBoundVars); + EnumSet filterLookup = filterLookupComponents.isEmpty() + ? EnumSet.noneOf(Component.class) + : EnumSet.copyOf(filterLookupComponents); + return new AccessShape(patternClone, filterMultiplier, patternConstantComponents, joinBoundVarNamesByComponent, + filterLookup, + prefixComponents -> estimateAccessRows(patternClone, joinBoundVarNamesByComponent, prefixComponents)); + } + + private EnumSet collectPatternConstantComponents(StatementPattern pattern) { + EnumSet components = EnumSet.noneOf(Component.class); + for (Component component : Component.values()) { + Var var = varForComponent(pattern, component); + if (var != null && var.hasValue()) { + components.add(component); + } + } + return components; + } + + private EnumMap collectJoinBoundVarNames(StatementPattern pattern, + Set currentlyBoundVars) { + EnumMap components = new EnumMap<>(Component.class); + if (currentlyBoundVars == null || currentlyBoundVars.isEmpty()) { + return components; + } + for (Component component : Component.values()) { + Var var = varForComponent(pattern, component); + if (var == null || var.hasValue() || var.getName() == null || !currentlyBoundVars.contains(var.getName())) { + continue; + } + components.put(component, var.getName()); + } + return components; + } + + private double estimateAccessRows(StatementPattern pattern, Map joinBoundVarNamesByComponent, + Set prefixComponents) { + Set coveredComponents = prefixComponents == null || prefixComponents.isEmpty() + ? Set.of() + : Set.copyOf(prefixComponents); + StatementPattern accessPattern = patternForAccessPrefix(pattern, coveredComponents); + Set prefixBoundVars = new HashSet<>(); + for (Map.Entry entry : joinBoundVarNamesByComponent.entrySet()) { + if (coveredComponents.contains(entry.getKey()) && entry.getValue() != null) { + prefixBoundVars.add(entry.getValue()); + } + } + TuplePlanEstimate estimate = estimateTupleExprPlan(accessPattern, prefixBoundVars); + if (estimate == null) { + return 0.0d; + } + return estimate.outputRows(); + } + + private StatementPattern patternForAccessPrefix(StatementPattern pattern, Set prefixComponents) { + StatementPattern accessPattern = pattern.clone(); + for (Component component : Component.values()) { + if (prefixComponents.contains(component)) { + continue; + } + Var var = varForComponent(accessPattern, component); + if (var != null && var.hasValue()) { + accessPattern.replaceChildNode(var, unboundCopy(var)); + } + } + return accessPattern; + } + + private Var unboundCopy(Var var) { + return Var.of(var.getName(), null, var.isAnonymous(), false); + } + + private LookupAnalysis analyzeLookupBindings(StatementPattern pattern, ValueExpr condition, + Set currentlyBoundVars) { + if (condition == null) { + return LookupAnalysis.none(); + } + if (condition instanceof And) { + And and = (And) condition; + return combineLookupAnalyses(analyzeLookupBindings(pattern, and.getLeftArg(), currentlyBoundVars), + analyzeLookupBindings(pattern, and.getRightArg(), currentlyBoundVars)); + } + LookupAnalysis listMember = analyzeListMemberLookup(pattern, condition, currentlyBoundVars); + if (!listMember.isNone()) { + return listMember; + } + LookupAnalysis disjunction = analyzeDisjunctiveEqualityLookup(pattern, condition, currentlyBoundVars); + if (!disjunction.isNone()) { + return disjunction; + } + return analyzeEqualityLookup(pattern, condition, currentlyBoundVars); + } + + private LookupAnalysis combineLookupAnalyses(LookupAnalysis left, LookupAnalysis right) { + if (left.isNone()) { + return right; + } + if (right.isNone()) { + return left; + } + EnumSet components = EnumSet.noneOf(Component.class); + components.addAll(left.components()); + components.addAll(right.components()); + double multiplier = left.multiplier() > 0.0d && right.multiplier() > 0.0d + ? normalizeFilterMultiplier(left.multiplier() * right.multiplier()) + : Math.max(left.multiplier(), right.multiplier()); + return new LookupAnalysis(components, multiplier); + } + + private LookupAnalysis analyzeListMemberLookup(StatementPattern pattern, ValueExpr condition, + Set currentlyBoundVars) { + if (!(condition instanceof ListMemberOperator)) { + return LookupAnalysis.none(); + } + + List arguments = ((ListMemberOperator) condition).getArguments(); + if (arguments == null || arguments.size() < 2 || !(arguments.get(0) instanceof Var listedVar) + || listedVar.getName() == null) { + return LookupAnalysis.none(); + } + + Component component = findPatternComponentByVarName(pattern, listedVar.getName()); + if (component == null) { + return LookupAnalysis.none(); + } + + Set lookupKeys = new HashSet<>(); + for (int i = 1; i < arguments.size(); i++) { + String lookupKey = lookupKey(arguments.get(i), currentlyBoundVars); + if (lookupKey == null) { + return LookupAnalysis.none(); + } + lookupKeys.add(lookupKey); + } + if (lookupKeys.isEmpty()) { + return LookupAnalysis.none(); + } + return lookupAnalysisFor(pattern, component, lookupKeys.size()); + } + + private LookupAnalysis analyzeDisjunctiveEqualityLookup(StatementPattern pattern, ValueExpr condition, + Set currentlyBoundVars) { + List alternatives = new ArrayList<>(); + if (!collectDisjunctiveEqualityAlternatives(pattern, condition, currentlyBoundVars, alternatives) + || alternatives.isEmpty()) { + return LookupAnalysis.none(); + } + Component component = alternatives.get(0).component(); + int valueCount = 0; + for (LookupValueCount alternative : alternatives) { + if (alternative.component() != component) { + return LookupAnalysis.none(); + } + valueCount += alternative.valueCount(); + } + return lookupAnalysisFor(pattern, component, valueCount); + } + + private boolean collectDisjunctiveEqualityAlternatives(StatementPattern pattern, ValueExpr condition, + Set currentlyBoundVars, List alternatives) { + if (condition instanceof Or) { + Or or = (Or) condition; + return collectDisjunctiveEqualityAlternatives(pattern, or.getLeftArg(), currentlyBoundVars, alternatives) + && collectDisjunctiveEqualityAlternatives(pattern, or.getRightArg(), currentlyBoundVars, + alternatives); + } + LookupValueCount alternative = lookupValueCountForEquality(pattern, condition, currentlyBoundVars); + if (alternative == null) { + return false; + } + alternatives.add(alternative); + return true; + } + + private LookupAnalysis analyzeEqualityLookup(StatementPattern pattern, ValueExpr condition, + Set currentlyBoundVars) { + LookupValueCount lookupValue = lookupValueCountForEquality(pattern, condition, currentlyBoundVars); + if (lookupValue == null) { + return LookupAnalysis.none(); + } + return lookupAnalysisFor(pattern, lookupValue.component(), lookupValue.valueCount()); + } + + private LookupValueCount lookupValueCountForEquality(StatementPattern pattern, ValueExpr condition, + Set currentlyBoundVars) { + if (condition instanceof Compare compare) { + if (compare.getOperator() != Compare.CompareOp.EQ) { + return null; + } + return lookupValueCountForEquality(pattern, compare.getLeftArg(), compare.getRightArg(), currentlyBoundVars, + compare.getRightArg(), compare.getLeftArg()); + } + if (condition instanceof SameTerm sameTerm) { + return lookupValueCountForEquality(pattern, sameTerm.getLeftArg(), sameTerm.getRightArg(), + currentlyBoundVars, + sameTerm.getRightArg(), sameTerm.getLeftArg()); + } + return null; + } + + private LookupValueCount lookupValueCountForEquality(StatementPattern pattern, ValueExpr leftVarCandidate, + ValueExpr rightValueCandidate, Set currentlyBoundVars, ValueExpr rightVarCandidate, + ValueExpr leftValueCandidate) { + LookupValueCount left = lookupValueCountForVarBinding(pattern, leftVarCandidate, rightValueCandidate, + currentlyBoundVars); + if (left != null) { + return left; + } + return lookupValueCountForVarBinding(pattern, rightVarCandidate, leftValueCandidate, currentlyBoundVars); + } + + private LookupValueCount lookupValueCountForVarBinding(StatementPattern pattern, ValueExpr maybePatternVarExpr, + ValueExpr maybeLookupExpr, Set currentlyBoundVars) { + if (!(maybePatternVarExpr instanceof Var patternVar) || patternVar.getName() == null) { + return null; + } + Component component = findPatternComponentByVarName(pattern, patternVar.getName()); + if (component == null || lookupKey(maybeLookupExpr, currentlyBoundVars) == null) { + return null; + } + return new LookupValueCount(component, 1); + } + + private LookupAnalysis lookupAnalysisFor(StatementPattern pattern, Component component, int valueCount) { + if (component == null || valueCount <= 0) { + return LookupAnalysis.none(); + } + double multiplier = estimateLookupFilterMultiplier(pattern, component, valueCount); + return new LookupAnalysis(EnumSet.of(component), multiplier); + } + + private double estimateLookupFilterMultiplier(StatementPattern pattern, Component component, int valueCount) { + JoinEstimate estimate = estimate(component, + getValueOrNull(pattern.getSubjectVar()), + getValueOrNull(pattern.getPredicateVar()), + getValueOrNull(pattern.getObjectVar()), + getValueOrNull(pattern.getContextVar())); + double distinct = estimate.distinct; + if (!Double.isFinite(distinct) || distinct <= 0.0d) { + return -1.0d; + } + double ratio = valueCount / Math.max(1.0d, distinct); + if (!Double.isFinite(ratio) || ratio <= 0.0d) { + return -1.0d; + } + return normalizeFilterMultiplier(Math.min(1.0d, ratio)); + } + + private String lookupKey(ValueExpr valueExpr, Set currentlyBoundVars) { + if (valueExpr instanceof ValueConstant constant && constant.getValue() != null) { + return "value:" + constant.getValue().stringValue(); + } + if (valueExpr instanceof Var var && var.getName() != null && currentlyBoundVars.contains(var.getName())) { + return "var:" + var.getName(); + } + return null; + } + + private double resolveFilterMultiplier(Filter filter, StatementPattern pattern) { + if (!FilterSelectivityKeys.conditionIntersectsPattern(filter.getCondition(), pattern)) { + return 1.0d; + } + double learnedMultiplier = resolveLearnedFilterMultiplier(filter, pattern); + if (learnedMultiplier > 0.0d) { + return learnedMultiplier; + } + double heuristicMultiplier = estimateHeuristicFilterMultiplier(filter, pattern); + if (heuristicMultiplier > 0.0d) { + return heuristicMultiplier; + } + return 1.0d; + } + + private double resolveFilterMultiplier(Filter filter, TuplePlanEstimate estimate) { + if (filter.getCondition() == null || estimate == null) { + return 1.0d; + } + Set conditionVars = VarNameCollector.process(filter.getCondition()); + if (conditionVars.isEmpty()) { + return 1.0d; + } + Set bindingNames = filter.getArg().getBindingNames(); + for (String conditionVar : conditionVars) { + if (bindingNames.contains(conditionVar)) { + double heuristicMultiplier = estimateHeuristicFilterMultiplier(estimate, filter.getCondition()); + return heuristicMultiplier > 0.0d ? heuristicMultiplier : 1.0d; + } + } + return 1.0d; + } + + private double resolveLearnedFilterMultiplier(Filter filter, StatementPattern pattern) { + JoinStatsProvider statsProvider = learnedStatsProvider; + if (statsProvider == null || filter.getCondition() == null) { + return -1.0d; + } + PatternKey patternKey = FilterSelectivityKeys.patternKeyFor(pattern); + if (patternKey == null || !statsProvider.hasStats(patternKey)) { + return -1.0d; + } + String filterKey = FilterSelectivityKeys.filterKeyFor(filter.getCondition()); + double ratio = statsProvider.getFilterPassRatio(patternKey, filterKey); + if (isValidFilterMultiplier(ratio)) { + return normalizeFilterMultiplier(ratio); + } + ratio = statsProvider.getPatternPassRatio(patternKey); + if (isValidFilterMultiplier(ratio)) { + return normalizeFilterMultiplier(ratio); + } + return -1.0d; + } + + private double estimateHeuristicFilterMultiplier(Filter filter, StatementPattern pattern) { + if (filter.getCondition() == null) { + return -1.0d; + } + double listMemberMultiplier = estimateListMemberFilterMultiplier(pattern, filter.getCondition()); + if (listMemberMultiplier > 0.0d) { + return listMemberMultiplier; + } + double baseRows = estimatePatternRows(pattern); + if (!(baseRows > 0.0d) || !Double.isFinite(baseRows)) { + return -1.0d; + } + StatementPattern narrowedPattern = pattern.clone(); + if (!bindSimpleFilterCondition(narrowedPattern, filter.getCondition())) { + return -1.0d; + } + double narrowedRows = estimatePatternRows(narrowedPattern); + if (narrowedRows < 0.0d || !Double.isFinite(narrowedRows)) { + return -1.0d; + } + double ratio = narrowedRows / baseRows; + if (!Double.isFinite(ratio) || ratio < 0.0d) { + return -1.0d; + } + return normalizeFilterMultiplier(ratio); + } + + private double estimateHeuristicFilterMultiplier(TuplePlanEstimate estimate, ValueExpr condition) { + if (condition == null || estimate == null) { + return -1.0d; + } + if (condition instanceof And) { + And and = (And) condition; + double left = estimateHeuristicFilterMultiplier(estimate, and.getLeftArg()); + double right = estimateHeuristicFilterMultiplier(estimate, and.getRightArg()); + if (left > 0.0d && right > 0.0d) { + return normalizeFilterMultiplier(left * right); + } + return left > 0.0d ? left : right; + } + + double listMemberMultiplier = estimateListMemberFilterMultiplier(estimate, condition); + if (listMemberMultiplier > 0.0d) { + return listMemberMultiplier; + } + + double equalityMultiplier = estimateEqualityFilterMultiplier(estimate, condition); + if (equalityMultiplier > 0.0d) { + return equalityMultiplier; + } + return -1.0d; + } + + private double estimateListMemberFilterMultiplier(StatementPattern pattern, ValueExpr condition) { + if (condition instanceof And) { + And and = (And) condition; + double left = estimateListMemberFilterMultiplier(pattern, and.getLeftArg()); + double right = estimateListMemberFilterMultiplier(pattern, and.getRightArg()); + if (left > 0.0d && right > 0.0d) { + return normalizeFilterMultiplier(left * right); + } + return left > 0.0d ? left : right; + } + if (!(condition instanceof ListMemberOperator)) { + return -1.0d; + } + + List arguments = ((ListMemberOperator) condition).getArguments(); + if (arguments == null || arguments.size() < 2 || !(arguments.get(0) instanceof Var)) { + return -1.0d; + } + Var listedVar = (Var) arguments.get(0); + if (listedVar.getName() == null) { + return -1.0d; + } + + Set constants = new HashSet<>(); + for (int i = 1; i < arguments.size(); i++) { + ValueExpr argument = arguments.get(i); + if (!(argument instanceof ValueConstant)) { + return -1.0d; + } + Value value = ((ValueConstant) argument).getValue(); + if (value == null) { + return -1.0d; + } + constants.add(value); + } + if (constants.isEmpty()) { + return -1.0d; + } + + Var patternVar = findUnboundVarByName(pattern, listedVar.getName()); + if (patternVar == null) { + return -1.0d; + } + + JoinEstimate estimate = estimate(getComponent(pattern, patternVar), + getValueOrNull(pattern.getSubjectVar()), + getValueOrNull(pattern.getPredicateVar()), + getValueOrNull(pattern.getObjectVar()), + getValueOrNull(pattern.getContextVar())); + double distinct = estimate.distinct; + if (!Double.isFinite(distinct) || distinct <= 0.0d) { + return -1.0d; + } + + double ratio = constants.size() / Math.max(1.0d, distinct); + if (!Double.isFinite(ratio) || ratio <= 0.0d) { + return -1.0d; + } + return normalizeFilterMultiplier(Math.min(1.0d, ratio)); + } + + private double estimateListMemberFilterMultiplier(TuplePlanEstimate estimate, ValueExpr condition) { + if (!(condition instanceof ListMemberOperator)) { + return -1.0d; + } + + List arguments = ((ListMemberOperator) condition).getArguments(); + if (arguments == null || arguments.size() < 2 || !(arguments.get(0) instanceof Var)) { + return -1.0d; + } + Var listedVar = (Var) arguments.get(0); + if (listedVar.getName() == null) { + return -1.0d; + } + + Set constants = new HashSet<>(); + for (int i = 1; i < arguments.size(); i++) { + ValueExpr argument = arguments.get(i); + if (!(argument instanceof ValueConstant)) { + return -1.0d; + } + Value value = ((ValueConstant) argument).getValue(); + if (value == null) { + return -1.0d; + } + constants.add(value); + } + if (constants.isEmpty()) { + return -1.0d; + } + + VarPlanStats stats = estimate.varStats.get(listedVar.getName()); + if (stats == null || !Double.isFinite(stats.distinct) || stats.distinct <= 0.0d) { + return -1.0d; + } + + double ratio = constants.size() / Math.max(1.0d, stats.distinct); + if (!Double.isFinite(ratio) || ratio <= 0.0d) { + return -1.0d; + } + return normalizeFilterMultiplier(Math.min(1.0d, ratio)); + } + + private double estimateEqualityFilterMultiplier(TuplePlanEstimate estimate, ValueExpr condition) { + if (condition instanceof Compare) { + Compare compare = (Compare) condition; + if (compare.getOperator() != Compare.CompareOp.EQ) { + return -1.0d; + } + return estimateVarToConstantFilterMultiplier(estimate, compare.getLeftArg(), compare.getRightArg(), + compare.getRightArg(), compare.getLeftArg()); + } + if (condition instanceof SameTerm) { + SameTerm sameTerm = (SameTerm) condition; + return estimateVarToConstantFilterMultiplier(estimate, sameTerm.getLeftArg(), sameTerm.getRightArg(), + sameTerm.getRightArg(), sameTerm.getLeftArg()); + } + return -1.0d; + } + + private double estimateVarToConstantFilterMultiplier(TuplePlanEstimate estimate, ValueExpr leftVarCandidate, + ValueExpr rightValueCandidate, ValueExpr rightVarCandidate, ValueExpr leftValueCandidate) { + double left = estimateVarToConstantFilterMultiplier(estimate, leftVarCandidate, rightValueCandidate); + if (left > 0.0d) { + return left; + } + return estimateVarToConstantFilterMultiplier(estimate, rightVarCandidate, leftValueCandidate); + } + + private double estimateVarToConstantFilterMultiplier(TuplePlanEstimate estimate, ValueExpr maybeVarExpr, + ValueExpr maybeValueExpr) { + if (!(maybeVarExpr instanceof Var) || !(maybeValueExpr instanceof ValueConstant)) { + return -1.0d; + } + Var filterVar = (Var) maybeVarExpr; + ValueConstant constant = (ValueConstant) maybeValueExpr; + if (filterVar.getName() == null || constant.getValue() == null) { + return -1.0d; + } + VarPlanStats stats = estimate.varStats.get(filterVar.getName()); + if (stats == null || !Double.isFinite(stats.distinct) || stats.distinct <= 0.0d) { + return -1.0d; + } + return normalizeFilterMultiplier(1.0d / Math.max(1.0d, stats.distinct)); + } + + private boolean isValidFilterMultiplier(double value) { + return Double.isFinite(value) && value > 0.0d && value <= 1.0d; + } + + private double normalizeFilterMultiplier(double value) { + if (!Double.isFinite(value) || value <= 0.0d) { + return 1.0d; + } + return Math.max(MIN_FILTER_MULTIPLIER, Math.min(1.0d, value)); + } + + private double applyFilterMultiplier(double rows, double multiplier) { + if (!Double.isFinite(rows)) { + return rows; + } + if (!(multiplier > 0.0d) || multiplier >= 1.0d) { + return rows; + } + return rows * normalizeFilterMultiplier(multiplier); + } + + private TuplePlanEstimate applySubtreeFilterMultiplier(TuplePlanEstimate estimate, double multiplier) { + if (estimate == null || !(multiplier > 0.0d) || multiplier >= 1.0d) { + return estimate; + } + double filteredRows = normalizeRows(applyFilterMultiplier(estimate.outputRows, multiplier)); + Map filteredStats = new HashMap<>(estimate.varStats.size()); + for (Map.Entry entry : estimate.varStats.entrySet()) { + filteredStats.put(entry.getKey(), + new VarPlanStats(clampDistinct(entry.getValue().distinct, filteredRows), null)); + } + return new TuplePlanEstimate(filteredRows, filteredRows, 1.0d, filteredStats); + } + + private boolean bindSimpleFilterCondition(StatementPattern pattern, ValueExpr condition) { + if (condition instanceof And) { + And and = (And) condition; + return bindSimpleFilterCondition(pattern, and.getLeftArg()) + && bindSimpleFilterCondition(pattern, and.getRightArg()); + } + + if (condition instanceof Compare) { + Compare compare = (Compare) condition; + if (compare.getOperator() != Compare.CompareOp.EQ) { + return false; + } + + return bindVarToConstant(pattern, compare.getLeftArg(), compare.getRightArg()) + || bindVarToConstant(pattern, compare.getRightArg(), compare.getLeftArg()); + } + + if (condition instanceof SameTerm) { + SameTerm sameTerm = (SameTerm) condition; + return bindVarToConstant(pattern, sameTerm.getLeftArg(), sameTerm.getRightArg()) + || bindVarToConstant(pattern, sameTerm.getRightArg(), sameTerm.getLeftArg()); + } + + return false; + } + + private boolean bindVarToConstant(StatementPattern pattern, ValueExpr maybeVarExpr, ValueExpr maybeValueExpr) { + if (!(maybeVarExpr instanceof Var) || !(maybeValueExpr instanceof ValueConstant)) { + return false; + } + + Var filterVar = (Var) maybeVarExpr; + ValueConstant constant = (ValueConstant) maybeValueExpr; + if (filterVar.getName() == null || constant.getValue() == null) { + return false; + } + + return bindPatternVars(pattern, filterVar.getName(), constant.getValue()); + } + + private boolean bindPatternVars(StatementPattern pattern, String varName, Value value) { + boolean found = false; + for (Var patternVar : new Var[] { + pattern.getSubjectVar(), + pattern.getPredicateVar(), + pattern.getObjectVar(), + pattern.getContextVar() }) { + if (patternVar == null || !varName.equals(patternVar.getName())) { + continue; + } + + found = true; + if (patternVar.hasValue() && !Objects.equals(patternVar.getValue(), value)) { + return false; + } + if (!patternVar.hasValue()) { + pattern.replaceChildNode(patternVar, + Var.of(patternVar.getName(), value, patternVar.isAnonymous(), patternVar.isConstant())); + } + } + return found; + } + + private String getValueOrNull(Var v) { + return (v == null || v.getValue() == null) + ? null + : v.getValue().stringValue(); + } + + private boolean hasBoundComponent(StatementPattern sp) { + return hasBoundValue(sp.getSubjectVar()) + || hasBoundValue(sp.getPredicateVar()) + || hasBoundValue(sp.getObjectVar()) + || hasBoundValue(sp.getContextVar()); + } + + private boolean hasBoundValue(Var var) { + return var != null && var.hasValue(); + } + + private Component findPatternComponentByVarName(StatementPattern pattern, String varName) { + for (Component component : Component.values()) { + Var var = varForComponent(pattern, component); + if (var != null && varName.equals(var.getName())) { + return component; + } + } + return null; + } + + private Component getComponent(StatementPattern sp, Var var) { + if (var.equals(sp.getSubjectVar())) { + return Component.S; + } + if (var.equals(sp.getPredicateVar())) { + return Component.P; + } + if (var.equals(sp.getObjectVar())) { + return Component.O; + } + if (var.equals(sp.getContextVar())) { + return Component.C; + } + throw new IllegalStateException("Unexpected variable " + var + " in pattern " + sp); + } + + private Var varForComponent(StatementPattern pattern, Component component) { + return switch (component) { + case S -> pattern.getSubjectVar(); + case P -> pattern.getPredicateVar(); + case O -> pattern.getObjectVar(); + case C -> pattern.getContextVar(); + }; + } + + private record LookupAnalysis(Set components, double multiplier) { + private static LookupAnalysis none() { + return new LookupAnalysis(Set.of(), -1.0d); + } + + private boolean isNone() { + return components.isEmpty(); + } + } + + private record LookupValueCount(Component component, int valueCount) { + } + + /* ────────────────────────────────────────────────────────────── */ + /* Staleness API */ + /* ────────────────────────────────────────────────────────────── */ + + private static final class ChurnSnapshot { + final int sampled; + final int removed; + final int readded; + + ChurnSnapshot(int sampled, int removed, int readded) { + this.sampled = sampled; + this.removed = removed; + this.readded = readded; + } + + double removalRatio() { + return sampled == 0 ? 0.0 : (double) removed / (double) sampled; + } + + double readdRatio() { + return sampled == 0 ? 0.0 : (double) readded / (double) sampled; + } + } + + private static final class ChurnSampler { + private enum State { + ADDED, + DELETED_AFTER_ADD, + READDED_AFTER_DELETE + } + + private final ConcurrentHashMap samples = new ConcurrentHashMap<>(); + private long eventsSinceLastSample = 0L; + + void reset() { + samples.clear(); + eventsSinceLastSample = 0L; + } + + void recordAdd(String signature, long sampleEvery) { + record(signature, sampleEvery, true); + } + + void recordDelete(String signature, long sampleEvery) { + record(signature, sampleEvery, false); + } + + private void record(String signature, long sampleEvery, boolean isAdd) { + if (sampleEvery <= 0) { + return; + } + eventsSinceLastSample++; + if (eventsSinceLastSample < sampleEvery) { + return; + } + eventsSinceLastSample = 0L; + + samples.compute(signature, (sig, state) -> { + if (state == null) { + return isAdd ? State.ADDED : null; + } + if (isAdd && state == State.DELETED_AFTER_ADD) { + return State.READDED_AFTER_DELETE; + } + if (!isAdd && state == State.ADDED) { + return State.DELETED_AFTER_ADD; + } + return state; + }); + } + + ChurnSnapshot snapshot() { + int sampled = 0; + int removed = 0; + int readded = 0; + for (State state : samples.values()) { + sampled++; + if (state == State.DELETED_AFTER_ADD || state == State.READDED_AFTER_DELETE) { + removed++; + } + if (state == State.READDED_AFTER_DELETE) { + readded++; + } + } + return new ChurnSnapshot(sampled, removed, readded); + } + } + + /** + * Immutable staleness snapshot. All values are approximate by design. + */ + public static final class Staleness { + public final long ageMillis; // AoI: time since last publish + public final long lastRebuildPublishMs; + + // churn-specific + public final int sampledAdds; + public final int sampledRemoved; + public final int sampledReadded; + public final double sampledRemovalRatio; + public final double sampledReaddRatio; + + public final double stalenessScore; // combined 0..1+ + + private Staleness( + long ageMillis, + long lastRebuildPublishMs, + int sampledAdds, + int sampledRemoved, + int sampledReadded, + double sampledRemovalRatio, + double sampledReaddRatio, + double stalenessScore) { + this.ageMillis = ageMillis; + this.lastRebuildPublishMs = lastRebuildPublishMs; + this.sampledAdds = sampledAdds; + this.sampledRemoved = sampledRemoved; + this.sampledReadded = sampledReadded; + this.sampledRemovalRatio = sampledRemovalRatio; + this.sampledReaddRatio = sampledReaddRatio; + this.stalenessScore = stalenessScore; + } + + @Override + public String toString() { + return "Staleness{" + + "ageMillis=" + ageMillis + + ", lastRebuildPublishMs=" + lastRebuildPublishMs + + ", sampledAdds=" + sampledAdds + + ", sampledRemoved=" + sampledRemoved + + ", sampledReadded=" + sampledReadded + + ", sampledRemovalRatio=" + sampledRemovalRatio + + ", sampledReaddRatio=" + sampledReaddRatio + + ", stalenessScore=" + stalenessScore + + '}'; + } + } + + /** + * Compute a staleness snapshot using the *current* published State. No locks taken. + * + * This is O(total number of populated sketch keys) and intended for occasional diagnostics or adaptive scheduling. + * All numbers are approximate by design of Theta sketches. + */ + public Staleness staleness() { + final long now = System.currentTimeMillis(); + final long age = lastRebuildPublishMs == 0L ? Long.MAX_VALUE : (now - lastRebuildPublishMs); + + final int decisionMin = 1; + + ChurnSnapshot churnSnapshot = churnSampler.snapshot(); + double churnRatio = churnSnapshot.sampled < decisionMin + ? 0.0 + : Math.max(churnSnapshot.readdRatio(), churnSnapshot.removalRatio()); + + double score = clamp(churnRatio, 0.0, 1.0); + + return new Staleness( + age, + lastRebuildPublishMs, + churnSnapshot.sampled, + churnSnapshot.removed, + churnSnapshot.readded, + churnSnapshot.removalRatio(), + churnSnapshot.readdRatio(), + score); + } + + /** Convenience: true if combined staleness score exceeds a given threshold. */ + public boolean isStale(double threshold) { + Staleness staleness = staleness(); + int decisionMin = 1; + boolean removalBreach = staleness.sampledAdds >= decisionMin + && staleness.sampledRemovalRatio >= churnRemovalRatioThreshold; + boolean readdBreach = staleness.sampledAdds >= decisionMin + && staleness.sampledReaddRatio >= churnReaddThreshold; + return removalBreach || readdBreach || staleness.stalenessScore > threshold; + } + + // ────────────────────────────────────────────────────────────── + // Staleness helpers (private) + // ────────────────────────────────────────────────────────────── + + private static double clamp(double v, double lo, double hi) { + return Math.max(lo, Math.min(hi, v)); + } + + /** + * Determine how frequently churn events should be sampled, expressed as "every N statements". + *

+ * Rules: + *

    + *
  • When both {@code churnSamplePercent} and {@code churnSampleMin} are zero or negative, sampling is + * disabled.
  • + *
  • Base interval is derived from {@code churnSamplePercent * approxStoreSize} (rounded to ≥ 1) when percent > + * 0.
  • + *
  • The interval is never smaller (more frequent) than {@code churnSampleMin} when + * {@code churnSampleMin > 0}.
  • + *
  • If {@code churnSampleMax > 0} and the calculated interval is below it, the interval is raised to + * {@code churnSampleMax} to avoid oversampling.
  • + *
+ */ + private long samplingInterval() { + if (churnSamplePercent <= 0.0 && churnSampleMin <= 0) { + return 0L; // sampling disabled + } + + long interval = 0L; + + if (churnSamplePercent > 0.0) { + double raw = approxStoreSize.get() * churnSamplePercent; + long pctInterval = Math.max(1L, Math.round(raw)); + interval = Math.max(interval, pctInterval); + } + + if (churnSampleMin > 0) { + interval = Math.max(interval, churnSampleMin); + } + + if (churnSampleMax > 0 && interval > 0 && interval < churnSampleMax) { + interval = churnSampleMax; + } + + return interval; + } + + /* ────────────────────────────────────────────────────────────── */ + /* Persistence public API */ + /* ────────────────────────────────────────────────────────────── */ + + /** + * Best-effort sketch persistence intended for scheduled store-level sync/commit paths. + * + * @return true if persisted state was updated. + */ + public boolean persistIfDirty() { + flushPendingIncremental(); + if (!persistenceEnabled || persistenceFile == null || persistenceBlobBaseFile == null) { + return false; + } + if ((rebuildEpoch.get() & 1L) != 0L) { + return false; + } + byte currentSlot = slotByte(slotOf(current)); + Path currentBlobBase = blobBaseForSlot(currentSlot); + boolean needsPrimarySnapshotRewrite = currentBlobBase != null + && !currentBlobBase.equals(persistenceBlobBaseFile); + boolean rewrotePrimarySnapshot = false; + if (!dirty.get() && !manifestDirty.get() && !needsPrimarySnapshotRewrite) { + return false; + } + // Lock order rule: never block on State monitors while holding persistLock. + // flushDirtySketches() touches bufA/bufB, so run it outside persistLock. + if (needsPrimarySnapshotRewrite) { + try { + persistCurrentSlotSnapshotToPrimaryBlobBase(current, currentSlot); + rewrotePrimarySnapshot = true; + } catch (Throwable t) { + logger.warn("Failed to rewrite join estimator primary snapshot to {}", persistenceFile, t); + return false; + } + } + boolean hadDirty = dirty.get(); + if (hadDirty && !needsPrimarySnapshotRewrite) { + try { + flushDirtySketches(); + } catch (Throwable t) { + logger.warn("Failed to persist join estimator state to {}", persistenceFile, t); + return false; + } + } + synchronized (persistLock) { + if (!dirty.get() && !manifestDirty.get() && !rewrotePrimarySnapshot) { + return false; + } + try { + boolean persisted = false; + if (rewrotePrimarySnapshot) { + persisted = true; + } else if (hadDirty) { + compactPersistedBlobShards(currentSlot, persistenceBlobBaseFile); + persisted = true; + } + if (manifestDirty.get()) { + writeManifest(persistenceFile); + manifestDirty.set(false); + persisted = true; + } + refreshDirtyFlagFromCacheDirectory(); + return persisted; + } catch (Throwable t) { + logger.warn("Failed to persist join estimator state to {}", persistenceFile, t); + return false; + } + } + } + + /** + * Release in-memory sketches. Query planning falls back until sketches are lazy-loaded or rebuilt. + */ + public void unload() { + unloadInternal(false); + } + + /** + * Discard any in-memory estimator state and force a rebuild from store data on the next refresh cycle. + */ + public void discardAndMarkForRebuild() { + unloadInternal(true); + clearSlotPersistence((byte) 0); + clearSlotPersistence((byte) 1); + dirty.set(false); + manifestDirty.set(false); + } + + private void unloadInternal(boolean markRebuildRequired) { + clearEstimateCache(); + synchronized (incrementalBufferLock) { + Arrays.fill(incrementalBuffer, 0, incrementalBufferCount, null); + incrementalBufferCount = 0; + } + synchronized (bufA) { + bufA.clear(); + } + synchronized (bufB) { + bufB.clear(); + } + synchronized (sketchCacheLock) { + residentLru.clear(); + cacheDirectory.clearAllResidentNodes(); + residentSketchBytes = 0L; + } + memoryRegistry.clearCategory(MemoryCategory.RESIDENT_SKETCHES); + memoryRegistry.clearCategory(MemoryCategory.ROBUST_BUILDER); + memoryRegistry.clearCategory(MemoryCategory.ROBUST_SYNOPSIS); + memoryRegistry.clearTransientCategories(); + refreshCacheMetadataAccounting(); + seenTriples = 0L; + sketchesLoaded = false; + if (markRebuildRequired) { + rebuildRequired.set(true); + } + } + + private boolean tryLoadFromDisk() { + if (!persistenceEnabled || persistenceFile == null) { + return false; + } + synchronized (loadLock) { + if (sketchesLoaded) { + return true; + } + if (!hasSnapshotAvailable(persistenceFile)) { + return false; + } + try { + readManifest(persistenceFile); + sketchesLoaded = true; + rebuildRequired.set(false); + dirty.set(false); + manifestDirty.set(false); + return true; + } catch (Throwable t) { + discardAndMarkForRebuild(); + if (isUnsupportedSnapshotVersion(t)) { + throw new IllegalStateException("Unsupported join estimator snapshot version", t); + } + logger.warn("Failed to load join estimator state from {}", persistenceFile, t); + return false; + } + } + } + + private static boolean isUnsupportedSnapshotVersion(Throwable t) { + Throwable cursor = t; + while (cursor != null) { + String message = cursor.getMessage(); + if (message != null && message.startsWith("Unsupported join estimator snapshot version")) { + return true; + } + cursor = cursor.getCause(); + } + return false; + } + + private static boolean hasSnapshotAvailable(Path file) { + return file != null && Files.isReadable(file); + } + + private static Path sidecarPath(Path manifest) { + return manifest.resolveSibling(manifest.getFileName().toString() + ".sketches"); + } + + private static void deleteRobustSynopsisSpillDirectory(Path spillDirectory) throws IOException { + if (spillDirectory == null || !Files.exists(spillDirectory)) { + return; + } + try (DirectoryStream entries = Files.newDirectoryStream(spillDirectory)) { + for (Path entry : entries) { + if (Files.isDirectory(entry)) { + deleteRobustSynopsisSpillDirectory(entry); + } else { + Files.deleteIfExists(entry); + } + } + } + Files.deleteIfExists(spillDirectory); + } + + private void deleteRobustSynopsisSpillDirectoryQuietly(Path spillDirectory) { + try { + deleteRobustSynopsisSpillDirectory(spillDirectory); + } catch (IOException e) { + logger.debug("Failed to delete robust synopsis spill directory {}", spillDirectory, e); + } + } + + private static Path sidecarPath(Path baseBlob, int blobId) { + if (blobId <= 0) { + return baseBlob; + } + return baseBlob.resolveSibling(baseBlob.getFileName().toString() + "." + blobId); + } + + private Path blobBaseForSlot(byte slot) { + return slotBlobBaseFiles[slot]; + } + + private void setBlobBaseForSlot(byte slot, Path blobBase) { + slotBlobBaseFiles[slot] = blobBase == null ? null : blobBase.toAbsolutePath().normalize(); + } + + private void assignPrimaryBlobBaseToCurrentSlot() { + if (persistenceBlobBaseFile == null) { + return; + } + setBlobBaseForSlot(slotByte(slotOf(current)), persistenceBlobBaseFile); + } + + private void clearSlotPersistence(byte slot) { + synchronized (sketchCacheLock) { + cacheDirectory.clearPersistedRefsForSlot(slot); + cacheDirectory.clearDirtyForSlot(slot); + } + setBlobBaseForSlot(slot, null); + deleteTemporaryBlobBaseForSlot(slot); + } + + private Path ensureTemporaryBlobBaseForSlot(byte slot) { + Path existing = blobBaseForSlot(slot); + if (existing != null && !existing.equals(persistenceBlobBaseFile)) { + return existing; + } + Path tempDir = slotTempBlobDirectories[slot]; + try { + if (tempDir == null || !Files.isDirectory(tempDir)) { + Path parent = persistenceFile != null ? persistenceFile.toAbsolutePath().normalize().getParent() : null; + String prefix = "join-estimator-rebuild-" + (slot == 0 ? "a" : "b") + "-"; + tempDir = parent != null && Files.isDirectory(parent) + ? Files.createTempDirectory(parent, prefix) + : Files.createTempDirectory(prefix); + slotTempBlobDirectories[slot] = tempDir; + } + Path tempBlobBase = tempDir.resolve("spill.sketches").toAbsolutePath().normalize(); + setBlobBaseForSlot(slot, tempBlobBase); + return tempBlobBase; + } catch (IOException e) { + throw new RuntimeException("Failed to prepare temporary sketch spill directory for slot " + + (slot == 0 ? "A" : "B"), e); + } + } + + private void deleteTemporaryBlobBaseForSlot(byte slot) { + Path tempDir = slotTempBlobDirectories[slot]; + if (tempDir == null) { + return; + } + Path slotBlobBase = blobBaseForSlot(slot); + if (slotBlobBase != null && slotBlobBase.startsWith(tempDir)) { + setBlobBaseForSlot(slot, null); + } + try { + closeMappedChannels(tempDir.resolve("spill.sketches").toAbsolutePath().normalize()); + deleteAllBlobShards(tempDir.resolve("spill.sketches")); + Files.deleteIfExists(tempDir); + } catch (IOException e) { + logger.debug("Failed to delete temporary sketch spill directory {}", tempDir, e); + } finally { + slotTempBlobDirectories[slot] = null; + } + } + + private boolean isRebuildAllowed() { + BooleanSupplier supplier = rebuildAllowedSupplier; + if (supplier != null) { + try { + return supplier.getAsBoolean(); + } catch (Throwable t) { + logger.debug("Ignoring rebuild-allowed supplier failure", t); + } + } + return true; + } + + private static long percentToBytes(double fraction, long heapMaxBytes) { + return Math.max(0L, Math.round(fraction * heapMaxBytes)); + } + + private void refreshCacheMetadataAccounting() { + synchronized (sketchCacheLock) { + long actualBytes = cacheDirectory.estimatedHeapBytes() + residentLru.estimatedHeapBytes(); + long trackedBytes = Math.max(0L, actualBytes - baselineCacheMetadataBytes); + memoryRegistry.replace(MemoryCategory.CACHE_METADATA, MEMORY_OWNER_CACHE_METADATA, trackedBytes); + } + } + + DebugMemorySnapshot debugMemorySnapshot() { + return memoryRegistry.snapshot(); + } + + private void replaceTrackedMemory(MemoryCategory category, long ownerId, long bytes) { + memoryRegistry.replace(category, ownerId, bytes); + } + + private void releaseTrackedMemory(MemoryCategory category, long ownerId) { + memoryRegistry.release(category, ownerId); + } + + private void reserveTrackedMemory(MemoryCategory category, long ownerId, long bytes) { + memoryRegistry.reserve(category, ownerId, bytes); + } + + private long trackedEstimatorBytes() { + return memoryRegistry.totalBytes(); + } + + private void ensureEstimatorCapacity(long predictedBytes, boolean allowUnload) { + long additionalBytes = Math.max(0L, predictedBytes); + if (hasRecoveredHeadroom(additionalBytes)) { + return; + } + if (hasRecoveredHeadroom(additionalBytes)) { + return; + } + if (hasRecoveredHeadroom(additionalBytes)) { + return; + } + + while (true) { + int candidateEntryId; + byte candidateSlot; + synchronized (sketchCacheLock) { + if (residentLru.isEmpty()) { + break; + } + int headNode = residentLru.headNode(); + candidateEntryId = residentLru.entryId(headNode); + candidateSlot = residentLru.slot(headNode); + } + EvictionResult evictionResult = evictResidentSketch(candidateEntryId, candidateSlot); + if (evictionResult != EvictionResult.EVICTED) { + break; + } + if (hasRecoveredHeadroom(additionalBytes)) { + return; + } + } + + if (hasRecoveredHeadroom(additionalBytes)) { + return; + } + if (allowUnload) { + unloadInternal(true); + } + throw new MemoryPressureAbort("Insufficient heap headroom for estimator allocation of " + additionalBytes + + " bytes (tracked=" + trackedEstimatorBytes() + ", availableHeadroom=" + availableHeapHeadroomBytes() + + ")"); + } + + private boolean hasRecoveredHeadroom(long additionalBytes) { + long trackedBytes = saturatingAdd(trackedEstimatorBytes(), additionalBytes); + return trackedBytes <= trackedMemorySoftLimitBytes && availableHeapHeadroomBytes() >= additionalBytes; + } + + private static long saturatingAdd(long left, long right) { + if (right <= 0L) { + return left; + } + if (left >= Long.MAX_VALUE - right) { + return Long.MAX_VALUE; + } + return left + right; + } + + private static long residentOwner(byte slot, int entryId) { + return (((long) slot) << 32) | (entryId & 0xffffffffL); + } + + private static String residentOwnerLabel(long ownerId) { + byte slot = (byte) (ownerId >>> 32); + int entryId = (int) ownerId; + return "resident:" + (slot == 0 ? "A" : "B") + ":" + entryId; + } + + private static long transientOwner(long ownerBase) { + return transientOwner(ownerBase, 0L); + } + + private static long transientOwner(long ownerBase, long discriminator) { + long threadId = Thread.currentThread().getId() & 0xffffL; + return (threadId << 48) | ((discriminator & 0xffffffffL) << 16) | (ownerBase & 0xffffL); + } + + private static String transientOwnerLabel(long ownerId) { + long threadId = (ownerId >>> 48) & 0xffffL; + long discriminator = (ownerId >>> 16) & 0xffffffffL; + long ownerBase = (short) ownerId; + return "transient:" + ownerBase + ":" + discriminator + ":thread-" + threadId; + } + + private static long estimateByteArrayBytes(int length) { + return align(ARRAY_HEADER_BYTES + Math.max(0L, length) * BYTE_BYTES); + } + + private static long estimateBooleanArrayBytes(int length) { + return align(ARRAY_HEADER_BYTES + Math.max(0L, length) * BOOLEAN_BYTES); + } + + private static long estimateIntArrayBytes(int length) { + return align(ARRAY_HEADER_BYTES + Math.max(0L, length) * INT_BYTES); + } + + private static long estimateLongArrayBytes(int length) { + return align(ARRAY_HEADER_BYTES + Math.max(0L, length) * LONG_BYTES); + } + + /* ────────────────────────────────────────────────────────────── */ + /* Sketch cache + IO */ + /* ────────────────────────────────────────────────────────────── */ + + private static long estimatedSketchBytes(UpdateSketch sketch) { + // getCurrentBytes() is O(1) and avoids scanning retained entries on every cache touch. + return sketch.getCurrentBytes(); + } + + private BufferSlot slotOf(State state) { + return state == bufA ? BufferSlot.A : BufferSlot.B; + } + + private static byte slotByte(BufferSlot slot) { + return slot == BufferSlot.A ? (byte) 0 : (byte) 1; + } + + private State stateOf(BufferSlot slot) { + return slot == BufferSlot.A ? bufA : bufB; + } + + private static SketchAddress singleTripleAddress(boolean isDelete, Component component, int idx) { + return new SketchAddress(REC_SINGLE_TRIPLE, isDelete, (byte) component.ordinal(), (byte) 0, idx, 0); + } + + private static SketchAddress singleComplementAddress(boolean isDelete, Component fixed, Component other, int idx) { + return new SketchAddress(REC_SINGLE_CPL, isDelete, (byte) fixed.ordinal(), (byte) other.ordinal(), idx, 0); + } + + private static SketchAddress pairAddress(byte recType, boolean isDelete, Pair pair, int x, int y) { + return new SketchAddress(recType, isDelete, (byte) pair.ordinal(), (byte) 0, x, y); + } + + private UpdateSketch getSketchForRead(State state, SketchAddress address) { + UpdateSketch sketch = getResidentSketch(state, address); + if (sketch != null) { + touchResidentSketch(state, address, sketch, false); + return sketch; + } + return loadPersistedSketch(state, address); + } + + private UpdateSketch getSketchForWrite(State state, SketchAddress address) { + UpdateSketch sketch = getResidentSketch(state, address); + if (sketch == null) { + sketch = loadPersistedSketch(state, address); + if (sketch != null) { + setResidentSketch(state, address, sketch); + } + } + if (sketch == null) { + ensureEstimatorCapacity(256L, true); + sketch = newSk(state.k); + setResidentSketch(state, address, sketch); + } + return sketch; + } + + private UpdateSketch getSketchForWrite(State state, SketchAddress address, int entryId) { + UpdateSketch sketch = getResidentSketch(state, address); + if (sketch == null) { + sketch = loadPersistedSketch(state, address, entryId); + if (sketch != null) { + setResidentSketch(state, address, sketch); + } + } + if (sketch == null) { + ensureEstimatorCapacity(256L, true); + sketch = newSk(state.k); + setResidentSketch(state, address, sketch); + } + return sketch; + } + + private UpdateSketch loadPersistedSketch(State state, SketchAddress address) { + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.find(address); + } + if (entryId < 0) { + return null; + } + return loadPersistedSketch(state, address, entryId); + } + + private UpdateSketch loadPersistedSketch(State state, SketchAddress address, int entryId) { + try { + UpdateSketch loaded; + byte slot = slotByte(slotOf(state)); + synchronized (persistLock) { + PersistedSketchRef persistedSketchRef; + synchronized (sketchCacheLock) { + persistedSketchRef = cacheDirectory.persistedRef(entryId, slot); + } + Path blobBase = blobBaseForSlot(slot); + if (persistedSketchRef == null || blobBase == null) { + return null; + } + loaded = readSketchFromBlob(blobBase, persistedSketchRef, state.k); + } + putResidentSketch(state, address, loaded); + return loaded; + } catch (IOException e) { + logger.warn("Failed to load persisted sketch {}", address, e); + throw new RuntimeException("Failed to load persisted sketch " + address, e); + } + } + + private void putResidentSketch(State state, SketchAddress address, UpdateSketch sketch) { + setResidentSketch(state, address, sketch); + if (sketch == null) { + removeResidentSketchTracking(state, address); + } else { + touchResidentSketch(state, address, sketch, true); + } + } + + private void touchResidentSketch(State state, SketchAddress address, UpdateSketch sketch, boolean enforceBudget) { + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.findOrAdd(address); + } + touchResidentSketch(state, entryId, sketch, enforceBudget); + } + + private void touchResidentSketch(State state, int entryId, UpdateSketch sketch, boolean enforceBudget) { + byte slot = slotByte(slotOf(state)); + long bytes = estimatedSketchBytes(sketch); + synchronized (sketchCacheLock) { + int nodeId = cacheDirectory.residentNode(entryId, slot); + if (nodeId == -1) { + int createdNodeId = residentLru.add(entryId, slot, bytes); + cacheDirectory.setResidentNode(entryId, slot, createdNodeId); + residentSketchBytes += bytes; + } else { + long previousBytes = residentLru.bytes(nodeId); + residentLru.touch(nodeId, bytes); + residentSketchBytes += (bytes - previousBytes); + } + } + replaceTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(slot, entryId), bytes); + refreshCacheMetadataAccounting(); + if (enforceBudget) { + enforceSketchBudget(); + } + } + + private void removeResidentSketchTracking(State state, SketchAddress address) { + byte slot = slotByte(slotOf(state)); + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.find(address); + if (entryId < 0) { + return; + } + removeResidentSketchTracking(entryId, slot); + } + refreshCacheMetadataAccounting(); + } + + private void clearResidentTrackingForSlot(BufferSlot slot) { + byte targetSlot = slotByte(slot); + synchronized (sketchCacheLock) { + for (int node = residentLru.headNode(); node != -1;) { + int nextNode = residentLru.nextNode(node); + if (residentLru.slot(node) == targetSlot) { + int entryId = residentLru.entryId(node); + residentSketchBytes -= residentLru.remove(node); + cacheDirectory.setResidentNode(entryId, targetSlot, -1); + releaseTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(targetSlot, entryId)); + } + node = nextNode; + } + cacheDirectory.clearResidentNodesForSlot(targetSlot); + } + refreshCacheMetadataAccounting(); + } + + private void removeResidentSketchTracking(int entryId, byte slot) { + int nodeId = cacheDirectory.residentNode(entryId, slot); + if (nodeId == -1) { + return; + } + residentSketchBytes -= residentLru.remove(nodeId); + cacheDirectory.setResidentNode(entryId, slot, -1); + releaseTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(slot, entryId)); + } + + private void markDirty(State state, int entryId) { + byte slot = slotByte(slotOf(state)); + synchronized (sketchCacheLock) { + cacheDirectory.markDirty(entryId, slot); + } + dirty.set(true); + } + + private boolean isDirty(int entryId, byte slot) { + synchronized (sketchCacheLock) { + return cacheDirectory.isDirty(entryId, slot); + } + } + + private boolean refreshDirtyFlagFromCacheDirectory() { + byte currentSlot = slotByte(slotOf(current)); + synchronized (sketchCacheLock) { + boolean hasDirtyEntries = cacheDirectory.hasDirtyEntries(currentSlot); + dirty.set(hasDirtyEntries); + return hasDirtyEntries; + } + } + + private void enforceSketchBudget() { + long targetBytes; + synchronized (sketchCacheLock) { + if ((residentSketchBytes <= maxSketchMemoryBytes && hasRecoveredHeadroom(0L)) || residentLru.isEmpty()) { + return; + } + targetBytes = residentSketchBytes > maxSketchMemoryBytes ? minSketchMemoryBytes : 0L; + } + + while (true) { + int candidateEntryId; + byte candidateSlot; + synchronized (sketchCacheLock) { + if (((residentSketchBytes <= targetBytes) && hasRecoveredHeadroom(0L)) || residentLru.isEmpty()) { + return; + } + int headNode = residentLru.headNode(); + candidateEntryId = residentLru.entryId(headNode); + candidateSlot = residentLru.slot(headNode); + } + + EvictionResult evictionResult = evictResidentSketch(candidateEntryId, candidateSlot); + if (evictionResult == EvictionResult.NEEDS_UNLOAD) { + unloadInternal(true); + return; + } + if (evictionResult == EvictionResult.FAILED) { + return; + } + } + + } + + private EvictionResult evictResidentSketch(int entryId, byte slotByte) { + BufferSlot slot = slotByte == 0 ? BufferSlot.A : BufferSlot.B; + State state = stateOf(slot); + SketchAddress sketchAddress; + synchronized (sketchCacheLock) { + if (entryId < 0 || entryId >= cacheDirectory.size()) { + return EvictionResult.EVICTED; + } + sketchAddress = cacheDirectory.toSketchAddress(entryId); + } + UpdateSketch sketch; + boolean dirtySketch; + synchronized (state) { + sketch = getResidentSketch(state, sketchAddress); + if (sketch == null) { + synchronized (sketchCacheLock) { + removeResidentSketchTracking(entryId, slotByte); + } + refreshCacheMetadataAccounting(); + return EvictionResult.EVICTED; + } + dirtySketch = isDirty(entryId, slotByte); + if (dirtySketch && blobBaseForSlot(slotByte) == null) { + if (state == current) { + return EvictionResult.NEEDS_UNLOAD; + } + ensureTemporaryBlobBaseForSlot(slotByte); + } + setResidentSketch(state, sketchAddress, null); + synchronized (sketchCacheLock) { + removeResidentSketchTracking(entryId, slotByte); + } + } + refreshCacheMetadataAccounting(); + if (!dirtySketch) { + return EvictionResult.EVICTED; + } + synchronized (persistLock) { + try { + appendSketchPayload(state, entryId, sketchAddress, sketch); + return EvictionResult.EVICTED; + } catch (IOException e) { + logger.warn("Failed to persist dirty sketch during eviction", e); + synchronized (state) { + if (getResidentSketch(state, sketchAddress) == null) { + setResidentSketch(state, sketchAddress, sketch); + touchResidentSketch(state, sketchAddress, sketch, false); + } + } + return EvictionResult.FAILED; + } + } + } + + private UpdateSketch getResidentSketch(State state, SketchAddress address) { + switch (address.recType) { + case REC_SINGLE_TRIPLE: { + Component component = Component.values()[address.axisA]; + AtomicReferenceArray arr = address.isDelete ? state.delSingleTriples.get(component) + : state.singleTriples.get(component); + return arr.get(address.x); + } + case REC_SINGLE_CPL: { + Component fixed = Component.values()[address.axisA]; + Component other = Component.values()[address.axisB]; + SingleBuild build = address.isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); + AtomicReferenceArray arr = build.cmpl.get(other); + return arr == null ? null : arr.get(address.x); + } + case REC_PAIR_TRIPLE: + case REC_PAIR_COMP1: + case REC_PAIR_COMP2: { + Pair pair = Pair.values()[address.axisA]; + PairBuild build = address.isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); + PairBuild.Row row = build.rows.get(address.x); + if (row == null) { + return null; + } + if (address.recType == REC_PAIR_TRIPLE) { + return row.triples.get(address.y); + } + if (address.recType == REC_PAIR_COMP1) { + return row.comp1.get(address.y); + } + return row.comp2.get(address.y); + } + default: + throw new IllegalStateException("Unknown sketch record type: " + address.recType); + } + } + + private void setResidentSketch(State state, SketchAddress address, UpdateSketch sketch) { + switch (address.recType) { + case REC_SINGLE_TRIPLE: { + Component component = Component.values()[address.axisA]; + AtomicReferenceArray arr = address.isDelete ? state.delSingleTriples.get(component) + : state.singleTriples.get(component); + arr.set(address.x, sketch); + return; + } + case REC_SINGLE_CPL: { + Component fixed = Component.values()[address.axisA]; + Component other = Component.values()[address.axisB]; + SingleBuild build = address.isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); + AtomicReferenceArray arr = build.cmpl.get(other); + if (arr != null) { + arr.set(address.x, sketch); + } + return; + } + case REC_PAIR_TRIPLE: + case REC_PAIR_COMP1: + case REC_PAIR_COMP2: { + Pair pair = Pair.values()[address.axisA]; + PairBuild build = address.isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); + PairBuild.Row row = build.getOrCreateRow(address.x); + Map target; + if (address.recType == REC_PAIR_TRIPLE) { + target = row.triples; + } else if (address.recType == REC_PAIR_COMP1) { + target = row.comp1; + } else { + target = row.comp2; + } + if (sketch == null) { + target.remove(address.y); + if (row.triples.isEmpty() && row.comp1.isEmpty() && row.comp2.isEmpty()) { + build.rows.remove(address.x); + } + } else { + target.put(address.y, sketch); + } + return; + } + default: + throw new IllegalStateException("Unknown sketch record type: " + address.recType); + } + } + + private void flushDirtySketches() throws IOException { + State currentState = current; + byte currentSlot = slotByte(slotOf(currentState)); + int[] pending; + synchronized (sketchCacheLock) { + pending = cacheDirectory.snapshotDirtyEntries(currentSlot); + } + + for (int entryId : pending) { + SketchAddress address; + synchronized (sketchCacheLock) { + if (!cacheDirectory.isDirty(entryId, currentSlot)) { + continue; + } + address = cacheDirectory.toSketchAddress(entryId); + } + appendDirtySketchIfResident(entryId, address, currentState); + } + } + + private boolean appendDirtySketchIfResident(int entryId, SketchAddress address, State state) throws IOException { + synchronized (state) { + UpdateSketch sketch = getResidentSketch(state, address); + if (sketch == null) { + return false; + } + TrackedByteArray payload = serializeTrackedSketchPayload(MemoryCategory.SERIALIZATION_BUFFERS, + transientOwner(MEMORY_OWNER_SERIALIZATION_BUFFER, entryId), sketch); + try { + synchronized (persistLock) { + appendSketchPayload(state, entryId, address, payload.bytes); + } + } finally { + releaseTrackedBuffer(payload); + } + return true; + } + } + + private void appendSketchPayload(State state, SketchAddress address, UpdateSketch sketch) throws IOException { + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.findOrAdd(address); + } + TrackedByteArray payload = serializeTrackedSketchPayload(MemoryCategory.SERIALIZATION_BUFFERS, + transientOwner(MEMORY_OWNER_SERIALIZATION_BUFFER, entryId), sketch); + try { + appendSketchPayload(state, entryId, address, payload.bytes); + } finally { + releaseTrackedBuffer(payload); + } + } + + private void appendSketchPayload(State state, int entryId, SketchAddress address, UpdateSketch sketch) + throws IOException { + TrackedByteArray payload = serializeTrackedSketchPayload(MemoryCategory.SERIALIZATION_BUFFERS, + transientOwner(MEMORY_OWNER_SERIALIZATION_BUFFER, entryId), sketch); + try { + appendSketchPayload(state, entryId, address, payload.bytes); + } finally { + releaseTrackedBuffer(payload); + } + } + + private void appendSketchPayload(State state, int entryId, SketchAddress address, byte[] payload) + throws IOException { + byte slot = slotByte(slotOf(state)); + Path blobBase = blobBaseForSlot(slot); + if (blobBase == null) { + throw new IOException("No sketch blob base configured for slot " + slot); + } + int blobId = selectWriteBlobId(blobBase, payload.length); + long offset; + MappedChannelEntry entry = getMappedChannelEntry(blobBase, blobId, true); + synchronized (entry) { + offset = entry.writePosition; + ensureMappedBufferRange(entry, offset, payload.length); + MappedByteBuffer mapped = entry.mappedBuffer.duplicate(); + mapped.position((int) offset); + mapped.put(payload); + entry.writePosition = offset + payload.length; + } + synchronized (sketchCacheLock) { + cacheDirectory.setPersistedRef(entryId, slot, blobId, offset, payload.length); + cacheDirectory.clearDirty(entryId, slot); + manifestDirty.set(true); + } + } + + private void compactPersistedBlobShards(byte slot, Path blobBase) throws IOException { + if (blobBase == null) { + return; + } + + List persistedEntries; + synchronized (sketchCacheLock) { + persistedEntries = cacheDirectory.snapshotPersistedEntryRefs(slot); + } + if (persistedEntries.isEmpty()) { + closeMappedChannels(blobBase); + deleteStaleBlobShards(blobBase, -1); + synchronized (sketchCacheLock) { + cacheDirectory.clearPersistedRefsForSlot(slot); + manifestDirty.set(true); + } + return; + } + + Path compactBase = blobBase.resolveSibling(blobBase.getFileName().toString() + ".compact.tmp"); + deleteAllBlobShards(compactBase); + + int entryCount = persistedEntries.size(); + long workspaceOwnerId = transientOwner(MEMORY_OWNER_PERSISTENCE_REWRITE_WORKSPACE, slot & 0xffL); + long workspaceBytes = estimateIntArrayBytes(entryCount) + + estimateIntArrayBytes(entryCount) + + estimateLongArrayBytes(entryCount) + + estimateIntArrayBytes(entryCount); + ensureEstimatorCapacity(workspaceBytes, true); + reserveTrackedMemory(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, workspaceOwnerId, workspaceBytes); + int[] entryIds = new int[entryCount]; + int[] blobIds = new int[entryCount]; + long[] offsets = new long[entryCount]; + int[] lengths = new int[entryCount]; + List compactChannels = new ArrayList<>(); + List compactChannelPaths = new ArrayList<>(); + int maxBlobId = 0; + int writeBlobId = 0; + long writeOffset = 0L; + + try { + for (int i = 0; i < entryCount; i++) { + PersistedEntrySnapshot persistedEntry = persistedEntries.get(i); + TrackedByteArray payload = readTrackedPersistedPayloadBytes( + MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, + transientOwner(MEMORY_OWNER_PERSISTENCE_REWRITE_IO_BUFFER, i), + blobBase, + persistedEntry.persistedSketchRef); + try { + if (writeOffset > 0L && writeOffset + payload.bytes.length > maxPersistenceBlobBytes) { + writeBlobId++; + writeOffset = 0L; + } + + Path compactBlobPath = sidecarPath(compactBase, writeBlobId); + FileChannel compactChannel = openCompactionBlobChannel(compactChannels, compactChannelPaths, + compactBlobPath, + writeBlobId); + writePayload(compactChannel, writeOffset, payload.bytes); + entryIds[i] = persistedEntry.entryId; + blobIds[i] = writeBlobId; + offsets[i] = writeOffset; + lengths[i] = payload.bytes.length; + writeOffset += payload.bytes.length; + maxBlobId = Math.max(maxBlobId, writeBlobId); + } finally { + releaseTrackedBuffer(payload); + } + } + + closeChannelsQuietly(compactChannels); + closeMappedChannels(blobBase); + moveCompactedBlobShards(compactBase, blobBase, maxBlobId); + deleteStaleBlobShards(blobBase, maxBlobId); + setActiveWriteBlobId(blobBase, maxBlobId); + + synchronized (sketchCacheLock) { + cacheDirectory.clearPersistedRefsForSlot(slot); + cacheDirectory.clearDirtyForSlot(slot); + for (int i = 0; i < entryCount; i++) { + cacheDirectory.setPersistedRef(entryIds[i], slot, blobIds[i], offsets[i], lengths[i]); + } + manifestDirty.set(true); + } + } catch (IOException | RuntimeException e) { + closeChannelsQuietly(compactChannels); + deleteBlobPathsQuietly(compactChannelPaths); + throw e; + } finally { + releaseTrackedMemory(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, workspaceOwnerId); + } + } + + private void persistCurrentSlotSnapshotToPrimaryBlobBase(State state, byte slot) throws IOException { + Path targetBlobBase = persistenceBlobBaseFile; + if (targetBlobBase == null) { + return; + } + + Path sourceBlobBase = blobBaseForSlot(slot); + int[] slotEntries; + synchronized (sketchCacheLock) { + slotEntries = cacheDirectory.snapshotEntriesForSlot(slot); + } + if (slotEntries.length == 0) { + synchronized (persistLock) { + closeMappedChannels(targetBlobBase); + deleteStaleBlobShards(targetBlobBase, -1); + synchronized (sketchCacheLock) { + cacheDirectory.clearPersistedRefsForSlot(slot); + cacheDirectory.clearDirtyForSlot(slot); + manifestDirty.set(true); + } + setBlobBaseForSlot(slot, targetBlobBase); + setActiveWriteBlobId(targetBlobBase, 0); + } + if (sourceBlobBase != null && !sourceBlobBase.equals(targetBlobBase)) { + deleteTemporaryBlobBaseForSlot(slot); + } + return; + } + + List rewriteEntries = new ArrayList<>(slotEntries.length); + synchronized (state) { + for (int entryId : slotEntries) { + SketchAddress address; + PersistedSketchRef persistedRef; + synchronized (sketchCacheLock) { + address = cacheDirectory.toSketchAddress(entryId); + persistedRef = cacheDirectory.persistedRef(entryId, slot); + } + UpdateSketch resident = getResidentSketch(state, address); + TrackedByteArray residentPayload = resident == null ? null + : serializeTrackedSketchPayload(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, + transientOwner(MEMORY_OWNER_PERSISTENCE_REWRITE_BUFFER, entryId), resident); + if (residentPayload != null || persistedRef != null) { + rewriteEntries.add(new RewriteSlotEntry(entryId, residentPayload, persistedRef)); + } + } + } + + Path compactBase = targetBlobBase.resolveSibling(targetBlobBase.getFileName().toString() + ".rewrite.tmp"); + long workspaceOwnerId = transientOwner(MEMORY_OWNER_PERSISTENCE_REWRITE_WORKSPACE, 0x10000L | (slot & 0xffL)); + long workspaceBytes = estimateIntArrayBytes(rewriteEntries.size()) + + estimateIntArrayBytes(rewriteEntries.size()) + + estimateLongArrayBytes(rewriteEntries.size()) + + estimateIntArrayBytes(rewriteEntries.size()); + ensureEstimatorCapacity(workspaceBytes, true); + reserveTrackedMemory(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, workspaceOwnerId, workspaceBytes); + synchronized (persistLock) { + try { + deleteAllBlobShards(compactBase); + + int[] entryIds = new int[rewriteEntries.size()]; + int[] blobIds = new int[rewriteEntries.size()]; + long[] offsets = new long[rewriteEntries.size()]; + int[] lengths = new int[rewriteEntries.size()]; + List compactChannels = new ArrayList<>(); + List compactChannelPaths = new ArrayList<>(); + int writtenCount = 0; + int maxBlobId = 0; + int writeBlobId = 0; + long writeOffset = 0L; + + try { + for (RewriteSlotEntry rewriteEntry : rewriteEntries) { + TrackedByteArray trackedPayload = rewriteEntry.residentPayload; + boolean transientPayload = false; + if (trackedPayload == null) { + if (rewriteEntry.persistedSketchRef == null || sourceBlobBase == null) { + continue; + } + trackedPayload = readTrackedPersistedPayloadBytes( + MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, + transientOwner(MEMORY_OWNER_PERSISTENCE_REWRITE_IO_BUFFER, rewriteEntry.entryId), + sourceBlobBase, + rewriteEntry.persistedSketchRef); + transientPayload = true; + } + + try { + if (writeOffset > 0L + && writeOffset + trackedPayload.bytes.length > maxPersistenceBlobBytes) { + writeBlobId++; + writeOffset = 0L; + } + + Path compactBlobPath = sidecarPath(compactBase, writeBlobId); + FileChannel compactChannel = openCompactionBlobChannel(compactChannels, compactChannelPaths, + compactBlobPath, + writeBlobId); + writePayload(compactChannel, writeOffset, trackedPayload.bytes); + entryIds[writtenCount] = rewriteEntry.entryId; + blobIds[writtenCount] = writeBlobId; + offsets[writtenCount] = writeOffset; + lengths[writtenCount] = trackedPayload.bytes.length; + writeOffset += trackedPayload.bytes.length; + maxBlobId = Math.max(maxBlobId, writeBlobId); + writtenCount++; + } finally { + if (transientPayload) { + releaseTrackedBuffer(trackedPayload); + } + } + } + + closeChannelsQuietly(compactChannels); + closeMappedChannels(targetBlobBase); + if (sourceBlobBase != null && !sourceBlobBase.equals(targetBlobBase)) { + closeMappedChannels(sourceBlobBase); + } + moveCompactedBlobShards(compactBase, targetBlobBase, maxBlobId); + deleteStaleBlobShards(targetBlobBase, maxBlobId); + setActiveWriteBlobId(targetBlobBase, maxBlobId); + + synchronized (sketchCacheLock) { + cacheDirectory.clearPersistedRefsForSlot(slot); + cacheDirectory.clearDirtyForSlot(slot); + for (int i = 0; i < writtenCount; i++) { + cacheDirectory.setPersistedRef(entryIds[i], slot, blobIds[i], offsets[i], lengths[i]); + } + manifestDirty.set(true); + } + + setBlobBaseForSlot(slot, targetBlobBase); + } catch (IOException | RuntimeException e) { + closeChannelsQuietly(compactChannels); + deleteBlobPathsQuietly(compactChannelPaths); + throw e; + } + } finally { + releaseTrackedMemory(MemoryCategory.PERSISTENCE_REWRITE_BUFFERS, workspaceOwnerId); + for (RewriteSlotEntry rewriteEntry : rewriteEntries) { + releaseTrackedBuffer(rewriteEntry.residentPayload); + } + } + } + + if (sourceBlobBase != null && !sourceBlobBase.equals(targetBlobBase)) { + deleteTemporaryBlobBaseForSlot(slot); + } + } + + private static FileChannel openCompactionBlobChannel(List channels, List channelPaths, Path path, + int blobId) throws IOException { + while (channels.size() <= blobId) { + channels.add(null); + } + FileChannel existing = channels.get(blobId); + if (existing != null && existing.isOpen()) { + return existing; + } + ensureParentDirectoryExists(path); + FileChannel opened = FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, + StandardOpenOption.WRITE); + channels.set(blobId, opened); + channelPaths.add(path); + return opened; + } + + private static void writePayload(FileChannel channel, long offset, byte[] payload) throws IOException { + ByteBuffer buffer = ByteBuffer.wrap(payload); + long position = offset; + while (buffer.hasRemaining()) { + position += channel.write(buffer, position); + } + } + + private static void closeChannelsQuietly(List channels) { + for (FileChannel channel : channels) { + if (channel != null) { + closeChannelQuietly(channel); + } + } + } + + private static void moveCompactedBlobShards(Path compactBase, Path blobBase, int maxBlobId) throws IOException { + for (int blobId = 0; blobId <= maxBlobId; blobId++) { + Path source = sidecarPath(compactBase, blobId); + Path target = sidecarPath(blobBase, blobId); + moveReplaceExisting(source, target); + } + } + + private static void moveReplaceExisting(Path source, Path target) throws IOException { + try { + Files.move(source, target, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); + } catch (IOException e) { + Files.move(source, target, StandardCopyOption.REPLACE_EXISTING); + } + } + + private static void deleteAllBlobShards(Path baseBlob) throws IOException { + for (Path shard : listBlobShards(baseBlob)) { + Files.deleteIfExists(shard); + } + } + + private static void deleteStaleBlobShards(Path baseBlob, int maxBlobIdToKeep) throws IOException { + for (Path shard : listBlobShards(baseBlob)) { + int blobId = parseBlobId(baseBlob, shard); + if (blobId > maxBlobIdToKeep) { + Files.deleteIfExists(shard); + } + } + } + + private static List listBlobShards(Path baseBlob) throws IOException { + Path parent = baseBlob.getParent(); + if (parent == null || !Files.isDirectory(parent)) { + return Collections.emptyList(); + } + String baseName = baseBlob.getFileName().toString(); + List shards = new ArrayList<>(); + try (var stream = Files.list(parent)) { + stream.filter(path -> { + String fileName = path.getFileName().toString(); + return fileName.equals(baseName) || fileName.startsWith(baseName + "."); + }).forEach(shards::add); + } + return shards; + } + + private static int parseBlobId(Path baseBlob, Path path) { + String baseName = baseBlob.getFileName().toString(); + String fileName = path.getFileName().toString(); + if (fileName.equals(baseName)) { + return 0; + } + if (!fileName.startsWith(baseName + ".")) { + return -1; + } + String suffix = fileName.substring(baseName.length() + 1); + try { + return Integer.parseInt(suffix); + } catch (NumberFormatException e) { + return -1; + } + } + + private static void deleteBlobPathsQuietly(List paths) { + for (Path path : paths) { + try { + Files.deleteIfExists(path); + } catch (IOException e) { + logger.debug("Failed to delete compacted shard {}", path, e); + } + } + } + + private void writeManifest(Path file) throws IOException { + Path parent = file.getParent(); + if (parent != null) { + Files.createDirectories(parent); + } + Path tmp = file.resolveSibling(file.getFileName().toString() + ".tmp"); + try (OutputStream raw = new BufferedOutputStream( + Files.newOutputStream(tmp, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)); + DataOutputStream out = new DataOutputStream(raw)) { + out.write(PERSIST_MAGIC); + out.writeByte(PERSIST_VERSION); + out.writeInt(nominalEntries); + out.writeInt(bufA.k); + writeString(out, defaultContextString); + out.writeLong(seenTriples); + out.writeLong(approxStoreSize.get()); + out.writeLong(lastRebuildPublishMs); + + List entries; + byte currentSlot = slotByte(slotOf(current)); + synchronized (sketchCacheLock) { + entries = cacheDirectory.snapshotPersistedEntries(currentSlot); + } + + out.writeInt(entries.size()); + for (ManifestSketchEntry entry : entries) { + SketchAddress key = entry.address; + PersistedSketchRef persistedSketchRef = entry.persistedSketchRef; + out.writeByte(key.recType); + out.writeBoolean(key.isDelete); + out.writeByte(key.axisA); + out.writeByte(key.axisB); + out.writeInt(key.x); + out.writeInt(key.y); + out.writeInt(persistedSketchRef.blobId); + out.writeLong(persistedSketchRef.offset); + out.writeInt(persistedSketchRef.length); + } + } + + try { + Files.move(tmp, file, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); + } catch (IOException e) { + Files.move(tmp, file, StandardCopyOption.REPLACE_EXISTING); + } + } + + private void readManifest(Path file) throws IOException { + try (DataInputStream in = new DataInputStream(new ByteArrayInputStream(Files.readAllBytes(file)))) { + int version = validateManifestHeader(in); + int buckets = in.readInt(); + int k = in.readInt(); + String defCtx = readString(in); + long seen = in.readLong(); + long approx = in.readLong(); + long lastPublish = in.readLong(); + + if (buckets != nominalEntries) { + throw new IOException("Snapshot buckets mismatch: snapshot=" + buckets + " current=" + nominalEntries); + } + if (k != bufA.k) { + throw new IOException("Snapshot sketchK mismatch: snapshot=" + k + " current=" + bufA.k); + } + if (!Objects.equals(defCtx, defaultContextString)) { + throw new IOException("Snapshot defaultContextString mismatch"); + } + + int count = in.readInt(); + List loadedEntries = new ArrayList<>(count); + int maxLoadedBlobId = 0; + for (int i = 0; i < count; i++) { + byte recType = in.readByte(); + boolean isDelete = in.readBoolean(); + byte axisA = in.readByte(); + byte axisB = in.readByte(); + int x = in.readInt(); + int y = in.readInt(); + int blobId = version >= 3 ? in.readInt() : 0; + long offset = in.readLong(); + int length = in.readInt(); + SketchAddress key = new SketchAddress(recType, isDelete, axisA, axisB, x, y); + loadedEntries.add(new ManifestSketchEntry(key, new PersistedSketchRef(blobId, offset, length))); + maxLoadedBlobId = Math.max(maxLoadedBlobId, blobId); + } + + synchronized (bufA) { + bufA.clear(); + } + synchronized (bufB) { + bufB.clear(); + } + synchronized (sketchCacheLock) { + cacheDirectory.clear(); + for (ManifestSketchEntry loadedEntry : loadedEntries) { + int entryId = cacheDirectory.findOrAdd(loadedEntry.address); + PersistedSketchRef persistedSketchRef = loadedEntry.persistedSketchRef; + cacheDirectory.setPersistedRef(entryId, (byte) 0, persistedSketchRef.blobId, + persistedSketchRef.offset, + persistedSketchRef.length); + } + residentLru.clear(); + cacheDirectory.clearAllResidentNodes(); + residentSketchBytes = 0L; + manifestDirty.set(false); + } + memoryRegistry.clearCategory(MemoryCategory.RESIDENT_SKETCHES); + refreshCacheMetadataAccounting(); + setActiveWriteBlobId(persistenceBlobBaseFile, maxLoadedBlobId); + setBlobBaseForSlot((byte) 0, persistenceBlobBaseFile); + clearSlotPersistence((byte) 1); + current = bufA; + usingA = true; + seenTriples = seen; + approxStoreSize.set(approx); + lastRebuildPublishMs = lastPublish; + churnSampler.reset(); + } + } + + private static int validateManifestHeader(DataInputStream in) throws IOException { + for (byte expected : PERSIST_MAGIC) { + byte actual = in.readByte(); + if (expected != actual) { + throw new IOException("Not a join estimator snapshot file"); + } + } + int version = in.readUnsignedByte(); + if (version < 2 || version > PERSIST_VERSION) { + throw new IOException( + "Unsupported join estimator snapshot version: " + version + " (expected 2-" + PERSIST_VERSION + + ")"); + } + return version; + } + + private TrackedByteArray serializeTrackedSketchPayload(MemoryCategory category, long ownerId, UpdateSketch sketch) + throws IOException { + long predictedBytes = estimateByteArrayBytes(Math.max(128, sketch.getCurrentBytes())); + ensureEstimatorCapacity(predictedBytes, true); + reserveTrackedMemory(category, ownerId, predictedBytes); + try (ByteArrayOutputStream bos = new ByteArrayOutputStream(128); + DataOutputStream out = new DataOutputStream(bos)) { + writeSketch(out, sketch); + out.flush(); + byte[] payload = bos.toByteArray(); + replaceTrackedMemory(category, ownerId, estimateByteArrayBytes(payload.length)); + return new TrackedByteArray(payload, category, ownerId); + } catch (IOException | RuntimeException e) { + releaseTrackedMemory(category, ownerId); + throw e; + } + } + + private TrackedByteArray readTrackedPersistedPayloadBytes(MemoryCategory category, long ownerId, Path blob, + PersistedSketchRef persistedSketchRef) throws IOException { + long trackedBytes = estimateByteArrayBytes(persistedSketchRef.length); + ensureEstimatorCapacity(trackedBytes, true); + reserveTrackedMemory(category, ownerId, trackedBytes); + byte[] payload = new byte[persistedSketchRef.length]; + MappedChannelEntry entry = getMappedChannelEntry(blob, persistedSketchRef.blobId, false); + try { + synchronized (entry) { + long endOffset = persistedSketchRef.offset + persistedSketchRef.length; + if (endOffset > entry.cachedFileSize) { + refreshCachedFileSizeIfIncreased(entry); + } + if (persistedSketchRef.offset < 0 || persistedSketchRef.length < 0 + || endOffset < persistedSketchRef.offset || endOffset > entry.cachedFileSize) { + throw new IOException( + "Persisted sketch ref exceeds sidecar bounds: blobId=" + persistedSketchRef.blobId + + " offset=" + persistedSketchRef.offset + " length=" + persistedSketchRef.length + + " fileSize=" + entry.cachedFileSize); + } + + ensureMappedBufferRange(entry, persistedSketchRef.offset, persistedSketchRef.length); + MappedByteBuffer mapped = entry.mappedBuffer.duplicate(); + mapped.position((int) persistedSketchRef.offset); + mapped.get(payload); + } + replaceTrackedMemory(category, ownerId, estimateByteArrayBytes(payload.length)); + return new TrackedByteArray(payload, category, ownerId); + } catch (IOException | RuntimeException e) { + releaseTrackedMemory(category, ownerId); + throw e; + } + } + + private UpdateSketch readSketchFromBlob(Path blob, PersistedSketchRef persistedSketchRef, int k) + throws IOException { + TrackedByteArray payload = readTrackedPersistedPayloadBytes(MemoryCategory.DESERIALIZATION_BUFFERS, + transientOwner(MEMORY_OWNER_DESERIALIZATION_BUFFER, persistedSketchRef.blobId), + blob, + persistedSketchRef); + try (DataInputStream input = new DataInputStream(new ByteArrayInputStream(payload.bytes))) { + return readSketchPayload(input, k); + } finally { + releaseTrackedBuffer(payload); + } + } + + private void releaseTrackedBuffer(TrackedByteArray trackedByteArray) { + if (trackedByteArray != null) { + releaseTrackedMemory(trackedByteArray.category, trackedByteArray.ownerId); + } + } + + private MappedChannelEntry getMappedChannelEntry(Path baseBlobPath, int blobId, boolean writeAccess) + throws IOException { + synchronized (mappedChannelLock) { + return getMappedChannelEntryLocked(baseBlobPath, blobId, writeAccess); + } + } + + private MappedChannelEntry getMappedChannelEntryLocked(Path baseBlobPath, int blobId, boolean writeAccess) + throws IOException { + if (blobId < 0) { + throw new IOException("Invalid blob id: " + blobId); + } + Path normalizedBase = baseBlobPath.toAbsolutePath().normalize(); + BlobStorage storage = blobStorages.computeIfAbsent(normalizedBase, ignored -> new BlobStorage()); + ensureBlobEntryCapacity(storage, blobId); + if (writeAccess) { + MappedChannelEntry entry = storage.writeEntries.get(blobId); + if (!isOpenEntry(entry)) { + closeMappedChannelEntry(entry); + entry = openMappedChannelEntry(sidecarPath(normalizedBase, blobId), true); + storage.writeEntries.set(blobId, entry); + } + return entry; + } + MappedChannelEntry writeEntry = storage.writeEntries.get(blobId); + if (isOpenEntry(writeEntry)) { + return writeEntry; + } + MappedChannelEntry readEntry = storage.readEntries.get(blobId); + if (!isOpenEntry(readEntry)) { + closeMappedChannelEntry(readEntry); + readEntry = openMappedChannelEntry(sidecarPath(normalizedBase, blobId), false); + storage.readEntries.set(blobId, readEntry); + } + return readEntry; + } + + private void ensureBlobEntryCapacity(BlobStorage storage, int blobId) { + while (storage.readEntries.size() <= blobId) { + storage.readEntries.add(null); + } + while (storage.writeEntries.size() <= blobId) { + storage.writeEntries.add(null); + } + } + + private static boolean isOpenEntry(MappedChannelEntry entry) { + return entry != null && entry.channel.isOpen(); + } + + private int selectWriteBlobId(Path baseBlobPath, int payloadLength) throws IOException { + synchronized (mappedChannelLock) { + Path normalizedBase = baseBlobPath.toAbsolutePath().normalize(); + BlobStorage storage = blobStorages.computeIfAbsent(normalizedBase, ignored -> new BlobStorage()); + int blobId = Math.max(0, storage.activeWriteBlobId); + while (true) { + MappedChannelEntry entry = getMappedChannelEntryLocked(normalizedBase, blobId, true); + long writePosition; + long projectedWritePosition; + synchronized (entry) { + writePosition = entry.writePosition; + projectedWritePosition = writePosition + payloadLength; + } + if (writePosition > 0 && projectedWritePosition > maxPersistenceBlobBytes) { + blobId++; + continue; + } + storage.activeWriteBlobId = blobId; + return blobId; + } + } + } + + private void setActiveWriteBlobId(Path baseBlobPath, int blobId) { + if (baseBlobPath == null) { + return; + } + synchronized (mappedChannelLock) { + BlobStorage storage = blobStorages.computeIfAbsent(baseBlobPath.toAbsolutePath().normalize(), + ignored -> new BlobStorage()); + storage.activeWriteBlobId = Math.max(0, blobId); + } + } + + private static MappedChannelEntry openMappedChannelEntry(Path normalizedPath, boolean writeAccess) + throws IOException { + FileChannel opened; + if (writeAccess) { + ensureParentDirectoryExists(normalizedPath); + opened = FileChannel.open(normalizedPath, StandardOpenOption.CREATE, StandardOpenOption.READ, + StandardOpenOption.WRITE); + } else { + opened = FileChannel.open(normalizedPath, StandardOpenOption.READ); + } + return new MappedChannelEntry(opened, writeAccess); + } + + private static void ensureParentDirectoryExists(Path filePath) throws IOException { + Path parent = filePath.getParent(); + if (parent != null) { + Files.createDirectories(parent); + } + } + + private void ensureMappedBufferRange(MappedChannelEntry entry, long offset, int length) throws IOException { + long endOffset = offset + length; + if (offset < 0 || length <= 0 || endOffset < offset) { + throw new IOException("Invalid mapped range: offset=" + offset + " length=" + length); + } + + if (entry.writeAccess) { + ensureChannelSize(entry, endOffset); + } + if (endOffset > entry.cachedFileSize) { + refreshCachedFileSizeIfIncreased(entry); + } + if (endOffset > entry.cachedFileSize) { + throw new IOException( + "Mapped range exceeds sidecar bounds: end=" + endOffset + " fileSize=" + entry.cachedFileSize); + } + + if (entry.cachedFileSize > Integer.MAX_VALUE) { + throw new IOException( + "Mapped sidecar file exceeds maximum mappable size: " + entry.cachedFileSize + " bytes"); + } + + if (entry.mappedBuffer != null && entry.mappedLength == (int) entry.cachedFileSize) { + return; + } + + int mappedLength = (int) entry.cachedFileSize; + FileChannel.MapMode mapMode = entry.writeAccess ? FileChannel.MapMode.READ_WRITE + : FileChannel.MapMode.READ_ONLY; + entry.mappedBuffer = entry.channel.map(mapMode, 0L, mappedLength); + entry.mappedLength = mappedLength; + } + + private static void ensureChannelSize(MappedChannelEntry entry, long requiredSize) throws IOException { + if (requiredSize <= entry.cachedFileSize) { + return; + } + long growthBy = Math.max(requiredSize - entry.cachedFileSize, (long) MIN_MAPPED_GROWTH_BYTES); + long targetSize; + try { + targetSize = Math.addExact(entry.cachedFileSize, growthBy); + } catch (ArithmeticException e) { + targetSize = Long.MAX_VALUE; + } + if (targetSize < requiredSize) { + targetSize = requiredSize; + } + if (targetSize > Integer.MAX_VALUE) { + throw new IOException("Mapped sidecar file exceeds maximum mappable size: " + targetSize + " bytes"); + } + entry.channel.write(ByteBuffer.wrap(FILE_GROWTH_MARKER), targetSize - 1L); + entry.cachedFileSize = targetSize; + } + + private static void refreshCachedFileSizeIfIncreased(MappedChannelEntry entry) throws IOException { + long actualSize = entry.channel.size(); + if (actualSize > entry.cachedFileSize) { + entry.cachedFileSize = actualSize; + } + } + + private void closeMappedChannels() { + Set entriesToClose = Collections.newSetFromMap(new IdentityHashMap<>()); + synchronized (mappedChannelLock) { + collectMappedChannels(entriesToClose, blobStorages.values()); + blobStorages.clear(); + } + for (MappedChannelEntry entry : entriesToClose) { + closeMappedChannelEntry(entry); + } + } + + private void closeMappedChannels(Path baseBlobPath) { + if (baseBlobPath == null) { + return; + } + Set entriesToClose = Collections.newSetFromMap(new IdentityHashMap<>()); + synchronized (mappedChannelLock) { + BlobStorage storage = blobStorages.remove(baseBlobPath.toAbsolutePath().normalize()); + if (storage != null) { + collectMappedChannels(entriesToClose, Collections.singleton(storage)); + } + } + for (MappedChannelEntry entry : entriesToClose) { + closeMappedChannelEntry(entry); + } + } + + private static void collectMappedChannels(Set entriesToClose, Iterable storages) { + for (BlobStorage storage : storages) { + for (MappedChannelEntry entry : storage.readEntries) { + if (entry != null) { + entriesToClose.add(entry); + } + } + for (MappedChannelEntry entry : storage.writeEntries) { + if (entry != null) { + entriesToClose.add(entry); + } + } + } + } + + List debugResidentSketches() { + List resident = new ArrayList<>(); + synchronized (sketchCacheLock) { + for (int node = residentLru.headNode(); node != -1; node = residentLru.nextNode(node)) { + int entryId = residentLru.entryId(node); + BufferSlot slot = residentLru.slot(node) == 0 ? BufferSlot.A : BufferSlot.B; + resident.add(new DebugSketchAddress(slot, cacheDirectory.toSketchAddress(entryId))); + } + } + return resident; + } + + List debugPersistedSketches() { + List persisted = new ArrayList<>(); + synchronized (sketchCacheLock) { + for (byte slot = 0; slot < 2; slot++) { + BufferSlot bufferSlot = slot == 0 ? BufferSlot.A : BufferSlot.B; + for (ManifestSketchEntry entry : cacheDirectory.snapshotPersistedEntries(slot)) { + persisted.add(new DebugSketchAddress(bufferSlot, entry.address)); + } + } + } + return persisted; + } + + List debugMappedChannels() { + List channels = new ArrayList<>(); + synchronized (mappedChannelLock) { + for (Map.Entry storageEntry : blobStorages.entrySet()) { + Path basePath = storageEntry.getKey(); + BlobStorage storage = storageEntry.getValue(); + for (int blobId = 0; blobId < storage.readEntries.size(); blobId++) { + MappedChannelEntry entry = storage.readEntries.get(blobId); + if (entry != null) { + channels.add( + new DebugMappedChannelView(basePath, blobId, false, entry.channel, entry.mappedBuffer)); + } + } + for (int blobId = 0; blobId < storage.writeEntries.size(); blobId++) { + MappedChannelEntry entry = storage.writeEntries.get(blobId); + if (entry != null) { + channels.add( + new DebugMappedChannelView(basePath, blobId, true, entry.channel, entry.mappedBuffer)); + } + } + } + } + return channels; + } + + int debugPendingIncrementalCount() { + synchronized (incrementalBufferLock) { + return incrementalBufferCount; + } + } + + void debugFlushPendingIncremental() { + flushPendingIncremental(); + } + + private static void closeMappedChannelEntry(MappedChannelEntry entry) { + if (entry == null) { + return; + } + synchronized (entry) { + entry.mappedBuffer = null; + entry.mappedLength = 0; + if (entry.writeAccess) { + try { + if (entry.cachedFileSize > entry.writePosition) { + entry.channel.truncate(entry.writePosition); + entry.cachedFileSize = entry.writePosition; + } + } catch (IOException e) { + logger.debug("Failed to trim mapped sidecar channel", e); + } + } + closeChannelQuietly(entry.channel); + } + } + + private static void closeChannelQuietly(FileChannel channel) { + try { + channel.close(); + } catch (IOException e) { + logger.debug("Failed to close mapped channel", e); + } + } + + private static void writeString(DataOutputStream out, String value) throws IOException { + byte[] bytes = value.getBytes(StandardCharsets.UTF_8); + out.writeInt(bytes.length); + out.write(bytes); + } + + private static String readString(DataInputStream in) throws IOException { + int len = in.readInt(); + if (len < 0 || len > MAX_STRING_BYTES) { + throw new IOException("Invalid string length: " + len); + } + byte[] bytes = new byte[len]; + in.readFully(bytes); + return new String(bytes, StandardCharsets.UTF_8); + } + + private static void writeSketch(DataOutputStream out, UpdateSketch sketch) throws IOException { + int retained = sketch.getRetainedEntries(); + out.writeInt(SKETCH_PAYLOAD_FORMAT_NATIVE); + out.writeInt(retained); + out.writeLong(sketch.getThetaLong()); + out.writeBoolean(sketch.isEmpty()); + HashIterator iterator = sketch.iterator(); + int written = 0; + while (iterator.next()) { + out.writeLong(iterator.get()); + written++; + } + if (written != retained) { + throw new IOException("Sketch retained-entry count changed while serializing"); + } + } + + private static UpdateSketch readSketchPayload(DataInputStream in, int k) throws IOException { + int formatMarker = in.readInt(); + if (formatMarker == SKETCH_PAYLOAD_FORMAT_NATIVE) { + int retained = in.readInt(); + long thetaLong = in.readLong(); + boolean empty = in.readBoolean(); + UpdateSketch sketch = readLegacySketch(retained, in, k); + applySerializedThetaAndEmpty(sketch, thetaLong, empty); + if (in.available() > 0) { + throw new IOException("Trailing bytes in sketch payload: " + in.available()); + } + return sketch; + } + // legacy payloads contain only retained hashes (no theta metadata). + UpdateSketch sketch = readLegacySketch(formatMarker, in, k); + if (in.available() > 0) { + throw new IOException("Trailing bytes in legacy sketch payload: " + in.available()); + } + return sketch; + } + + private static UpdateSketch readLegacySketch(int retained, DataInputStream in, int k) throws IOException { + if (retained < 0 || retained > MAX_SKETCH_ENTRIES) { + throw new IOException("Invalid retained entry count: " + retained); + } + UpdateSketch sketch = newSk(k); + for (int i = 0; i < retained; i++) { + hashUpdateRaw(sketch, in.readLong()); + } + return sketch; + } + + /* ────────────────────────────────────────────────────────────── */ + /* Array helpers (private) */ + /* ────────────────────────────────────────────────────────────── */ + + private static void clearArray(AtomicReferenceArray arr) { + if (arr == null) { + return; + } + for (int i = 0; i < arr.length(); i++) { + arr.set(i, null); + } + } + + private void updateSketch(State state, SketchAddress address, long value) { + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.findOrAdd(address); + } + UpdateSketch sketch = getSketchForWrite(state, address, entryId); + sketch.update(value); + markDirty(state, entryId); + touchResidentSketch(state, entryId, sketch, false); + } + + private void updatePairSketch(State state, boolean isDelete, Pair pair, byte recType, long key, long value) { + int x = (int) (key >>> 32); + int y = (int) key; + updateSketch(state, pairAddress(recType, isDelete, pair, x, y), value); + } + + private static void updateCell(AtomicReferenceArray arr, int idx, long value, int k) { + UpdateSketch sk = arr.get(idx); + if (sk == null) { + sk = newSk(k); + arr.set(idx, sk); + } + sk.update(value); + } + + private static void updateSketchMap(Map map, int idx, long value, int k) { + UpdateSketch sk = map.get(idx); + if (sk == null) { + sk = newSk(k); + map.put(idx, sk); + } + sk.update(value); + } + + /* ────────────────────────────────────────────────────────────── */ + /* System property helpers */ + /* ────────────────────────────────────────────────────────────── */ + + private static final String PROP_PREFIX = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator."; + + private static String propString(String name, String def) { + String v = System.getProperty(PROP_PREFIX + name); + return v != null ? v : def; + } + + private static int propInt(String name, int def) { + String v = System.getProperty(PROP_PREFIX + name); + if (v == null) { + return def; + } + try { + return Integer.parseInt(v.trim()); + } catch (Exception e) { + return def; + } + } + + private static int propIntOrNegOne(String name, int def) { + String v = System.getProperty(PROP_PREFIX + name); + if (v == null) { + return def; + } + try { + return Integer.parseInt(v.trim()); + } catch (Exception e) { + return def; + } + } + + private static long propLong(String name, long def) { + String v = System.getProperty(PROP_PREFIX + name); + if (v == null) { + return def; + } + try { + return Long.parseLong(v.trim()); + } catch (Exception e) { + return def; + } + } + + private static double propDouble(String name, double def) { + String v = System.getProperty(PROP_PREFIX + name); + if (v == null) { + return def; + } + try { + return Double.parseDouble(v.trim()); + } catch (Exception e) { + return def; + } + } + + private static boolean propBool(String name, boolean def) { + String v = System.getProperty(PROP_PREFIX + name); + if (v == null) { + return def; + } + return Boolean.parseBoolean(v.trim()); + } + + /* ────────────────────────────────────────────────────────────── */ + /* Configuration (public) */ + /* ────────────────────────────────────────────────────────────── */ + + /** + * Configuration for {@link SketchBasedJoinEstimator}. + * + *

+ * Defaults use {@value #DEFAULT_BUCKET_COUNT} buckets and DataSketches default nominal entries for sketch accuracy. + * Array doubling is disabled by default. + *

+ */ + public static final class Config { + // capacity & layout + int nominalEntries = DEFAULT_BUCKET_COUNT; + boolean doubleArrayBuckets = false; + int sketchK = DEFAULT_SKETCH_NOMINAL_ENTRIES; // <= 0 -> use DataSketches default unless multiplier is set + int sketchKMultiplier = 0; + + // rebuild throttling + long throttleEveryN = Integer.MAX_VALUE; + long throttleMillis = 0L; + + // refresh cadence + long refreshSleepMillis = 1000L; + long estimateCacheSeconds = 0L; + int zeroIntersectionExactDistinctLimit = DEFAULT_ZERO_INTERSECTION_EXACT_DISTINCT_LIMIT; + double zeroIntersectionSkewRatio = DEFAULT_ZERO_INTERSECTION_SKEW_RATIO; + long zeroIntersectionRowBudget = DEFAULT_ZERO_INTERSECTION_ROW_BUDGET; + int zeroIntersectionSampleSize = DEFAULT_ZERO_INTERSECTION_SAMPLE_SIZE; + + // semantics + String defaultContextString = "urn:default-context"; + boolean roundJoinEstimates = true; + + int churnSampleMin = 128; + int churnSampleMax = 4096; + double churnSamplePercent = 0.01; + double churnReaddThreshold = 0.20; + double churnRemovalRatioThreshold = 0.50; + double minSketchMemoryPercent = 0.10; + double maxSketchMemoryPercent = 0.30; + long maxPersistenceBlobBytes = DEFAULT_MAX_PERSISTENCE_BLOB_BYTES; + + /** Return a new config with all defaults. */ + public static Config defaults() { + return new Config(); + } + + /** Base array bucket count (must be ≥ 4). */ + public Config withNominalEntries(int n) { + this.nominalEntries = Math.max(4, n); + return this; + } + + /** Disable default bucket doubling for array indexes. */ + public Config withoutDoubleArrayBuckets() { + this.doubleArrayBuckets = false; + return this; + } + + /** Explicit sketch K. If omitted (≤0), the library default is used unless a multiplier is configured. */ + public Config withSketchK(int k) { + this.sketchK = k; + return this; + } + + /** + * Derived-K multiplier used when {@link #withSketchK(int)} is not set (or set ≤ 0). Higher values reduce error + * at the cost of memory. + */ + public Config withSketchKMultiplier(int multiplier) { + this.sketchKMultiplier = Math.max(1, multiplier); + return this; + } + + /** Sleep every N scanned statements during a full rebuild. */ + public Config withThrottleEveryN(long n) { + this.throttleEveryN = n; + return this; + } + + /** Milliseconds to sleep when throttling during a rebuild. */ + public Config withThrottleMillis(long ms) { + this.throttleMillis = ms; + return this; + } + + /** Background refresh thread sleep between checks/rebuilds in milliseconds. */ + public Config withRefreshSleepMillis(long ms) { + this.refreshSleepMillis = ms; + return this; + } + + /** Cache raw pattern estimates for up to the configured number of seconds. */ + public Config withEstimateCacheSeconds(long seconds) { + this.estimateCacheSeconds = Math.max(0L, seconds); + return this; + } + + /** Exact distinct limit for zero-intersection rare-overlap fallback before downgrading to row sampling. */ + public Config withZeroIntersectionExactDistinctLimit(int limit) { + this.zeroIntersectionExactDistinctLimit = Math.max(0, limit); + return this; + } + + /** Distinct skew ratio required to try a zero-intersection fallback when exact fallback is not eligible. */ + public Config withZeroIntersectionSkewRatio(double ratio) { + this.zeroIntersectionSkewRatio = Math.max(0.0d, ratio); + return this; + } + + /** Maximum estimated scan-side rows allowed for zero-intersection fallback work. */ + public Config withZeroIntersectionRowBudget(long rows) { + this.zeroIntersectionRowBudget = Math.max(0L, rows); + return this; + } + + /** Reservoir size for sampled zero-intersection fallback when the exact distinct limit is exceeded. */ + public Config withZeroIntersectionSampleSize(int sampleSize) { + this.zeroIntersectionSampleSize = Math.max(0, sampleSize); + return this; + } + + /** Label used when a statement has {@code null} context. */ + public Config withDefaultContext(String s) { + this.defaultContextString = Objects.requireNonNull(s); + return this; + } + + /** Round join size estimates to the nearest integer. */ + public Config withRoundJoinEstimates(boolean round) { + this.roundJoinEstimates = round; + return this; + } + + /** Minimum number of statements to sample before switching to probabilistic sampling. */ + public Config withChurnSampleMin(int min) { + this.churnSampleMin = Math.max(0, min); + return this; + } + + /** Fraction (0..1) of statements to sample after the minimum set is populated. */ + public Config withChurnSamplePercent(double fraction) { + this.churnSamplePercent = fraction; + return this; + } + + /** + * Upper bound on sampling frequency expressed as a minimum spacing (in statements) between sampled churn + * events. If the percentage-derived interval is smaller than this value, sampling is throttled to this spacing. + */ + public Config withChurnSampleMax(int max) { + this.churnSampleMax = Math.max(0, max); + return this; + } + + /** Threshold for the share of sampled statements that were added, deleted, and re-added. */ + public Config withChurnReaddThreshold(double fraction) { + this.churnReaddThreshold = fraction; + return this; + } + + /** Threshold for the ratio of removed to added sampled statements. */ + public Config withChurnRemovalRatioThreshold(double fraction) { + this.churnRemovalRatioThreshold = fraction; + return this; + } + + /** Minimum heap fraction reserved as eviction floor for resident sketches (0..1). */ + public Config withMinSketchMemoryPercent(double fraction) { + double normalized = Double.isFinite(fraction) ? fraction : 0.0d; + this.minSketchMemoryPercent = SketchBasedJoinEstimator.clamp(normalized, 0.0d, 1.0d); + if (this.maxSketchMemoryPercent < this.minSketchMemoryPercent) { + this.maxSketchMemoryPercent = this.minSketchMemoryPercent; + } + return this; + } + + /** Maximum heap fraction used as resident sketch eviction ceiling (0..1, and >= min). */ + public Config withMaxSketchMemoryPercent(double fraction) { + double normalized = Double.isFinite(fraction) ? fraction : this.maxSketchMemoryPercent; + this.maxSketchMemoryPercent = SketchBasedJoinEstimator.clamp(normalized, this.minSketchMemoryPercent, 1.0d); + return this; + } + + /** Maximum bytes per persistence blob shard before rolling over to the next sidecar shard. */ + public Config withMaxPersistenceBlobBytes(long bytes) { + this.maxPersistenceBlobBytes = Math.max(1L, bytes); + return this; + } + } +} diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java new file mode 100644 index 00000000000..9c4f26a4012 --- /dev/null +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java @@ -0,0 +1,530 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.TreeSet; + +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +final class SketchJoinOrderPlanner { + + static final int MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS = 20; + + private static final Logger logger = LoggerFactory.getLogger(SketchJoinOrderPlanner.class); + + private final SketchBasedJoinEstimator estimator; + private final SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster; + private final List factors; + private final Set initiallyBoundVars; + private final Map> variablesMemo = new HashMap<>(); + private final SketchBasedJoinEstimator.SketchPlannerPath factorRejectionPath; + private final TupleExpr rejectedFactor; + + SketchJoinOrderPlanner(SketchBasedJoinEstimator estimator, + SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster, + List expressions, + Set initiallyBoundVars) { + this.estimator = Objects.requireNonNull(estimator, "estimator"); + this.workAdjuster = Objects.requireNonNull(workAdjuster, "workAdjuster"); + this.initiallyBoundVars = initiallyBoundVars == null || initiallyBoundVars.isEmpty() ? Set.of() + : Set.copyOf(initiallyBoundVars); + FactorBuildResult factorBuildResult = buildFactors(expressions); + this.factors = factorBuildResult.factors(); + this.factorRejectionPath = factorBuildResult.rejectionPath(); + this.rejectedFactor = factorBuildResult.rejectedFactor(); + } + + PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { + if (factorRejectionPath != null) { + logger.debug("Sketch join reorder rejected: path={} factor={}", factorRejectionPath, + rejectedFactor == null ? "" : describeTupleExpr(rejectedFactor)); + return new PlanOutcome(Optional.empty(), factorRejectionPath); + } + if (factors.isEmpty()) { + return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + } + + logFactorEstimates(); + + SketchBasedJoinEstimator.SketchPlannerPath classification = classifyGraph(); + if (classification != null) { + logger.debug("Sketch join reorder rejected: path={} factors={}", classification, + describeFactorOrder(indices())); + return new PlanOutcome(Optional.empty(), classification); + } + if (algorithm == JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING + && factors.size() > MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS) { + logger.debug("Sketch join reorder rejected: path={} factorCount={} maxDynamicProgrammingArgs={}", + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, factors.size(), + MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS); + return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + } + + StatePlan result = switch (algorithm) { + case DYNAMIC_PROGRAMMING -> + optimizeDynamicProgramming(); +// optimizeGreedy(); + case GREEDY -> optimizeGreedy(); + }; + if (result == null) { + logger.debug("Sketch join reorder rejected: path={} factors={}", + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, describeFactorOrder(indices())); + return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + } + + List orderedArgs = new ArrayList<>(result.order().size()); + for (Integer index : result.order()) { + orderedArgs.add(factors.get(index.intValue()).tupleExpr()); + } + logger.debug("Sketch join reorder result: order={} estimate={} totalWork={}", + describeExprOrder(orderedArgs), result.estimate().summary(), result.totalWork()); + return new PlanOutcome(Optional.of(new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), + result.estimate().outputRows(), result.totalWork())), + SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED); + } + + private FactorBuildResult buildFactors(List expressions) { + List builtFactors = new ArrayList<>(expressions.size()); + for (int i = 0; i < expressions.size(); i++) { + TupleExpr tupleExpr = expressions.get(i); + SketchBasedJoinEstimator.TuplePlanEstimate estimate = estimator.factorEstimateForJoinOrdering(tupleExpr, + initiallyBoundVars); + if (estimate == null) { + return new FactorBuildResult(List.copyOf(builtFactors), unsupportedPath(tupleExpr), tupleExpr); + } + if (estimate.joinVars().isEmpty() || estimate.joinVars().size() > 2) { + return new FactorBuildResult(List.copyOf(builtFactors), + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, tupleExpr); + } + builtFactors.add(new PlanFactor(i, tupleExpr, estimate)); + } + return new FactorBuildResult(List.copyOf(builtFactors), null, null); + } + + private SketchBasedJoinEstimator.SketchPlannerPath classifyGraph() { + if (!isConnected()) { + return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE; + } + if (hasMultiSharedVariableAttachment()) { + return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_MULTI_SHARED_VAR; + } + int edgeCount = 0; + Set variables = new LinkedHashSet<>(); + for (PlanFactor factor : factors) { + edgeCount += factor.arity(); + variables.addAll(factor.joinVars()); + } + return edgeCount == factors.size() + variables.size() - 1 + ? null + : SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE; + } + + private boolean isConnected() { + Set seenFactors = new LinkedHashSet<>(); + Set seenVariables = new LinkedHashSet<>(); + ArrayDeque queue = new ArrayDeque<>(); + queue.add(Integer.valueOf(0)); + seenFactors.add(0); + while (!queue.isEmpty()) { + Object next = queue.removeFirst(); + if (next instanceof Integer factorIndex) { + for (String variable : factors.get(factorIndex.intValue()).joinVars()) { + if (seenVariables.add(variable)) { + queue.addLast(variable); + } + } + continue; + } + String variable = (String) next; + for (int i = 0; i < factors.size(); i++) { + if (!seenFactors.contains(i) && factors.get(i).joinVars().contains(variable)) { + seenFactors.add(i); + queue.addLast(Integer.valueOf(i)); + } + } + } + return seenFactors.size() == factors.size(); + } + + private boolean hasMultiSharedVariableAttachment() { + for (int i = 0; i < factors.size(); i++) { + for (int j = i + 1; j < factors.size(); j++) { + Set shared = new TreeSet<>(factors.get(i).joinVars()); + shared.retainAll(factors.get(j).joinVars()); + if (shared.size() > 1) { + return true; + } + } + } + return false; + } + + private StatePlan optimizeGreedy() { + int seed = -1; + double bestSeedWork = Double.POSITIVE_INFINITY; + double bestSeedRows = Double.POSITIVE_INFINITY; + for (int i = 0; i < factors.size(); i++) { + PlanFactor factor = factors.get(i); + double adjustedWorkRows = adjustedWorkRows(i, initiallyBoundVars, factor.estimate().outputRows()); + logger.debug( + "Sketch join reorder greedy seed candidate: factor={} estimate={} adjustedWorkRows={} boundVars={}", + describeFactor(i), factor.estimate().summary(), adjustedWorkRows, + new TreeSet<>(initiallyBoundVars)); + if (adjustedWorkRows < bestSeedWork + || adjustedWorkRows == bestSeedWork + && (factor.estimate().outputRows() < bestSeedRows + || factor.estimate().outputRows() == bestSeedRows && i < seed)) { + bestSeedWork = adjustedWorkRows; + bestSeedRows = factor.estimate().outputRows(); + seed = i; + } + } + if (seed < 0) { + return null; + } + + long mask = bit(seed); + double totalWork = bestSeedWork; + List order = new ArrayList<>(); + order.add(seed); + SketchBasedJoinEstimator.TuplePlanEstimate currentEstimate = factors.get(seed).estimate(); + logger.debug("Sketch join reorder greedy seed: chosen={} estimate={} adjustedWorkRows={}", + describeFactor(seed), currentEstimate.summary(), bestSeedWork); + + while (mask != allMask()) { + int bestNext = -1; + String bestSharedVar = null; + double bestAdjustedWorkRows = Double.POSITIVE_INFINITY; + double bestStepRows = Double.POSITIVE_INFINITY; + SketchBasedJoinEstimator.JoinStepEstimate bestStep = null; + Set currentBoundVars = boundVariables(mask); + for (int candidate : candidates(mask)) { + String sharedVariable = uniqueSharedVariable(mask, candidate); + if (sharedVariable == null) { + continue; + } + PlanFactor candidateFactor = factors.get(candidate); + SketchBasedJoinEstimator.JoinStepEstimate step = estimator + .estimateJoinStepForJoinOrdering(currentEstimate, candidateFactor.estimate()); + double adjustedWorkRows = adjustedWorkRows(candidate, currentBoundVars, step.workRows()); + logger.debug( + "Sketch join reorder greedy candidate: prefixOrder={} candidate={} sharedVar={} step={} adjustedWorkRows={} boundVars={}", + describeFactorOrder(order), describeFactor(candidate), sharedVariable, step.summary(), + adjustedWorkRows, + new TreeSet<>(currentBoundVars)); + if (adjustedWorkRows < bestAdjustedWorkRows + || adjustedWorkRows == bestAdjustedWorkRows + && (step.outputRows() < bestStepRows + || step.outputRows() == bestStepRows && candidate < bestNext)) { + bestNext = candidate; + bestSharedVar = sharedVariable; + bestAdjustedWorkRows = adjustedWorkRows; + bestStepRows = step.outputRows(); + bestStep = step; + } + } + if (bestNext < 0 || bestStep == null) { + return null; + } + + mask |= bit(bestNext); + totalWork += bestAdjustedWorkRows; + order.add(bestNext); + currentEstimate = estimator.joinedPlanEstimate(bestStep); + logger.debug( + "Sketch join reorder greedy choose: order={} chosen={} sharedVar={} estimate={} adjustedWorkRows={} totalWork={}", + describeFactorOrder(order), describeFactor(bestNext), bestSharedVar, currentEstimate.summary(), + bestAdjustedWorkRows, totalWork); + } + + return new StatePlan(List.copyOf(order), currentEstimate, totalWork); + } + + private StatePlan optimizeDynamicProgramming() { + long all = allMask(); + Map bestByMask = new HashMap<>(); + Map> statesBySize = new HashMap<>(); + for (int i = 0; i < factors.size(); i++) { + PlanFactor factor = factors.get(i); + double adjustedWorkRows = adjustedWorkRows(i, initiallyBoundVars, factor.estimate().outputRows()); + StatePlan seedPlan = new StatePlan(List.of(i), factor.estimate(), adjustedWorkRows); + bestByMask.put(bit(i), seedPlan); + statesBySize.computeIfAbsent(1, ignored -> new LinkedHashSet<>()).add(bit(i)); + logger.debug("Sketch join reorder dp seed: factor={} estimate={} adjustedWorkRows={}", describeFactor(i), + factor.estimate().summary(), adjustedWorkRows); + } + + for (int size = 1; size < factors.size(); size++) { + for (long mask : statesBySize.getOrDefault(size, new LinkedHashSet<>())) { + StatePlan prefix = bestByMask.get(mask); + if (prefix == null) { + continue; + } + Set currentBoundVars = boundVariables(mask); + for (int candidate : candidates(mask)) { + String sharedVariable = uniqueSharedVariable(mask, candidate); + if (sharedVariable == null) { + continue; + } + SketchBasedJoinEstimator.JoinStepEstimate step = estimator + .estimateJoinStepForJoinOrdering(prefix.estimate(), factors.get(candidate).estimate()); + double adjustedWorkRows = adjustedWorkRows(candidate, currentBoundVars, step.workRows()); + long nextMask = mask | bit(candidate); + List nextOrder = new ArrayList<>(prefix.order().size() + 1); + nextOrder.addAll(prefix.order()); + nextOrder.add(candidate); + StatePlan candidatePlan = new StatePlan(List.copyOf(nextOrder), estimator.joinedPlanEstimate(step), + prefix.totalWork() + adjustedWorkRows); + StatePlan incumbent = bestByMask.get(nextMask); + logger.debug( + "Sketch join reorder dp candidate: prefixOrder={} candidate={} sharedVar={} step={} adjustedWorkRows={} totalWork={}", + describeFactorOrder(prefix.order()), describeFactor(candidate), sharedVariable, + step.summary(), + adjustedWorkRows, candidatePlan.totalWork()); + if (isBetter(candidatePlan, incumbent)) { + bestByMask.put(nextMask, candidatePlan); + statesBySize.computeIfAbsent(size + 1, ignored -> new LinkedHashSet<>()).add(nextMask); + logger.debug("Sketch join reorder dp choose: order={} estimate={} totalWork={}", + describeFactorOrder(candidatePlan.order()), candidatePlan.estimate().summary(), + candidatePlan.totalWork()); + } + } + } + } + + return bestByMask.get(all); + } + + private List candidates(long mask) { + List result = new ArrayList<>(); + for (int i = 0; i < factors.size(); i++) { + if (!contains(mask, i) && uniqueSharedVariable(mask, i) != null) { + result.add(i); + } + } + return result; + } + + private String uniqueSharedVariable(long mask, int candidateIndex) { + Set shared = new TreeSet<>(variables(mask)); + shared.retainAll(factors.get(candidateIndex).joinVars()); + return shared.size() == 1 ? shared.iterator().next() : null; + } + + private Set variables(long mask) { + return variablesMemo.computeIfAbsent(mask, ignored -> { + LinkedHashSet variables = new LinkedHashSet<>(); + for (int i = 0; i < factors.size(); i++) { + if (contains(mask, i)) { + variables.addAll(factors.get(i).joinVars()); + } + } + return Set.copyOf(variables); + }); + } + + private Set boundVariables(long mask) { + LinkedHashSet bound = new LinkedHashSet<>(initiallyBoundVars); + bound.addAll(variables(mask)); + return Set.copyOf(bound); + } + + private double adjustedWorkRows(int factorIndex, Set currentlyBoundVars, double defaultWorkRows) { + SketchBasedJoinEstimator.AccessShape accessShape = estimator + .accessShapeForJoinOrdering(factors.get(factorIndex).tupleExpr(), currentlyBoundVars); + double adjustedWorkRows = workAdjuster.adjustedWorkRows(accessShape, defaultWorkRows); + return Double.isFinite(adjustedWorkRows) && adjustedWorkRows > 0.0d ? adjustedWorkRows : defaultWorkRows; + } + + private List indices() { + List indices = new ArrayList<>(factors.size()); + for (int i = 0; i < factors.size(); i++) { + indices.add(i); + } + return List.copyOf(indices); + } + + private void logFactorEstimates() { + for (int i = 0; i < factors.size(); i++) { + PlanFactor factor = factors.get(i); + logger.debug("Sketch join reorder factor[{}]: expr={} estimate={}", i, + describeTupleExpr(factor.tupleExpr()), + factor.estimate().summary()); + } + } + + private String describeFactor(int index) { + PlanFactor factor = factors.get(index); + return factor.index() + ":" + describeTupleExpr(factor.tupleExpr()); + } + + private String describeFactorOrder(List order) { + List labels = new ArrayList<>(order.size()); + for (Integer index : order) { + labels.add(describeFactor(index.intValue())); + } + return labels.toString(); + } + + private long allMask() { + return (1L << factors.size()) - 1L; + } + + private static boolean contains(long mask, int index) { + return (mask & bit(index)) != 0L; + } + + private static long bit(int index) { + return 1L << index; + } + + private static boolean isBetter(StatePlan candidate, StatePlan incumbent) { + if (candidate == null) { + return false; + } + if (incumbent == null) { + return true; + } + int workComparison = Double.compare(candidate.totalWork(), incumbent.totalWork()); + if (workComparison != 0) { + return workComparison < 0; + } + int rowsComparison = Double.compare(candidate.estimate().outputRows(), incumbent.estimate().outputRows()); + if (rowsComparison != 0) { + return rowsComparison < 0; + } + return compareOrder(candidate.order(), incumbent.order()) < 0; + } + + private static int compareOrder(List left, List right) { + int size = Math.min(left.size(), right.size()); + for (int i = 0; i < size; i++) { + int comparison = Integer.compare(left.get(i), right.get(i)); + if (comparison != 0) { + return comparison; + } + } + return Integer.compare(left.size(), right.size()); + } + + private static SketchBasedJoinEstimator.SketchPlannerPath unsupportedPath(TupleExpr tupleExpr) { + if (tupleExpr instanceof StatementPattern || tupleExpr instanceof BindingSetAssignment) { + return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE; + } + if (tupleExpr instanceof Filter filter && unwrapFilterPattern(filter) != null) { + return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE; + } + return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_WRAPPER; + } + + private static StatementPattern unwrapFilterPattern(Filter filter) { + TupleExpr argument = filter.getArg(); + if (argument instanceof StatementPattern) { + return (StatementPattern) argument; + } + if (argument instanceof Filter) { + return unwrapFilterPattern((Filter) argument); + } + return null; + } + + static String describeExprOrder(List expressions) { + List described = new ArrayList<>(expressions.size()); + for (TupleExpr expression : expressions) { + described.add(describeTupleExpr(expression)); + } + return described.toString(); + } + + static String describeTupleExpr(TupleExpr tupleExpr) { + if (tupleExpr instanceof StatementPattern statementPattern) { + return "SP(" + describeVar(statementPattern.getSubjectVar()) + ' ' + + describeVar(statementPattern.getPredicateVar()) + ' ' + + describeVar(statementPattern.getObjectVar()) + + (statementPattern.getContextVar() == null ? "" + : ' ' + describeVar(statementPattern.getContextVar())) + + ')'; + } + if (tupleExpr instanceof BindingSetAssignment assignment) { + int rows = 0; + for (Object ignored : assignment.getBindingSets()) { + rows++; + } + return "BSA(names=" + new TreeSet<>(assignment.getBindingNames()) + ", rows=" + rows + ')'; + } + if (tupleExpr instanceof Filter filter) { + return "Filter(" + describeTupleExpr(filter.getArg()) + "; " + filter.getCondition() + ')'; + } + return tupleExpr.getClass().getSimpleName() + '(' + tupleExpr + ')'; + } + + private static String describeVar(Var var) { + if (var == null) { + return "null"; + } + if (!var.hasValue()) { + return '?' + Objects.toString(var.getName(), "_"); + } + Value value = var.getValue(); + return value == null ? '?' + Objects.toString(var.getName(), "_") : value.stringValue(); + } + + record PlanOutcome(Optional plan, + SketchBasedJoinEstimator.SketchPlannerPath path) { + } + + private record PlanFactor(int index, TupleExpr tupleExpr, SketchBasedJoinEstimator.TuplePlanEstimate estimate) { + private PlanFactor { + Objects.requireNonNull(tupleExpr, "tupleExpr"); + Objects.requireNonNull(estimate, "estimate"); + } + + Set joinVars() { + return estimate.joinVars(); + } + + int arity() { + return joinVars().size(); + } + } + + private record StatePlan(List order, SketchBasedJoinEstimator.TuplePlanEstimate estimate, + double totalWork) { + private StatePlan { + Objects.requireNonNull(order, "order"); + Objects.requireNonNull(estimate, "estimate"); + } + } + + private record FactorBuildResult(List factors, + SketchBasedJoinEstimator.SketchPlannerPath rejectionPath, + TupleExpr rejectedFactor) { + } +} diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java new file mode 100644 index 00000000000..f1012159c6c --- /dev/null +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java @@ -0,0 +1,196 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; + +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Thin bridge from {@link SketchBasedJoinEstimator} into the robust message-passing planner. + */ +final class SketchJoinOrderReorderer { + + private static final Logger logger = LoggerFactory.getLogger(SketchJoinOrderReorderer.class); + + private final SketchBasedJoinEstimator estimator; + private final SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster; + + SketchJoinOrderReorderer(SketchBasedJoinEstimator estimator) { + this(estimator, SketchBasedJoinEstimator.JoinOrderWorkAdjuster.NO_OP); + } + + SketchJoinOrderReorderer(SketchBasedJoinEstimator estimator, + SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster) { + this.estimator = Objects.requireNonNull(estimator, "estimator"); + this.workAdjuster = Objects.requireNonNull(workAdjuster, "workAdjuster"); + } + + Optional plan(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm) { + if (args == null || args.isEmpty()) { + estimator.recordJoinOrderPlannerPath(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + return Optional.empty(); + } + + List expressions = List.copyOf(args); + Set bound = initiallyBoundVars == null ? Collections.emptySet() : Set.copyOf(initiallyBoundVars); + PlanningInputs planningInputs = promoteFilterLookupBindings(expressions, bound); + List plannedExpressions = planningInputs.expressions(); + Set plannedBound = planningInputs.boundVars(); + if (logger.isDebugEnabled()) { + logger.debug( + "Sketch join reorder input: algorithm={} initiallyBoundVars={} originalOrder={} promotedPrefixes={} plannedOrder={} plannedBoundVars={}", + algorithm, bound, SketchJoinOrderPlanner.describeExprOrder(expressions), + SketchJoinOrderPlanner.describeExprOrder(planningInputs.prefixExpressions()), + SketchJoinOrderPlanner.describeExprOrder(plannedExpressions), plannedBound); + } + + if (plannedExpressions.isEmpty()) { + JoinOrderPlanner.JoinOrderPlan plan = new JoinOrderPlanner.JoinOrderPlan(planningInputs.prefixExpressions(), + 0.0d, totalBindingRows(planningInputs.prefixExpressions())); + estimator.recordJoinOrderPlannerPath(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED); + return Optional.of(plan); + } + + SketchJoinOrderPlanner.PlanOutcome outcome = new SketchJoinOrderPlanner(estimator, workAdjuster, + plannedExpressions, plannedBound) + .plan(algorithm); + estimator.recordJoinOrderPlannerPath(outcome.path()); + return outcome.plan().map(plan -> prependBindingPrefixes(plan, planningInputs.prefixExpressions())); + } + + private PlanningInputs promoteFilterLookupBindings(List expressions, Set initiallyBoundVars) { + if (expressions.isEmpty()) { + return new PlanningInputs(List.of(), Set.copyOf(initiallyBoundVars), List.of()); + } + + List nonBindingExpressions = new ArrayList<>(expressions.size()); + for (TupleExpr expression : expressions) { + if (!(expression instanceof BindingSetAssignment)) { + nonBindingExpressions.add(expression); + } + } + + List prefixExpressions = new ArrayList<>(); + List remainingExpressions = new ArrayList<>(expressions.size()); + LinkedHashSet promotedBoundVars = new LinkedHashSet<>(initiallyBoundVars); + for (TupleExpr expression : expressions) { + if (!(expression instanceof BindingSetAssignment assignment)) { + remainingExpressions.add(expression); + continue; + } + + String bindingName = singleBindingName(assignment); + if (bindingName == null || bindingVarAppearsInPattern(bindingName, nonBindingExpressions) + || !bindingEnablesLookup(bindingName, nonBindingExpressions, promotedBoundVars)) { + remainingExpressions.add(expression); + continue; + } + + prefixExpressions.add(expression); + promotedBoundVars.add(bindingName); + } + return new PlanningInputs(List.copyOf(remainingExpressions), Set.copyOf(promotedBoundVars), + List.copyOf(prefixExpressions)); + } + + private boolean bindingEnablesLookup(String bindingName, List expressions, + Set currentBoundVars) { + Set withoutBinding = Set.copyOf(currentBoundVars); + LinkedHashSet withBinding = new LinkedHashSet<>(currentBoundVars); + withBinding.add(bindingName); + for (TupleExpr expression : expressions) { + SketchBasedJoinEstimator.AccessShape before = estimator.accessShapeForJoinOrdering(expression, + withoutBinding); + SketchBasedJoinEstimator.AccessShape after = estimator.accessShapeForJoinOrdering(expression, + Set.copyOf(withBinding)); + if (before == null || after == null) { + continue; + } + if (!before.lookupBoundComponents().equals(after.lookupBoundComponents())) { + return true; + } + } + return false; + } + + private boolean bindingVarAppearsInPattern(String bindingName, List expressions) { + for (TupleExpr expression : expressions) { + SketchBasedJoinEstimator.AccessShape accessShape = estimator.accessShapeForJoinOrdering(expression, + Set.of()); + if (accessShape == null || !containsUnboundPatternVar(accessShape.pattern(), bindingName)) { + continue; + } + return true; + } + return false; + } + + private boolean containsUnboundPatternVar(StatementPattern pattern, String bindingName) { + return matches(pattern.getSubjectVar(), bindingName) + || matches(pattern.getPredicateVar(), bindingName) + || matches(pattern.getObjectVar(), bindingName) + || matches(pattern.getContextVar(), bindingName); + } + + private boolean matches(Var var, String bindingName) { + return var != null && !var.hasValue() && bindingName.equals(var.getName()); + } + + private String singleBindingName(BindingSetAssignment assignment) { + return assignment.getBindingNames().size() == 1 ? assignment.getBindingNames().iterator().next() : null; + } + + private JoinOrderPlanner.JoinOrderPlan prependBindingPrefixes(JoinOrderPlanner.JoinOrderPlan plan, + List prefixExpressions) { + if (prefixExpressions.isEmpty()) { + return plan; + } + List orderedArgs = new ArrayList<>(prefixExpressions.size() + plan.getOrderedArgs().size()); + orderedArgs.addAll(prefixExpressions); + orderedArgs.addAll(plan.getOrderedArgs()); + return new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), plan.getEstimatedFinalRows(), + plan.getEstimatedTotalWork() + totalBindingRows(prefixExpressions)); + } + + private double totalBindingRows(List prefixExpressions) { + double totalRows = 0.0d; + for (TupleExpr prefixExpression : prefixExpressions) { + if (!(prefixExpression instanceof BindingSetAssignment assignment)) { + continue; + } + for (BindingSet ignored : assignment.getBindingSets()) { + totalRows += 1.0d; + } + } + return totalRows; + } + + private record PlanningInputs(List expressions, Set boundVars, + List prefixExpressions) { + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorAccessShapeTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorAccessShapeTest.java new file mode 100644 index 00000000000..a511b4581cc --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorAccessShapeTest.java @@ -0,0 +1,140 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Method; +import java.util.Set; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Or; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.ValueConstant; +import org.eclipse.rdf4j.query.algebra.Var; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorAccessShapeTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final IRI GRID_NAME = VF.createIRI("urn:grid:name"); + private static final IRI GRID_ALIAS = VF.createIRI("urn:grid:alias"); + + @Test + void accessShapeMarksBoundVarEqualityAsLookupUsable() { + SketchBasedJoinEstimator estimator = estimatorWithGridLiterals(); + Filter filteredName = new Filter(pattern("substation", GRID_NAME, "name"), + equality("name", Var.of("target"))); + + SketchBasedJoinEstimator.AccessShape accessShape = estimator + .accessShapeForJoinOrdering(filteredName, Set.of("target")); + + assertEquals(Set.of(SketchBasedJoinEstimator.Component.O), accessShape.filterLookupComponents()); + assertTrue(accessShape.lookupBoundComponents().contains(SketchBasedJoinEstimator.Component.P)); + assertTrue(accessShape.lookupBoundComponents().contains(SketchBasedJoinEstimator.Component.O)); + assertFalse(accessShape.isDirectLookup(Set.of(SketchBasedJoinEstimator.Component.O))); + assertTrue(accessShape.isDirectLookup(Set.of(SketchBasedJoinEstimator.Component.P, + SketchBasedJoinEstimator.Component.O))); + } + + @Test + void accessShapeTreatsSameVarDisjunctionAsFiniteLookupSet() { + SketchBasedJoinEstimator estimator = estimatorWithGridLiterals(); + Filter singleEquality = new Filter(pattern("substation", GRID_NAME, "name"), + equality("name", Var.of("target"))); + Filter disjunctiveEquality = new Filter(pattern("substation", GRID_NAME, "name"), + new Or(equality("name", Var.of("target")), + equality("name", new ValueConstant(VF.createLiteral("Substation 3"))))); + + SketchBasedJoinEstimator.AccessShape singleShape = estimator + .accessShapeForJoinOrdering(singleEquality, Set.of("target")); + SketchBasedJoinEstimator.AccessShape disjunctiveShape = estimator + .accessShapeForJoinOrdering(disjunctiveEquality, Set.of("target")); + + assertEquals(Set.of(SketchBasedJoinEstimator.Component.O), disjunctiveShape.filterLookupComponents()); + assertTrue(disjunctiveShape.filterMultiplier() > singleShape.filterMultiplier(), + "Finite OR lookup should be treated as more permissive than a single equality"); + assertTrue(disjunctiveShape.filterMultiplier() > 0.0d && disjunctiveShape.filterMultiplier() < 1.0d); + } + + @Test + void accessShapeKeepsObjectOnlyScanWiderThanFilteredOutput() { + SketchBasedJoinEstimator estimator = estimatorWithGridLiterals(); + Filter filteredName = new Filter(pattern("substation", GRID_NAME, "name"), + new Or(equality("name", Var.of("target")), + equality("name", new ValueConstant(VF.createLiteral("Substation 3"))))); + + SketchBasedJoinEstimator.AccessShape accessShape = estimator + .accessShapeForJoinOrdering(filteredName, Set.of("target")); + double objectOnlyScan = accessShape.estimateAccessRows(Set.of(SketchBasedJoinEstimator.Component.O)); + double predicateQualifiedAccess = accessShape.estimateAccessRows(Set.of(SketchBasedJoinEstimator.Component.P, + SketchBasedJoinEstimator.Component.O)); + double filteredOutputRows = estimateTupleExprPlan(estimator, filteredName, Set.of("target")).outputRows(); + + assertTrue(objectOnlyScan > predicateQualifiedAccess, + "Missing a predicate-qualified prefix should keep the scan broader than the best prefix-qualified access"); + assertTrue(objectOnlyScan > filteredOutputRows, + "Object-only scan work should stay wider than the filtered output rows"); + } + + private static SketchBasedJoinEstimator estimatorWithGridLiterals() { + StubSailStore store = new StubSailStore(); + for (int i = 0; i < 24; i++) { + Resource substation = VF.createIRI("urn:substation:" + i); + store.add(VF.createStatement(substation, GRID_NAME, VF.createLiteral("Substation " + i))); + } + for (int i = 0; i < 120; i++) { + Resource aliasHolder = VF.createIRI("urn:alias:" + i); + store.add(VF.createStatement(aliasHolder, GRID_ALIAS, VF.createLiteral("Substation " + (1 + (i % 3))))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + return estimator; + } + + private static Compare equality(String patternVar, org.eclipse.rdf4j.query.algebra.ValueExpr lookupExpr) { + return new Compare(Var.of(patternVar), lookupExpr, Compare.CompareOp.EQ); + } + + private static StatementPattern pattern(String subjVar, IRI pred, String objVar) { + return new StatementPattern(Var.of(subjVar), Var.of("p", pred), Var.of(objVar)); + } + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + private static SketchBasedJoinEstimator.TuplePlanEstimate estimateTupleExprPlan(SketchBasedJoinEstimator estimator, + Filter filter, Set initiallyBoundVars) { + try { + Method method = SketchBasedJoinEstimator.class.getDeclaredMethod("estimateTupleExprPlan", + org.eclipse.rdf4j.query.algebra.TupleExpr.class, Set.class); + method.setAccessible(true); + return (SketchBasedJoinEstimator.TuplePlanEstimate) method.invoke(estimator, filter, initiallyBoundVars); + } catch (ReflectiveOperationException e) { + throw new AssertionError(e); + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBackgroundRefreshTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBackgroundRefreshTest.java new file mode 100644 index 00000000000..7628e65feb0 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBackgroundRefreshTest.java @@ -0,0 +1,160 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.iteration.CloseableIteratorIteration; +import org.eclipse.rdf4j.common.transaction.IsolationLevel; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Namespace; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.sail.SailException; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorBackgroundRefreshTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + @Test + void backgroundRefreshDoesNotRebuildEmptyStoreEveryTick() throws Exception { + CountingEmptyStore store = new CountingEmptyStore(); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, + SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(10)); + + estimator.startBackgroundRefresh(0); + try { + Thread.sleep(120); + + assertTrue(store.rebuildCount() <= 1, + "Empty stores should not rescan on every refresh tick"); + } finally { + estimator.stop(); + } + } + + private static final class CountingEmptyStore implements SailStore { + private final AtomicInteger rebuildCount = new AtomicInteger(); + + int rebuildCount() { + return rebuildCount.get(); + } + + @Override + public ValueFactory getValueFactory() { + return VF; + } + + @Override + public EvaluationStatistics getEvaluationStatistics() { + return null; + } + + @Override + public SailSource getExplicitSailSource() { + return new SailSource() { + @Override + public void close() { + } + + @Override + public SailSource fork() { + return null; + } + + @Override + public SailSink sink(IsolationLevel level) { + return null; + } + + @Override + public SailDataset dataset(IsolationLevel level) { + return new SailDataset() { + @Override + public void close() { + } + + @Override + public String getNamespace(String prefix) { + return null; + } + + @Override + public CloseableIteration getNamespaces() { + return null; + } + + @Override + public CloseableIteration getContextIDs() { + return null; + } + + @Override + public CloseableIteration getStatements(Resource subj, IRI pred, Value obj, + Resource... contexts) { + rebuildCount.incrementAndGet(); + return new CloseableIteratorIteration<>(java.util.Collections.emptyIterator()); + } + }; + } + + @Override + public void prepare() { + } + + @Override + public void flush() { + } + }; + } + + @Override + public SailSource getInferredSailSource() { + return null; + } + + @Override + public void close() throws SailException { + } + } + + private static final class OomDuringRebuildEstimator extends SketchBasedJoinEstimator { + private final AtomicInteger rebuildAttempts = new AtomicInteger(); + + private OomDuringRebuildEstimator(SailStore sailStore, Config config) { + super(sailStore, config); + } + + int rebuildAttempts() { + return rebuildAttempts.get(); + } + + @Override + public synchronized long rebuildOnceSlow() { + rebuildAttempts.incrementAndGet(); + throw new OutOfMemoryError("simulated"); + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBudgetAndSliceRegressionTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBudgetAndSliceRegressionTest.java new file mode 100644 index 00000000000..b9675c89215 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorBudgetAndSliceRegressionTest.java @@ -0,0 +1,211 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReferenceArray; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Slice; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorBudgetAndSliceRegressionTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + @Test + void overBudgetDirtySketchesUnloadWhenPersistenceIsDisabled() throws Exception { + IRI predicate = VF.createIRI("urn:p"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), config()); + setSketchBudgetBytes(estimator, 0L, 0L); + + estimator.addStatement(st(VF.createIRI("urn:s"), predicate, VF.createIRI("urn:o"))); + flushIncrementalBuffer(estimator); + + assertTrue(estimator.debugResidentSketches().isEmpty(), + "Over-budget dirty sketches should not remain resident without persistence"); + assertFalse(estimator.isReady(), + "Estimator should fall back until rebuild after dropping dirty sketches without persistence"); + } + + @Test + void slicePlanEstimateClampsVariableDistinctCountsToLimitedRows() { + IRI predicate = VF.createIRI("urn:hasObservation"); + StubSailStore store = new StubSailStore(); + for (int i = 0; i < 200; i++) { + store.add(st(VF.createIRI("urn:encounter:" + i), predicate, VF.createIRI("urn:observation:" + i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern pattern = new StatementPattern(Var.of("enc"), Var.of("p", predicate), Var.of("obs")); + Slice slice = new Slice(pattern, 0L, 1L); + SketchBasedJoinEstimator.TuplePlanEstimate estimate = estimator.planEstimateForJoinOrdering(slice, Set.of()); + + assertNotNull(estimate, "Expected planner estimate for slice"); + assertEquals(1.0d, estimate.outputRows(), 0.0d); + assertTrue(distinct(varStats(estimate).get("enc")) <= estimate.outputRows(), + "Slice should cap subject distinct count at surviving row count"); + assertTrue(distinct(varStats(estimate).get("obs")) <= estimate.outputRows(), + "Slice should cap object distinct count at surviving row count"); + } + + @Test + void readinessRequiresNonEmptyActiveSketchGroups() throws Exception { + IRI p1 = VF.createIRI("urn:p1"); + IRI p2 = VF.createIRI("urn:p2"); + Resource c = VF.createIRI("urn:c"); + + StubSailStore store = new StubSailStore(); + store.add(st(VF.createIRI("urn:s1"), p1, VF.createIRI("urn:o1"), c)); + store.add(st(VF.createIRI("urn:s2"), p1, VF.createIRI("urn:o1"), c)); + store.add(st(VF.createIRI("urn:s1"), p2, VF.createIRI("urn:o2"), c)); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + assertTrue(estimator.isReady(), "Expected populated rebuild to be ready"); + + clearActiveSingles(estimator); + assertFalse(estimator.isReady(), "Estimator should not be ready without active single-complement sketches"); + + estimator.rebuildOnceSlow(); + assertTrue(estimator.isReady(), "Rebuild should restore active single-complement sketches"); + + clearActivePairs(estimator); + assertFalse(estimator.isReady(), "Estimator should not be ready without active pair sketches"); + + estimator.rebuildOnceSlow(); + assertTrue(estimator.isReady(), "Rebuild should restore active pair sketches"); + + clearActiveSingleTriples(estimator); + assertFalse(estimator.isReady(), "Estimator should not be ready without active single-triple sketches"); + } + + private static Statement st(Resource s, IRI p, Value o) { + return VF.createStatement(s, p, o); + } + + private static Statement st(Resource s, IRI p, Value o, Resource c) { + return VF.createStatement(s, p, o, c); + } + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + private static void flushIncrementalBuffer(SketchBasedJoinEstimator estimator) { + estimator.debugFlushPendingIncremental(); + } + + private static void clearActiveSingleTriples(SketchBasedJoinEstimator estimator) throws Exception { + for (Object array : stateComponentValues(activeState(estimator), "singleTriples")) { + clearSketchArray((AtomicReferenceArray) array); + } + } + + private static void clearActiveSingles(SketchBasedJoinEstimator estimator) throws Exception { + for (Object singleBuild : stateComponentValues(activeState(estimator), "singles")) { + @SuppressWarnings("unchecked") + Map> complements = (Map>) field(singleBuild, "cmpl"); + for (AtomicReferenceArray sketches : complements.values()) { + clearSketchArray(sketches); + } + } + } + + private static void clearActivePairs(SketchBasedJoinEstimator estimator) throws Exception { + @SuppressWarnings("unchecked") + Map pairs = (Map) field(activeState(estimator), "pairs"); + for (Object pairBuild : pairs.values()) { + ((Map) field(pairBuild, "rows")).clear(); + } + } + + private static Object activeState(SketchBasedJoinEstimator estimator) throws Exception { + return field(estimator, "current"); + } + + private static Iterable stateComponentValues(Object stateComponents, String fieldName) throws Exception { + Object components = field(stateComponents, fieldName); + ArrayList values = new ArrayList<>(4); + values.add(field(components, "S")); + values.add(field(components, "P")); + values.add(field(components, "O")); + values.add(field(components, "C")); + return values; + } + + private static Object field(Object target, String name) throws Exception { + Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + return field.get(target); + } + + private static void clearSketchArray(AtomicReferenceArray sketches) { + for (int i = 0; i < sketches.length(); i++) { + sketches.set(i, null); + } + } + + private static void setSketchBudgetBytes(SketchBasedJoinEstimator estimator, long minBytes, long maxBytes) + throws Exception { + Field minField = SketchBasedJoinEstimator.class.getDeclaredField("minSketchMemoryBytes"); + Field maxField = SketchBasedJoinEstimator.class.getDeclaredField("maxSketchMemoryBytes"); + minField.setAccessible(true); + maxField.setAccessible(true); + minField.setLong(estimator, minBytes); + maxField.setLong(estimator, maxBytes); + } + + @SuppressWarnings("unchecked") + private static Map varStats(SketchBasedJoinEstimator.TuplePlanEstimate estimate) { + try { + Field field = SketchBasedJoinEstimator.TuplePlanEstimate.class.getDeclaredField("varStats"); + field.setAccessible(true); + return (Map) field.get(estimate); + } catch (ReflectiveOperationException e) { + throw new AssertionError(e); + } + } + + private static double distinct(Object varPlanStats) { + assertNotNull(varPlanStats, "Expected variable stats"); + try { + Field field = varPlanStats.getClass().getDeclaredField("distinct"); + field.setAccessible(true); + return field.getDouble(varPlanStats); + } catch (ReflectiveOperationException e) { + throw new AssertionError(e); + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorConfigTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorConfigTest.java new file mode 100644 index 00000000000..1b87c05ca98 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorConfigTest.java @@ -0,0 +1,443 @@ +/******************************************************************************* + * Copyright (c) 2025 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + ******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import org.apache.datasketches.common.ResizeFactor; +import org.apache.datasketches.theta.Intersection; +import org.apache.datasketches.theta.SetOperation; +import org.apache.datasketches.theta.Sketch; +import org.apache.datasketches.theta.UpdateSketch; +import org.apache.datasketches.thetacommon.ThetaUtil; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +@SuppressWarnings("ConstantConditions") +class SketchBasedJoinEstimatorConfigTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final String PROPERTY_PREFIX = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator."; + private static final String EXACT_LIMIT_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionExactDistinctLimit"; + private static final String SKEW_RATIO_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionSkewRatio"; + private static final String ROW_BUDGET_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionRowBudget"; + private static final String SAMPLE_SIZE_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionSampleSize"; + + private StubSailStore store; + private Resource s1; + private IRI p1; + private Value o1; + + @BeforeEach + void setUp() { + store = new StubSailStore(); + s1 = VF.createIRI("urn:s1"); + p1 = VF.createIRI("urn:p1"); + o1 = VF.createIRI("urn:o1"); + } + + private Statement st(Resource s, IRI p, Value o) { + return VF.createStatement(s, p, o); + } + + private void rebuild(SketchBasedJoinEstimator est) { + est.rebuildOnceSlow(); + } + + @Test + void customDefaultContextValue() { + // Given a custom default context label configured via constructor + SketchBasedJoinEstimator.Config cfg = SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(128) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withDefaultContext("urn:mine"); + + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, cfg); + + // One triple with null context + store.add(st(s1, p1, o1)); + rebuild(est); + + // The custom label must be used to represent the default context in sketches + double cardMine = est.cardinalitySingle(SketchBasedJoinEstimator.Component.C, "urn:mine"); + double cardDefault = est.cardinalitySingle(SketchBasedJoinEstimator.Component.C, "urn:default-context"); + + assertEquals(1.0, cardMine, 0.0001); + assertEquals(0.0, cardDefault, 0.0001); + } + + @Test + void stalenessDoesNotTriggerFromAgeAlone() throws Exception { + SketchBasedJoinEstimator.Config cfg = SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withChurnSampleMin(0) + .withChurnSamplePercent(0.0) + .withChurnSampleMax(0); + + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, cfg); + + // Load one statement and publish snapshot (no churn events after rebuild) + store.addAll(List.of(st(s1, p1, o1))); + rebuild(est); + + // Wait so age grows; old age-based staleness would fire here + Thread.sleep(5); + + // No churn observed, so estimator should not be considered stale + assertFalse(est.isStale(0.01)); + } + + @Test + void estimateCountInvalidatesPatternCacheAfterSketchMutation() throws Exception { + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, + SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0)); + + store.add(st(s1, p1, o1)); + rebuild(estimator); + + double initial = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), null, + null); + double repeated = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), null, + null); + assertEquals(initial, repeated, 0.0d, "Expected repeated estimate reads to stay stable before mutations"); + + Resource s2 = VF.createIRI("urn:s2"); + Value o2 = VF.createIRI("urn:o2"); + store.add(st(s2, p1, o2)); + estimator.addStatement(st(s2, p1, o2)); + + double refreshed = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), null, + null); + assertEquals(2.0d, refreshed, 0.0d, "Expected estimate cache to invalidate immediately after sketch mutation"); + } + + @Test + void sketchKMultiplierControlsDerivedK() throws Exception { + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(20) + .withoutDoubleArrayBuckets() + .withSketchK(-1) + .withSketchKMultiplier(3)); + + var field = est.getClass().getDeclaredField("bufA"); + field.setAccessible(true); + Object bufA = field.get(est); + var kField = bufA.getClass().getDeclaredField("k"); + kField.setAccessible(true); + + assertEquals(60, kField.getInt(bufA)); + } + + @Test + void defaultsUseFixedBucketsAndSketchDefaultAccuracy() throws Exception { + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, SketchBasedJoinEstimator.Config.defaults()); + + var bucketsField = est.getClass().getDeclaredField("nominalEntries"); + bucketsField.setAccessible(true); + var defaultBucketsField = SketchBasedJoinEstimator.class.getDeclaredField("DEFAULT_BUCKET_COUNT"); + defaultBucketsField.setAccessible(true); + assertEquals(defaultBucketsField.getInt(null), bucketsField.getInt(est)); + + var bufField = est.getClass().getDeclaredField("bufA"); + bufField.setAccessible(true); + Object bufA = bufField.get(est); + var kField = bufA.getClass().getDeclaredField("k"); + kField.setAccessible(true); + + assertEquals(ThetaUtil.DEFAULT_NOMINAL_ENTRIES, kField.getInt(bufA)); + } + + @Test + void sketchesUseResizeFactorX8() throws Exception { + var newSkMethod = SketchBasedJoinEstimator.class.getDeclaredMethod("newSk", int.class); + newSkMethod.setAccessible(true); + UpdateSketch sketch = (UpdateSketch) newSkMethod.invoke(null, ThetaUtil.DEFAULT_NOMINAL_ENTRIES); + assertEquals(ResizeFactor.X8, sketch.getResizeFactor()); + } + + @Test + void lowMemorySupplierApiRemoved() { + assertThrows(NoSuchMethodException.class, () -> SketchBasedJoinEstimator.class + .getMethod("setLowMemorySupplier", java.util.function.BooleanSupplier.class)); + } + + @Test + void defaultsExposeMin1Max2Percent() { + SketchBasedJoinEstimator.Config cfg = SketchBasedJoinEstimator.Config.defaults(); + assertEquals(0.10d, cfg.minSketchMemoryPercent, 0.0d); + assertEquals(0.30d, cfg.maxSketchMemoryPercent, 0.0d); + } + + @Test + void maxPercentClampedAtLeastMin() { + SketchBasedJoinEstimator.Config cfg = SketchBasedJoinEstimator.Config.defaults() + .withMinSketchMemoryPercent(0.30d) + .withMaxSketchMemoryPercent(0.10d); + + assertEquals(0.30d, cfg.minSketchMemoryPercent, 0.0d); + assertEquals(0.30d, cfg.maxSketchMemoryPercent, 0.0d); + } + + @Test + void systemPropertyOverridesForSketchMemoryPercents() throws Exception { + String minKey = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.minSketchMemoryPercent"; + String maxKey = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.maxSketchMemoryPercent"; + String prevMin = System.getProperty(minKey); + String prevMax = System.getProperty(maxKey); + try { + System.setProperty(minKey, "0.04"); + System.setProperty(maxKey, "0.07"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, + SketchBasedJoinEstimator.Config.defaults() + .withMinSketchMemoryPercent(0.01d) + .withMaxSketchMemoryPercent(0.02d)); + + var minBytesField = SketchBasedJoinEstimator.class.getDeclaredField("minSketchMemoryBytes"); + var maxBytesField = SketchBasedJoinEstimator.class.getDeclaredField("maxSketchMemoryBytes"); + minBytesField.setAccessible(true); + maxBytesField.setAccessible(true); + + long heapMax = Math.max(64L * 1024L * 1024L, Runtime.getRuntime().maxMemory()); + assertEquals(Math.round(heapMax * 0.04d), minBytesField.getLong(estimator)); + assertEquals(Math.round(heapMax * 0.07d), maxBytesField.getLong(estimator)); + } finally { + if (prevMin == null) { + System.clearProperty(minKey); + } else { + System.setProperty(minKey, prevMin); + } + if (prevMax == null) { + System.clearProperty(maxKey); + } else { + System.setProperty(maxKey, prevMax); + } + } + } + + @Test + void zeroIntersectionFallbackDefaultsAndBuilderMethods() { + SketchBasedJoinEstimator.Config defaults = SketchBasedJoinEstimator.Config.defaults(); + assertEquals(64, defaults.zeroIntersectionExactDistinctLimit); + assertEquals(128.0d, defaults.zeroIntersectionSkewRatio, 0.0d); + assertEquals(1_000_000L, defaults.zeroIntersectionRowBudget); + assertEquals(128, defaults.zeroIntersectionSampleSize); + + SketchBasedJoinEstimator.Config configured = SketchBasedJoinEstimator.Config.defaults() + .withZeroIntersectionExactDistinctLimit(7) + .withZeroIntersectionSkewRatio(33.5d) + .withZeroIntersectionRowBudget(1234L) + .withZeroIntersectionSampleSize(17); + assertEquals(7, configured.zeroIntersectionExactDistinctLimit); + assertEquals(33.5d, configured.zeroIntersectionSkewRatio, 0.0d); + assertEquals(1234L, configured.zeroIntersectionRowBudget); + assertEquals(17, configured.zeroIntersectionSampleSize); + } + + @Test + void systemPropertyOverridesForZeroIntersectionFallbackSettings() throws Exception { + PropertyState properties = PropertyState.capture(EXACT_LIMIT_PROPERTY, SKEW_RATIO_PROPERTY, ROW_BUDGET_PROPERTY, + SAMPLE_SIZE_PROPERTY); + try { + System.setProperty(EXACT_LIMIT_PROPERTY, "9"); + System.setProperty(SKEW_RATIO_PROPERTY, "42.5"); + System.setProperty(ROW_BUDGET_PROPERTY, "321"); + System.setProperty(SAMPLE_SIZE_PROPERTY, "13"); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, + SketchBasedJoinEstimator.Config.defaults() + .withZeroIntersectionExactDistinctLimit(3) + .withZeroIntersectionSkewRatio(4.0d) + .withZeroIntersectionRowBudget(5L) + .withZeroIntersectionSampleSize(6)); + + assertEquals(9, intField(estimator, "zeroIntersectionExactDistinctLimit")); + assertEquals(42.5d, doubleField(estimator, "zeroIntersectionSkewRatio"), 0.0d); + assertEquals(321L, longField(estimator, "zeroIntersectionRowBudget")); + assertEquals(13, intField(estimator, "zeroIntersectionSampleSize")); + } finally { + properties.restore(); + } + } + + @Test + void zeroIntersectionRowBudgetZeroDisablesRareOverlapFallback() throws Exception { + PropertyState properties = PropertyState.capture(EXACT_LIMIT_PROPERTY, SKEW_RATIO_PROPERTY, ROW_BUDGET_PROPERTY, + SAMPLE_SIZE_PROPERTY); + try { + properties.clearAll(); + RareOverlapFixture fixture = buildRareOverlapFixture(SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(128) + .withSketchK(512) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5) + .withZeroIntersectionExactDistinctLimit(8) + .withZeroIntersectionSkewRatio(32.0d) + .withZeroIntersectionRowBudget(0L) + .withZeroIntersectionSampleSize(32)); + + assertEquals(0.0d, fixture.thetaIntersectionDistinct, 0.0d, + "Test precondition: raw theta intersection should miss the rare overlap"); + assertEquals(0.0d, fixture.estimator.cardinality(fixture.join), 0.0d, + "Zero row budget should disable the rare-overlap fallback"); + } finally { + properties.restore(); + } + } + + private static RareOverlapFixture buildRareOverlapFixture(SketchBasedJoinEstimator.Config config) throws Exception { + IRI locatedAt = VF.createIRI("urn:locatedAt"); + IRI hasName = VF.createIRI("urn:hasName"); + int overlapBranches = 64; + int copiesPerBranch = 4; + + for (int noiseSubjects = 4096; noiseSubjects <= 262144; noiseSubjects *= 2) { + StubSailStore rareOverlapStore = new StubSailStore(); + populateRareOverlapData(rareOverlapStore, locatedAt, hasName, overlapBranches, copiesPerBranch, + noiseSubjects); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(rareOverlapStore, config); + estimator.rebuildOnceSlow(); + + double thetaIntersectionDistinct = rawThetaIntersectionDistinct(estimator, locatedAt, hasName); + if (thetaIntersectionDistinct == 0.0d) { + return new RareOverlapFixture(estimator, rareOverlapJoin(locatedAt, hasName), + thetaIntersectionDistinct); + } + } + + throw new AssertionError("Unable to construct a zero-intersection rare-overlap fixture"); + } + + private static void populateRareOverlapData(StubSailStore store, IRI locatedAt, IRI hasName, int overlapBranches, + int copiesPerBranch, int noiseSubjects) { + List branches = new ArrayList<>(overlapBranches); + for (int branchIndex = 0; branchIndex < overlapBranches; branchIndex++) { + Resource branch = VF.createIRI("urn:branch:" + branchIndex); + branches.add(branch); + store.add(VF.createStatement(branch, hasName, VF.createLiteral("Branch " + branchIndex))); + for (int copyIndex = 0; copyIndex < copiesPerBranch; copyIndex++) { + Resource copy = VF.createIRI("urn:copy:" + branchIndex + ":" + copyIndex); + store.add(VF.createStatement(copy, locatedAt, branch)); + } + } + + for (int noiseIndex = 0; noiseIndex < noiseSubjects; noiseIndex++) { + Resource noiseSubject = VF.createIRI("urn:noise:" + noiseIndex); + store.add(VF.createStatement(noiseSubject, hasName, VF.createLiteral("Noise " + noiseIndex))); + } + } + + private static double rawThetaIntersectionDistinct(SketchBasedJoinEstimator estimator, IRI locatedAt, IRI hasName) + throws Exception { + Object leftEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.O, null, locatedAt.stringValue(), + null, null); + Object rightEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.S, null, hasName.stringValue(), + null, null); + Sketch leftBindings = bindingsSketch(leftEstimate); + Sketch rightBindings = bindingsSketch(rightEstimate); + + Intersection intersection = SetOperation.builder().buildIntersection(); + intersection.intersect(leftBindings); + intersection.intersect(rightBindings); + return intersection.getResult().getEstimate(); + } + + private static Sketch bindingsSketch(Object joinEstimate) throws Exception { + Field bindingsField = joinEstimate.getClass().getDeclaredField("bindings"); + bindingsField.setAccessible(true); + return (Sketch) bindingsField.get(joinEstimate); + } + + private static Join rareOverlapJoin(IRI locatedAt, IRI hasName) { + return new Join( + new StatementPattern(Var.of("copy"), Var.of("locatedAt", locatedAt), Var.of("branch")), + new StatementPattern(Var.of("branch"), Var.of("hasName", hasName), Var.of("branchName"))); + } + + private static int intField(Object target, String name) throws Exception { + Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + return field.getInt(target); + } + + private static long longField(Object target, String name) throws Exception { + Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + return field.getLong(target); + } + + private static double doubleField(Object target, String name) throws Exception { + Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + return field.getDouble(target); + } + + private record RareOverlapFixture(SketchBasedJoinEstimator estimator, Join join, double thetaIntersectionDistinct) { + } + + private static final class PropertyState { + private final String[] keys; + private final String[] values; + + private PropertyState(String[] keys, String[] values) { + this.keys = keys; + this.values = values; + } + + private static PropertyState capture(String... keys) { + String[] values = new String[keys.length]; + for (int i = 0; i < keys.length; i++) { + values[i] = System.getProperty(keys[i]); + } + return new PropertyState(keys, values); + } + + private void clearAll() { + for (String key : keys) { + System.clearProperty(key); + } + } + + private void restore() { + for (int i = 0; i < keys.length; i++) { + if (values[i] == null) { + System.clearProperty(keys[i]); + } else { + System.setProperty(keys[i], values[i]); + } + } + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorCrossComponentJoinRegressionTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorCrossComponentJoinRegressionTest.java new file mode 100644 index 00000000000..5456ec465c3 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorCrossComponentJoinRegressionTest.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorCrossComponentJoinRegressionTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + @Test + void estimateRemainsPositiveWhenJoiningObjectBindingsToSubjectBindings() { + IRI locatedAt = VF.createIRI("urn:locatedAt"); + IRI hasName = VF.createIRI("urn:hasName"); + Resource copy1 = VF.createIRI("urn:copy:1"); + Resource copy2 = VF.createIRI("urn:copy:2"); + Resource copy3 = VF.createIRI("urn:copy:3"); + Resource branch1 = VF.createIRI("urn:branch:1"); + Resource branch2 = VF.createIRI("urn:branch:2"); + + StubSailStore store = new StubSailStore(); + store.add(st(copy1, locatedAt, branch1)); + store.add(st(copy2, locatedAt, branch1)); + store.add(st(copy3, locatedAt, branch2)); + store.add(st(branch1, hasName, VF.createLiteral("Branch 1"))); + store.add(st(branch2, hasName, VF.createLiteral("Branch 2"))); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double directJoinEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.O, null, + locatedAt.stringValue(), null, null) + .join(SketchBasedJoinEstimator.Component.S, null, hasName.stringValue(), null, null) + .estimate(); + double plannerJoinEstimate = estimator.cardinality(new Join( + new StatementPattern(Var.of("copy"), Var.of("locatedAt", locatedAt), Var.of("branch")), + new StatementPattern(Var.of("branch"), Var.of("hasName", hasName), Var.of("branchName")))); + + assertEquals(3.0d, directJoinEstimate, 0.0d, + "Direct join estimate should preserve shared branch bindings across O->S joins"); + assertTrue(plannerJoinEstimate > 0.0d, + "Planner join estimate should stay positive for object-to-subject chains"); + } + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + private static org.eclipse.rdf4j.model.Statement st(Resource s, IRI p, Value o) { + return VF.createStatement(s, p, o); + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java new file mode 100644 index 00000000000..b470f516f30 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java @@ -0,0 +1,997 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.ListMemberOperator; +import org.eclipse.rdf4j.query.algebra.Or; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.Union; +import org.eclipse.rdf4j.query.algebra.ValueConstant; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinStatsProvider; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.PatternKey; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorJoinOrderPlannerTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + @Test + void planJoinOrderSupportsBindingSetAssignmentsAndSimpleFilters() { + StubSailStore store = new StubSailStore(); + Resource s1 = VF.createIRI("urn:s1"); + Resource s2 = VF.createIRI("urn:s2"); + IRI follows = VF.createIRI("urn:follows"); + IRI name = VF.createIRI("urn:name"); + store.add(VF.createStatement(s1, follows, VF.createIRI("urn:x1"))); + store.add(VF.createStatement(s2, follows, VF.createIRI("urn:x2"))); + store.add(VF.createStatement(s1, name, VF.createLiteral("alice"))); + store.add(VF.createStatement(s2, name, VF.createLiteral("bob"))); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + BindingSetAssignment bindings = new BindingSetAssignment(); + QueryBindingSet row1 = new QueryBindingSet(); + row1.addBinding("s", s1); + QueryBindingSet row2 = new QueryBindingSet(); + row2.addBinding("s", s2); + bindings.setBindingSets(List.of(row1, row2)); + + StatementPattern followsPattern = pattern("s", follows, "x"); + StatementPattern namePattern = pattern("s", name, "name"); + Filter filteredName = new Filter(namePattern, + new Compare(Var.of("name"), new ValueConstant(VF.createLiteral("alice")), Compare.CompareOp.EQ)); + + List args = List.of(bindings, followsPattern, filteredName); + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(plan.isPresent(), "Expected planner to support BindingSetAssignment + simple Filter join arguments"); + List orderedArgs = plan.get().getOrderedArgs(); + assertEquals(args.size(), orderedArgs.size()); + assertTrue(orderedArgs.containsAll(args)); + } + + @Test + void planJoinOrderSupportsBindingSetAssignmentsUsedOnlyByLookupFilters() { + StubSailStore store = new StubSailStore(); + IRI rdfType = VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + IRI generatorType = VF.createIRI("urn:Generator"); + IRI feeds = VF.createIRI("urn:feeds"); + IRI name = VF.createIRI("urn:name"); + Resource substation1 = VF.createIRI("urn:substation:1"); + Resource substation2 = VF.createIRI("urn:substation:2"); + + store.add(VF.createStatement(VF.createIRI("urn:generator:1"), rdfType, generatorType)); + store.add(VF.createStatement(VF.createIRI("urn:generator:1"), feeds, substation1)); + store.add(VF.createStatement(VF.createIRI("urn:generator:2"), rdfType, generatorType)); + store.add(VF.createStatement(VF.createIRI("urn:generator:2"), feeds, substation2)); + store.add(VF.createStatement(substation1, name, VF.createLiteral("Substation 1"))); + store.add(VF.createStatement(substation2, name, VF.createLiteral("Substation 2"))); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + BindingSetAssignment bindings = new BindingSetAssignment(); + QueryBindingSet row1 = new QueryBindingSet(); + row1.addBinding("target", VF.createLiteral("Substation 1")); + QueryBindingSet row2 = new QueryBindingSet(); + row2.addBinding("target", VF.createLiteral("Substation 2")); + bindings.setBindingSets(List.of(row1, row2)); + + StatementPattern typePattern = new StatementPattern(Var.of("entity"), Var.of("rdfType", rdfType), + Var.of("generatorType", generatorType)); + StatementPattern feedsPattern = pattern("entity", feeds, "substation"); + Filter filteredName = new Filter(pattern("substation", name, "stationName"), + new Or( + new Compare(Var.of("stationName"), Var.of("target"), Compare.CompareOp.EQ), + new Compare(Var.of("stationName"), new ValueConstant(VF.createLiteral("Substation 3")), + Compare.CompareOp.EQ))); + + List args = List.of(bindings, typePattern, feedsPattern, filteredName); + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected planner to support BindingSetAssignment values used by lookup filters"); + List orderedArgs = plan.get().getOrderedArgs(); + assertEquals(args.size(), orderedArgs.size()); + assertEquals(bindings, orderedArgs.get(0), + "Lookup-only BindingSetAssignment should be evaluated before the graph"); + assertTrue(orderedArgs.indexOf(feedsPattern) < orderedArgs.indexOf(filteredName), + "Expected connected graph planning to remain available after promoting lookup-only bindings"); + } + + @Test + void planJoinOrderHandlesMultipleJoinVariablesWithoutGlobalCommonVar() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI pC = VF.createIRI("urn:pC"); + + for (int i = 0; i < 8; i++) { + Resource s = VF.createIRI("urn:s" + i); + IRI o = VF.createIRI("urn:o" + i); + IRI x = VF.createIRI("urn:x" + i); + IRI z = VF.createIRI("urn:z" + i); + store.add(VF.createStatement(s, pA, o)); + store.add(VF.createStatement(s, pB, x)); + store.add(VF.createStatement(x, pC, z)); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "o"); + StatementPattern b = pattern("s", pB, "x"); + StatementPattern c = pattern("x", pC, "z"); + List args = List.of(a, b, c); + + Optional dpPlan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + Optional greedyPlan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(dpPlan.isPresent(), "Expected dynamic programming planner to produce a join order"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastJoinOrderPlannerPath(), + "Supported flat segments should go through the robust planner"); + assertTrue(greedyPlan.isPresent(), "Expected greedy planner to produce a join order"); + assertEquals(args.size(), dpPlan.get().getOrderedArgs().size()); + assertTrue(dpPlan.get().getOrderedArgs().containsAll(args)); + assertEquals(args.size(), greedyPlan.get().getOrderedArgs().size()); + assertTrue(greedyPlan.get().getOrderedArgs().containsAll(args)); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastJoinOrderPlannerPath(), + "Supported flat segments should go through the robust planner"); + } + + @Test + void planJoinOrderPrefersMostSelectiveConnectedSeedOverLargeBindingSetAssignment() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI y = VF.createIRI("urn:y"); + + BindingSetAssignment bindings = new BindingSetAssignment(); + List bindingSets = new java.util.ArrayList<>(); + + for (int i = 0; i < 512; i++) { + Resource s = VF.createIRI("urn:s" + i); + IRI x = VF.createIRI("urn:x" + i); + store.add(VF.createStatement(s, pA, x)); + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("s", s); + bindingSets.add(row); + } + store.add(VF.createStatement(VF.createIRI("urn:x0"), pB, y)); + + bindings.setBindingSets(bindingSets); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "x"); + StatementPattern b = pattern("x", pB, "y"); + List args = List.of(a, b, bindings); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(plan.isPresent(), "Expected planner to produce a plan"); + assertEquals(b, plan.get().getOrderedArgs().get(0), + "Row-based objective should seed from the narrowest connected tuple"); + } + + @Test + void planJoinOrderUsesBindingSetAssignmentSketchIntersectionForFinalRows() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + + for (int i = 0; i < 100; i++) { + store.add(VF.createStatement(VF.createIRI("urn:s" + i), pA, VF.createIRI("urn:x" + i))); + } + + BindingSetAssignment bindings = new BindingSetAssignment(); + List bindingSets = new java.util.ArrayList<>(); + QueryBindingSet matching = new QueryBindingSet(); + matching.addBinding("s", VF.createIRI("urn:s0")); + bindingSets.add(matching); + for (int i = 1; i < 100; i++) { + QueryBindingSet nonMatching = new QueryBindingSet(); + nonMatching.addBinding("s", VF.createIRI("urn:outside:" + i)); + bindingSets.add(nonMatching); + } + bindings.setBindingSets(bindingSets); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern pattern = pattern("s", pA, "x"); + Optional plan = estimator.planJoinOrder(List.of(pattern, bindings), Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected planner to produce a plan"); + assertTrue(plan.get().getEstimatedFinalRows() < 5.0d, + "Expected BSA overlap to drive final-row estimate close to the single matching binding"); + } + + @Test + void planJoinOrderHandlesDisconnectedBindingAssignmentAlongsideConnectedChain() { + StubSailStore store = new StubSailStore(); + IRI rdfType = VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + IRI patientType = VF.createIRI("urn:Patient"); + IRI hasEncounter = VF.createIRI("urn:hasEncounter"); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 256; i++) { + Resource patient = VF.createIRI("urn:patient:" + i); + Resource encounter = VF.createIRI("urn:encounter:" + i); + store.add(VF.createStatement(patient, rdfType, patientType)); + store.add(VF.createStatement(patient, hasEncounter, encounter)); + for (int j = 0; j < 4; j++) { + Resource observation = VF.createIRI("urn:observation:" + i + ":" + j); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(j == 0 ? 50 : 10 + j))); + } + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.setLearnedStatsProvider(new FixedPatternPassRatioJoinStatsProvider(0.005d)); + estimator.rebuildOnceSlow(); + + BindingSetAssignment bindings = new BindingSetAssignment(); + QueryBindingSet limitBinding = new QueryBindingSet(); + limitBinding.addBinding("limit", VF.createLiteral(55)); + bindings.setBindingSets(List.of(limitBinding)); + + StatementPattern typePattern = new StatementPattern(Var.of("patient"), Var.of("predType", rdfType), + Var.of("patientType", patientType)); + StatementPattern encounterPattern = pattern("patient", hasEncounter, "enc"); + StatementPattern observationPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + Filter filteredValuePattern = new Filter(valuePattern, + new Compare(Var.of("value"), new ValueConstant(VF.createLiteral(50)), Compare.CompareOp.EQ)); + + List args = List.of(bindings, typePattern, encounterPattern, observationPattern, + filteredValuePattern); + + Optional greedyPlan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + assertTrue(greedyPlan.isEmpty(), + "Disconnected binding assignments should now fall back through Optional.empty()"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, estimator.lastJoinOrderPlannerPath(), + "Disconnected binding assignments should report an unsupported planner shape"); + + Optional dynamicProgrammingPlan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + assertTrue(dynamicProgrammingPlan.isEmpty(), + "Disconnected binding assignments should now fall back through Optional.empty()"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, estimator.lastJoinOrderPlannerPath(), + "Disconnected binding assignments should report an unsupported planner shape"); + } + + @Test + void planJoinOrderUsesHeuristicSelectivityForListMemberFilter() { + StubSailStore store = new StubSailStore(); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 200; i++) { + Resource encounter = VF.createIRI("urn:encounter:" + i); + Resource observation = VF.createIRI("urn:observation:" + i); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern encounterPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + Filter filteredValuePattern = new Filter(valuePattern, listMemberCondition("value", 1, 2, 3)); + + List args = List.of(encounterPattern, filteredValuePattern); + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(plan.isPresent(), "Expected planner to produce a plan"); + assertEquals(filteredValuePattern, plan.get().getOrderedArgs().get(0), + "List-member filter should be treated as selective and planned first"); + } + + @Test + void planJoinOrderReducesEstimatedFinalRowsForSimpleFilter() { + StubSailStore store = new StubSailStore(); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 200; i++) { + Resource encounter = VF.createIRI("urn:encounter:" + i); + Resource observation = VF.createIRI("urn:observation:" + i); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern encounterPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + Filter filteredValuePattern = new Filter(valuePattern, + new Compare(Var.of("value"), new ValueConstant(VF.createLiteral(50)), Compare.CompareOp.EQ)); + + Optional unfiltered = estimator + .planJoinOrder(List.of(encounterPattern, valuePattern), Set.of(), JoinOrderPlanner.Algorithm.GREEDY); + Optional filtered = estimator.planJoinOrder(List.of(encounterPattern, + filteredValuePattern), Set.of(), JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(unfiltered.isPresent(), "Expected unfiltered planner to produce a plan"); + assertTrue(filtered.isPresent(), "Expected filtered planner to produce a plan"); + assertTrue(filtered.get().getEstimatedFinalRows() < unfiltered.get().getEstimatedFinalRows(), + "Filter should reduce estimated final rows"); + } + + @Test + void planEstimateForJoinOrderingDoesNotZeroAllUnboundPattern() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + + store.add(VF.createStatement(VF.createIRI("urn:s1"), pA, VF.createIRI("urn:o1"))); + store.add(VF.createStatement(VF.createIRI("urn:s2"), pA, VF.createIRI("urn:o2"))); + store.add(VF.createStatement(VF.createIRI("urn:s3"), pB, VF.createIRI("urn:o3"))); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern allUnbound = new StatementPattern(Var.of("s"), Var.of("p"), Var.of("o")); + SketchBasedJoinEstimator.TuplePlanEstimate estimate = estimator.planEstimateForJoinOrdering(allUnbound, + Set.of()); + + assertTrue(estimate != null, "Expected planner estimate for an all-unbound statement pattern"); + assertTrue(estimate.outputRows() > 0.0d, + "All-unbound statement patterns should not collapse to zero estimated rows"); + assertEquals(Set.of("s", "p", "o"), varStats(estimate).keySet(), + "All-unbound statement patterns should still expose join vars to the planner"); + } + + @Test + void planEstimateForJoinOrderingAppliesFilterAboveJoinSubtree() { + StubSailStore store = new StubSailStore(); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 200; i++) { + Resource encounter = VF.createIRI("urn:encounter:" + i); + Resource observation = VF.createIRI("urn:observation:" + i); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern encounterPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + Join join = new Join(encounterPattern, valuePattern); + Filter filteredJoin = new Filter(join, + new Compare(Var.of("value"), new ValueConstant(VF.createLiteral(50)), Compare.CompareOp.EQ)); + + SketchBasedJoinEstimator.TuplePlanEstimate unfiltered = estimator.planEstimateForJoinOrdering(join, Set.of()); + SketchBasedJoinEstimator.TuplePlanEstimate filtered = estimator.planEstimateForJoinOrdering(filteredJoin, + Set.of()); + + assertTrue(unfiltered != null, "Expected unfiltered join subtree planner estimate"); + assertTrue(filtered != null, "Expected filtered join subtree planner estimate"); + assertTrue(filtered.outputRows() < unfiltered.outputRows(), + "Filter above a join subtree should reduce the planner row estimate"); + } + + @Test + void cardinalityFilterRetainsSelectivityAboveJoinSubtree() { + StubSailStore store = new StubSailStore(); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 200; i++) { + Resource encounter = VF.createIRI("urn:encounter:" + i); + Resource observation = VF.createIRI("urn:observation:" + i); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern encounterPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + Join join = new Join(encounterPattern, valuePattern); + Filter filteredJoin = new Filter(join, + new Compare(Var.of("value"), new ValueConstant(VF.createLiteral(50)), Compare.CompareOp.EQ)); + + double unfilteredRows = estimator.cardinality(join); + double filteredRows = estimator.cardinality(filteredJoin); + + assertTrue(unfilteredRows > 0.0d, "Expected unfiltered join cardinality to be supported"); + assertTrue(filteredRows >= 0.0d, "Expected filtered join cardinality to be supported"); + assertTrue(filteredRows < unfilteredRows, + "Filter above a join subtree should reduce estimated cardinality"); + } + + @Test + void cardinalityFilterRetainsSelectivityAboveLeftJoinSubtree() { + StubSailStore store = new StubSailStore(); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 200; i++) { + Resource encounter = VF.createIRI("urn:encounter:" + i); + Resource observation = VF.createIRI("urn:observation:" + i); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern encounterPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + LeftJoin leftJoin = new LeftJoin(encounterPattern, valuePattern); + Filter filteredLeftJoin = new Filter(leftJoin, + new Compare(Var.of("value"), new ValueConstant(VF.createLiteral(50)), Compare.CompareOp.EQ)); + + double unfilteredRows = estimator.cardinality(leftJoin); + double filteredRows = estimator.cardinality(filteredLeftJoin); + + assertTrue(unfilteredRows > 0.0d, "Expected unfiltered left join cardinality to be supported"); + assertTrue(filteredRows >= 0.0d, "Expected filtered left join cardinality to be supported"); + assertTrue(filteredRows < unfilteredRows, + "Filter above a left-join subtree should reduce estimated cardinality"); + } + + @Test + void planJoinOrderSeedsFromMostSelectiveCorrelatedChainEnd() { + StubSailStore store = new StubSailStore(); + IRI hasArm = VF.createIRI("urn:hasArm"); + IRI hasResult = VF.createIRI("urn:hasResult"); + IRI biomarker = VF.createIRI("urn:biomarker"); + + for (int trialIndex = 0; trialIndex < 8; trialIndex++) { + Resource trial = VF.createIRI("urn:trial:" + trialIndex); + for (int armIndex = 0; armIndex < 50; armIndex++) { + Resource arm = VF.createIRI("urn:arm:" + trialIndex + ':' + armIndex); + Resource result = VF.createIRI("urn:result:" + trialIndex + ':' + armIndex); + Resource marker = VF.createIRI("urn:marker:" + trialIndex + ':' + armIndex); + store.add(VF.createStatement(trial, hasArm, arm)); + store.add(VF.createStatement(arm, hasResult, result)); + store.add(VF.createStatement(result, biomarker, marker)); + } + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern trialArmPattern = pattern("trial", hasArm, "arm"); + StatementPattern armResultPattern = pattern("arm", hasResult, "result"); + StatementPattern biomarkerPattern = pattern("result", biomarker, "marker"); + Set outerBoundVars = Set.of("trial", "marker"); + + SketchBasedJoinEstimator.TuplePlanEstimate trialArmEstimate = estimator + .planEstimateForJoinOrdering(trialArmPattern, outerBoundVars); + SketchBasedJoinEstimator.TuplePlanEstimate armResultEstimate = estimator + .planEstimateForJoinOrdering(armResultPattern, outerBoundVars); + SketchBasedJoinEstimator.TuplePlanEstimate biomarkerEstimate = estimator + .planEstimateForJoinOrdering(biomarkerPattern, outerBoundVars); + + SketchBasedJoinEstimator.JoinStepEstimate biomarkerFirst = estimator + .estimateJoinStepForJoinOrdering(biomarkerEstimate, armResultEstimate); + SketchBasedJoinEstimator.JoinStepEstimate trialFirst = estimator + .estimateJoinStepForJoinOrdering(trialArmEstimate, armResultEstimate); + + assertTrue(biomarkerFirst.outputRows() < trialFirst.outputRows(), + "Bound biomarker subset should stay smaller than the bound trial subset when extended through result"); + + Optional plan = estimator.planJoinOrder( + List.of(trialArmPattern, armResultPattern, biomarkerPattern), + outerBoundVars, + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected planner to produce a correlated-chain plan"); + assertEquals(biomarkerPattern, plan.get().getOrderedArgs().get(0), + "Planner should seed from the most selective correlated chain end"); + } + + @Test + void cardinalityJoinSupportsBindingSetAssignment() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + + for (int i = 0; i < 100; i++) { + store.add(VF.createStatement(VF.createIRI("urn:s" + i), pA, VF.createIRI("urn:x" + i))); + } + + BindingSetAssignment bindings = new BindingSetAssignment(); + List bindingSets = new java.util.ArrayList<>(); + QueryBindingSet matching = new QueryBindingSet(); + matching.addBinding("s", VF.createIRI("urn:s0")); + bindingSets.add(matching); + for (int i = 1; i < 100; i++) { + QueryBindingSet nonMatching = new QueryBindingSet(); + nonMatching.addBinding("s", VF.createIRI("urn:outside:" + i)); + bindingSets.add(nonMatching); + } + bindings.setBindingSets(bindingSets); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double rows = estimator.cardinality(new Join(bindings, pattern("s", pA, "x"))); + assertTrue(rows >= 0.0d, "Expected cardinality(Join) to support BindingSetAssignment"); + assertTrue(rows < 5.0d, "Expected cardinality to reflect low overlap between assignment and pattern"); + } + + @Test + void cardinalityJoinSupportsBindingSetAssignmentAndFilter() { + StubSailStore store = new StubSailStore(); + IRI name = VF.createIRI("urn:name"); + IRI follows = VF.createIRI("urn:follows"); + + for (int i = 0; i < 100; i++) { + Resource s = VF.createIRI("urn:s" + i); + store.add(VF.createStatement(s, follows, VF.createIRI("urn:x" + i))); + store.add(VF.createStatement(s, name, VF.createLiteral(i == 0 ? "alice" : "bob"))); + } + + BindingSetAssignment bindings = new BindingSetAssignment(); + List bindingSets = new java.util.ArrayList<>(); + for (int i = 0; i < 100; i++) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("s", VF.createIRI("urn:s" + i)); + bindingSets.add(row); + } + bindings.setBindingSets(bindingSets); + + StatementPattern namePattern = pattern("s", name, "name"); + Filter filteredName = new Filter(namePattern, + new Compare(Var.of("name"), new ValueConstant(VF.createLiteral("alice")), Compare.CompareOp.EQ)); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double unfilteredRows = estimator.cardinality(new Join(bindings, namePattern)); + double filteredRows = estimator.cardinality(new Join(bindings, filteredName)); + + assertTrue(unfilteredRows >= 0.0d, "Expected unfiltered join cardinality to be supported"); + assertTrue(filteredRows >= 0.0d, "Expected filtered join cardinality to be supported"); + assertTrue(filteredRows < unfilteredRows, "Expected filter to reduce estimated join cardinality"); + } + + @Test + void cardinalityJoinSimulatesBindingSetAssignmentAcrossTwoSharedVars() { + StubSailStore store = new StubSailStore(); + IRI name = VF.createIRI("urn:name"); + Resource s1 = VF.createIRI("urn:s1"); + Resource s2 = VF.createIRI("urn:s2"); + store.add(VF.createStatement(s1, name, VF.createLiteral("alice"))); + store.add(VF.createStatement(s2, name, VF.createLiteral("bob"))); + + BindingSetAssignment bindings = new BindingSetAssignment(); + bindings.setBindingSets(List.of( + row("s", s1, "target", VF.createLiteral("alice")), + row("s", s1, "target", VF.createLiteral("bob")), + row("s", s2, "target", VF.createLiteral("alice")), + row("s", s2, "target", VF.createLiteral("bob")))); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double rows = estimator.cardinality(new Join(bindings, pattern("s", name, "target"))); + + assertEquals(2.0d, rows, 0.0d, + "Expected BSA joins with multiple shared vars to sum row-wise matches"); + } + + @Test + void cardinalityJoinSupportsNestedJoinContainingBindingSetAssignment() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + + for (int i = 0; i < 50; i++) { + Resource s = VF.createIRI("urn:s" + i); + Resource x = VF.createIRI("urn:x" + i); + store.add(VF.createStatement(s, pA, x)); + if (i % 10 == 0) { + store.add(VF.createStatement(x, pB, VF.createLiteral("match"))); + } + } + + BindingSetAssignment bindings = new BindingSetAssignment(); + List bindingSets = new java.util.ArrayList<>(); + for (int i = 0; i < 50; i++) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("s", VF.createIRI("urn:s" + i)); + bindingSets.add(row); + } + bindings.setBindingSets(bindingSets); + + StatementPattern a = pattern("s", pA, "x"); + StatementPattern b = pattern("x", pB, "label"); + Join nested = new Join(bindings, a); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double rows = estimator.cardinality(new Join(nested, b)); + assertTrue(rows >= 0.0d, "Expected cardinality(Join) to support nested joins with BindingSetAssignment"); + } + + @Test + void cardinalityListSupportsBridgeVariableChain() { + StubSailStore store = new StubSailStore(); + IRI knows = VF.createIRI("urn:knows"); + Resource pete = VF.createIRI("urn:Pete"); + Resource rebecca = VF.createIRI("urn:Rebecca"); + + Resource b1 = VF.createIRI("urn:b1"); + Resource b2 = VF.createIRI("urn:b2"); + Resource c1 = VF.createIRI("urn:c1"); + Resource c2 = VF.createIRI("urn:c2"); + store.add(VF.createStatement(pete, knows, b1)); + store.add(VF.createStatement(pete, knows, b2)); + store.add(VF.createStatement(b1, knows, c1)); + store.add(VF.createStatement(b2, knows, c2)); + store.add(VF.createStatement(c1, knows, rebecca)); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = new StatementPattern(Var.of("pete", pete), Var.of("predA", knows), Var.of("b")); + StatementPattern b = pattern("b", knows, "c"); + StatementPattern c = new StatementPattern(Var.of("c"), Var.of("predC", knows), Var.of("rebecca", rebecca)); + + double rows = estimator.cardinality(List.of(a, b, c)); + assertTrue(rows >= 0.0d, "Expected cardinality(List) to support bridge-variable chains"); + assertTrue(rows < 8.0d, "Expected bridge chain estimate to stay selective"); + } + + @Test + void cardinalityListFilterReducesRowsForCommonJoinVar() { + StubSailStore store = new StubSailStore(); + IRI hasObservation = VF.createIRI("urn:hasObservation"); + IRI hasValue = VF.createIRI("urn:hasValue"); + + for (int i = 0; i < 200; i++) { + Resource encounter = VF.createIRI("urn:encounter:" + i); + Resource observation = VF.createIRI("urn:observation:" + i); + store.add(VF.createStatement(encounter, hasObservation, observation)); + store.add(VF.createStatement(observation, hasValue, VF.createLiteral(i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern encounterPattern = pattern("enc", hasObservation, "obs"); + StatementPattern valuePattern = pattern("obs", hasValue, "value"); + Filter filteredValuePattern = new Filter(valuePattern, + new Compare(Var.of("value"), new ValueConstant(VF.createLiteral(50)), Compare.CompareOp.EQ)); + + double unfilteredRows = estimator.cardinality(List.of(encounterPattern, valuePattern)); + double filteredRows = estimator.cardinality(List.of(encounterPattern, filteredValuePattern)); + + assertTrue(unfilteredRows >= 0.0d, "Expected unfiltered cardinality(List) to be supported"); + assertTrue(filteredRows >= 0.0d, "Expected filtered cardinality(List) to be supported"); + assertTrue(filteredRows < unfilteredRows, "Expected filter-wrapped statement pattern to reduce row estimate"); + } + + @Test + void cardinalityListReturnsNegativeOneForUnsupportedTupleExpr() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "x"); + Union unsupported = new Union(pattern("x", pA, "y"), pattern("x", pA, "z")); + + double rows = estimator.cardinality(List.of(a, unsupported)); + assertEquals(-1.0d, rows, "Expected cardinality(List) to return -1 when any tuple expression is unsupported"); + } + + @Test + void cardinalityListReturnsNegativeOneWhenRobustEstimatorRejectsCycle() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI pC = VF.createIRI("urn:pC"); + + for (int i = 0; i < 32; i++) { + Resource x = VF.createIRI("urn:x" + i); + Resource y = VF.createIRI("urn:y" + i); + Resource z = VF.createIRI("urn:z" + i); + store.add(VF.createStatement(x, pA, y)); + store.add(VF.createStatement(y, pB, z)); + store.add(VF.createStatement(z, pC, x)); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double rows = estimator.cardinality(List.of(pattern("x", pA, "y"), pattern("y", pB, "z"), + pattern("z", pC, "x"))); + + assertEquals(-1.0d, rows, + "Cycle-shaped join lists should now return -1 so higher-level cardinality fallback can take over"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE, + estimator.lastRobustCardinalityPath(), + "Rejected cycle estimates should report the explicit unsupported reason"); + } + + @Test + void cardinalityJoinDelegatesToListEstimatorForFlattenableJoinTree() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI pC = VF.createIRI("urn:pC"); + + for (int i = 0; i < 20; i++) { + Resource s = VF.createIRI("urn:s" + i); + Resource x = VF.createIRI("urn:x" + i); + Resource y = VF.createIRI("urn:y" + i); + store.add(VF.createStatement(s, pA, x)); + store.add(VF.createStatement(x, pB, y)); + store.add(VF.createStatement(y, pC, VF.createLiteral("ok"))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "x"); + StatementPattern b = pattern("x", pB, "y"); + StatementPattern c = pattern("y", pC, "tag"); + Join nested = new Join(new Join(a, b), c); + + double listRows = estimator.cardinality(List.of(a, b, c)); + double joinRows = estimator.cardinality(nested); + assertTrue(listRows >= 0.0d, "Expected cardinality(List) to support flattenable join tree tuple expressions"); + assertEquals(listRows, joinRows, + "Expected cardinality(Join) to delegate to cardinality(List) for flattenable join trees"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastRobustCardinalityPath(), + "Supported flattened joins should use the robust cardinality path"); + } + + @Test + void cardinalityJoinReturnsNegativeOneWhenFlattenedCycleIsUnsupported() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI pC = VF.createIRI("urn:pC"); + + for (int i = 0; i < 32; i++) { + Resource x = VF.createIRI("urn:x" + i); + Resource y = VF.createIRI("urn:y" + i); + Resource z = VF.createIRI("urn:z" + i); + store.add(VF.createStatement(x, pA, y)); + store.add(VF.createStatement(y, pB, z)); + store.add(VF.createStatement(z, pC, x)); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("x", pA, "y"); + StatementPattern b = pattern("y", pB, "z"); + StatementPattern c = pattern("z", pC, "x"); + + assertEquals(-1.0d, estimator.cardinality(new Join(new Join(a, b), c)), + "Flattened cycle joins should return -1 so evaluation statistics can use the generic fallback"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE, + estimator.lastRobustCardinalityPath(), + "Rejected flattened cycles should report the explicit unsupported reason"); + } + + @Test + void planJoinOrderReturnsEmptyWhenDynamicProgrammingRequestExceedsSupportedSize() { + StubSailStore store = new StubSailStore(); + List args = new java.util.ArrayList<>(); + for (int i = 0; i < 21; i++) { + IRI predicate = VF.createIRI("urn:p" + i); + store.add(VF.createStatement(VF.createIRI("urn:s" + i), predicate, VF.createIRI("urn:o" + i))); + args.add(pattern("s", predicate, "o" + i)); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isEmpty(), + "Dynamic-programming requests beyond the supported subset-mask width must fall back through Optional.empty()"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, estimator.lastJoinOrderPlannerPath(), + "Too-wide dynamic-programming requests should report an unsupported planner shape"); + } + + @Test + void planJoinOrderFallsBackWhenRobustPlannerRejectsCycle() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI pC = VF.createIRI("urn:pC"); + + for (int i = 0; i < 32; i++) { + Resource x = VF.createIRI("urn:x" + i); + Resource y = VF.createIRI("urn:y" + i); + Resource z = VF.createIRI("urn:z" + i); + store.add(VF.createStatement(x, pA, y)); + store.add(VF.createStatement(y, pB, z)); + store.add(VF.createStatement(z, pC, x)); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("x", pA, "y"); + StatementPattern b = pattern("y", pB, "z"); + StatementPattern c = pattern("z", pC, "x"); + List args = List.of(a, b, c); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(plan.isEmpty(), "Cycle-shaped joins should now fall back through Optional.empty()"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE, + estimator.lastJoinOrderPlannerPath(), + "Rejected cycle plans should report the explicit unsupported reason"); + } + + @Test + void planJoinOrderFallsBackWhenRobustPlannerRejectsWrappedJoinSegment() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI pC = VF.createIRI("urn:pC"); + + for (int i = 0; i < 48; i++) { + Resource s = VF.createIRI("urn:s" + i); + Resource x = VF.createIRI("urn:x" + i); + Resource y = VF.createIRI("urn:y" + i); + store.add(VF.createStatement(s, pA, x)); + store.add(VF.createStatement(x, pB, y)); + store.add(VF.createStatement(y, pC, VF.createIRI("urn:z" + i))); + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "x"); + StatementPattern b = pattern("x", pB, "y"); + StatementPattern c = pattern("y", pC, "z"); + Filter wrappedJoin = new Filter(new Join(a, b), + new Compare(Var.of("y"), new ValueConstant(VF.createIRI("urn:y0")), Compare.CompareOp.EQ)); + + Optional plan = estimator.planJoinOrder(List.of(wrappedJoin, c), Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(plan.isEmpty(), "Unsupported wrapped join segments should now fall back through Optional.empty()"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_WRAPPER, + estimator.lastJoinOrderPlannerPath(), + "Wrapped join segments should report the wrapper rejection reason"); + } + + private static final class FixedPatternPassRatioJoinStatsProvider implements JoinStatsProvider { + private final double passRatio; + + private FixedPatternPassRatioJoinStatsProvider(double passRatio) { + this.passRatio = passRatio; + } + + @Override + public void reset() { + } + + @Override + public void recordCall(PatternKey key) { + } + + @Override + public void recordResults(PatternKey key, long resultCount) { + } + + @Override + public void seedIfAbsent(PatternKey key, double defaultCardinality, long priorCalls) { + } + + @Override + public double getAverageResults(PatternKey key) { + return 1.0d; + } + + @Override + public boolean hasStats(PatternKey key) { + return true; + } + + @Override + public double getPatternPassRatio(PatternKey key) { + return passRatio; + } + + @Override + public long getTotalCalls() { + return 0L; + } + } + + private static ListMemberOperator listMemberCondition(String varName, int... values) { + ListMemberOperator operator = new ListMemberOperator(); + operator.addArgument(Var.of(varName)); + for (int value : values) { + operator.addArgument(new ValueConstant(VF.createLiteral(value))); + } + return operator; + } + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + private static StatementPattern pattern(String subjVar, IRI pred, String objVar) { + return new StatementPattern(Var.of(subjVar), Var.of("p", pred), Var.of(objVar)); + } + + private static QueryBindingSet row(String name1, org.eclipse.rdf4j.model.Value value1, String name2, + org.eclipse.rdf4j.model.Value value2) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding(name1, value1); + row.addBinding(name2, value2); + return row; + } + + @SuppressWarnings("unchecked") + private static Map varStats(SketchBasedJoinEstimator.TuplePlanEstimate estimate) { + try { + Field field = SketchBasedJoinEstimator.TuplePlanEstimate.class.getDeclaredField("varStats"); + field.setAccessible(true); + return (Map) field.get(estimate); + } catch (ReflectiveOperationException e) { + throw new AssertionError(e); + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java new file mode 100644 index 00000000000..c70586c6ed7 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java @@ -0,0 +1,1119 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + ******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.lang.management.ManagementFactory; +import java.lang.management.MonitorInfo; +import java.lang.management.ThreadInfo; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.sail.SailException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import sun.misc.Unsafe; + +class SketchBasedJoinEstimatorPersistenceTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + private static Statement st(Resource s, IRI p, Value o, Resource c) { + return VF.createStatement(s, p, o, c); + } + + private static Statement st(Resource s, IRI p, Value o) { + return VF.createStatement(s, p, o); + } + + private static SketchBasedJoinEstimator.Config smallConfig() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + @Test + void persistSnapshotThenLazyLoadOnDemand(@TempDir Path tempDir) { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + StubSailStore sourceStore = new StubSailStore(); + sourceStore.add(st(s, p, o)); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(sourceStore, smallConfig()); + writer.rebuildOnceSlow(); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + writer.configurePersistence(snapshot, false); + assertTrue(writer.persistIfDirty(), "Expected dirty snapshot write"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected lazy load on first readiness check"); + + double card = reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()); + assertEquals(1.0, card, 1.0); + } + + @Test + void unloadAndOfflineWritesRequireRebuild() { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + StubSailStore store = new StubSailStore(); + store.add(st(s, p, o)); + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, smallConfig()); + est.rebuildOnceSlow(); + assertTrue(est.isReady()); + + est.unload(); + assertFalse(est.isReady(), "Estimator should not be ready when unloaded"); + + est.addStatement(st(VF.createIRI("urn:s2"), p, o)); + assertFalse(est.isReady(), "Writes while unloaded should force rebuild before readiness"); + + est.rebuildOnceSlow(); + assertTrue(est.isReady(), "Rebuild should restore readiness"); + } + + @Test + void incrementalAddAfterEmptyRebuildBecomesReadyWithoutRebuild() { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + StubSailStore store = new StubSailStore(); + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, smallConfig()); + est.rebuildOnceSlow(); + assertFalse(est.isReady(), "Expected empty rebuild to remain unready"); + + store.add(st(s, p, o)); + est.addStatement(st(s, p, o)); + + assertTrue(est.isReady(), "Incremental adds on loaded sketches should not require rebuild"); + } + + @Test + void cardinalityJoinFallsBackWhenUnloaded() { + Resource s = VF.createIRI("urn:s"); + IRI p1 = VF.createIRI("urn:p1"); + IRI p2 = VF.createIRI("urn:p2"); + Value o = VF.createIRI("urn:o"); + + StubSailStore store = new StubSailStore(); + store.add(st(s, p1, o)); + store.add(st(s, p2, o)); + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, smallConfig()); + est.rebuildOnceSlow(); + est.unload(); + + StatementPattern left = new StatementPattern(Var.of("s"), Var.of("p1", p1), Var.of("o", o)); + StatementPattern right = new StatementPattern(Var.of("s"), Var.of("p2", p2), Var.of("o", o)); + + assertEquals(-1.0, est.cardinality(new Join(left, right)), 0.0); + } + + @Test + void estimateCountWithThreeConstantsDoesNotExceedTwoConstantEstimate() { + IRI p = VF.createIRI("urn:p-target"); + Value o = VF.createIRI("urn:o-target"); + Resource c = VF.createIRI("urn:c-target"); + Resource cAlt1 = VF.createIRI("urn:c-alt-1"); + Resource cAlt2 = VF.createIRI("urn:c-alt-2"); + + StubSailStore store = new StubSailStore(); + store.add(st(VF.createIRI("urn:s-match-1"), p, o, c)); + store.add(st(VF.createIRI("urn:s-match-2"), p, o, c)); + for (int i = 0; i < 40; i++) { + store.add(st(VF.createIRI("urn:s-p-" + i), p, VF.createIRI("urn:o-p-" + i), cAlt1)); + store.add(st(VF.createIRI("urn:s-o-" + i), VF.createIRI("urn:p-o-" + i), o, cAlt2)); + store.add(st(VF.createIRI("urn:s-c-" + i), VF.createIRI("urn:p-c-" + i), VF.createIRI("urn:o-c-" + i), c)); + } + + SketchBasedJoinEstimator est = new SketchBasedJoinEstimator(store, smallConfig()); + est.rebuildOnceSlow(); + + double twoConstants = est.estimateCount(SketchBasedJoinEstimator.Component.S, null, p.stringValue(), + o.stringValue(), + null); + double threeConstants = est.estimateCount(SketchBasedJoinEstimator.Component.S, null, p.stringValue(), + o.stringValue(), c.stringValue()); + + assertTrue(threeConstants <= twoConstants, + "Adding a third constant must not increase estimated row count"); + } + + @Test + void evictsLeastRecentlyUsedSketchWhenOverBudget(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + Value o = VF.createIRI("urn:o"); + IRI p1 = VF.createIRI("urn:p1"); + IRI p2 = VF.createIRI("urn:p2"); + IRI p3 = VF.createIRI("urn:p3"); + + StubSailStore sourceStore = new StubSailStore(); + sourceStore.add(st(s, p1, o)); + sourceStore.add(st(s, p2, o)); + sourceStore.add(st(s, p3, o)); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(sourceStore, smallConfig()); + writer.rebuildOnceSlow(); + writer.configurePersistence(snapshot, false); + assertTrue(writer.persistIfDirty()); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady()); + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p1.stringValue()); + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p2.stringValue()); + long residentBytes = residentSketchBytes(reader); + setSketchBudgetBytes(reader, residentBytes, residentBytes); + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p1.stringValue()); + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p3.stringValue()); + + Set residentPredicateHashes = residentSinglePredicateHashes(reader); + assertTrue(residentPredicateHashes.contains(hash(reader, p1.stringValue()))); + assertTrue(residentPredicateHashes.contains(hash(reader, p3.stringValue()))); + assertFalse(residentPredicateHashes.contains(hash(reader, p2.stringValue()))); + } + + @Test + void dirtyEvictionDefersManifestWriteUntilPersist(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + Path sidecar = snapshot.resolveSibling("join-estimator.rjes.sketches"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + setSketchBudgetBytes(writer, 0L, 0L); + + writer.addStatement(st(s, p, o)); + flushIncrementalBuffer(writer); + + assertTrue(Files.exists(sidecar), "Expected payload sidecar to be written by dirty eviction"); + assertFalse(Files.exists(snapshot), "Manifest writes should be deferred until explicit persist"); + assertTrue(hasPersistedSinglePredicateSketch(writer, p.stringValue()), + "Expected persisted index to be updated in memory for lazy reload"); + + assertTrue(writer.persistIfDirty(), "Expected persistIfDirty to flush deferred manifest"); + assertTrue(Files.exists(snapshot), "Expected manifest written by explicit persist"); + } + + @Test + void dirtyEvictionPersistsSketchAndReloadsOnDemand(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + setSketchBudgetBytes(writer, 0L, 0L); + + writer.addStatement(st(s, p, o)); + flushIncrementalBuffer(writer); + + assertFalse(residentSinglePredicateHashes(writer).contains(hash(writer, p.stringValue())), + "Expected predicate sketch to be evicted from resident cache"); + assertTrue(writer.persistIfDirty(), "Expected explicit persist to flush manifest/index"); + assertTrue(Files.exists(snapshot), "Expected manifest written after persistence flush"); + assertTrue(Files.exists(snapshot.resolveSibling("join-estimator.rjes.sketches")), + "Expected sidecar blob file written by dirty eviction"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady()); + assertEquals(1.0, reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()), 1.0); + } + + @Test + void closeClosesMappedChannelCache(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(snapshot, false); + estimator.addStatement(st(s, p, o)); + assertTrue(estimator.persistIfDirty()); + + List openedChannels = mappedChannels(estimator); + for (FileChannel channel : openedChannels) { + assertTrue(channel.isOpen(), "Expected cached channel to be open before estimator close"); + } + + estimator.close(); + + assertTrue(mappedChannels(estimator).isEmpty(), "Expected mmap channel cache empty after estimator close"); + for (FileChannel channel : openedChannels) { + assertFalse(channel.isOpen(), "Expected cached channels to be closed on estimator close"); + } + } + + @Test + void repeatedLazyLoadsReuseMappedBufferWindow(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + setSketchBudgetBytes(writer, 0L, 0L); + writer.addStatement(st(s, p, o)); + assertTrue(writer.persistIfDirty()); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + setSketchBudgetBytes(reader, 0L, 0L); + assertTrue(reader.isReady()); + + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()); + assertFalse(residentSinglePredicateHashes(reader).contains(hash(reader, p.stringValue())), + "Expected zero-budget lazy read to evict predicate sketch"); + MappedByteBuffer firstBuffer = mappedBuffer(reader, false); + assertNotNull(firstBuffer, "Expected read-side mapped buffer to be cached"); + + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()); + assertFalse(residentSinglePredicateHashes(reader).contains(hash(reader, p.stringValue())), + "Expected repeated zero-budget lazy read to evict predicate sketch"); + MappedByteBuffer secondBuffer = mappedBuffer(reader, false); + assertSame(firstBuffer, secondBuffer, "Expected repeated reads to reuse mapped buffer window"); + } + + @Test + void persistRolloverCreatesAdditionalBlobShardAndLazyLoads(@TempDir Path tempDir) throws Exception { + String property = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.maxPersistenceBlobBytes"; + String previous = System.getProperty(property); + System.setProperty(property, "512"); + try { + Resource sBase = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value oBase = VF.createIRI("urn:o"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + for (int i = 0; i < 400; i++) { + writer.addStatement(st(VF.createIRI(sBase.stringValue() + i), p, + VF.createIRI(oBase.stringValue() + i))); + } + assertTrue(writer.persistIfDirty(), "Expected persisted snapshot after ingest"); + assertTrue(Files.exists(snapshot.resolveSibling("join-estimator.rjes.sketches.1")), + "Expected rollover sidecar shard when blob size cap is tiny"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected lazy load from persisted shards"); + assertTrue(reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()) > 0.0, + "Expected predicate cardinality to be readable after lazy load"); + } finally { + if (previous == null) { + System.clearProperty(property); + } else { + System.setProperty(property, previous); + } + } + } + + @Test + void incrementalIngestBuffersFirst1024StatementsBeforeApplying(@TempDir Path tempDir) throws Exception { + IRI predicate = VF.createIRI("urn:p"); + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(snapshot, false); + int batchSize = incrementalBatchSize(); + + for (int i = 0; i < batchSize - 1; i++) { + estimator.addStatement(st(VF.createIRI("urn:s" + i), predicate, VF.createIRI("urn:o" + i))); + } + assertTrue(estimator.debugResidentSketches().isEmpty(), + "Expected no resident sketch updates before incremental batch threshold"); + + estimator.addStatement(st(VF.createIRI("urn:s" + (batchSize - 1)), predicate, + VF.createIRI("urn:o" + (batchSize - 1)))); + assertFalse(estimator.debugResidentSketches().isEmpty(), + "Expected incremental batch flush to apply updates when batch threshold is reached"); + } + + @Test + void packedBucketRehashRetainsSketchReachability(@TempDir Path tempDir) throws Exception { + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + + List predicates = new ArrayList<>(); + int statementCount = 320; + for (int i = 0; i < statementCount; i++) { + IRI predicate = VF.createIRI("urn:rehash:p" + i); + predicates.add(predicate); + writer.addStatement(st(VF.createIRI("urn:rehash:s" + i), predicate, VF.createIRI("urn:rehash:o" + i))); + } + + assertTrue(writer.persistIfDirty(), "Expected persisted snapshot after rehash-heavy ingest"); + assertTrue(writer.debugPersistedSketches().size() > statementCount, + "Expected persisted index to keep sketches after repeated cache-directory rehashes"); + + int[] sampleIndexes = new int[] { 0, 37, 119, 231, 319 }; + for (int index : sampleIndexes) { + assertTrue(hasPersistedSinglePredicateSketch(writer, predicates.get(index).stringValue()), + "Expected persisted predicate sketch for sample index " + index); + } + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected lazy reload after packed-bucket rehash churn"); + for (int index : sampleIndexes) { + assertTrue( + reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, + predicates.get(index).stringValue()) > 0.0, + "Expected sampled predicate cardinality to remain reachable after reload at index " + index); + } + } + + @Test + void batchAccumulatorHandlesHighCollisionProbeChains(@TempDir Path tempDir) throws Exception { + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + + IRI predicate = VF.createIRI("urn:collision:p"); + Resource context = VF.createIRI("urn:collision:c"); + for (int i = 0; i < 2048; i++) { + writer.addStatement(st(VF.createIRI("urn:collision:s" + i), predicate, + VF.createIRI("urn:collision:o" + (i % 97)), context)); + } + + assertTrue(writer.persistIfDirty(), "Expected batch-ingest flush to persist grouped updates"); + assertTrue(hasPersistedSinglePredicateSketch(writer, predicate.stringValue()), + "Expected persisted predicate sketch after collision-heavy grouped ingest"); + assertTrue(writer.cardinalitySingle(SketchBasedJoinEstimator.Component.P, predicate.stringValue()) > 0.0, + "Expected non-zero predicate cardinality after grouped ingest"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected reload after grouped-ingest persist"); + assertTrue(reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, predicate.stringValue()) > 0.0, + "Expected persisted grouped-ingest cardinality to reload correctly"); + } + + @Test + void repeatedPersistCompactsStaleBlobShards(@TempDir Path tempDir) throws Exception { + String property = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.maxPersistenceBlobBytes"; + String previous = System.getProperty(property); + System.setProperty(property, "384"); + try { + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(snapshot, false); + + IRI predicate = VF.createIRI("urn:compact:p"); + for (int i = 0; i < 320; i++) { + estimator.addStatement( + st(VF.createIRI("urn:compact:s" + i), predicate, VF.createIRI("urn:compact:o" + i))); + } + assertTrue(estimator.persistIfDirty(), "Expected first persist to write blob shards"); + int shardsAfterFirstPersist = countSidecarShards(snapshot); + assertTrue(shardsAfterFirstPersist > 1, "Expected first persist to span multiple shards under tiny limit"); + + for (int i = 0; i < 320; i++) { + estimator.addStatement( + st(VF.createIRI("urn:compact:s" + i), predicate, VF.createIRI("urn:compact:o" + i))); + } + assertTrue(estimator.persistIfDirty(), "Expected second persist to write updated sketches"); + int shardsAfterSecondPersist = countSidecarShards(snapshot); + + assertTrue(shardsAfterSecondPersist <= shardsAfterFirstPersist + 1, + "Expected compaction to prevent repeated persists from growing stale shard count: first=" + + shardsAfterFirstPersist + ", second=" + shardsAfterSecondPersist); + } finally { + if (previous == null) { + System.clearProperty(property); + } else { + System.setProperty(property, previous); + } + } + } + + @Test + void legacyV2ManifestWithSingleBlobLoadsSuccessfully(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + writer.addStatement(st(s, p, o)); + assertTrue(writer.persistIfDirty(), "Expected persisted snapshot"); + + rewriteManifestAsVersion2(snapshot); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected legacy v2 manifest to load"); + assertEquals(1.0, reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()), 1.0); + } + + @Test + void allSketchFamiliesParticipateInLruBudget(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + Resource c = VF.createIRI("urn:c"); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(tempDir.resolve("join-estimator.rjes"), false); + setSketchBudgetBytes(estimator, 0L, Long.MAX_VALUE / 4L); + + Statement statement = st(s, p, o, c); + estimator.addStatement(statement); + estimator.deleteStatement(statement); + flushIncrementalBuffer(estimator); + + Set recordTypes = residentRecordTypes(estimator); + assertTrue(recordTypes.contains((byte) 1), "single sketches should be tracked"); + assertTrue(recordTypes.contains((byte) 2), "single complement sketches should be tracked"); + assertTrue(recordTypes.contains((byte) 3), "pair triple sketches should be tracked"); + assertTrue(recordTypes.contains((byte) 4), "pair comp1 sketches should be tracked"); + assertTrue(recordTypes.contains((byte) 5), "pair comp2 sketches should be tracked"); + assertTrue(hasDeleteResidentSketch(estimator), "tombstone sketches should be tracked in the same LRU"); + } + + @Test + void evictionUsesHysteresisAndDrainsToMinBudget(@TempDir Path tempDir) throws Exception { + Resource s = VF.createIRI("urn:s"); + Value o = VF.createIRI("urn:o"); + IRI p1 = VF.createIRI("urn:p1"); + IRI p2 = VF.createIRI("urn:p2"); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(tempDir.resolve("join-estimator.rjes"), false); + setSketchBudgetBytes(estimator, 0L, Long.MAX_VALUE); + + estimator.addStatement(st(s, p1, o)); + flushIncrementalBuffer(estimator); + long residentAfterWarmup = residentSketchBytes(estimator); + assertTrue(residentAfterWarmup > 0L, "Expected warmup statement to materialize resident sketches"); + + setSketchBudgetBytes(estimator, 0L, Math.max(1L, residentAfterWarmup / 2L)); + estimator.addStatement(st(s, p2, o)); + flushIncrementalBuffer(estimator); + + assertEquals(0L, residentSketchBytes(estimator), + "Expected eviction to drain resident cache down to min budget"); + } + + private static void flushIncrementalBuffer(SketchBasedJoinEstimator estimator) { + estimator.debugFlushPendingIncremental(); + } + + private static int incrementalBatchSize() throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField("INCREMENTAL_BATCH_SIZE"); + field.setAccessible(true); + return field.getInt(null); + } + + @Test + void backgroundRefreshRebuildsAfterLazySnapshotLoadFailure(@TempDir Path tempDir) throws Exception { + Path snapshot = tempDir.resolve("join-estimator.rjes"); + Files.write(snapshot, new byte[] { 1, 2, 3, 4, 5, 6 }); + + StubSailStore store = new StubSailStore(); + store.add(st(VF.createIRI("urn:s"), VF.createIRI("urn:p"), VF.createIRI("urn:o"))); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, + smallConfig().withRefreshSleepMillis(10)); + estimator.configurePersistence(snapshot, true); + estimator.startBackgroundRefresh(0); + try { + boolean ready = false; + long deadline = System.currentTimeMillis() + 2000; + while (System.currentTimeMillis() < deadline) { + if (estimator.isReady()) { + ready = true; + break; + } + Thread.sleep(20); + } + assertTrue(ready, "Expected background refresh to rebuild after lazy snapshot load failure"); + } finally { + estimator.stop(); + } + } + + @Test + void legacySnapshotVersionIsRejected(@TempDir Path tempDir) throws Exception { + Path snapshot = tempDir.resolve("join-estimator.rjes"); + try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(snapshot))) { + out.write(new byte[] { 'R', 'J', 'E', 'S' }); + out.writeByte(1); + } + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + IllegalStateException exception = assertThrows(IllegalStateException.class, reader::isReady); + assertNotNull(exception.getMessage()); + assertTrue(exception.getMessage().contains("Unsupported join estimator snapshot version")); + } + + @Test + void stopWaitsForBlockedRebuildToExit() throws Exception { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + BlockingRebuildStore store = new BlockingRebuildStore(st(s, p, o)); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, + smallConfig().withRefreshSleepMillis(1)); + estimator.unload(); + estimator.addStatement(st(s, p, o)); + estimator.startBackgroundRefresh(0); + + assertTrue(store.awaitRebuildEntry(2, TimeUnit.SECONDS), "Expected rebuild loop to enter dataset scan"); + + ExecutorService exec = Executors.newSingleThreadExecutor(); + Future stopFuture = exec.submit(() -> { + estimator.stop(); + return null; + }); + + try { + assertThrows(TimeoutException.class, + () -> stopFuture.get(5200, TimeUnit.MILLISECONDS), + "stop() returned while rebuild still blocked"); + } finally { + store.releaseRebuild(); + stopFuture.get(2, TimeUnit.SECONDS); + exec.shutdownNow(); + } + } + + @Test + void persistIfDirtyDoesNotHoldPersistLockWhileBlockedOnStateLock(@TempDir Path tempDir) throws Exception { + Resource subject = VF.createIRI("urn:s"); + IRI predicate = VF.createIRI("urn:p"); + Value object = VF.createIRI("urn:o"); + StubSailStore store = new StubSailStore(); + store.add(st(subject, predicate, object)); + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, smallConfig()); + estimator.rebuildOnceSlow(); + estimator.configurePersistence(snapshot, false); + + Object stateLockA = privateFieldValue(estimator, "bufA"); + Object stateLockB = privateFieldValue(estimator, "bufB"); + Object persistLock = privateFieldValue(estimator, "persistLock"); + + CountDownLatch stateLocked = new CountDownLatch(1); + CountDownLatch releaseStateLock = new CountDownLatch(1); + Thread stateHolder = new Thread(() -> { + synchronized (stateLockA) { + synchronized (stateLockB) { + stateLocked.countDown(); + awaitUninterruptibly(releaseStateLock); + } + } + }, "SketchEstimator-StateLockHolder"); + stateHolder.start(); + assertTrue(stateLocked.await(2, TimeUnit.SECONDS), "Expected state lock to be acquired by helper thread"); + + AtomicReference persistFailure = new AtomicReference<>(); + AtomicBoolean persistCompleted = new AtomicBoolean(false); + Thread persistThread = new Thread(() -> { + try { + estimator.persistIfDirty(); + persistCompleted.set(true); + } catch (Throwable t) { + persistFailure.set(t); + } + }, "SketchEstimator-PersistAttempt"); + persistThread.start(); + ThreadInfo blockedInfo = waitForThreadBlockedOnLocks(persistThread, TimeUnit.SECONDS.toMillis(2), + stateLockA, stateLockB); + int persistLockIdentity = System.identityHashCode(persistLock); + boolean heldPersistLock = false; + for (MonitorInfo monitorInfo : blockedInfo.getLockedMonitors()) { + if (monitorInfo.getIdentityHashCode() == persistLockIdentity) { + heldPersistLock = true; + break; + } + } + + releaseStateLock.countDown(); + stateHolder.join(TimeUnit.SECONDS.toMillis(2)); + persistThread.join(TimeUnit.SECONDS.toMillis(2)); + + assertFalse(heldPersistLock, "persistIfDirty should not hold persistLock while waiting on state lock"); + assertTrue(persistCompleted.get(), "Persist thread should complete after state lock is released"); + assertNull(persistFailure.get(), "Persist thread should not fail"); + } + + private static void rewriteManifestAsVersion2(Path snapshot) throws Exception { + byte[] original = Files.readAllBytes(snapshot); + try (DataInputStream in = new DataInputStream(new ByteArrayInputStream(original)); + ByteArrayOutputStream bos = new ByteArrayOutputStream(original.length); + DataOutputStream out = new DataOutputStream(bos)) { + byte[] magic = new byte[4]; + in.readFully(magic); + out.write(magic); + int version = in.readUnsignedByte(); + assertEquals(3, version, "Expected v3 manifest before downgrade"); + out.writeByte(2); + + int buckets = in.readInt(); + int sketchK = in.readInt(); + String defaultContext = readString(in); + long seenTriples = in.readLong(); + long approxStoreSize = in.readLong(); + long lastPublishMs = in.readLong(); + out.writeInt(buckets); + out.writeInt(sketchK); + writeString(out, defaultContext); + out.writeLong(seenTriples); + out.writeLong(approxStoreSize); + out.writeLong(lastPublishMs); + + int count = in.readInt(); + out.writeInt(count); + for (int i = 0; i < count; i++) { + byte recType = in.readByte(); + boolean isDelete = in.readBoolean(); + byte axisA = in.readByte(); + byte axisB = in.readByte(); + int x = in.readInt(); + int y = in.readInt(); + int blobId = in.readInt(); + long offset = in.readLong(); + int length = in.readInt(); + + assertEquals(0, blobId, "Expected single-blob snapshot before v2 downgrade"); + out.writeByte(recType); + out.writeBoolean(isDelete); + out.writeByte(axisA); + out.writeByte(axisB); + out.writeInt(x); + out.writeInt(y); + out.writeLong(offset); + out.writeInt(length); + } + + out.flush(); + Files.write(snapshot, bos.toByteArray()); + } + } + + private static void writeString(DataOutputStream out, String value) throws Exception { + byte[] bytes = value.getBytes(StandardCharsets.UTF_8); + out.writeInt(bytes.length); + out.write(bytes); + } + + private static String readString(DataInputStream in) throws Exception { + int length = in.readInt(); + byte[] bytes = new byte[length]; + in.readFully(bytes); + return new String(bytes, StandardCharsets.UTF_8); + } + + private static int hash(SketchBasedJoinEstimator estimator, String value) throws Exception { + Method hashMethod = SketchBasedJoinEstimator.class.getDeclaredMethod("hash", String.class); + hashMethod.setAccessible(true); + return (int) hashMethod.invoke(estimator, value); + } + + private static Object privateFieldValue(Object target, String fieldName) throws Exception { + Field field = target.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + return field.get(target); + } + + private static void awaitUninterruptibly(CountDownLatch latch) { + boolean interrupted = false; + while (true) { + try { + latch.await(); + break; + } catch (InterruptedException e) { + interrupted = true; + } + } + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + + private static ThreadInfo waitForThreadBlockedOnLocks(Thread thread, long timeoutMillis, Object... locks) + throws InterruptedException { + int[] lockIdentities = Arrays.stream(locks).mapToInt(System::identityHashCode).toArray(); + var threadMxBean = ManagementFactory.getThreadMXBean(); + long[] threadIds = new long[] { thread.getId() }; + long deadline = System.currentTimeMillis() + timeoutMillis; + while (System.currentTimeMillis() < deadline) { + ThreadInfo info = threadMxBean.getThreadInfo(threadIds, true, true)[0]; + if (info != null && info.getThreadState() == Thread.State.BLOCKED && info.getLockInfo() != null) { + int blockedOn = info.getLockInfo().getIdentityHashCode(); + for (int lockIdentity : lockIdentities) { + if (blockedOn == lockIdentity) { + return info; + } + } + } + Thread.sleep(10); + } + ThreadInfo finalInfo = threadMxBean.getThreadInfo(threadIds, true, true)[0]; + assertNotNull(finalInfo, "Persist thread should still be available for lock diagnostics"); + assertEquals(Thread.State.BLOCKED, finalInfo.getThreadState(), + "Expected persist thread to block on one of the state locks"); + return finalInfo; + } + + private static void setSketchBudgetBytes(SketchBasedJoinEstimator estimator, long minBytes, long maxBytes) + throws Exception { + Field minField = SketchBasedJoinEstimator.class.getDeclaredField("minSketchMemoryBytes"); + Field maxField = SketchBasedJoinEstimator.class.getDeclaredField("maxSketchMemoryBytes"); + minField.setAccessible(true); + maxField.setAccessible(true); + minField.setLong(estimator, minBytes); + maxField.setLong(estimator, maxBytes); + } + + private static long residentSketchBytes(SketchBasedJoinEstimator estimator) throws Exception { + Field residentBytesField = SketchBasedJoinEstimator.class.getDeclaredField("residentSketchBytes"); + residentBytesField.setAccessible(true); + return residentBytesField.getLong(estimator); + } + + private static void forceAvailableHeapHeadroom(SketchBasedJoinEstimator estimator, long headroomBytes) + throws Exception { + putLongField(estimator, "debugAvailableHeapHeadroomOverrideBytes", headroomBytes); + } + + private static void invokeEnsureEstimatorCapacity(SketchBasedJoinEstimator estimator, long predictedBytes, + boolean allowUnload) throws Exception { + invokePrivate(estimator, "ensureEstimatorCapacity", new Class[] { long.class, boolean.class }, + predictedBytes, allowUnload); + } + + private static Object invokePrivate(Object target, String methodName, Class[] parameterTypes, Object... args) + throws Exception { + Method method = target.getClass().getDeclaredMethod(methodName, parameterTypes); + method.setAccessible(true); + return method.invoke(target, args); + } + + private static long robustRebuildRetryAfterNanos(SketchBasedJoinEstimator estimator) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField("robustRebuildRetryAfterNanos"); + field.setAccessible(true); + return field.getLong(estimator); + } + + private static void putLongField(Object target, String fieldName, long value) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField(fieldName); + field.setAccessible(true); + unsafe().putLong(target, unsafe().objectFieldOffset(field), value); + } + + private static void setBooleanField(Object target, String fieldName, boolean value) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField(fieldName); + field.setAccessible(true); + unsafe().putBoolean(target, unsafe().objectFieldOffset(field), value); + } + + private static void setObjectField(Object target, String fieldName, Object value) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField(fieldName); + field.setAccessible(true); + unsafe().putObject(target, unsafe().objectFieldOffset(field), value); + } + + private static Unsafe unsafe() throws Exception { + Field field = Unsafe.class.getDeclaredField("theUnsafe"); + field.setAccessible(true); + return (Unsafe) field.get(null); + } + + private static Set residentSinglePredicateHashes(SketchBasedJoinEstimator estimator) throws Exception { + Set hashes = new HashSet<>(); + for (SketchBasedJoinEstimator.DebugSketchAddress address : estimator.debugResidentSketches()) { + byte recType = address.recType(); + boolean isDelete = address.isDelete(); + byte axisA = address.axisA(); + int x = address.x(); + if (recType == 1 && !isDelete && axisA == (byte) SketchBasedJoinEstimator.Component.P.ordinal()) { + hashes.add(x); + } + } + return hashes; + } + + private static boolean hasPersistedSinglePredicateSketch(SketchBasedJoinEstimator estimator, String predicate) + throws Exception { + int predicateHash = hash(estimator, predicate); + for (SketchBasedJoinEstimator.DebugSketchAddress address : estimator.debugPersistedSketches()) { + byte recType = address.recType(); + boolean isDelete = address.isDelete(); + byte axisA = address.axisA(); + int x = address.x(); + if (recType == 1 && !isDelete && axisA == (byte) SketchBasedJoinEstimator.Component.P.ordinal() + && x == predicateHash) { + return true; + } + } + return false; + } + + private static Set residentRecordTypes(SketchBasedJoinEstimator estimator) throws Exception { + Set recordTypes = new HashSet<>(); + for (SketchBasedJoinEstimator.DebugSketchAddress address : estimator.debugResidentSketches()) { + recordTypes.add(address.recType()); + } + return recordTypes; + } + + private static boolean hasDeleteResidentSketch(SketchBasedJoinEstimator estimator) throws Exception { + for (SketchBasedJoinEstimator.DebugSketchAddress address : estimator.debugResidentSketches()) { + if (address.isDelete()) { + return true; + } + } + return false; + } + + private static List mappedChannels(SketchBasedJoinEstimator estimator) throws Exception { + List channels = new ArrayList<>(); + for (SketchBasedJoinEstimator.DebugMappedChannelView channelView : estimator.debugMappedChannels()) { + channels.add(channelView.channel()); + } + return channels; + } + + private static MappedByteBuffer mappedBuffer(SketchBasedJoinEstimator estimator, boolean writeAccess) + throws Exception { + for (SketchBasedJoinEstimator.DebugMappedChannelView channelView : estimator.debugMappedChannels()) { + if (channelView.writeAccess() == writeAccess && channelView.blobId() == 0) { + return channelView.mappedBuffer(); + } + } + return null; + } + + private static int countSidecarShards(Path snapshot) throws Exception { + String baseName = snapshot.getFileName().toString() + ".sketches"; + Path parent = snapshot.getParent(); + if (parent == null || !Files.isDirectory(parent)) { + return 0; + } + try (var stream = Files.list(parent)) { + return (int) stream + .filter(path -> { + String fileName = path.getFileName().toString(); + return fileName.equals(baseName) || fileName.startsWith(baseName + "."); + }) + .count(); + } + } + + private static boolean robustSynopsisFresh(SketchBasedJoinEstimator estimator) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField("robustSynopsisFresh"); + field.setAccessible(true); + return field.getBoolean(estimator); + } + + private static int lastRobustSynopsisSpillSegmentCount(SketchBasedJoinEstimator estimator) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField("lastRobustSynopsisSpillSegmentCount"); + field.setAccessible(true); + return field.getInt(estimator); + } + + @SuppressWarnings("unchecked") + + private static final class BlockingRebuildStore implements SailStore { + private final Statement statement; + private final CountDownLatch rebuildEntered = new CountDownLatch(1); + private final CountDownLatch releaseRebuild = new CountDownLatch(1); + + private BlockingRebuildStore(Statement statement) { + this.statement = statement; + } + + boolean awaitRebuildEntry(long timeout, TimeUnit unit) throws InterruptedException { + return rebuildEntered.await(timeout, unit); + } + + void releaseRebuild() { + releaseRebuild.countDown(); + } + + @Override + public ValueFactory getValueFactory() { + return VF; + } + + @Override + public EvaluationStatistics getEvaluationStatistics() { + return null; + } + + @Override + public SailSource getExplicitSailSource() { + return new SailSource() { + @Override + public void close() { + } + + @Override + public SailSource fork() { + return null; + } + + @Override + public SailSink sink(org.eclipse.rdf4j.common.transaction.IsolationLevel level) { + return null; + } + + @Override + public SailDataset dataset(org.eclipse.rdf4j.common.transaction.IsolationLevel level) { + return new SailDataset() { + private boolean emitted; + + @Override + public void close() { + } + + @Override + public String getNamespace(String prefix) { + return null; + } + + @Override + public org.eclipse.rdf4j.common.iteration.CloseableIteration getNamespaces() { + return null; + } + + @Override + public org.eclipse.rdf4j.common.iteration.CloseableIteration getContextIDs() { + return null; + } + + @Override + public org.eclipse.rdf4j.common.iteration.CloseableIteration getStatements( + Resource subj, IRI pred, Value obj, Resource... contexts) { + return new org.eclipse.rdf4j.common.iteration.CloseableIteration() { + @Override + public void close() { + } + + @Override + public boolean hasNext() { + if (emitted) { + return false; + } + rebuildEntered.countDown(); + boolean interrupted = false; + while (releaseRebuild.getCount() > 0L) { + try { + if (releaseRebuild.await(50, TimeUnit.MILLISECONDS)) { + break; + } + } catch (InterruptedException e) { + interrupted = true; + } + } + if (interrupted) { + Thread.currentThread().interrupt(); + } + return !emitted; + } + + @Override + public Statement next() { + emitted = true; + return statement; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + }; + } + }; + } + + @Override + public void prepare() { + } + + @Override + public void flush() { + } + }; + } + + @Override + public SailSource getInferredSailSource() { + return null; + } + + @Override + public void close() throws SailException { + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorStatePersistenceRegressionTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorStatePersistenceRegressionTest.java new file mode 100644 index 00000000000..8ab491aa336 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorStatePersistenceRegressionTest.java @@ -0,0 +1,141 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; +import java.nio.file.Path; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class SketchBasedJoinEstimatorStatePersistenceRegressionTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + @Test + void persistedSketchFamiliesLazyLoadFromSnapshot(@TempDir Path tempDir) { + Resource s1 = VF.createIRI("urn:state:s1"); + Resource s2 = VF.createIRI("urn:state:s2"); + IRI p1 = VF.createIRI("urn:state:p1"); + IRI p2 = VF.createIRI("urn:state:p2"); + Value o1 = VF.createIRI("urn:state:o1"); + Value o2 = VF.createIRI("urn:state:o2"); + Resource c1 = VF.createIRI("urn:state:c1"); + + StubSailStore sourceStore = new StubSailStore(); + sourceStore.add(st(s1, p1, o1, c1)); + sourceStore.add(st(s2, p1, o1, c1)); + sourceStore.add(st(s1, p2, o2, c1)); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(sourceStore, smallConfig()); + writer.rebuildOnceSlow(); + writer.configurePersistence(snapshot, false); + assertTrue(writer.persistIfDirty(), "Expected snapshot persist"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected lazy snapshot load"); + + assertEquals(2.0d, reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p1.stringValue()), 0.0d, + "Single-cardinality sketch should survive snapshot reload"); + assertEquals(2.0d, + reader.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, p1.stringValue(), o1.stringValue()), + 0.0d, + "Pair-cardinality sketch should survive snapshot reload"); + assertEquals(2.0d, + reader.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), o1.stringValue(), + c1.stringValue()), + 0.0d, + "Complement sketches should survive snapshot reload"); + assertEquals(1.0d, + reader.estimateJoinOn(SketchBasedJoinEstimator.Component.S, SketchBasedJoinEstimator.Component.P, + p1.stringValue(), SketchBasedJoinEstimator.Component.P, p2.stringValue()), + 0.0d, + "Join-binding sketches should survive snapshot reload"); + } + + @Test + void dirtyEvictedSketchFamiliesLazyLoadFromSnapshot(@TempDir Path tempDir) throws Exception { + Resource s1 = VF.createIRI("urn:evict:s1"); + Resource s2 = VF.createIRI("urn:evict:s2"); + IRI p1 = VF.createIRI("urn:evict:p1"); + IRI p2 = VF.createIRI("urn:evict:p2"); + Value o1 = VF.createIRI("urn:evict:o1"); + Value o2 = VF.createIRI("urn:evict:o2"); + Resource c1 = VF.createIRI("urn:evict:c1"); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + writer.configurePersistence(snapshot, false); + setSketchBudgetBytes(writer, 0L, 0L); + + writer.addStatement(st(s1, p1, o1, c1)); + writer.addStatement(st(s2, p1, o1, c1)); + writer.addStatement(st(s1, p2, o2, c1)); + writer.debugFlushPendingIncremental(); + assertTrue(writer.persistIfDirty(), "Expected dirty-evicted snapshot persist"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected lazy load after dirty-evicted persist"); + + assertEquals(2.0d, reader.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p1.stringValue()), 0.0d, + "Dirty-evicted single-cardinality sketch should survive snapshot reload"); + assertEquals(2.0d, + reader.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, p1.stringValue(), o1.stringValue()), + 0.0d, + "Dirty-evicted pair-cardinality sketch should survive snapshot reload"); + assertEquals(2.0d, + reader.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), o1.stringValue(), + c1.stringValue()), + 0.0d, + "Dirty-evicted complement sketches should survive snapshot reload"); + assertEquals(1.0d, + reader.estimateJoinOn(SketchBasedJoinEstimator.Component.S, SketchBasedJoinEstimator.Component.P, + p1.stringValue(), SketchBasedJoinEstimator.Component.P, p2.stringValue()), + 0.0d, + "Dirty-evicted join-binding sketches should survive snapshot reload"); + } + + private static Statement st(Resource s, IRI p, Value o, Resource c) { + return VF.createStatement(s, p, o, c); + } + + private static SketchBasedJoinEstimator.Config smallConfig() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + private static void setSketchBudgetBytes(SketchBasedJoinEstimator estimator, long minBytes, long maxBytes) + throws Exception { + Field minField = SketchBasedJoinEstimator.class.getDeclaredField("minSketchMemoryBytes"); + Field maxField = SketchBasedJoinEstimator.class.getDeclaredField("maxSketchMemoryBytes"); + minField.setAccessible(true); + maxField.setAccessible(true); + minField.setLong(estimator, minBytes); + maxField.setLong(estimator, maxBytes); + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorZeroIntersectionSamplingRegressionTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorZeroIntersectionSamplingRegressionTest.java new file mode 100644 index 00000000000..982d9179e47 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorZeroIntersectionSamplingRegressionTest.java @@ -0,0 +1,187 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import org.apache.datasketches.theta.Intersection; +import org.apache.datasketches.theta.SetOperation; +import org.apache.datasketches.theta.Sketch; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorZeroIntersectionSamplingRegressionTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final String PROPERTY_PREFIX = "org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator."; + private static final String EXACT_LIMIT_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionExactDistinctLimit"; + private static final String SKEW_RATIO_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionSkewRatio"; + private static final String ROW_BUDGET_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionRowBudget"; + private static final String SAMPLE_SIZE_PROPERTY = PROPERTY_PREFIX + "zeroIntersectionSampleSize"; + + @Test + void plannerFallsBackToPositiveEstimateWhenThetaMissesRareOverlap() throws Exception { + PropertyState properties = PropertyState.capture( + EXACT_LIMIT_PROPERTY, + SKEW_RATIO_PROPERTY, + ROW_BUDGET_PROPERTY, + SAMPLE_SIZE_PROPERTY); + try { + System.setProperty(EXACT_LIMIT_PROPERTY, "8"); + System.setProperty(SKEW_RATIO_PROPERTY, "32"); + System.setProperty(ROW_BUDGET_PROPERTY, "200000"); + System.setProperty(SAMPLE_SIZE_PROPERTY, "32"); + + RareOverlapFixture fixture = buildRareOverlapFixture(); + double plannerJoinEstimate = fixture.estimator.cardinality(fixture.join); + double relativeError = Math.abs(plannerJoinEstimate - fixture.actualJoinRows) / fixture.actualJoinRows; + + assertEquals(0.0d, fixture.thetaIntersectionDistinct, 0.0d, + "Test precondition: raw theta intersection should miss the rare overlap"); + assertTrue(plannerJoinEstimate > 0.0d, + () -> "Planner should recover from zero theta intersection. actual=" + fixture.actualJoinRows + + ", thetaDistinct=" + fixture.thetaIntersectionDistinct); + assertTrue(relativeError <= 0.25d, + () -> "Sampled rare-overlap fallback should stay within 25% relative error. estimate=" + + plannerJoinEstimate + ", actual=" + fixture.actualJoinRows + ", error=" + relativeError); + } finally { + properties.restore(); + } + } + + private static RareOverlapFixture buildRareOverlapFixture() throws Exception { + IRI locatedAt = VF.createIRI("urn:locatedAt"); + IRI hasName = VF.createIRI("urn:hasName"); + int overlapBranches = 64; + int copiesPerBranch = 4; + + for (int noiseSubjects = 4096; noiseSubjects <= 262144; noiseSubjects *= 2) { + StubSailStore store = new StubSailStore(); + populateRareOverlapData(store, locatedAt, hasName, overlapBranches, copiesPerBranch, noiseSubjects); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + double thetaIntersectionDistinct = rawThetaIntersectionDistinct(estimator, locatedAt, hasName); + if (thetaIntersectionDistinct == 0.0d) { + return new RareOverlapFixture(estimator, joinNode(locatedAt, hasName), + (double) overlapBranches * copiesPerBranch, thetaIntersectionDistinct); + } + } + + throw new AssertionError("Unable to construct a zero-intersection rare-overlap fixture"); + } + + private static void populateRareOverlapData(StubSailStore store, IRI locatedAt, IRI hasName, int overlapBranches, + int copiesPerBranch, int noiseSubjects) { + List branches = new ArrayList<>(overlapBranches); + for (int branchIndex = 0; branchIndex < overlapBranches; branchIndex++) { + Resource branch = VF.createIRI("urn:branch:" + branchIndex); + branches.add(branch); + store.add(st(branch, hasName, VF.createLiteral("Branch " + branchIndex))); + for (int copyIndex = 0; copyIndex < copiesPerBranch; copyIndex++) { + Resource copy = VF.createIRI("urn:copy:" + branchIndex + ":" + copyIndex); + store.add(st(copy, locatedAt, branch)); + } + } + + for (int noiseIndex = 0; noiseIndex < noiseSubjects; noiseIndex++) { + Resource noiseSubject = VF.createIRI("urn:noise:" + noiseIndex); + store.add(st(noiseSubject, hasName, VF.createLiteral("Noise " + noiseIndex))); + } + } + + private static double rawThetaIntersectionDistinct(SketchBasedJoinEstimator estimator, IRI locatedAt, IRI hasName) + throws Exception { + Object leftEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.O, null, locatedAt.stringValue(), + null, null); + Object rightEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.S, null, hasName.stringValue(), + null, null); + Sketch leftBindings = bindingsSketch(leftEstimate); + Sketch rightBindings = bindingsSketch(rightEstimate); + + Intersection intersection = SetOperation.builder().buildIntersection(); + intersection.intersect(leftBindings); + intersection.intersect(rightBindings); + return intersection.getResult().getEstimate(); + } + + private static Sketch bindingsSketch(Object joinEstimate) throws Exception { + Field bindingsField = joinEstimate.getClass().getDeclaredField("bindings"); + bindingsField.setAccessible(true); + return (Sketch) bindingsField.get(joinEstimate); + } + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(128) + .withSketchK(512) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + private static Join joinNode(IRI locatedAt, IRI hasName) { + return new Join( + new StatementPattern(Var.of("copy"), Var.of("locatedAt", locatedAt), Var.of("branch")), + new StatementPattern(Var.of("branch"), Var.of("hasName", hasName), Var.of("branchName"))); + } + + private static org.eclipse.rdf4j.model.Statement st(Resource subject, IRI predicate, Value object) { + return VF.createStatement(subject, predicate, object); + } + + private record RareOverlapFixture(SketchBasedJoinEstimator estimator, Join join, double actualJoinRows, + double thetaIntersectionDistinct) { + } + + private static final class PropertyState { + private final String[] keys; + private final String[] values; + + private PropertyState(String[] keys, String[] values) { + this.keys = keys; + this.values = values; + } + + private static PropertyState capture(String... keys) { + String[] values = new String[keys.length]; + for (int i = 0; i < keys.length; i++) { + values[i] = System.getProperty(keys[i]); + } + return new PropertyState(keys, values); + } + + private void restore() { + for (int i = 0; i < keys.length; i++) { + if (values[i] == null) { + System.clearProperty(keys[i]); + } else { + System.setProperty(keys[i], values[i]); + } + } + } + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java new file mode 100644 index 00000000000..ba976d98337 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.read.ListAppender; + +class SketchJoinOrderPlannerLoggingTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + private Logger plannerLogger; + private Logger reordererLogger; + private Level originalPlannerLevel; + private Level originalReordererLevel; + private ListAppender listAppender; + + @BeforeEach + void attachAppender() { + plannerLogger = (Logger) LoggerFactory.getLogger(SketchJoinOrderPlanner.class); + reordererLogger = (Logger) LoggerFactory.getLogger(SketchJoinOrderReorderer.class); + originalPlannerLevel = plannerLogger.getLevel(); + originalReordererLevel = reordererLogger.getLevel(); + listAppender = new ListAppender<>(); + listAppender.start(); + plannerLogger.setLevel(Level.DEBUG); + reordererLogger.setLevel(Level.DEBUG); + plannerLogger.addAppender(listAppender); + reordererLogger.addAppender(listAppender); + } + + @AfterEach + void detachAppender() { + plannerLogger.detachAppender(listAppender); + reordererLogger.detachAppender(listAppender); + plannerLogger.setLevel(originalPlannerLevel); + reordererLogger.setLevel(originalReordererLevel); + } + + @Test + void debugLoggingExplainsGreedyReorderDecision() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI y = VF.createIRI("urn:y"); + + for (int i = 0; i < 512; i++) { + Resource s = VF.createIRI("urn:s" + i); + IRI x = VF.createIRI("urn:x" + i); + store.add(VF.createStatement(s, pA, x)); + } + store.add(VF.createStatement(VF.createIRI("urn:x0"), pB, y)); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "x"); + StatementPattern b = pattern("x", pB, "y"); + List args = List.of(a, b); + + assertTrue(estimator.planJoinOrder(args, Set.of(), JoinOrderPlanner.Algorithm.GREEDY).isPresent()); + + String logOutput = listAppender.list.stream() + .map(ILoggingEvent::getFormattedMessage) + .collect(Collectors.joining("\n")); + + assertThat(logOutput) + .contains("Sketch join reorder input:") + .contains("originalOrder=") + .contains("factor[0]") + .contains("factor[1]") + .contains("greedy seed") + .contains("greedy candidate") + .contains("greedy choose") + .contains("result: order=") + .contains("outputRows=") + .contains("workRows=") + .contains("SP(?x urn:pB ?y)"); + } + + private static StatementPattern pattern(String subjVar, IRI predicate, String objVar) { + return new StatementPattern(Var.of(subjVar), Var.of("p", predicate), Var.of(objVar)); + } + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(64) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } +} diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/StubSailStore.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/StubSailStore.java new file mode 100644 index 00000000000..ddaec16d390 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/StubSailStore.java @@ -0,0 +1,159 @@ +/******************************************************************************* + * Copyright (c) 2025 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + ******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.CopyOnWriteArrayList; + +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.iteration.CloseableIteratorIteration; +import org.eclipse.rdf4j.common.transaction.IsolationLevel; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Namespace; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.sail.SailException; + +/** + * A *very small* in‑memory replacement for SailStore sufficient for unit tests of SketchBasedJoinEstimator. + */ +class StubSailStore implements SailStore { + + private final List data = new CopyOnWriteArrayList<>(); + + public void add(Statement st) { + data.add(st); + } + + public void addAll(Collection sts) { + data.addAll(sts); + } + + /* -- SailStore interface -------------------------------------- */ + + @Override + public ValueFactory getValueFactory() { + return null; + } + + @Override + public EvaluationStatistics getEvaluationStatistics() { + return null; + } + + @Override + public SailSource getExplicitSailSource() { + return new StubSailSource(); + } + + @Override + public SailSource getInferredSailSource() { + return null; + } + + @Override + public void close() throws SailException { + + } + + /* … all other SailStore methods can remain unimplemented … */ + + /* ------------------------------------------------------------- */ + private class StubSailSource implements SailSource { + @Override + public void close() { + } + + @Override + public SailSource fork() { + return null; + } + + @Override + public SailSink sink(IsolationLevel level) throws SailException { + return null; + } + + @Override + public SailDataset dataset(IsolationLevel level) throws SailException { + return new SailDataset() { + + @Override + public void close() { + } + + @Override + public CloseableIteration getNamespaces() throws SailException { + return null; + } + + @Override + public String getNamespace(String prefix) throws SailException { + return ""; + } + + @Override + public CloseableIteration getContextIDs() throws SailException { + return null; + } + + @Override + public CloseableIteration getStatements(Resource subj, IRI pred, Value obj, + Resource... contexts) throws SailException { + List matches = new ArrayList<>(); + for (Statement statement : data) { + if (subj != null && !subj.equals(statement.getSubject())) { + continue; + } + if (pred != null && !pred.equals(statement.getPredicate())) { + continue; + } + if (obj != null && !obj.equals(statement.getObject())) { + continue; + } + if (contexts != null && contexts.length > 0) { + boolean contextMatch = false; + for (Resource context : contexts) { + if (Objects.equals(context, statement.getContext())) { + contextMatch = true; + break; + } + } + if (!contextMatch) { + continue; + } + } + matches.add(statement); + } + return new CloseableIteratorIteration<>(matches.iterator()); + } + }; + } + + @Override + public void prepare() throws SailException { + + } + + @Override + public void flush() throws SailException { + + } + } +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java index 1a0535f8f77..0347576572e 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java @@ -8,16 +8,30 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.sail.lmdb; import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.Component; import org.eclipse.rdf4j.sail.lmdb.model.LmdbValue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,17 +39,103 @@ /** * */ -class LmdbEvaluationStatistics extends EvaluationStatistics { +class LmdbEvaluationStatistics extends EvaluationStatistics implements JoinOrderPlanner { private static final Logger log = LoggerFactory.getLogger(LmdbEvaluationStatistics.class); + private static final int SHARED_CACHE_MAX_ENTRIES = 262_144; + private static final long JOIN_SUPPORT_CACHE_TTL_MS = 100; + private static final Map sharedCardinalityCache = new ConcurrentHashMap<>(); private final ValueStore valueStore; private final TripleStore tripleStore; + private final int tripleStoreIdentity; + private final Map cardinalityCache = new ConcurrentHashMap<>(); + private final SketchBasedJoinEstimator sketchBasedJoinEstimator; + private final SketchBasedJoinEstimator.JoinOrderWorkAdjuster joinOrderWorkAdjuster; + private volatile long joinSupportCacheExpiryMs = Long.MIN_VALUE; + private volatile long joinSupportCacheRevisionId = Long.MIN_VALUE; + private volatile boolean joinSupportCacheValue = false; - public LmdbEvaluationStatistics(ValueStore valueStore, TripleStore tripleStore) { + public LmdbEvaluationStatistics(ValueStore valueStore, TripleStore tripleStore, + SketchBasedJoinEstimator sketchBasedJoinEstimator) { this.valueStore = valueStore; this.tripleStore = tripleStore; + this.tripleStoreIdentity = System.identityHashCode(tripleStore); + this.sketchBasedJoinEstimator = sketchBasedJoinEstimator; + this.joinOrderWorkAdjuster = this::adjustJoinOrderWorkRows; + } + + @Override + public boolean supportsJoinEstimation() { + long now = System.currentTimeMillis(); + long revisionId = valueStore.getRevision().getRevisionId(); + if (now < joinSupportCacheExpiryMs && revisionId == joinSupportCacheRevisionId) { + return joinSupportCacheValue; + } + + boolean ready = sketchBasedJoinEstimator.isReady(); +// boolean ready = ensureRobustJoinEstimationReady(); + joinSupportCacheValue = ready; + joinSupportCacheRevisionId = revisionId; + joinSupportCacheExpiryMs = now + JOIN_SUPPORT_CACHE_TTL_MS; + return ready; + } + + @Override + public Optional planJoinOrder(List args, Set initiallyBoundVars, + Algorithm algorithm) { + if (!supportsJoinEstimation()) { + return Optional.empty(); + } + return sketchBasedJoinEstimator.planJoinOrder(args, initiallyBoundVars, algorithm, joinOrderWorkAdjuster); + } + + private double adjustJoinOrderWorkRows(SketchBasedJoinEstimator.AccessShape accessShape, double defaultWorkRows) { + if (accessShape == null) { + return defaultWorkRows; + } + + TripleStore.IndexPrefixSelection prefixSelection = tripleStore + .selectBestIndexPrefix(accessShape.lookupBoundComponents()); + if (prefixSelection == null) { + return defaultWorkRows; + } + + double accessRows = accessShape.estimateAccessRows(prefixSelection.prefixComponents()); + if (!Double.isFinite(accessRows) || accessRows <= 0.0d) { + return defaultWorkRows; + } + + double adjustedWorkRows = accessRows; + Set filterLookupComponents = accessShape.filterLookupComponents(); + if (!filterLookupComponents.isEmpty() + && accessShape.isDirectLookup(prefixSelection.prefixComponents())) { + double filteredAccessRows = accessRows * accessShape.filterMultiplier(); + if (Double.isFinite(filteredAccessRows) && filteredAccessRows > 0.0d) { + adjustedWorkRows = filteredAccessRows; + } + } + + return adjustedWorkRows; + } + + public boolean isJoinEstimationReady() { + return supportsJoinEstimation(); + } + + public Object joinEstimationDiagnostics() { + SketchBasedJoinEstimator.Staleness staleness = sketchBasedJoinEstimator.staleness(); + Map diagnostics = new LinkedHashMap<>(); + diagnostics.put("estimator", "SketchBasedJoinEstimator"); + diagnostics.put("stalenessScore", staleness.stalenessScore); + diagnostics.put("ageMillis", staleness.ageMillis); + diagnostics.put("sampledAdds", staleness.sampledAdds); + diagnostics.put("sampledRemoved", staleness.sampledRemoved); + diagnostics.put("sampledReadded", staleness.sampledReadded); + diagnostics.put("sampledRemovalRatio", staleness.sampledRemovalRatio); + diagnostics.put("sampledReaddRatio", staleness.sampledReaddRatio); + return diagnostics; } @Override @@ -45,6 +145,45 @@ protected CardinalityCalculator createCardinalityCalculator() { protected class LmdbCardinalityCalculator extends CardinalityCalculator { + @Override + public void meet(Join node) { + if (supportsJoinEstimation()) { + double estimatedCardinality = sketchBasedJoinEstimator.cardinality(node); + if (estimatedCardinality >= 0) { + this.cardinality = estimatedCardinality; + return; + } + } + + super.meet(node); + } + + @Override + public void meet(LeftJoin node) { + if (supportsJoinEstimation()) { + double estimatedCardinality = sketchBasedJoinEstimator.cardinality(node); + if (estimatedCardinality >= 0) { + this.cardinality = estimatedCardinality; + return; + } + } + + super.meet(node); + } + + @Override + public void meet(Filter node) { + if (supportsJoinEstimation()) { + double estimatedCardinality = sketchBasedJoinEstimator.cardinality(node); + if (estimatedCardinality >= 0) { + this.cardinality = estimatedCardinality; + return; + } + } + + super.meet(node); + } + @Override protected double getCardinality(StatementPattern sp) { try { @@ -112,6 +251,116 @@ private double cardinality(Resource subj, IRI pred, Value obj, Resource context) } } - return tripleStore.cardinality(subjID, predID, objID, contextID); + CardinalityKey key = new CardinalityKey(subjID, predID, objID, contextID); + Double cached = cardinalityCache.get(key); + if (cached != null) { + return cached; + } + + long dataRevision = tripleStore.getDataRevision(); + SharedCardinalityKey sharedKey = new SharedCardinalityKey(tripleStoreIdentity, dataRevision, key); + Double sharedCached = sharedCardinalityCache.get(sharedKey); + if (sharedCached != null) { + cardinalityCache.put(key, sharedCached); + return sharedCached; + } + + double cardinality = tripleStore.cardinality(subjID, predID, objID, contextID); + cardinalityCache.put(key, cardinality); + cacheSharedCardinality(sharedKey, cardinality); + return cardinality; + } + + private static void cacheSharedCardinality(SharedCardinalityKey key, double cardinality) { + if (sharedCardinalityCache.size() >= SHARED_CACHE_MAX_ENTRIES) { + sharedCardinalityCache.clear(); + } + sharedCardinalityCache.put(key, cardinality); + } + + private static final class CardinalityKey { + private final long subjID; + private final long predID; + private final long objID; + private final long contextID; + + private CardinalityKey(long subjID, long predID, long objID, long contextID) { + this.subjID = subjID; + this.predID = predID; + this.objID = objID; + this.contextID = contextID; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CardinalityKey)) { + return false; + } + CardinalityKey other = (CardinalityKey) obj; + return subjID == other.subjID + && predID == other.predID + && objID == other.objID + && contextID == other.contextID; + } + + @Override + public int hashCode() { + int result = Long.hashCode(subjID); + result = 31 * result + Long.hashCode(predID); + result = 31 * result + Long.hashCode(objID); + result = 31 * result + Long.hashCode(contextID); + return result; + } + } + + private static final class SharedCardinalityKey { + private final int tripleStoreIdentity; + private final long dataRevision; + private final long subjID; + private final long predID; + private final long objID; + private final long contextID; + private final int hashCode; + + private SharedCardinalityKey(int tripleStoreIdentity, long dataRevision, CardinalityKey cardinalityKey) { + this.tripleStoreIdentity = tripleStoreIdentity; + this.dataRevision = dataRevision; + this.subjID = cardinalityKey.subjID; + this.predID = cardinalityKey.predID; + this.objID = cardinalityKey.objID; + this.contextID = cardinalityKey.contextID; + int hash = Integer.hashCode(tripleStoreIdentity); + hash = 31 * hash + Long.hashCode(dataRevision); + hash = 31 * hash + Long.hashCode(subjID); + hash = 31 * hash + Long.hashCode(predID); + hash = 31 * hash + Long.hashCode(objID); + hash = 31 * hash + Long.hashCode(contextID); + this.hashCode = hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof SharedCardinalityKey)) { + return false; + } + SharedCardinalityKey other = (SharedCardinalityKey) obj; + return tripleStoreIdentity == other.tripleStoreIdentity + && dataRevision == other.dataRevision + && subjID == other.subjID + && predID == other.predID + && objID == other.objID + && contextID == other.contextID; + } + + @Override + public int hashCode() { + return hashCode; + } } } diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java index 4727312854d..6739e5b99c1 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java @@ -13,8 +13,11 @@ import java.io.File; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -23,9 +26,12 @@ import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Consumer; import java.util.function.Function; import org.eclipse.rdf4j.common.iteration.CloseableIteration; @@ -35,6 +41,7 @@ import org.eclipse.rdf4j.common.iteration.UnionIteration; import org.eclipse.rdf4j.common.order.StatementOrder; import org.eclipse.rdf4j.common.transaction.IsolationLevel; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Namespace; import org.eclipse.rdf4j.model.Resource; @@ -49,6 +56,7 @@ import org.eclipse.rdf4j.sail.base.SailSink; import org.eclipse.rdf4j.sail.base.SailSource; import org.eclipse.rdf4j.sail.base.SailStore; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; import org.eclipse.rdf4j.sail.lmdb.TxnManager.Txn; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; import org.eclipse.rdf4j.sail.lmdb.model.LmdbValue; @@ -60,7 +68,8 @@ */ class LmdbSailStore implements SailStore { - final Logger logger = LoggerFactory.getLogger(LmdbSailStore.class); + private static final Logger logger = LoggerFactory.getLogger(LmdbSailStore.class); + private static final String JOIN_ESTIMATOR_FILE_NAME = "join-estimator.rjes"; private final TripleStore tripleStore; @@ -81,12 +90,25 @@ class LmdbSailStore implements SailStore { private PersistentSetFactory setFactory; private PersistentSet unusedIds, nextUnusedIds; + private final SketchBasedJoinEstimator sketchBasedJoinEstimator = new SketchBasedJoinEstimator(this, + SketchBasedJoinEstimator.Config.defaults() + .withThrottleEveryN(1024 * 1024) + .withThrottleMillis(2)); + private final ScheduledExecutorService estimatorPersistExec = Executors.newSingleThreadScheduledExecutor(r -> { + Thread t = new Thread(r, "LmdbJoinEstimator-Persist"); + t.setDaemon(true); + return t; + }); + private final AtomicBoolean persistScheduled = new AtomicBoolean(false); + private volatile ScheduledFuture persistFuture; + private volatile long estimatorPersistDelayMillis = 1000L; + /** * A fast non-blocking circular buffer backed by an array. * * @param Type of elements within this buffer */ - static final class CircularBuffer { + final class CircularBuffer { private final T[] elements; private volatile int head = 0; @@ -142,6 +164,11 @@ interface Operation { class AddQuadOperation implements Operation { long s, p, o, c; boolean explicit; + Resource subj; + IRI pred; + Value obj; + Resource context; + Consumer estimatorCallback; @Override public void execute() throws IOException { @@ -155,7 +182,11 @@ public void execute() throws IOException { unusedIds.remove(o); unusedIds.remove(c); } - tripleStore.storeTriple(s, p, o, c, explicit); + boolean added = tripleStore.storeTriple(s, p, o, c, explicit); + if (added && explicit && estimatorCallback != null) { + Statement st = valueStore.createStatement(subj, pred, obj, context); + estimatorCallback.accept(st); + } } } @@ -259,6 +290,14 @@ public LmdbSailStore(File dataDir, LmdbStoreConfig config) throws IOException, S tripleStore = new TripleStore(new File(dataDir, "triples"), config, valueStore); mayHaveInferred = tripleStore.hasTriples(false); initialized = true; + Path estimatorPath = new File(dataDir, JOIN_ESTIMATOR_FILE_NAME).toPath(); + boolean snapshotExists = Files.exists(estimatorPath); + sketchBasedJoinEstimator.setRebuildAllowedSupplier(() -> !storeTxnStarted.get()); + sketchBasedJoinEstimator.configurePersistence(estimatorPath, snapshotExists); + if (!snapshotExists) { + sketchBasedJoinEstimator.rebuildOnceSlow(); + } + sketchBasedJoinEstimator.startBackgroundRefresh(3); } finally { if (!initialized) { close(); @@ -271,6 +310,10 @@ public ValueFactory getValueFactory() { return valueStore; } + SketchBasedJoinEstimator getSketchBasedJoinEstimator() { + return sketchBasedJoinEstimator; + } + void rollback() throws SailException { sinkStoreAccessLock.lock(); try { @@ -302,36 +345,44 @@ void rollback() throws SailException { public void close() throws SailException { try { try { - if (namespaceStore != null) { - namespaceStore.close(); + if (persistFuture != null) { + persistFuture.cancel(false); } + sketchBasedJoinEstimator.close(); } finally { try { - if (valueStore != null) { - valueStore.close(); + if (namespaceStore != null) { + namespaceStore.close(); } } finally { try { - if (tripleStore != null) { - try { - running.set(false); - tripleStoreExecutor.shutdown(); + if (valueStore != null) { + valueStore.close(); + } + } finally { + try { + if (tripleStore != null) { try { - while (!tripleStoreExecutor.awaitTermination(1, TimeUnit.SECONDS)) { - logger.warn("Waiting for triple store executor to terminate"); + running.set(false); + tripleStoreExecutor.shutdown(); + try { + while (!tripleStoreExecutor.awaitTermination(1, TimeUnit.SECONDS)) { + logger.warn("Waiting for triple store executor to terminate"); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new InterruptedSailException(e); } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new InterruptedSailException(e); + } finally { + estimatorPersistExec.shutdownNow(); + tripleStore.close(); } - } finally { - tripleStore.close(); } - } - } finally { - if (setFactory != null) { - setFactory.close(); - setFactory = null; + } finally { + if (setFactory != null) { + setFactory.close(); + setFactory = null; + } } } } @@ -349,7 +400,7 @@ SailException wrapTripleStoreException() { @Override public EvaluationStatistics getEvaluationStatistics() { - return new LmdbEvaluationStatistics(valueStore, tripleStore); + return new LmdbEvaluationStatistics(valueStore, tripleStore, sketchBasedJoinEstimator); } @Override @@ -488,12 +539,17 @@ public SailSource fork() { @Override public SailSink sink(IsolationLevel level) throws SailException { - return new LmdbSailSink(explicit); + return new LmdbSailSink(explicit, level); } @Override public LmdbSailDataset dataset(IsolationLevel level) throws SailException { - return new LmdbSailDataset(explicit); + boolean isEstimatorRefresh = SketchBasedJoinEstimator.REFRESH_THREAD_NAME + .equals(Thread.currentThread().getName()); + // Refresh reader transactions can remain open across write commits and must not + // participate in the active txn reset/renew cycle. + boolean trackActive = !isEstimatorRefresh; + return new LmdbSailDataset(explicit, trackActive); } } @@ -501,9 +557,106 @@ public LmdbSailDataset dataset(IsolationLevel level) throws SailException { private final class LmdbSailSink implements SailSink { private final boolean explicit; + private final boolean nonIsolated; + private final List pendingEstimatorUpdates = new ArrayList<>(); + private boolean nonIsolatedUpdatesApplied; - public LmdbSailSink(boolean explicit) throws SailException { + public LmdbSailSink(boolean explicit, IsolationLevel level) throws SailException { this.explicit = explicit; + this.nonIsolated = IsolationLevels.NONE.isCompatibleWith(level); + } + + private void queueEstimatorAdd(Statement st) { + if (!explicit) { + return; + } + if (nonIsolated) { + try { + sketchBasedJoinEstimator.addStatement(st); + nonIsolatedUpdatesApplied = true; + } catch (RuntimeException e) { + recoverEstimatorAfterFailure("applying non-isolated add", e); + } + return; + } + synchronized (pendingEstimatorUpdates) { + pendingEstimatorUpdates.add(() -> sketchBasedJoinEstimator.addStatement(st)); + } + } + + private void queueEstimatorRemove(Statement st) { + if (!explicit) { + return; + } + if (nonIsolated) { + try { + sketchBasedJoinEstimator.deleteStatement(st); + nonIsolatedUpdatesApplied = true; + } catch (RuntimeException e) { + recoverEstimatorAfterFailure("applying non-isolated delete", e); + } + return; + } + synchronized (pendingEstimatorUpdates) { + pendingEstimatorUpdates.add(() -> sketchBasedJoinEstimator.deleteStatement(st)); + } + } + + private void applyEstimatorUpdates() { + if (!explicit || nonIsolated) { + return; + } + List updates; + synchronized (pendingEstimatorUpdates) { + if (pendingEstimatorUpdates.isEmpty()) { + return; + } + updates = new ArrayList<>(pendingEstimatorUpdates); + pendingEstimatorUpdates.clear(); + } + try { + updates.forEach(Runnable::run); + } catch (RuntimeException e) { + recoverEstimatorAfterFailure("applying committed estimator updates", e); + } + } + + private void clearEstimatorUpdates() { + if (nonIsolated) { + // In NONE isolation updates are applied eagerly; rollback cannot replay inverse deltas safely. + // Discard the derived state and rebuild it from authoritative store data. + if (nonIsolatedUpdatesApplied) { + sketchBasedJoinEstimator.discardAndMarkForRebuild(); + nonIsolatedUpdatesApplied = false; + } + return; + } + synchronized (pendingEstimatorUpdates) { + pendingEstimatorUpdates.clear(); + } + } + + private void recoverEstimatorAfterFailure(String action, RuntimeException e) { + synchronized (pendingEstimatorUpdates) { + pendingEstimatorUpdates.clear(); + } + sketchBasedJoinEstimator.discardAndMarkForRebuild(); + nonIsolatedUpdatesApplied = false; + logger.warn("Discarded join estimator state after failure while {}; store data remains authoritative", + action, + e); + } + + private void scheduleEstimatorPersist() { + if (persistScheduled.compareAndSet(false, true)) { + persistFuture = estimatorPersistExec.schedule(() -> { + try { + sketchBasedJoinEstimator.persistIfDirty(); + } finally { + persistScheduled.set(false); + } + }, estimatorPersistDelayMillis, TimeUnit.MILLISECONDS); + } } @Override @@ -572,17 +725,26 @@ public void flush() throws SailException { } handleRemovedIdsInValueStore(); valueStore.commit(); - // do not set flag to false until _after_ commit is successfully completed. + // The triple/value stores are authoritative once both commits succeed. storeTxnStarted.set(false); + applyEstimatorUpdates(); + nonIsolatedUpdatesApplied = false; + try { + scheduleEstimatorPersist(); + } catch (RuntimeException e) { + logger.warn("Failed to schedule join estimator persistence after commit", e); + } } } } catch (IOException e) { rollback(); + clearEstimatorUpdates(); running.set(false); logger.error("Encountered an unexpected problem while trying to commit", e); throw new SailException(e); } catch (RuntimeException e) { rollback(); + clearEstimatorUpdates(); running.set(false); logger.error("Encountered an unexpected problem while trying to commit", e); throw e; @@ -791,7 +953,12 @@ public void approveAll(Set approved, Set approvedContexts) } q.c = contextId; } + q.context = context; q.explicit = explicit; + q.subj = subj; + q.pred = pred; + q.obj = obj; + q.estimatorCallback = this::queueEstimatorAdd; if (multiThreadingActive) { while (!opQueue.add(q)) { @@ -808,6 +975,7 @@ public void approveAll(Set approved, Set approvedContexts) } } catch (IOException | RuntimeException e) { rollback(); + clearEstimatorUpdates(); if (multiThreadingActive) { logger.error("Encountered an unexpected problem while trying to add a statement.", e); } else { @@ -923,6 +1091,8 @@ private void startTransaction(boolean preferThreading) throws SailException { } } + private int counter = 0; + private void addStatement(Resource subj, IRI pred, Value obj, boolean explicit, Resource context) throws SailException { sinkStoreAccessLock.lock(); @@ -934,14 +1104,21 @@ private void addStatement(Resource subj, IRI pred, Value obj, boolean explicit, q.p = valueStore.storeValue(pred); q.o = valueStore.storeValue(obj); q.c = context == null ? 0 : valueStore.storeValue(context); + q.context = context; q.explicit = explicit; + q.subj = subj; + q.pred = pred; + q.obj = obj; + q.estimatorCallback = this::queueEstimatorAdd; submitOperation(q); } catch (IOException e) { rollback(); + clearEstimatorUpdates(); throw new SailException(e); } catch (RuntimeException e) { rollback(); + clearEstimatorUpdates(); logger.error("Encountered an unexpected problem while trying to add a statement", e); throw e; } finally { @@ -973,15 +1150,26 @@ private void submitOperation(Operation operation) throws IOException { private long removeStatements(long subj, long pred, long obj, boolean explicit, long[] contexts) throws IOException { long[] removeCount = { 0 }; - for (long contextId : contexts) { - tripleStore.removeTriplesByContext(subj, pred, obj, contextId, explicit, quad -> { - removeCount[0]++; - for (long id : quad) { - if (id != 0L) { - unusedIds.add(id); + try { + for (long contextId : contexts) { + tripleStore.removeTriplesByContext(subj, pred, obj, contextId, explicit, quad -> { + removeCount[0]++; + if (explicit) { + try { + queueEstimatorRemove(quadToStatement(quad)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } } - } - }); + for (long id : quad) { + if (id != 0L) { + unusedIds.add(id); + } + } + }); + } + } catch (UncheckedIOException e) { + throw e.getCause(); } return removeCount[0]; } @@ -1073,9 +1261,11 @@ public void execute() throws Exception { } } catch (IOException e) { rollback(); + clearEstimatorUpdates(); throw new SailException(e); } catch (RuntimeException e) { rollback(); + clearEstimatorUpdates(); logger.error("Encountered an unexpected problem while trying to remove statements", e); throw e; } finally { @@ -1083,6 +1273,16 @@ public void execute() throws Exception { } } + private Statement quadToStatement(long[] quad) throws IOException { + Resource subj = (Resource) valueStore.getValue(quad[0]); + IRI pred = (IRI) valueStore.getValue(quad[1]); + Value obj = valueStore.getValue(quad[2]); + long ctxId = quad[3]; + Resource ctx = (ctxId == 0L || ctxId == LmdbValue.UNKNOWN_ID) ? null + : (Resource) valueStore.getValue(ctxId); + return valueStore.createStatement(subj, pred, obj, ctx); + } + @Override public boolean deprecateByQuery(Resource subj, IRI pred, Value obj, Resource[] contexts) { return removeStatements(subj, pred, obj, explicit, contexts) > 0; @@ -1100,9 +1300,15 @@ private final class LmdbSailDataset implements SailDataset { private final Txn txn; public LmdbSailDataset(boolean explicit) throws SailException { + this(explicit, true); + } + + public LmdbSailDataset(boolean explicit, boolean trackActiveTxn) throws SailException { this.explicit = explicit; try { - this.txn = tripleStore.getTxnManager().createReadTxn(); + TxnManager txnManager = tripleStore.getTxnManager(); + this.txn = trackActiveTxn ? txnManager.createReadTxn() + : txnManager.createReadTxnUntracked(); } catch (IOException e) { throw new SailException(e); } diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java index 03850b01ec0..5e4cb670a1d 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java @@ -56,6 +56,7 @@ import static org.lwjgl.util.lmdb.LMDB.mdb_txn_abort; import static org.lwjgl.util.lmdb.LMDB.mdb_txn_begin; import static org.lwjgl.util.lmdb.LMDB.mdb_txn_commit; +import static org.lwjgl.util.lmdb.LMDB.mdb_txn_id; import java.io.Closeable; import java.io.File; @@ -70,6 +71,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -80,6 +82,8 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; import java.util.function.Consumer; @@ -88,11 +92,13 @@ import org.eclipse.rdf4j.common.annotation.Experimental; import org.eclipse.rdf4j.common.concurrent.locks.StampedLongAdderLockManager; import org.eclipse.rdf4j.sail.SailException; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.Component; import org.eclipse.rdf4j.sail.lmdb.TxnManager.Mode; import org.eclipse.rdf4j.sail.lmdb.TxnManager.Txn; import org.eclipse.rdf4j.sail.lmdb.TxnRecordCache.Record; import org.eclipse.rdf4j.sail.lmdb.TxnRecordCache.RecordCacheIterator; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.eclipse.rdf4j.sail.lmdb.estimate.LmdbPageCardinalityEstimator; import org.eclipse.rdf4j.sail.lmdb.util.GroupMatcher; import org.eclipse.rdf4j.sail.lmdb.util.IndexKeyWriters; import org.lwjgl.PointerBuffer; @@ -156,6 +162,7 @@ class TripleStore implements Closeable { * The directory that is used to store the index files. */ private final File dir; + private final File dataMdbFile; /** * Object containing meta-data for the triple store. */ @@ -182,11 +189,14 @@ class TripleStore implements Closeable { private long[] leadingFieldScratchValues = new long[0]; private final int[] leadingFieldRadixCounts = new int[256]; private final int[] leadingFieldRadixOffsets = new int[256]; + private final LmdbPageCardinalityEstimator pageEstimator; + private final AtomicLong dataRevision = new AtomicLong(); private TxnRecordCache recordCache = null; TripleStore(File dir, LmdbStoreConfig config, ValueStore valueStore) throws IOException, SailException { this.dir = dir; + this.dataMdbFile = new File(dir, "data.mdb"); boolean forceSync = config.getForceSync(); boolean noReadahead = config.getNoReadahead(); this.autoGrow = config.getAutoGrow(); @@ -225,6 +235,7 @@ class TripleStore implements Closeable { }); txnManager = new TxnManager(env, Mode.RESET); + pageEstimator = pageCardinalityEstimator ? new LmdbPageCardinalityEstimator(dataMdbFile) : null; File propFile = new File(this.dir, PROPERTIES_FILE); String indexSpecStr = config.getTripleIndexes(); @@ -310,6 +321,10 @@ TxnManager getTxnManager() { return txnManager; } + long getDataRevision() { + return dataRevision.get(); + } + /** * Parses a comma/whitespace-separated list of index specifications. Index specifications are required to consists * of 4 characters: 's', 'p', 'o' and 'c'. @@ -621,6 +636,14 @@ public void close() throws IOException { endTransaction(false); List caughtExceptions = new ArrayList<>(); + if (pageEstimator != null) { + try { + pageEstimator.close(); + } catch (Throwable e) { + logger.warn("Failed to close page estimator", e); + caughtExceptions.add(e); + } + } for (TripleIndex index : indexes) { try { index.close(); @@ -837,6 +860,61 @@ protected double cardinality(long subj, long pred, long obj, long context) throw TripleIndex index = getBestIndex(subj, pred, obj, context); + try { + return cardinalityUsingPageEstimator(index, subj, pred, obj, context); + } catch (IOException | RuntimeException e) { + logger.warn("Page-walk cardinality estimator failed for index {}, falling back to sampling", + new String(index.getFieldSeq()), e); + return cardinalityUsingSamplingEstimator(index, subj, pred, obj, context); + } + } + + private double cardinalityUsingPageEstimator(TripleIndex index, long subj, long pred, long obj, long context) + throws IOException { + LmdbPageCardinalityEstimator estimator = pageEstimator; + if (estimator == null) { + return cardinalityUsingSamplingEstimator(index, subj, pred, obj, context); + } + int relevantParts = index.getPatternScore(subj, pred, obj, context); + final String explicitDbName = new String(index.getFieldSeq()); + final String inferredDbName = explicitDbName + "-inf"; + + return txnManager.doWith((stack, txn) -> { + long txnId = mdb_txn_id(txn); + if (relevantParts == 0) { + long explicitEntries = estimator.totalEntries(txnId, explicitDbName); + long inferredEntries = estimator.totalEntries(txnId, inferredDbName); + return (double) (explicitEntries + inferredEntries); + } + + ByteBuffer minKeyBuffer = ByteBuffer.allocate(MAX_KEY_LENGTH); + index.getMinKey(minKeyBuffer, subj, pred, obj, context); + minKeyBuffer.flip(); + byte[] minKey = toArray(minKeyBuffer); + + ByteBuffer maxKeyBuffer = ByteBuffer.allocate(MAX_KEY_LENGTH); + index.getMaxKey(maxKeyBuffer, subj, pred, obj, context); + maxKeyBuffer.flip(); + byte[] maxKey = toArray(maxKeyBuffer); + + GroupMatcher matcher = index.createMatcher(subj, pred, obj, context); + long explicitCount = estimator.estimateEntries(txnId, explicitDbName, minKey, minKey.length, maxKey, + maxKey.length, matcher); + long inferredCount = estimator.estimateEntries(txnId, inferredDbName, minKey, minKey.length, maxKey, + maxKey.length, matcher); + return (double) (explicitCount + inferredCount); + }); + } + + private static byte[] toArray(ByteBuffer buffer) { + byte[] data = new byte[buffer.remaining()]; + buffer.get(data); + return data; + } + + private double cardinalityUsingSamplingEstimator(TripleIndex index, long subj, long pred, long obj, long context) + throws IOException { + int relevantParts = index.getPatternScore(subj, pred, obj, context); if (relevantParts == 0) { // it's worthless to use the index, just retrieve all entries in the db @@ -1031,6 +1109,69 @@ protected TripleIndex getBestIndex(long subj, long pred, long obj, long context) return bestIndex; } + IndexPrefixSelection selectBestIndexPrefix(Set boundComponents) { + long subj = boundMask(boundComponents, Component.S); + long pred = boundMask(boundComponents, Component.P); + long obj = boundMask(boundComponents, Component.O); + long context = boundMask(boundComponents, Component.C); + TripleIndex bestIndex = getBestIndex(subj, pred, obj, context); + if (bestIndex == null) { + return new IndexPrefixSelection("", 0, Set.of()); + } + + int prefixScore = bestIndex.getPatternScore(subj, pred, obj, context); + EnumSet prefixComponents = EnumSet.noneOf(Component.class); + char[] fieldSequence = bestIndex.getFieldSeq(); + for (int i = 0; i < prefixScore; i++) { + prefixComponents.add(toEstimatorComponent(fieldSequence[i])); + } + + return new IndexPrefixSelection(new String(fieldSequence), prefixScore, prefixComponents); + } + + private long boundMask(Set boundComponents, Component component) { + return boundComponents != null && boundComponents.contains(component) ? 1L : -1L; + } + + private Component toEstimatorComponent(char field) { + switch (field) { + case 's': + return Component.S; + case 'p': + return Component.P; + case 'o': + return Component.O; + case 'c': + return Component.C; + default: + throw new IllegalArgumentException("invalid index field: " + field); + } + } + + static final class IndexPrefixSelection { + private final String indexFieldSequence; + private final int prefixScore; + private final Set prefixComponents; + + private IndexPrefixSelection(String indexFieldSequence, int prefixScore, Set prefixComponents) { + this.indexFieldSequence = indexFieldSequence; + this.prefixScore = prefixScore; + this.prefixComponents = Set.copyOf(prefixComponents); + } + + String indexFieldSequence() { + return indexFieldSequence; + } + + int prefixScore() { + return prefixScore; + } + + Set prefixComponents() { + return prefixComponents; + } + } + private boolean requiresResize() { if (autoGrow) { return LmdbUtil.requiresResize(mapSize, pageSize, writeTxn, 0); @@ -1662,6 +1803,7 @@ void endTransaction(boolean commit) throws IOException { // otherwise iterators won't see the updated data txnManager.reset(); } + dataRevision.incrementAndGet(); } catch (IOException e) { // abort transaction if exception occurred while committing mdb_txn_abort(writeTxn); diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TxnManager.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TxnManager.java index 7b5ec043da3..5eb6ab04b06 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TxnManager.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TxnManager.java @@ -8,6 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.sail.lmdb; import static org.eclipse.rdf4j.sail.lmdb.LmdbUtil.E; @@ -86,6 +87,22 @@ Txn createReadTxn() throws IOException { return txnRef; } + /** + * Creates a new read-only transaction that is treated as untracked for reset semantics. + * + *

+ * Untracked read transactions skip {@link #reset()} so long-lived refresh readers are not invalidated on every + * write commit, but they still participate in deactivate/activate to remain safe during map resize. + *

+ */ + Txn createReadTxnUntracked() throws IOException { + Txn txnRef = new Txn(createReadTxnInternal()); + synchronized (active) { + active.put(txnRef, Boolean.FALSE); + } + return txnRef; + } + long createReadTxnInternal() throws IOException { long txn = 0; if (mode == Mode.RESET) { @@ -148,8 +165,10 @@ void deactivate() throws IOException { void reset() throws IOException { synchronized (active) { - for (Txn txn : active.keySet()) { - txn.reset(); + for (var entry : active.entrySet()) { + if (Boolean.TRUE.equals(entry.getValue())) { + entry.getKey().reset(); + } } } } diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbBtreeRangeCounter.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbBtreeRangeCounter.java new file mode 100644 index 00000000000..d74c5109217 --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbBtreeRangeCounter.java @@ -0,0 +1,295 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.rdf4j.sail.lmdb.util.GroupMatcher; + +final class LmdbBtreeRangeCounter { + + private final LmdbDataFile dataFile; + private final LmdbMeta meta; + + LmdbBtreeRangeCounter(LmdbDataFile dataFile, LmdbMeta meta) { + this.dataFile = dataFile; + this.meta = meta; + } + + RangeCountResult countRange(LmdbDb db, byte[] minKey, int minKeyLength, byte[] maxKey, int maxKeyLength, + GroupMatcher matcher) throws IOException { + RangeCountResult result = new RangeCountResult(); + if (db.isEmpty()) { + return result; + } + + SeekCursor cursor = seek(db, minKey, minKeyLength, result); + if (cursor == null) { + return result; + } + + while (true) { + while (cursor.leafIndex < cursor.leafPage.numKeys) { + LmdbNode node = cursor.leafPage.node(cursor.leafIndex); + int cmpMax = LmdbKeyComparator.compare(cursor.leafPage.buffer, node.keyOffset, node.keySize, maxKey, + maxKeyLength); + if (cmpMax > 0) { + return result; + } + if (matcher == null || matches(node, cursor.leafPage.buffer, matcher)) { + result.entries += countNodeEntries(node, cursor.leafPage, result); + } + cursor.leafIndex++; + } + + if (!advanceToNextLeaf(cursor, result)) { + return result; + } + } + } + + byte[] findValueByExactKey(LmdbDb db, byte[] key, int keyLength, RangeCountResult ioStats) throws IOException { + if (db.isEmpty()) { + return null; + } + SeekCursor cursor = seek(db, key, keyLength, ioStats); + if (cursor == null || cursor.leafIndex >= cursor.leafPage.numKeys) { + return null; + } + + LmdbNode node = cursor.leafPage.node(cursor.leafIndex); + int cmp = LmdbKeyComparator.compare(cursor.leafPage.buffer, node.keyOffset, node.keySize, key, keyLength); + if (cmp != 0) { + return null; + } + + byte[] value = new byte[node.valueSize]; + ByteBuffer duplicate = cursor.leafPage.buffer.duplicate(); + duplicate.position(node.valueOffset); + duplicate.get(value, 0, node.valueSize); + return value; + } + + private SeekCursor seek(LmdbDb db, byte[] searchKey, int searchKeyLength, RangeCountResult stats) + throws IOException { + List branchPath = new ArrayList<>(); + LmdbPage page = dataFile.readPage(db.rootPgno, meta); + if (page.isBranch()) { + stats.branchPagesRead++; + } + if (page.isLeaf() || page.isLeaf2()) { + stats.leafPagesRead++; + } + + while (page.isBranch()) { + if (page.numKeys == 0) { + throw new IOException("Corrupt branch page with zero keys: " + page.expectedPgno); + } + SearchResult search = findFirstGreaterOrEqual(page, searchKey, searchKeyLength, false); + int childIndex; + if (search.index >= page.numKeys) { + childIndex = page.numKeys - 1; + } else { + childIndex = search.index; + if (!search.exact) { + childIndex--; + } + } + if (childIndex < 0 || childIndex >= page.numKeys) { + throw new IOException("Corrupt branch descent index " + childIndex + " for page " + page.expectedPgno); + } + LmdbNode branchNode = page.node(childIndex); + branchPath.add(new BranchFrame(page, childIndex)); + page = dataFile.readPage(branchNode.branchPgno, meta); + if (page.isBranch()) { + stats.branchPagesRead++; + } + if (page.isLeaf() || page.isLeaf2()) { + stats.leafPagesRead++; + } + } + + if (!page.isLeaf() && !page.isLeaf2()) { + throw new IOException("Expected leaf page, found flags=" + page.flags + " on page " + page.expectedPgno); + } + + SearchResult leafSearch = findFirstGreaterOrEqual(page, searchKey, searchKeyLength, true); + SeekCursor cursor = new SeekCursor(page, leafSearch.index, branchPath); + if (cursor.leafIndex >= cursor.leafPage.numKeys && !advanceToNextLeaf(cursor, stats)) { + return null; + } + return cursor; + } + + private boolean advanceToNextLeaf(SeekCursor cursor, RangeCountResult stats) throws IOException { + while (!cursor.branchPath.isEmpty()) { + BranchFrame last = cursor.branchPath.get(cursor.branchPath.size() - 1); + int nextChild = last.childIndex + 1; + if (nextChild < last.page.numKeys) { + last.childIndex = nextChild; + LmdbNode nextNode = last.page.node(nextChild); + LmdbPage page = dataFile.readPage(nextNode.branchPgno, meta); + if (page.isBranch()) { + stats.branchPagesRead++; + } + if (page.isLeaf() || page.isLeaf2()) { + stats.leafPagesRead++; + } + + while (page.isBranch()) { + if (page.numKeys == 0) { + throw new IOException("Corrupt branch page with zero keys: " + page.expectedPgno); + } + cursor.branchPath.add(new BranchFrame(page, 0)); + LmdbNode firstNode = page.node(0); + page = dataFile.readPage(firstNode.branchPgno, meta); + if (page.isBranch()) { + stats.branchPagesRead++; + } + if (page.isLeaf() || page.isLeaf2()) { + stats.leafPagesRead++; + } + } + + if (!page.isLeaf() && !page.isLeaf2()) { + throw new IOException("Expected leaf page while advancing, found flags=" + page.flags); + } + cursor.leafPage = page; + cursor.leafIndex = 0; + return true; + } + cursor.branchPath.remove(cursor.branchPath.size() - 1); + } + return false; + } + + private SearchResult findFirstGreaterOrEqual(LmdbPage page, byte[] key, int keyLength, boolean leafSearch) + throws IOException { + if (page.numKeys == 0) { + return new SearchResult(0, false); + } + + int low; + int high = page.numKeys - 1; + if (leafSearch || page.isLeaf()) { + low = 0; + } else { + low = 1; + } + int index = 0; + int rc = -1; + + while (low <= high) { + index = (low + high) >>> 1; + LmdbNode node = page.node(index); + rc = LmdbKeyComparator.compare(key, keyLength, page.buffer, node.keyOffset, node.keySize); + if (rc == 0) { + return new SearchResult(index, true); + } + if (rc > 0) { + low = index + 1; + } else { + high = index - 1; + } + } + + if (rc > 0) { + index++; + } + if (low > high) { + index = low; + } + return new SearchResult(index, false); + } + + private boolean matches(LmdbNode node, ByteBuffer pageBuffer, GroupMatcher matcher) { + ByteBuffer keySlice = pageBuffer.duplicate(); + keySlice.order(pageBuffer.order()); + keySlice.position(node.keyOffset); + keySlice.limit(node.keyOffset + node.keySize); + ByteBuffer keyView = keySlice.slice(); + keyView.order(pageBuffer.order()); + return matcher.matches(keyView); + } + + private long countNodeEntries(LmdbNode node, LmdbPage page, RangeCountResult stats) throws IOException { + if ((node.nodeFlags & LmdbFormat.F_SUBDATA) != 0 && node.valueSize >= LmdbFormat.META_DB_SIZE) { + ByteBuffer dup = page.buffer.duplicate(); + dup.order(page.buffer.order()); + dup.position(node.valueOffset); + LmdbDb subDb = LmdbDb.parse(dup, node.valueOffset); + return subDb.entries; + } + if ((node.nodeFlags & LmdbFormat.F_DUPDATA) != 0 && node.valueSize >= LmdbFormat.PAGE_HEADER_SIZE) { + return countSubPageEntries(page.buffer, node.valueOffset, node.valueSize); + } + if ((node.nodeFlags & LmdbFormat.F_BIGDATA) != 0 && node.valueSize >= Long.BYTES) { + long overflowPgno = page.buffer.getLong(node.valueOffset); + LmdbPage overflowPage = dataFile.readPage(overflowPgno, meta); + stats.overflowPagesRead += Math.max(overflowPage.overflowPages, 1); + } + return 1; + } + + private long countSubPageEntries(ByteBuffer buffer, int offset, int length) { + if (offset + length > buffer.limit()) { + return 0; + } + int flags = LmdbFormat.unsignedShort(buffer, offset + 10); + int lower = LmdbFormat.unsignedShort(buffer, offset + 12); + if ((flags & LmdbFormat.P_LEAF2) != 0) { + int keySize = LmdbFormat.unsignedShort(buffer, offset + 8); + if (keySize <= 0) { + return 0; + } + int bytes = Math.max(lower - LmdbFormat.PAGE_HEADER_SIZE, 0); + return bytes / keySize; + } + return Math.max(LmdbFormat.numKeys(lower), 0); + } + + private static final class SearchResult { + final int index; + final boolean exact; + + SearchResult(int index, boolean exact) { + this.index = index; + this.exact = exact; + } + } + + private static final class BranchFrame { + final LmdbPage page; + int childIndex; + + BranchFrame(LmdbPage page, int childIndex) { + this.page = page; + this.childIndex = childIndex; + } + } + + private static final class SeekCursor { + LmdbPage leafPage; + int leafIndex; + final List branchPath; + + SeekCursor(LmdbPage leafPage, int leafIndex, List branchPath) { + this.leafPage = leafPage; + this.leafIndex = leafIndex; + this.branchPath = branchPath; + } + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDataFile.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDataFile.java new file mode 100644 index 00000000000..b887ddff5ad --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDataFile.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.FileChannel; +import java.nio.file.StandardOpenOption; + +final class LmdbDataFile implements Closeable { + + private static final int META_PROBE_BYTES = 4096; + private static final int META_BASE_OFFSET = LmdbFormat.PAGE_HEADER_SIZE; + private static final int MIN_PAGE_SIZE = 512; + private static final int MAX_PAGE_SIZE = 65536; + + private final File dataFile; + private final FileChannel channel; + + LmdbDataFile(File dataFile) throws IOException { + this.dataFile = dataFile; + this.channel = FileChannel.open(dataFile.toPath(), StandardOpenOption.READ); + } + + LmdbMeta readMetaForTxn(long pinnedTxnId) throws IOException { + ByteOrder order = detectByteOrder(); + int pageSize = probePageSize(order); + LmdbMeta meta0 = readMetaPage(0, pageSize, order); + LmdbMeta meta1 = readMetaPage(1, pageSize, order); + + LmdbMeta selected = null; + for (LmdbMeta candidate : new LmdbMeta[] { meta0, meta1 }) { + if (candidate == null) { + continue; + } + if (candidate.txnId == pinnedTxnId) { + return candidate; + } + if (candidate.txnId <= pinnedTxnId && (selected == null || candidate.txnId > selected.txnId)) { + selected = candidate; + } + } + + if (selected == null) { + throw new IOException("No valid LMDB meta page for pinned txn " + pinnedTxnId + " in " + dataFile); + } + return selected; + } + + LmdbPage readPage(long pgno, LmdbMeta meta) throws IOException { + long offset = pgno * meta.pageSize; + if (offset < 0 || offset + meta.pageSize > meta.mapSize) { + throw new IOException("Page " + pgno + " is outside map bounds (mapsize=" + meta.mapSize + ")"); + } + ByteBuffer page = readAt(offset, meta.pageSize, meta.byteOrder); + return LmdbPage.parse(pgno, page, meta.pageSize); + } + + @Override + public void close() throws IOException { + channel.close(); + } + + private LmdbMeta readMetaPage(int metaPage, int pageSize, ByteOrder order) throws IOException { + ByteBuffer page = readAt((long) metaPage * pageSize, pageSize, order); + int flags = LmdbFormat.unsignedShort(page, 10); + if ((flags & LmdbFormat.P_META) == 0) { + return null; + } + + int magic = page.getInt(META_BASE_OFFSET + LmdbFormat.META_MAGIC_OFFSET); + if (magic != LmdbFormat.MDB_MAGIC) { + return null; + } + int version = page.getInt(META_BASE_OFFSET + LmdbFormat.META_VERSION_OFFSET); + if (version != LmdbFormat.MDB_DATA_VERSION && version != LmdbFormat.MDB_DATA_VERSION_DEVEL) { + return null; + } + + long mapSize = page.getLong(META_BASE_OFFSET + LmdbFormat.META_MAP_SIZE_OFFSET); + LmdbDb freeDb = LmdbDb.parse(page, META_BASE_OFFSET + LmdbFormat.META_DBS_OFFSET); + LmdbDb mainDb = LmdbDb.parse(page, META_BASE_OFFSET + LmdbFormat.META_DBS_OFFSET + LmdbFormat.META_DB_SIZE); + long lastPage = page.getLong(META_BASE_OFFSET + LmdbFormat.META_LAST_PG_OFFSET); + long txnId = page.getLong(META_BASE_OFFSET + LmdbFormat.META_TXNID_OFFSET); + return new LmdbMeta(metaPage, txnId, freeDb.pad, mapSize, lastPage, freeDb, mainDb, order); + } + + private int probePageSize(ByteOrder order) throws IOException { + ByteBuffer probe = readAt(0, META_PROBE_BYTES, order); + int pageSize = probe.getInt(META_BASE_OFFSET + LmdbFormat.META_DBS_OFFSET + LmdbFormat.MDB_DB_PAD_OFFSET); + if (pageSize < MIN_PAGE_SIZE || pageSize > MAX_PAGE_SIZE || (pageSize & (pageSize - 1)) != 0) { + throw new IOException("Invalid LMDB page size " + pageSize + " in " + dataFile); + } + return pageSize; + } + + private ByteOrder detectByteOrder() throws IOException { + ByteBuffer magicBytes = readAt(0, META_PROBE_BYTES, ByteOrder.BIG_ENDIAN); + int beMagic = magicBytes.getInt(META_BASE_OFFSET + LmdbFormat.META_MAGIC_OFFSET); + if (beMagic == LmdbFormat.MDB_MAGIC) { + return ByteOrder.BIG_ENDIAN; + } + if (Integer.reverseBytes(beMagic) == LmdbFormat.MDB_MAGIC) { + return ByteOrder.LITTLE_ENDIAN; + } + throw new IOException("Unable to detect LMDB byte order for " + dataFile); + } + + private ByteBuffer readAt(long offset, int length, ByteOrder order) throws IOException { + ByteBuffer buffer = ByteBuffer.allocate(length).order(order); + int read = 0; + while (read < length) { + int n = channel.read(buffer, offset + read); + if (n < 0) { + throw new IOException("Unexpected EOF while reading " + dataFile + " at " + (offset + read)); + } + read += n; + } + buffer.flip(); + return buffer; + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDb.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDb.java new file mode 100644 index 00000000000..69349e585b4 --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbDb.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.nio.ByteBuffer; + +final class LmdbDb { + + final int pad; + final int flags; + final int depth; + final long branchPages; + final long leafPages; + final long overflowPages; + final long entries; + final long rootPgno; + + LmdbDb(int pad, int flags, int depth, long branchPages, long leafPages, long overflowPages, long entries, + long rootPgno) { + this.pad = pad; + this.flags = flags; + this.depth = depth; + this.branchPages = branchPages; + this.leafPages = leafPages; + this.overflowPages = overflowPages; + this.entries = entries; + this.rootPgno = rootPgno; + } + + boolean isEmpty() { + return rootPgno == LmdbFormat.P_INVALID || entries == 0; + } + + static LmdbDb parse(ByteBuffer buffer, int offset) { + int pad = buffer.getInt(offset + LmdbFormat.MDB_DB_PAD_OFFSET); + int flags = LmdbFormat.unsignedShort(buffer, offset + LmdbFormat.MDB_DB_FLAGS_OFFSET); + int depth = LmdbFormat.unsignedShort(buffer, offset + LmdbFormat.MDB_DB_DEPTH_OFFSET); + long branchPages = buffer.getLong(offset + LmdbFormat.MDB_DB_BRANCH_PAGES_OFFSET); + long leafPages = buffer.getLong(offset + LmdbFormat.MDB_DB_LEAF_PAGES_OFFSET); + long overflowPages = buffer.getLong(offset + LmdbFormat.MDB_DB_OVERFLOW_PAGES_OFFSET); + long entries = buffer.getLong(offset + LmdbFormat.MDB_DB_ENTRIES_OFFSET); + long rootPgno = buffer.getLong(offset + LmdbFormat.MDB_DB_ROOT_OFFSET); + return new LmdbDb(pad, flags, depth, branchPages, leafPages, overflowPages, entries, rootPgno); + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbFormat.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbFormat.java new file mode 100644 index 00000000000..10a09f1113d --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbFormat.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.nio.ByteBuffer; + +final class LmdbFormat { + + static final int MDB_MAGIC = 0xBEEFC0DE; + static final int MDB_DATA_VERSION = 1; + static final int MDB_DATA_VERSION_DEVEL = 999; + + static final int P_BRANCH = 0x01; + static final int P_LEAF = 0x02; + static final int P_OVERFLOW = 0x04; + static final int P_META = 0x08; + static final int P_LEAF2 = 0x20; + static final int P_SUBP = 0x40; + + static final int F_BIGDATA = 0x01; + static final int F_SUBDATA = 0x02; + static final int F_DUPDATA = 0x04; + + static final long P_INVALID = -1L; + + static final int PAGE_HEADER_SIZE = 16; + static final int PAGE_BASE = 0; + + static final int META_MAGIC_OFFSET = 0; + static final int META_VERSION_OFFSET = 4; + static final int META_MAP_SIZE_OFFSET = 16; + static final int META_DBS_OFFSET = 24; + static final int META_DB_SIZE = 48; + static final int META_LAST_PG_OFFSET = META_DBS_OFFSET + 2 * META_DB_SIZE; + static final int META_TXNID_OFFSET = META_LAST_PG_OFFSET + Long.BYTES; + + static final int MDB_DB_PAD_OFFSET = 0; + static final int MDB_DB_FLAGS_OFFSET = 4; + static final int MDB_DB_DEPTH_OFFSET = 6; + static final int MDB_DB_BRANCH_PAGES_OFFSET = 8; + static final int MDB_DB_LEAF_PAGES_OFFSET = 16; + static final int MDB_DB_OVERFLOW_PAGES_OFFSET = 24; + static final int MDB_DB_ENTRIES_OFFSET = 32; + static final int MDB_DB_ROOT_OFFSET = 40; + + static final int NODE_LO_OFFSET = 0; + static final int NODE_HI_OFFSET = 2; + static final int NODE_FLAGS_OFFSET = 4; + static final int NODE_KEYSIZE_OFFSET = 6; + static final int NODE_DATA_OFFSET = 8; + static final int NODE_SIZE = NODE_DATA_OFFSET; + + static final int PGNO_TOPWORD_SHIFT = 32; + + private LmdbFormat() { + } + + static int unsignedShort(ByteBuffer buffer, int offset) { + return Short.toUnsignedInt(buffer.getShort(offset)); + } + + static int nodeDataSize(ByteBuffer buffer, int offset) { + int lo = unsignedShort(buffer, offset + NODE_LO_OFFSET); + int hi = unsignedShort(buffer, offset + NODE_HI_OFFSET); + return lo | (hi << 16); + } + + static long nodeBranchPgno(ByteBuffer buffer, int offset) { + long lo = unsignedShort(buffer, offset + NODE_LO_OFFSET); + long hi = unsignedShort(buffer, offset + NODE_HI_OFFSET); + long flags = unsignedShort(buffer, offset + NODE_FLAGS_OFFSET); + return lo | (hi << 16) | (flags << PGNO_TOPWORD_SHIFT); + } + + static int numKeys(int lower) { + return (lower - (PAGE_HEADER_SIZE - PAGE_BASE)) >> 1; + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbKeyComparator.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbKeyComparator.java new file mode 100644 index 00000000000..b0b5383c24b --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbKeyComparator.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.nio.ByteBuffer; + +final class LmdbKeyComparator { + + private LmdbKeyComparator() { + } + + static int compare(byte[] left, int leftLength, byte[] right, int rightLength) { + int len = Math.min(leftLength, rightLength); + for (int i = 0; i < len; i++) { + int diff = (left[i] & 0xff) - (right[i] & 0xff); + if (diff != 0) { + return diff; + } + } + if (leftLength == rightLength) { + return 0; + } + return leftLength < rightLength ? -1 : 1; + } + + static int compare(byte[] left, int leftLength, ByteBuffer right, int rightOffset, int rightLength) { + int len = Math.min(leftLength, rightLength); + for (int i = 0; i < len; i++) { + int diff = (left[i] & 0xff) - (right.get(rightOffset + i) & 0xff); + if (diff != 0) { + return diff; + } + } + if (leftLength == rightLength) { + return 0; + } + return leftLength < rightLength ? -1 : 1; + } + + static int compare(ByteBuffer left, int leftOffset, int leftLength, byte[] right, int rightLength) { + int len = Math.min(leftLength, rightLength); + for (int i = 0; i < len; i++) { + int diff = (left.get(leftOffset + i) & 0xff) - (right[i] & 0xff); + if (diff != 0) { + return diff; + } + } + if (leftLength == rightLength) { + return 0; + } + return leftLength < rightLength ? -1 : 1; + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbMeta.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbMeta.java new file mode 100644 index 00000000000..265f1e16e4d --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbMeta.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.nio.ByteOrder; + +final class LmdbMeta { + + final int metaPage; + final long txnId; + final int pageSize; + final long mapSize; + final long lastPage; + final LmdbDb freeDb; + final LmdbDb mainDb; + final ByteOrder byteOrder; + + LmdbMeta(int metaPage, long txnId, int pageSize, long mapSize, long lastPage, LmdbDb freeDb, LmdbDb mainDb, + ByteOrder byteOrder) { + this.metaPage = metaPage; + this.txnId = txnId; + this.pageSize = pageSize; + this.mapSize = mapSize; + this.lastPage = lastPage; + this.freeDb = freeDb; + this.mainDb = mainDb; + this.byteOrder = byteOrder; + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbNode.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbNode.java new file mode 100644 index 00000000000..f926412e9b1 --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbNode.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +final class LmdbNode { + + final int nodeOffset; + final int keyOffset; + final int keySize; + final int valueOffset; + final int valueSize; + final int nodeFlags; + final long branchPgno; + + LmdbNode(int nodeOffset, int keyOffset, int keySize, int valueOffset, int valueSize, int nodeFlags, + long branchPgno) { + this.nodeOffset = nodeOffset; + this.keyOffset = keyOffset; + this.keySize = keySize; + this.valueOffset = valueOffset; + this.valueSize = valueSize; + this.nodeFlags = nodeFlags; + this.branchPgno = branchPgno; + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPage.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPage.java new file mode 100644 index 00000000000..918483857f1 --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPage.java @@ -0,0 +1,134 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.io.IOException; +import java.nio.ByteBuffer; + +final class LmdbPage { + + final long expectedPgno; + final ByteBuffer buffer; + final int pageSize; + final long pgno; + final int pad; + final int flags; + final int lower; + final int upper; + final int overflowPages; + final int numKeys; + + private LmdbPage(long expectedPgno, ByteBuffer buffer, int pageSize, long pgno, int pad, int flags, int lower, + int upper, int overflowPages, int numKeys) { + this.expectedPgno = expectedPgno; + this.buffer = buffer; + this.pageSize = pageSize; + this.pgno = pgno; + this.pad = pad; + this.flags = flags; + this.lower = lower; + this.upper = upper; + this.overflowPages = overflowPages; + this.numKeys = numKeys; + } + + static LmdbPage parse(long expectedPgno, ByteBuffer page, int pageSize) throws IOException { + if (page.remaining() < pageSize) { + throw new IOException("Unexpected short page read for page " + expectedPgno); + } + long pgno = page.getLong(0); + int pad = LmdbFormat.unsignedShort(page, 8); + int flags = LmdbFormat.unsignedShort(page, 10); + int lower; + int upper; + int overflowPages; + int numKeys; + + if ((flags & LmdbFormat.P_OVERFLOW) != 0) { + overflowPages = page.getInt(12); + lower = 0; + upper = 0; + numKeys = 0; + } else { + lower = LmdbFormat.unsignedShort(page, 12); + upper = LmdbFormat.unsignedShort(page, 14); + overflowPages = 0; + numKeys = LmdbFormat.numKeys(lower); + if (lower < LmdbFormat.PAGE_HEADER_SIZE || lower > pageSize || upper < 0 || upper > pageSize + || upper < lower) { + throw new IOException("Corrupt page bounds for page " + expectedPgno + ": lower=" + lower + ", upper=" + + upper + ", pageSize=" + pageSize); + } + if (numKeys < 0 || numKeys > (pageSize - LmdbFormat.PAGE_HEADER_SIZE) / 2) { + throw new IOException("Corrupt node count for page " + expectedPgno + ": " + numKeys); + } + } + + return new LmdbPage(expectedPgno, page, pageSize, pgno, pad, flags, lower, upper, overflowPages, numKeys); + } + + boolean isBranch() { + return (flags & LmdbFormat.P_BRANCH) != 0; + } + + boolean isLeaf() { + return (flags & LmdbFormat.P_LEAF) != 0; + } + + boolean isLeaf2() { + return (flags & LmdbFormat.P_LEAF2) != 0; + } + + boolean isOverflow() { + return (flags & LmdbFormat.P_OVERFLOW) != 0; + } + + LmdbNode node(int index) throws IOException { + if (index < 0 || index >= numKeys) { + throw new IOException("Node index out of bounds " + index + " for page " + expectedPgno); + } + int ptrOffset = LmdbFormat.PAGE_HEADER_SIZE + (index * Short.BYTES); + int nodeOffset = LmdbFormat.unsignedShort(buffer, ptrOffset); + if (nodeOffset < LmdbFormat.PAGE_HEADER_SIZE || nodeOffset >= pageSize) { + throw new IOException("Invalid node offset " + nodeOffset + " in page " + expectedPgno); + } + if (nodeOffset + LmdbFormat.NODE_SIZE > pageSize) { + throw new IOException("Node header exceeds page bounds on page " + expectedPgno); + } + + int keySize = LmdbFormat.unsignedShort(buffer, nodeOffset + LmdbFormat.NODE_KEYSIZE_OFFSET); + int keyOffset = nodeOffset + LmdbFormat.NODE_DATA_OFFSET; + if (keyOffset + keySize > pageSize) { + throw new IOException("Node key exceeds page bounds on page " + expectedPgno); + } + + if (isBranch()) { + long childPgno = LmdbFormat.nodeBranchPgno(buffer, nodeOffset); + return new LmdbNode(nodeOffset, keyOffset, keySize, -1, -1, 0, childPgno); + } + + int nodeFlags = LmdbFormat.unsignedShort(buffer, nodeOffset + LmdbFormat.NODE_FLAGS_OFFSET); + int valueSize = LmdbFormat.nodeDataSize(buffer, nodeOffset); + int valueOffset = keyOffset + keySize; + if (valueOffset + valueSize > pageSize) { + throw new IOException("Node value exceeds page bounds on page " + expectedPgno); + } + return new LmdbNode(nodeOffset, keyOffset, keySize, valueOffset, valueSize, nodeFlags, -1); + } + + void copyKey(int index, byte[] destination) throws IOException { + LmdbNode node = node(index); + buffer.position(node.keyOffset); + buffer.get(destination, 0, node.keySize); + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPageCardinalityEstimator.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPageCardinalityEstimator.java new file mode 100644 index 00000000000..b73ee232e8e --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/LmdbPageCardinalityEstimator.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.eclipse.rdf4j.sail.lmdb.util.GroupMatcher; + +public final class LmdbPageCardinalityEstimator implements Closeable { + + private final LmdbDataFile dataFile; + private volatile SnapshotCache lastSnapshot; + + public LmdbPageCardinalityEstimator(File dataMdbFile) throws IOException { + this.dataFile = new LmdbDataFile(dataMdbFile); + } + + public long estimateEntries(long txnId, String dbName, byte[] minKey, int minKeyLength, byte[] maxKey, + int maxKeyLength, + GroupMatcher matcher) throws IOException { + SnapshotCache snapshot = snapshot(txnId); + LmdbDb db = namedDb(snapshot, dbName); + if (db == null || db.isEmpty()) { + return 0; + } + + LmdbBtreeRangeCounter counter = new LmdbBtreeRangeCounter(dataFile, snapshot.meta); + RangeCountResult result = counter.countRange(db, minKey, minKeyLength, maxKey, maxKeyLength, matcher); + return result.entries; + } + + public long totalEntries(long txnId, String dbName) throws IOException { + SnapshotCache snapshot = snapshot(txnId); + LmdbDb db = namedDb(snapshot, dbName); + return db == null ? 0 : db.entries; + } + + @Override + public void close() throws IOException { + dataFile.close(); + } + + private SnapshotCache snapshot(long txnId) throws IOException { + SnapshotCache cached = lastSnapshot; + if (cached != null && cached.txnId == txnId) { + return cached; + } + LmdbMeta meta = dataFile.readMetaForTxn(txnId); + SnapshotCache refreshed = new SnapshotCache(txnId, meta); + lastSnapshot = refreshed; + return refreshed; + } + + private LmdbDb namedDb(SnapshotCache snapshot, String dbName) throws IOException { + LmdbDb cached = snapshot.namedDbs.get(dbName); + if (cached != null) { + return cached; + } + + LmdbBtreeRangeCounter counter = new LmdbBtreeRangeCounter(dataFile, snapshot.meta); + RangeCountResult lookupStats = new RangeCountResult(); + + byte[] key = dbName.getBytes(StandardCharsets.UTF_8); + byte[] keyWithTerminator = new byte[key.length + 1]; + System.arraycopy(key, 0, keyWithTerminator, 0, key.length); + + byte[] value = counter.findValueByExactKey(snapshot.meta.mainDb, key, key.length, lookupStats); + if (value == null) { + value = counter.findValueByExactKey(snapshot.meta.mainDb, keyWithTerminator, keyWithTerminator.length, + lookupStats); + } + if (value == null) { + return null; + } + + ByteBuffer valueBuffer = ByteBuffer.wrap(value).order(snapshot.meta.byteOrder); + LmdbDb parsed = LmdbDb.parse(valueBuffer, 0); + LmdbDb existing = snapshot.namedDbs.putIfAbsent(dbName, parsed); + return existing == null ? parsed : existing; + } + + private static final class SnapshotCache { + final long txnId; + final LmdbMeta meta; + final Map namedDbs = new ConcurrentHashMap<>(); + + SnapshotCache(long txnId, LmdbMeta meta) { + this.txnId = txnId; + this.meta = meta; + } + } + +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/RangeCountResult.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/RangeCountResult.java new file mode 100644 index 00000000000..756b4d73d90 --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/estimate/RangeCountResult.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +final class RangeCountResult { + + long entries; + long branchPagesRead; + long leafPagesRead; + long overflowPagesRead; + + long estimatedBytes(int pageSize) { + return (branchPagesRead + leafPagesRead + overflowPagesRead) * pageSize; + } + +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/CardinalityTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/CardinalityTest.java index e75ef35f705..d020c892f84 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/CardinalityTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/CardinalityTest.java @@ -8,10 +8,13 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.sail.lmdb; +import static org.junit.Assert.assertEquals; + import java.io.File; -import java.util.Random; +import java.io.IOException; import org.eclipse.rdf4j.sail.lmdb.TxnManager.Txn; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; @@ -20,14 +23,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Low-level tests for {@link TripleStore}. */ public class CardinalityTest { - final static Logger logger = LoggerFactory.getLogger(CardinalityTest.class); @TempDir File tempFolder; @@ -40,7 +40,8 @@ public class CardinalityTest { public void before() throws Exception { dataDir = new File(tempFolder, "triplestore"); dataDir.mkdir(); - tripleStore = new TripleStore(dataDir, new LmdbStoreConfig("spoc,posc"), null); + tripleStore = new TripleStore(dataDir, new LmdbStoreConfig("spoc,posc") + .setPageCardinalityEstimator(true), null); } int count(RecordIterator it) { @@ -51,35 +52,78 @@ int count(RecordIterator it) { return count; } + private int countBoth(Txn txn, long subj, long pred, long obj, long context) throws IOException { + return count(tripleStore.getTriples(txn, subj, pred, obj, context, true)) + + count(tripleStore.getTriples(txn, subj, pred, obj, context, false)); + } + @Test - public void testCardinalities() throws Exception { - Random random = new Random(); + public void testExactBoundCardinalityHitAndMiss() throws Exception { + tripleStore.startTransaction(); + tripleStore.storeTriple(1, 2, 3, 4, true); + tripleStore.commit(); - int nrOfResources = 1000; + assertEquals(1.0, tripleStore.cardinality(1, 2, 3, 4), 0.0); + assertEquals(0.0, tripleStore.cardinality(1, 2, 3, 5), 0.0); + } + @Test + public void testNonContiguousConstraintRequiresMatcherFiltering() throws Exception { tripleStore.startTransaction(); - for (int resource = 1; resource <= nrOfResources; resource++) { - int nrOfTriples = 20 + random.nextInt(100); - for (int i = 0; i < nrOfTriples; i++) { - tripleStore.storeTriple(resource, 2, random.nextInt(100000) * (long) Math.pow(10, random.nextInt(4)), 1, - true); - tripleStore.storeTriple(resource, 2 + random.nextInt(1000) + 1, - random.nextInt(100000) * (long) Math.pow(10, random.nextInt(4)), 1, true); - } + tripleStore.storeTriple(1, 10, 100, 7, true); + tripleStore.storeTriple(1, 11, 101, 7, true); + tripleStore.storeTriple(1, 12, 102, 8, true); + tripleStore.storeTriple(1, 13, 103, 8, true); + tripleStore.storeTriple(1, 14, 104, 8, true); + tripleStore.storeTriple(1, 15, 105, 8, true); + tripleStore.commit(); + + try (Txn txn = tripleStore.getTxnManager().createReadTxn()) { + int exact = count(tripleStore.getTriples(txn, 1, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, 7, true)); + assertEquals(2, exact); + assertEquals((double) exact, tripleStore.cardinality(1, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, 7), + 0.0); } + } + + @Test + public void testUnboundPatternReturnsTotalExplicitAndInferredEntries() throws Exception { + tripleStore.startTransaction(); + tripleStore.storeTriple(1, 2, 3, 4, true); + tripleStore.storeTriple(5, 6, 7, 8, true); + tripleStore.storeTriple(1, 2, 3, 4, false); + tripleStore.commit(); + + assertEquals(3.0, + tripleStore.cardinality(LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, + LmdbValue.UNKNOWN_ID), + 0.0); + } + + @Test + public void testCardinalityMatchesIteratorAcrossMixedPatterns() throws Exception { + tripleStore.startTransaction(); + tripleStore.storeTriple(1, 2, 3, 4, true); + tripleStore.storeTriple(1, 5, 6, 7, true); + tripleStore.storeTriple(2, 2, 3, 7, true); + tripleStore.storeTriple(2, 8, 9, 10, true); + tripleStore.storeTriple(1, 2, 9, 7, false); + tripleStore.storeTriple(2, 2, 3, 11, false); + tripleStore.storeTriple(3, 5, 6, 7, false); tripleStore.commit(); try (Txn txn = tripleStore.getTxnManager().createReadTxn()) { - logger.info(tripleStore.cardinality(LmdbValue.UNKNOWN_ID, 2, LmdbValue.UNKNOWN_ID, 1) + " --- " + - count(tripleStore.getTriples(txn, LmdbValue.UNKNOWN_ID, 2, LmdbValue.UNKNOWN_ID, 1, true))); + assertEquals((double) countBoth(txn, 1, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, 7), + tripleStore.cardinality(1, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, 7), 0.0); + + assertEquals((double) countBoth(txn, LmdbValue.UNKNOWN_ID, 2, LmdbValue.UNKNOWN_ID, 7), + tripleStore.cardinality(LmdbValue.UNKNOWN_ID, 2, LmdbValue.UNKNOWN_ID, 7), 0.0); - for (int resource = 1; resource <= nrOfResources; resource++) { - logger.info(tripleStore.cardinality(resource, 2, LmdbValue.UNKNOWN_ID, 1) + " --- " + - count(tripleStore.getTriples(txn, resource, 2, LmdbValue.UNKNOWN_ID, 1, true))); - } + assertEquals((double) countBoth(txn, 2, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID), + tripleStore.cardinality(2, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID), 0.0); - logger.info(tripleStore.cardinality(LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, 3, 1) + " --- " + - count(tripleStore.getTriples(txn, LmdbValue.UNKNOWN_ID, LmdbValue.UNKNOWN_ID, 3, 1, true))); + assertEquals((double) countBoth(txn, LmdbValue.UNKNOWN_ID, 2, 3, LmdbValue.UNKNOWN_ID), + tripleStore.cardinality(LmdbValue.UNKNOWN_ID, 2, 3, LmdbValue.UNKNOWN_ID), 0.0); } } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java new file mode 100644 index 00000000000..72ca443f913 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java @@ -0,0 +1,384 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.FileUtils; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.QueryLanguage; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.ValueConstant; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.StatementPatternCollector; +import org.eclipse.rdf4j.query.parser.ParsedTupleQuery; +import org.eclipse.rdf4j.query.parser.QueryParserUtil; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.sail.base.SailStore; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Test; + +class LmdbEvaluationStatisticsMemoizationTest { + + @Test + void memoizesSupportsJoinEstimationAndInvalidatesAfterCacheWindow() throws Exception { + SketchBasedJoinEstimator estimator = mock(SketchBasedJoinEstimator.class); + when(estimator.isReady()).thenReturn(true, false, false); + ValueStore valueStore = mock(ValueStore.class); + ValueStoreRevision revision = mock(ValueStoreRevision.class); + when(valueStore.getRevision()).thenReturn(revision); + when(revision.getRevisionId()).thenReturn(1L); + + LmdbEvaluationStatistics statistics = new LmdbEvaluationStatistics( + valueStore, + mock(TripleStore.class), + estimator); + + assertTrue(statistics.supportsJoinEstimation(), "Expected initial readiness probe"); + assertTrue(statistics.supportsJoinEstimation(), "Expected second probe to use cached readiness"); + verify(estimator, times(1)).isReady(); + + Thread.sleep(300); + + assertFalse(statistics.supportsJoinEstimation(), "Expected readiness cache invalidation after cache window"); + verify(estimator, times(2)).isReady(); + } + + @Test + void supportsJoinEstimationDoesNotForceRobustRebuildWhenBaseSketchesAreReady() throws Exception { + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(mock(SailStore.class), + SketchBasedJoinEstimator.Config.defaults().withNominalEntries(64)); + setEstimatorSeenTriples(estimator, 1L); + + ValueStore valueStore = mock(ValueStore.class); + ValueStoreRevision revision = mock(ValueStoreRevision.class); + when(valueStore.getRevision()).thenReturn(revision); + when(revision.getRevisionId()).thenReturn(1L); + + LmdbEvaluationStatistics statistics = new LmdbEvaluationStatistics(valueStore, mock(TripleStore.class), + estimator); + + assertTrue(statistics.supportsJoinEstimation(), + "Ready base sketches should remain usable even when the robust synopsis is unavailable"); + } + + @Test + void cachesEquivalentStatementPatternCardinalitiesByResolvedIds() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-memoization").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + loadData(repository); + + EvaluationStatistics statistics = extractEvaluationStatistics(repository); + StatementPattern followsA = statementPattern("SELECT * WHERE { ?s ?o . }"); + StatementPattern followsB = statementPattern("SELECT * WHERE { ?x ?y . }"); + StatementPattern name = statementPattern("SELECT * WHERE { ?u ?label . }"); + + statistics.getCardinality(followsA); + statistics.getCardinality(followsB); + statistics.getCardinality(name); + + Map cache = cardinalityCache(statistics); + assertEquals(2, cache.size(), "Equivalent follows patterns should share one memoized entry"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + @Test + void invalidatesSharedCardinalityCacheAfterTripleOnlyCommit() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-triple-only-commit").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + sharedCardinalityCache().clear(); + SimpleValueFactory vf = SimpleValueFactory.getInstance(); + IRI follows = vf.createIRI("urn:test:follows"); + IRI name = vf.createIRI("urn:test:name"); + IRI s1 = vf.createIRI("urn:test:user:1"); + IRI s2 = vf.createIRI("urn:test:user:2"); + IRI o1 = vf.createIRI("urn:test:user:3"); + + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + connection.add(s1, follows, o1); + connection.add(s2, name, vf.createLiteral("u2")); + connection.commit(); + } + + LmdbStore sail = (LmdbStore) repository.getSail(); + LmdbSailStore backingStore = sail.getBackingStore(); + ValueStore valueStore = (ValueStore) backingStore.getValueFactory(); + StatementPattern initialPattern = statementPattern("SELECT * WHERE { ?s ?o . }"); + EvaluationStatistics firstStatistics = backingStore.getEvaluationStatistics(); + + assertEquals(1.0d, firstStatistics.getCardinality(initialPattern), 0.0d); + long revisionBefore = valueStore.getRevision().getRevisionId(); + + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + connection.add(s2, follows, o1); + connection.commit(); + } + + long revisionAfter = valueStore.getRevision().getRevisionId(); + assertEquals(revisionBefore, revisionAfter, + "Triple-only commit should not change value-store revision in this regression scenario"); + + EvaluationStatistics secondStatistics = backingStore.getEvaluationStatistics(); + StatementPattern refreshedPattern = statementPattern("SELECT * WHERE { ?s ?o . }"); + assertEquals(2.0d, secondStatistics.getCardinality(refreshedPattern), 0.0d, + "Shared cardinality cache should be invalidated after triple-store commits"); + } finally { + sharedCardinalityCache().clear(); + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + @Test + void joinCardinalityUsesSingleSketchProbeWhenReady() { + SketchBasedJoinEstimator estimator = mock(SketchBasedJoinEstimator.class); + when(estimator.isReady()).thenReturn(true); + when(estimator.cardinality(any(Join.class))).thenReturn(7.0d); + ValueStore valueStore = mock(ValueStore.class); + ValueStoreRevision revision = mock(ValueStoreRevision.class); + when(valueStore.getRevision()).thenReturn(revision); + when(revision.getRevisionId()).thenReturn(1L); + + LmdbEvaluationStatistics statistics = new LmdbEvaluationStatistics(valueStore, mock(TripleStore.class), + estimator); + SimpleValueFactory vf = SimpleValueFactory.getInstance(); + StatementPattern left = new StatementPattern(Var.of("s"), Var.of("p", vf.createIRI("urn:test:follows")), + Var.of("o")); + StatementPattern right = new StatementPattern(Var.of("s"), Var.of("p2", vf.createIRI("urn:test:name")), + Var.of("name")); + + double card = statistics.getCardinality(new Join(left, right)); + + assertEquals(7.0d, card); + verify(estimator, times(1)).cardinality(any(Join.class)); + } + + @Test + void usesSketchEstimatorForLeftJoinCardinalityWhenReady() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-leftjoin").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + loadData(repository); + + LmdbStore sail = (LmdbStore) repository.getSail(); + LmdbSailStore backingStore = sail.getBackingStore(); + backingStore.getSketchBasedJoinEstimator().rebuildOnceSlow(); + + EvaluationStatistics statistics = backingStore.getEvaluationStatistics(); + assertTrue(statistics.supportsJoinEstimation(), "Expected sketch join estimator to be available"); + + LeftJoin leftJoin = leftJoin( + "SELECT * WHERE { ?s ?o . OPTIONAL { ?s ?name . } }"); + StatementPattern leftPattern = (StatementPattern) leftJoin.getLeftArg(); + StatementPattern rightPattern = (StatementPattern) leftJoin.getRightArg(); + + double leftCardinality = statistics.getCardinality(leftPattern); + double rightCardinality = statistics.getCardinality(rightPattern); + double fallbackProduct = leftCardinality * rightCardinality; + double leftJoinCardinality = statistics.getCardinality(leftJoin); + + assertTrue(leftJoinCardinality < fallbackProduct, + "Expected LEFT JOIN cardinality to avoid multiplicative fallback when sketch estimator is ready"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + @Test + void usesSketchEstimatorForFilterWrappedStatementPatternsWhenReady() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-filter-wrapped-join").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + loadData(repository); + + LmdbStore sail = (LmdbStore) repository.getSail(); + LmdbSailStore backingStore = sail.getBackingStore(); + backingStore.getSketchBasedJoinEstimator().rebuildOnceSlow(); + + EvaluationStatistics statistics = backingStore.getEvaluationStatistics(); + assertTrue(statistics.supportsJoinEstimation(), "Expected sketch join estimator to be available"); + + Filter leftFilter = filterWrappedPattern( + "s", + "urn:test:follows", + "o", + "o", + SimpleValueFactory.getInstance().createIRI("urn:test:user:1")); + Filter rightFilter = filterWrappedPattern( + "s", + "urn:test:name", + "name", + "name", + SimpleValueFactory.getInstance().createLiteral("u0")); + + double leftPatternCardinality = statistics.getCardinality((StatementPattern) leftFilter.getArg()); + double rightPatternCardinality = statistics.getCardinality((StatementPattern) rightFilter.getArg()); + double fallbackProduct = leftPatternCardinality * rightPatternCardinality; + + double joinCardinality = statistics.getCardinality(new Join(leftFilter.clone(), rightFilter.clone())); + assertTrue(joinCardinality < fallbackProduct, + "Expected JOIN cardinality to avoid multiplicative fallback for simple filter-wrapped patterns"); + + double leftJoinCardinality = statistics + .getCardinality(new LeftJoin(leftFilter.clone(), rightFilter.clone())); + assertTrue(leftJoinCardinality < fallbackProduct, + "Expected LEFT JOIN cardinality to avoid multiplicative fallback for simple filter-wrapped patterns"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + @Test + void usesSketchEstimatorForFilterCardinalityWhenReady() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-filter-cardinality").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + loadData(repository); + + LmdbStore sail = (LmdbStore) repository.getSail(); + LmdbSailStore backingStore = sail.getBackingStore(); + backingStore.getSketchBasedJoinEstimator().rebuildOnceSlow(); + + EvaluationStatistics statistics = backingStore.getEvaluationStatistics(); + assertTrue(statistics.supportsJoinEstimation(), "Expected sketch join estimator to be available"); + + SimpleValueFactory vf = SimpleValueFactory.getInstance(); + StatementPattern pattern = new StatementPattern(Var.of("s"), Var.of("p", vf.createIRI("urn:test:name")), + Var.of("name")); + Filter filter = new Filter(pattern.clone(), + new Compare(Var.of("name"), new ValueConstant(vf.createLiteral("u0")), Compare.CompareOp.EQ)); + + double patternCardinality = statistics.getCardinality(pattern); + double filterCardinality = statistics.getCardinality(filter); + + assertTrue(filterCardinality < patternCardinality, + "Expected filter cardinality to use sketch selectivity instead of raw statement pattern cardinality"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + private static void loadData(SailRepository repository) { + SimpleValueFactory vf = SimpleValueFactory.getInstance(); + IRI follows = vf.createIRI("urn:test:follows"); + IRI name = vf.createIRI("urn:test:name"); + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + for (int i = 0; i < 8; i++) { + IRI subject = vf.createIRI("urn:test:user:" + i); + IRI object = vf.createIRI("urn:test:user:" + ((i + 1) % 8)); + connection.add(subject, follows, object); + connection.add(subject, name, vf.createLiteral("u" + i)); + } + connection.commit(); + } + } + + private static EvaluationStatistics extractEvaluationStatistics(SailRepository repository) throws Exception { + Object sail = repository.getSail(); + Method getSailStoreMethod = sail.getClass().getDeclaredMethod("getSailStore"); + getSailStoreMethod.setAccessible(true); + SailStore sailStore = (SailStore) getSailStoreMethod.invoke(sail); + return sailStore.getEvaluationStatistics(); + } + + private static StatementPattern statementPattern(String query) { + ParsedTupleQuery parsed = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, query, null); + List patterns = StatementPatternCollector.process(parsed.getTupleExpr()); + return patterns.get(0); + } + + private static Filter filterWrappedPattern(String subjectVarName, String predicateIri, String objectVarName, + String filterVarName, org.eclipse.rdf4j.model.Value filterValue) { + SimpleValueFactory vf = SimpleValueFactory.getInstance(); + StatementPattern pattern = new StatementPattern( + Var.of(subjectVarName), + Var.of("p", vf.createIRI(predicateIri)), + Var.of(objectVarName)); + Compare condition = new Compare(Var.of(filterVarName), new ValueConstant(filterValue), Compare.CompareOp.EQ); + return new Filter(pattern, condition); + } + + private static LeftJoin leftJoin(String query) { + ParsedTupleQuery parsed = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, query, null); + final LeftJoin[] found = new LeftJoin[1]; + parsed.getTupleExpr().visit(new AbstractQueryModelVisitor() { + @Override + public void meet(LeftJoin node) { + if (found[0] == null) { + found[0] = node; + } + super.meet(node); + } + }); + assertNotNull(found[0], "Expected query to contain a LEFT JOIN"); + return found[0]; + } + + private static Map cardinalityCache(EvaluationStatistics statistics) throws Exception { + assertTrue(statistics.getClass().getName().endsWith("LmdbEvaluationStatistics")); + Field field = statistics.getClass().getDeclaredField("cardinalityCache"); + field.setAccessible(true); + return (Map) field.get(statistics); + } + + private static Map sharedCardinalityCache() throws Exception { + Field field = LmdbEvaluationStatistics.class.getDeclaredField("sharedCardinalityCache"); + field.setAccessible(true); + return (Map) field.get(null); + } + + private static void setEstimatorSeenTriples(SketchBasedJoinEstimator estimator, long seenTriples) { + try { + Field field = SketchBasedJoinEstimator.class.getDeclaredField("seenTriples"); + field.setAccessible(true); + field.setLong(estimator, seenTriples); + } catch (ReflectiveOperationException e) { + throw new AssertionError(e); + } + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java new file mode 100644 index 00000000000..64aeaadd9e4 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java @@ -0,0 +1,271 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.lmdb; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.Or; +import org.eclipse.rdf4j.query.algebra.QueryModelNode; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.Union; +import org.eclipse.rdf4j.query.algebra.ValueConstant; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class LmdbIndexAwareJoinOrderPlanningTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final IRI RDF_TYPE = VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + private static final IRI GRID_SUBSTATION = VF.createIRI("http://example.com/theme/grid/Substation"); + private static final IRI GRID_GENERATOR = VF.createIRI("http://example.com/theme/grid/Generator"); + private static final IRI GRID_FEEDS = VF.createIRI("http://example.com/theme/grid/feeds"); + private static final IRI GRID_NAME = VF.createIRI("http://example.com/theme/grid/name"); + private static final IRI GRID_ALIAS = VF.createIRI("http://example.com/theme/grid/alias"); + private static final int SUBSTATION_COUNT = 300; + private static final int GENERATOR_COUNT = 120; + private static final int NOISE_COUNT = 600; + + @Test + void plannerPrefersFeedsBeforeFilteredNameWithoutPosc(@TempDir File dataDir) throws Exception { + PlannedBranch plannedBranch = planGeneratorBranch(dataDir, "spoc,ospc,psoc"); + Optional plan = plannedBranch.plan(); + + assertTrue(plan.isPresent(), "Expected LMDB planner to produce a plan for the generator branch"); + List orderedArgs = plan.get().getOrderedArgs(); + assertEquals(4, orderedArgs.size(), "Expected four join factors in the generator branch"); + assertTrue( + orderedArgs.indexOf(plannedBranch.feedsPattern()) < orderedArgs + .indexOf(plannedBranch.filteredNamePattern()), + "Without posc, LMDB planner should place grid:feeds before the filtered grid:name access"); + } + + @Test + void plannerMayMoveFilteredNameEarlierWhenPoscExists(@TempDir File dataDir) throws Exception { + PlannedBranch plannedBranch = planGeneratorBranch(dataDir, "spoc,ospc,psoc,posc"); + Optional plan = plannedBranch.plan(); + + assertTrue(plan.isPresent(), "Expected LMDB planner to produce a plan for the generator branch"); + List orderedArgs = plan.get().getOrderedArgs(); + assertEquals(4, orderedArgs.size(), "Expected four join factors in the generator branch"); + assertTrue( + orderedArgs.indexOf(plannedBranch.filteredNamePattern()) < orderedArgs + .indexOf(plannedBranch.feedsPattern()), + "With posc available, LMDB planner may use the grid:name filter before grid:feeds"); + } + + @Test + void optimizedElectricalGridQueryKeepsFeedsBeforeNameInGeneratorBranch(@TempDir File dataDir) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadSyntheticGridData(repository); + store.getBackingStore().getSketchBasedJoinEstimator().rebuildOnceSlow(); + + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(electricalGridQuery()) + .explain(Explanation.Level.Optimized); + TupleExpr optimized = (TupleExpr) explanation.tupleExpr(); + Union union = findFirst(optimized, Union.class); + List generatorPatterns = new ArrayList<>(); + collectStatementPatterns(union.getRightArg(), generatorPatterns); + List generatorPredicates = generatorPatterns.stream() + .map(LmdbIndexAwareJoinOrderPlanningTest::predicateValue) + .toList(); + int feedsIndex = generatorPredicates.indexOf(GRID_FEEDS.stringValue()); + int nameIndex = generatorPredicates.indexOf(GRID_NAME.stringValue()); + + assertTrue(feedsIndex >= 0, "Expected generator branch to contain grid:feeds"); + assertTrue(nameIndex >= 0, "Expected generator branch to contain grid:name"); + assertTrue(feedsIndex < nameIndex, + "Optimized electrical-grid explanation should keep grid:feeds before grid:name"); + } + } finally { + repository.shutDown(); + } + } + + private static PlannedBranch planGeneratorBranch(File dataDir, String indexes) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig(indexes); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadSyntheticGridData(repository); + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + estimator.rebuildOnceSlow(); + + StatementPattern typePattern = generatorTypePattern(); + StatementPattern feedsPattern = feedsPattern(); + Filter filteredNamePattern = filteredNamePattern(); + BindingSetAssignment targets = targetBindings(); + + JoinOrderPlanner planner = (JoinOrderPlanner) store.getBackingStore().getEvaluationStatistics(); + return new PlannedBranch( + planner.planJoinOrder(List.of(targets, typePattern, feedsPattern, filteredNamePattern), + java.util.Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING), + targets, + typePattern, + feedsPattern, + filteredNamePattern); + } finally { + repository.shutDown(); + } + } + + private static void loadSyntheticGridData(SailRepository repository) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + for (int i = 0; i < SUBSTATION_COUNT; i++) { + Resource substation = VF.createIRI("urn:test:substation:" + i); + connection.add(substation, RDF_TYPE, GRID_SUBSTATION); + connection.add(substation, GRID_NAME, VF.createLiteral("Substation " + i)); + } + for (int i = 0; i < GENERATOR_COUNT; i++) { + Resource generator = VF.createIRI("urn:test:generator:" + i); + Resource substation = VF.createIRI("urn:test:substation:" + (i % 12)); + connection.add(generator, RDF_TYPE, GRID_GENERATOR); + connection.add(generator, GRID_FEEDS, substation); + } + for (int i = 0; i < NOISE_COUNT; i++) { + Resource aliasHolder = VF.createIRI("urn:test:alias-holder:" + i); + connection.add(aliasHolder, GRID_ALIAS, VF.createLiteral("Substation " + (1 + (i % 3)))); + } + connection.commit(); + } + } + + private static StatementPattern generatorTypePattern() { + return new StatementPattern(Var.of("entity"), Var.of("rdfType", RDF_TYPE), + Var.of("generatorType", GRID_GENERATOR)); + } + + private static StatementPattern feedsPattern() { + return new StatementPattern(Var.of("entity"), Var.of("feedsPredicate", GRID_FEEDS), Var.of("substation")); + } + + private static Filter filteredNamePattern() { + StatementPattern namePattern = new StatementPattern(Var.of("substation"), Var.of("namePredicate", GRID_NAME), + Var.of("name")); + return new Filter(namePattern, + new Or( + new Compare(Var.of("name"), Var.of("target"), Compare.CompareOp.EQ), + new Compare(Var.of("name"), new ValueConstant(VF.createLiteral("Substation 3")), + Compare.CompareOp.EQ))); + } + + private static BindingSetAssignment targetBindings() { + BindingSetAssignment bindingSetAssignment = new BindingSetAssignment(); + QueryBindingSet first = new QueryBindingSet(); + first.addBinding("target", VF.createLiteral("Substation 1")); + QueryBindingSet second = new QueryBindingSet(); + second.addBinding("target", VF.createLiteral("Substation 2")); + bindingSetAssignment.setBindingSets(List.of(first, second)); + return bindingSetAssignment; + } + + private static String electricalGridQuery() { + return String.join("\n", + "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {", + " {", + " VALUES ?target { \"Substation 1\" \"Substation 2\" }", + " ?entity a .", + " ?entity ?name .", + " FILTER ((?name = ?target) || (?name = \"Substation 3\"))", + " }", + " UNION", + " {", + " VALUES ?target { \"Substation 1\" \"Substation 2\" }", + " ?entity a .", + " ?entity ?substation .", + " ?substation ?name .", + " FILTER ((?name = ?target) || (?name = \"Substation 3\"))", + " }", + " OPTIONAL {", + " ?entity ?substation2 .", + " }", + "}"); + } + + private record PlannedBranch(Optional plan, BindingSetAssignment targets, + StatementPattern typePattern, StatementPattern feedsPattern, Filter filteredNamePattern) { + } + + private static String predicateValue(StatementPattern statementPattern) { + return statementPattern.getPredicateVar().getValue().stringValue(); + } + + private static void collectStatementPatterns(TupleExpr tupleExpr, List patterns) { + if (tupleExpr instanceof StatementPattern) { + patterns.add((StatementPattern) tupleExpr); + return; + } + if (tupleExpr instanceof Join join) { + collectStatementPatterns(join.getLeftArg(), patterns); + collectStatementPatterns(join.getRightArg(), patterns); + return; + } + if (tupleExpr instanceof Filter filter) { + collectStatementPatterns(filter.getArg(), patterns); + return; + } + if (tupleExpr instanceof UnaryTupleOperator unaryTupleOperator) { + collectStatementPatterns(unaryTupleOperator.getArg(), patterns); + } + } + + private static T findFirst(QueryModelNode root, Class type) { + List matches = new ArrayList<>(1); + root.visit(new AbstractQueryModelVisitor() { + @Override + protected void meetNode(QueryModelNode node) throws RuntimeException { + if (matches.isEmpty() && type.isInstance(node)) { + matches.add(type.cast(node)); + } + super.meetNode(node); + } + }); + return matches.get(0); + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java new file mode 100644 index 00000000000..986f6c8f414 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java @@ -0,0 +1,371 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + ******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.lmdb; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.DataOutputStream; +import java.io.File; +import java.lang.reflect.Field; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.concurrent.atomic.AtomicLong; + +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.sail.NotifyingSailConnection; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import sun.misc.Unsafe; + +class LmdbSailStoreEstimatorPersistenceTest { + + private static final String SNAPSHOT_FILE = "join-estimator.rjes"; + + @Test + void closeWritesEstimatorSnapshotAndReopensLazy(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s = vf.createIRI("urn:s"); + var p = vf.createIRI("urn:p"); + var o = vf.createIRI("urn:o"); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + store.init(); + try { + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(); + conn.addStatement(s, p, o); + conn.commit(); + } + } finally { + store.shutDown(); + } + + assertTrue(new File(dataDir, SNAPSHOT_FILE).isFile(), "Expected estimator snapshot file after shutdown"); + + LmdbStore reopened = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + reopened.init(); + try { + LmdbSailStore backingStore = reopened.getBackingStore(); + SketchBasedJoinEstimator estimator = backingStore.getSketchBasedJoinEstimator(); + + Field loadedField = SketchBasedJoinEstimator.class.getDeclaredField("sketchesLoaded"); + loadedField.setAccessible(true); + assertFalse(loadedField.getBoolean(estimator), "Expected lazy startup with unloaded sketches"); + assertDoesNotThrow(estimator::isReady); + } finally { + reopened.shutDown(); + } + } + + @Test + void commitPersistsWithLruEvictionsAndRemainsReadyAfterRestart(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s = vf.createIRI("urn:s"); + var p = vf.createIRI("urn:p"); + var o = vf.createIRI("urn:o"); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + store.init(); + try { + LmdbSailStore backingStore = store.getBackingStore(); + SketchBasedJoinEstimator estimator = backingStore.getSketchBasedJoinEstimator(); + setSketchBudgetBytes(estimator, 0L, 0L); + + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(IsolationLevels.NONE); + conn.addStatement(s, p, o); + conn.commit(); + } + + Field loadedField = SketchBasedJoinEstimator.class.getDeclaredField("sketchesLoaded"); + loadedField.setAccessible(true); + assertTrue(loadedField.getBoolean(estimator), "LRU evictions must not unload estimator state"); + assertTrue(estimator.isReady()); + } finally { + store.shutDown(); + } + + assertTrue(new File(dataDir, SNAPSHOT_FILE).isFile(), "Expected estimator manifest after shutdown"); + assertTrue(new File(dataDir, SNAPSHOT_FILE + ".sketches").isFile(), + "Expected estimator sidecar after shutdown"); + File[] sidecarShards = dataDir.listFiles((dir, name) -> name.equals(SNAPSHOT_FILE + ".sketches") + || name.startsWith(SNAPSHOT_FILE + ".sketches.")); + assertTrue(sidecarShards != null && sidecarShards.length >= 1, + "Expected at least one estimator sidecar shard after shutdown"); + + LmdbStore reopened = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + reopened.init(); + try { + SketchBasedJoinEstimator estimator = reopened.getBackingStore().getSketchBasedJoinEstimator(); + assertTrue(estimator.isReady(), "Expected estimator to recover from persisted LRU snapshots"); + } finally { + reopened.shutDown(); + } + } + + @Test + void reopenRestoresPersistedSketchFamiliesAfterLruEviction(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s1 = vf.createIRI("urn:restart:s1"); + var s2 = vf.createIRI("urn:restart:s2"); + var p1 = vf.createIRI("urn:restart:p1"); + var p2 = vf.createIRI("urn:restart:p2"); + var o1 = vf.createIRI("urn:restart:o1"); + var o2 = vf.createIRI("urn:restart:o2"); + var c1 = vf.createIRI("urn:restart:c1"); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + store.init(); + try { + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + setSketchBudgetBytes(estimator, 0L, 0L); + + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(IsolationLevels.NONE); + conn.addStatement(s1, p1, o1, c1); + conn.addStatement(s2, p1, o1, c1); + conn.addStatement(s1, p2, o2, c1); + conn.commit(); + } + } finally { + store.shutDown(); + } + + LmdbStore reopened = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + reopened.init(); + try { + SketchBasedJoinEstimator estimator = reopened.getBackingStore().getSketchBasedJoinEstimator(); + assertTrue(estimator.isReady(), "Expected estimator to lazy-load persisted snapshot"); + assertEquals(2.0d, estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p1.stringValue()), + 0.0d, + "Predicate sketch should survive LMDB restart"); + assertEquals(2.0d, + estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, p1.stringValue(), o1.stringValue()), + 0.0d, + "Pair sketch should survive LMDB restart"); + assertEquals(2.0d, + estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), + o1.stringValue(), c1.stringValue()), + 0.0d, + "Complement sketches should survive LMDB restart"); + assertEquals(1.0d, + estimator.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Component.P, + p1.stringValue(), SketchBasedJoinEstimator.Component.P, p2.stringValue()), + 0.0d, + "Join-binding sketches should survive LMDB restart"); + } finally { + reopened.shutDown(); + } + } + + @Test + void repeatedRepositoryInitShutdownKeepsPersistedSketchesLoadable(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s1 = vf.createIRI("urn:cycle:s1"); + var s2 = vf.createIRI("urn:cycle:s2"); + var p1 = vf.createIRI("urn:cycle:p1"); + var p2 = vf.createIRI("urn:cycle:p2"); + var o1 = vf.createIRI("urn:cycle:o1"); + var o2 = vf.createIRI("urn:cycle:o2"); + var c1 = vf.createIRI("urn:cycle:c1"); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + SailRepository repository = new SailRepository(store); + + repository.init(); + try { + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + setSketchBudgetBytes(estimator, 0L, 0L); + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + connection.add(s1, p1, o1, c1); + connection.add(s2, p1, o1, c1); + connection.add(s1, p2, o2, c1); + connection.commit(); + } + } finally { + repository.shutDown(); + } + + repository.init(); + repository.shutDown(); + repository.init(); + + try { + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + assertTrue(estimator.isReady(), "Expected estimator to remain loadable across repeated init/shutdown"); + assertEquals(2.0d, estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p1.stringValue()), + 0.0d, + "Predicate sketch should survive repeated repository lifecycle"); + assertEquals(2.0d, + estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, p1.stringValue(), o1.stringValue()), + 0.0d, + "Pair sketch should survive repeated repository lifecycle"); + assertEquals(2.0d, + estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, p1.stringValue(), + o1.stringValue(), c1.stringValue()), + 0.0d, + "Complement sketch should survive repeated repository lifecycle"); + assertEquals(1.0d, + estimator.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Component.P, + p1.stringValue(), SketchBasedJoinEstimator.Component.P, p2.stringValue()), + 0.0d, + "Join-binding sketch should survive repeated repository lifecycle"); + } finally { + repository.shutDown(); + } + } + + @Test + void noneIsolationAppliesEstimatorUpdatesAcrossSinkFlushes(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s = vf.createIRI("urn:s"); + var p = vf.createIRI("urn:p"); + var o = vf.createIRI("urn:o"); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + store.init(); + try { + LmdbSailStore backingStore = store.getBackingStore(); + SketchBasedJoinEstimator estimator = backingStore.getSketchBasedJoinEstimator(); + estimator.stop(); + estimator.setRebuildAllowedSupplier(() -> false); + + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(IsolationLevels.NONE); + conn.addStatement(s, p, o); + // Namespace updates use a different sink and trigger internal flushes in NONE transactions. + conn.setNamespace("ex", "urn:example"); + conn.commit(); + } + + assertTrue(estimator.isReady(), + "Estimator should receive queued updates even when NONE transactions flush through another sink"); + } finally { + store.shutDown(); + } + } + + @Test + void commitSucceedsWhenLazyEstimatorSnapshotIsUnsupported(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s = vf.createIRI("urn:s"); + var p = vf.createIRI("urn:p"); + var o = vf.createIRI("urn:o"); + + writeLegacySnapshot(dataDir.toPath().resolve(SNAPSHOT_FILE)); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + store.init(); + try { + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(IsolationLevels.SNAPSHOT_READ); + conn.addStatement(s, p, o); + assertDoesNotThrow(conn::commit, + "Commit must succeed even if estimator state cannot be lazily loaded"); + } + } finally { + store.shutDown(); + } + + LmdbStore reopened = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + reopened.init(); + try { + try (NotifyingSailConnection conn = reopened.getConnection()) { + assertTrue(conn.hasStatement(s, p, o, false), + "Committed data must remain visible after reopening the store"); + } + } finally { + reopened.shutDown(); + } + } + + private static void setSketchBudgetBytes(SketchBasedJoinEstimator estimator, long minBytes, long maxBytes) + throws Exception { + Field minField = SketchBasedJoinEstimator.class.getDeclaredField("minSketchMemoryBytes"); + Field maxField = SketchBasedJoinEstimator.class.getDeclaredField("maxSketchMemoryBytes"); + minField.setAccessible(true); + maxField.setAccessible(true); + minField.setLong(estimator, minBytes); + maxField.setLong(estimator, maxBytes); + } + + private static void writeLegacySnapshot(Path snapshot) throws Exception { + Files.createDirectories(snapshot.getParent()); + try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(snapshot))) { + out.write(new byte[] { 'R', 'J', 'E', 'S' }); + out.writeByte(1); + } + } + + private static void loadManyStatements(LmdbStore store, int resourceCount) throws Exception { + var vf = SimpleValueFactory.getInstance(); + IRI condition = vf.createIRI("http://example.com/theme/medical/Condition"); + IRI code = vf.createIRI("http://example.com/theme/medical/code"); + IRI patient = vf.createIRI("http://example.com/theme/medical/patient"); + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(IsolationLevels.NONE); + for (int i = 0; i < resourceCount; i++) { + var subject = vf.createIRI("urn:test:persist:condition:" + i); + conn.addStatement(subject, org.eclipse.rdf4j.model.vocabulary.RDF.TYPE, condition); + conn.addStatement(subject, code, vf.createLiteral("DX-" + i)); + conn.addStatement(subject, patient, vf.createIRI("urn:test:persist:patient:" + (i % 512))); + } + conn.commit(); + } + } + + private static void forceRobustRebuildHeadroom(SketchBasedJoinEstimator estimator, long disableBytes, + long enableBytes) + throws Exception { + putLongField(estimator, "robustRebuildDisableHeadroomBytes", disableBytes); + putLongField(estimator, "robustRebuildEnableHeadroomBytes", enableBytes); + putLongField(estimator, "robustRebuildGcProbeFloorBytes", enableBytes); + putLongField(estimator, "robustRebuildRetryAfterNanos", 0L); + putLongField(estimator, "lastRobustHeadroomGcNanos", 0L); + } + + private static void forceAvailableHeapHeadroom(SketchBasedJoinEstimator estimator, long headroomBytes) + throws Exception { + putLongField(estimator, "debugAvailableHeapHeadroomOverrideBytes", headroomBytes); + } + + private static long rebuildEpoch(SketchBasedJoinEstimator estimator) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField("rebuildEpoch"); + field.setAccessible(true); + return ((AtomicLong) field.get(estimator)).get(); + } + + private static void putLongField(Object target, String fieldName, long value) throws Exception { + Field field = SketchBasedJoinEstimator.class.getDeclaredField(fieldName); + field.setAccessible(true); + unsafe().putLong(target, unsafe().objectFieldOffset(field), value); + } + + private static Unsafe unsafe() throws Exception { + Field field = Unsafe.class.getDeclaredField("theUnsafe"); + field.setAccessible(true); + return (Unsafe) field.get(null); + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java new file mode 100644 index 00000000000..dd651580744 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java @@ -0,0 +1,128 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class LmdbSketchAwareFilterPlacementTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final String LIBRARY = "http://example.com/theme/library/"; + private static final IRI RDF_TYPE = VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + private static final IRI COPY = VF.createIRI(LIBRARY, "Copy"); + private static final IRI LOCATED_AT = VF.createIRI(LIBRARY, "locatedAt"); + private static final IRI NAME = VF.createIRI(LIBRARY, "name"); + + @Test + void optimizedQueryKeepsBranchNameFilterAboveSelectiveJoinWhenSketchesReady(@TempDir File dataDir) + throws Exception { + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadLibraryData(repository); + store.getBackingStore().getSketchBasedJoinEstimator().rebuildOnceSlow(); + + String query = String.join("\n", + "PREFIX lib: ", + "SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE {", + " ?branch lib:name ?branchName .", + " ?copy a lib:Copy .", + " ?copy lib:locatedAt ?branch .", + " FILTER ((?branchName = \"Branch 0\") || (?branchName = \"Branch 1\"))", + " FILTER EXISTS {", + " ?copy a lib:Copy .", + " }", + " MINUS {", + " ?copy lib:locatedAt ?branch .", + " FILTER (CONTAINS(STR(?branch), \"branch/0\"))", + " }", + "}"); + + TupleExpr optimized; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + optimized = (TupleExpr) explanation.tupleExpr(); + } + + Filter branchNameFilter = findBranchNameFilter(optimized); + assertNotNull(branchNameFilter, "Expected optimized plan to retain the branch-name filter"); + assertTrue(branchNameFilter.getArg().getBindingNames().contains("copy"), + "Branch-name filter should stay above the selective copy join when sketch estimation is ready"); + } finally { + repository.shutDown(); + } + } + + private static Filter findBranchNameFilter(TupleExpr optimized) { + List matches = new ArrayList<>(1); + optimized.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter node) { + if (matches.isEmpty() && VarNameCollector.process(node.getCondition()).contains("branchName")) { + matches.add(node); + } + super.meet(node); + } + }); + return matches.isEmpty() ? null : matches.get(0); + } + + private static void loadLibraryData(SailRepository repository) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + + List branches = new ArrayList<>(100); + for (int i = 0; i < 100; i++) { + Resource branch = VF.createIRI("urn:test:branch:" + i); + branches.add(branch); + connection.add(branch, NAME, VF.createLiteral("Branch " + i)); + } + + for (int i = 0; i < 40; i++) { + Resource copy = VF.createIRI("urn:test:copy:" + i); + Resource branch = branches.get(i % 2); + connection.add(copy, RDF_TYPE, COPY); + connection.add(copy, LOCATED_AT, branch); + } + + for (int i = 0; i < 50; i++) { + Resource noise = VF.createIRI("urn:test:noise:" + i); + connection.add(noise, LOCATED_AT, branches.get(2 + (i % 20))); + } + + connection.commit(); + } + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java new file mode 100644 index 00000000000..e1d6b711422 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java @@ -0,0 +1,522 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.lmdb; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.time.StopWatch; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.repository.util.RDFInserter; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class SketchEstimatorThemeJoinAccuracyTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final IRI THEME_GRAPH = VF.createIRI("urn:test:theme-graph"); + private static final String LIBRARY_NS = "http://example.com/theme/library/"; + private static final IRI LIBRARY_LOCATED_AT = VF.createIRI(LIBRARY_NS, "locatedAt"); + private static final IRI LIBRARY_NAME = VF.createIRI(LIBRARY_NS, "name"); + private static final int TOP_PO_PAIRS = 80; + private static final int REQUIRED_JOIN_SCENARIOS = 5; + private static final int MIN_INTERSECTION = 25; + private static final double MAX_RELATIVE_ERROR = 0.20d; + + @Test + void estimatorMatchesManualJoinAcrossAllThemes(@TempDir File dataDir) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadAllThemesInSingleGraph(repository); + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + assertTrue(awaitJoinEstimationReady(statistics), + "LMDB evaluation statistics should expose join estimation after test-data load"); + + List scenarios = selectJoinScenarios(repository); + assertTrue(scenarios.size() >= REQUIRED_JOIN_SCENARIOS, + () -> "Insufficient join scenarios. Found: " + scenarios.size()); + + for (int i = 0; i < REQUIRED_JOIN_SCENARIOS; i++) { + JoinScenario scenario = scenarios.get(i); + double estimate = statistics.getCardinality(asJoinNode(scenario)); + + if (estimate <= 0.0d) { + System.out.println( + "Estimator returned zero for scenario left=" + scenario.left + ", right=" + scenario.right + + ", actual=" + scenario.actualJoinCount()); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + + } + + assertTrue(estimate > 0.0d, + () -> "Estimator returned zero for scenario left=" + scenario.left + ", right=" + scenario.right + + ", actual=" + scenario.actualJoinCount()); + + double relativeError = Math.abs(estimate - scenario.actualJoinCount()) / scenario.actualJoinCount(); + if (relativeError > MAX_RELATIVE_ERROR) { + System.out.println("Scenario sizes leftSubjects=" + scenario.leftSubjects() + ", rightSubjects=" + + scenario.rightSubjects() + ", intersection=" + scenario.actualJoinCount()); + printDirectPairCounts(repository, scenario); + } + if (relativeError > MAX_RELATIVE_ERROR) { + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + statistics.getCardinality(asJoinNode(scenario)); + } else { + System.out.println("Join estimate within 20% bound. left=" + scenario.left + ", right=" + + scenario.right + ", estimate=" + estimate + ", actual=" + scenario.actualJoinCount() + + ", error=" + relativeError); + } + if (relativeError > MAX_RELATIVE_ERROR) { + printScenarioDiagnostics(estimator, scenario); + } + + assertTrue(relativeError <= MAX_RELATIVE_ERROR, + () -> "Join estimate outside 20% bound. left=" + scenario.left + ", right=" + + scenario.right + ", estimate=" + estimate + ", actual=" + + scenario.actualJoinCount() + ", error=" + relativeError); + } + } finally { + repository.shutDown(); + } + } + + @Test + void plannerPrefersSelectiveChainEndForPathologicalLmdbJoin(@TempDir File dataDir) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + IRI hasArm = VF.createIRI("urn:hasArm"); + IRI hasResult = VF.createIRI("urn:hasResult"); + IRI biomarker = VF.createIRI("urn:biomarker"); + IRI targetMarker = VF.createIRI("urn:marker:target"); + + try { + loadPathologicalChainData(repository, hasArm, hasResult, biomarker, targetMarker); + + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + assertTrue(awaitJoinEstimationReady(statistics), + "LMDB evaluation statistics should expose join estimation after pathological-data load"); + + StatementPattern trialArmPattern = new StatementPattern( + Var.of("trial"), + Var.of("hasArmPredicate", hasArm), + Var.of("arm"), + Var.of("context", THEME_GRAPH)); + StatementPattern armResultPattern = new StatementPattern( + Var.of("arm"), + Var.of("hasResultPredicate", hasResult), + Var.of("result"), + Var.of("context", THEME_GRAPH)); + StatementPattern biomarkerPattern = new StatementPattern( + Var.of("result"), + Var.of("biomarkerPredicate", biomarker), + Var.of("targetMarker", targetMarker), + Var.of("context", THEME_GRAPH)); + + JoinOrderPlanner planner = (JoinOrderPlanner) statistics; + Optional plan = planner.planJoinOrder( + List.of(trialArmPattern, armResultPattern, biomarkerPattern), + Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected LMDB planner to produce a pathological-chain join order"); + assertEquals(List.of(biomarkerPattern, armResultPattern, trialArmPattern), plan.get().getOrderedArgs(), + "Planner should seed from the selective chain tail before expanding toward the broad root"); + } finally { + repository.shutDown(); + } + } + + @Test + void estimatorDoesNotZeroLibraryLocatedAtNameJoinAfterReload(@TempDir File dataDir) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LibraryJoinLoadResult loadResult = loadLibraryThemeIntoDefaultContext(dataDir, config); + assertTrue(loadResult.persisted(), + "Expected explicit persist after library-theme load to produce a reloadable snapshot"); + assertTrue(loadResult.leftRows() > 0.0d && loadResult.rightRows() > 0.0d, + () -> "Expected library-theme patterns to populate estimator counts before reload. leftRows=" + + loadResult.leftRows() + ", rightRows=" + loadResult.rightRows() + ", direct=" + + loadResult.directJoinEstimate()); + + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + assertTrue(awaitJoinEstimationReady(statistics), + "LMDB evaluation statistics should expose join estimation after library-theme reload"); + + StatementPattern locatedAtPattern = new StatementPattern( + Var.of("copy"), + Var.of("locatedAtPredicate", LIBRARY_LOCATED_AT), + Var.of("branch")); + StatementPattern branchNamePattern = new StatementPattern( + Var.of("branch"), + Var.of("namePredicate", LIBRARY_NAME), + Var.of("branchName")); + Join join = new Join(locatedAtPattern, branchNamePattern); + + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + double leftRows = estimator.estimateCount(SketchBasedJoinEstimator.Component.O, null, + LIBRARY_LOCATED_AT.stringValue(), null, null); + double rightRows = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, + LIBRARY_NAME.stringValue(), null, null); + double directJoinEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.O, null, + LIBRARY_LOCATED_AT.stringValue(), null, null) + .join(SketchBasedJoinEstimator.Component.S, null, LIBRARY_NAME.stringValue(), null, null) + .estimate(); + double plannerJoinEstimate = statistics.getCardinality(join); + long actualJoinRows = exactJoinRowsForLocatedAtName(repository); + + assertTrue(actualJoinRows > 0L, "Expected generated library theme to contain locatedAt/name join rows"); + assertEquals((double) actualJoinRows, plannerJoinEstimate, 0.0d, + () -> "Planner join estimate should fall back above zero for rare-overlap joins. leftRows=" + + leftRows + ", rightRows=" + rightRows + ", direct=" + directJoinEstimate + + ", actual=" + actualJoinRows); + } finally { + repository.shutDown(); + } + } + + private static void printScenarioDiagnostics(SketchBasedJoinEstimator estimator, JoinScenario scenario) { + String context = THEME_GRAPH.stringValue(); + String leftPredicate = scenario.left.predicate().stringValue(); + String leftObject = scenario.left.object().stringValue(); + String rightPredicate = scenario.right.predicate().stringValue(); + String rightObject = scenario.right.object().stringValue(); + + double leftEstimate = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, leftPredicate, + leftObject, context); + double rightEstimate = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, rightPredicate, + rightObject, context); + double poLeft = estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, leftPredicate, leftObject); + double pcLeft = estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.PC, leftPredicate, context); + double ocLeft = estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.OC, leftObject, context); + double poRight = estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, rightPredicate, rightObject); + double pcRight = estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.PC, rightPredicate, context); + double ocRight = estimator.cardinalityPair(SketchBasedJoinEstimator.Pair.OC, rightObject, context); + double pairJoinEstimate = estimator.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Pair.PO, leftPredicate, leftObject, SketchBasedJoinEstimator.Pair.PO, + rightPredicate, rightObject); + + System.out.println("Diagnostics leftEstimate=" + leftEstimate + ", rightEstimate=" + rightEstimate + + ", pairJoinEstimate(POxPO)=" + pairJoinEstimate); + System.out.println("Diagnostics leftPairs po=" + poLeft + ", pc=" + pcLeft + ", oc=" + ocLeft); + System.out.println("Diagnostics rightPairs po=" + poRight + ", pc=" + pcRight + ", oc=" + ocRight); + } + + private static void printDirectPairCounts(SailRepository repository, JoinScenario scenario) { + long leftStatements = 0L; + long rightStatements = 0L; + Set leftSubjects = new HashSet<>(); + Set rightSubjects = new HashSet<>(); + + try (SailRepositoryConnection connection = repository.getConnection(); + CloseableIteration left = connection.getStatements( + null, scenario.left.predicate(), scenario.left.object(), false, THEME_GRAPH); + CloseableIteration right = connection.getStatements( + null, scenario.right.predicate(), scenario.right.object(), false, THEME_GRAPH)) { + while (left.hasNext()) { + Statement st = left.next(); + leftStatements++; + leftSubjects.add(st.getSubject().stringValue()); + } + while (right.hasNext()) { + Statement st = right.next(); + rightStatements++; + rightSubjects.add(st.getSubject().stringValue()); + } + } + + System.out.println("Direct counts leftStatements=" + leftStatements + ", leftDistinctSubjects=" + + leftSubjects.size() + ", rightStatements=" + rightStatements + ", rightDistinctSubjects=" + + rightSubjects.size()); + } + + private static boolean awaitJoinEstimationReady(EvaluationStatistics statistics) throws InterruptedException { + long now = System.currentTimeMillis(); + long deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(10); + while (System.currentTimeMillis() < deadline) { + if (statistics.supportsJoinEstimation()) { + return true; + } + Thread.sleep(100); + } + deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(50); + while (System.currentTimeMillis() < deadline) { + if (statistics.supportsJoinEstimation()) { + return true; + } + System.out.println("Waiting for join estimation to become available, waited " + + (System.currentTimeMillis() - now) / 1000 + " seconds..."); + Thread.sleep(1000); + } + return statistics.supportsJoinEstimation(); + } + + private static Join asJoinNode(JoinScenario scenario) { + StatementPattern left = new StatementPattern( + Var.of("s"), + Var.of("leftPredicate", scenario.left.predicate()), + Var.of("leftObject", scenario.left.object()), + Var.of("leftContext", THEME_GRAPH)); + + StatementPattern right = new StatementPattern( + Var.of("s"), + Var.of("rightPredicate", scenario.right.predicate()), + Var.of("rightObject", scenario.right.object()), + Var.of("rightContext", THEME_GRAPH)); + + return new Join(left, right); + } + + private static void loadAllThemesInSingleGraph(SailRepository repository) { + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + var inserter = new RDFInserter(connection); + inserter.enforceContext(THEME_GRAPH); + for (var themeDataset : ThemeDataSetGenerator.Theme.values()) { + StopWatch started = StopWatch.createStarted(); + System.out.println("Loading theme dataset: " + themeDataset); + ThemeDataSetGenerator.generate(themeDataset, inserter); + System.out.println("Finished loading theme dataset: " + themeDataset + " in " + started); + } + connection.commit(); + } + } + + private static LibraryJoinLoadResult loadLibraryThemeIntoDefaultContext(File dataDir, LmdbStoreConfig config) + throws Exception { + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + ThemeDataSetGenerator.generate(Theme.LIBRARY, new RDFInserter(connection)); + connection.commit(); + } + SketchBasedJoinEstimator estimator = store.getBackingStore().getSketchBasedJoinEstimator(); + double leftRows = estimator.estimateCount(SketchBasedJoinEstimator.Component.O, null, + LIBRARY_LOCATED_AT.stringValue(), null, null); + double rightRows = estimator.estimateCount(SketchBasedJoinEstimator.Component.S, null, + LIBRARY_NAME.stringValue(), null, null); + double directJoinEstimate = estimator.estimate(SketchBasedJoinEstimator.Component.O, null, + LIBRARY_LOCATED_AT.stringValue(), null, null) + .join(SketchBasedJoinEstimator.Component.S, null, LIBRARY_NAME.stringValue(), null, null) + .estimate(); + boolean persisted = estimator.persistIfDirty(); + return new LibraryJoinLoadResult(leftRows, rightRows, directJoinEstimate, persisted); + } finally { + repository.shutDown(); + } + } + + private static void loadPathologicalChainData(SailRepository repository, IRI hasArm, IRI hasResult, IRI biomarker, + IRI targetMarker) { + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + for (int trialIndex = 0; trialIndex < 8; trialIndex++) { + Resource trial = VF.createIRI("urn:pathological:trial:" + trialIndex); + for (int armIndex = 0; armIndex < 50; armIndex++) { + Resource arm = VF.createIRI("urn:pathological:arm:" + trialIndex + ':' + armIndex); + Resource result = VF.createIRI("urn:pathological:result:" + trialIndex + ':' + armIndex); + IRI marker = trialIndex == 0 && armIndex == 0 + ? targetMarker + : VF.createIRI("urn:pathological:marker:" + trialIndex + ':' + armIndex); + connection.add(trial, hasArm, arm, THEME_GRAPH); + connection.add(arm, hasResult, result, THEME_GRAPH); + connection.add(result, biomarker, marker, THEME_GRAPH); + } + } + connection.commit(); + } + } + + private static List selectJoinScenarios(SailRepository repository) { + Map pairCounts = new HashMap<>(); + + try (SailRepositoryConnection connection = repository.getConnection(); + CloseableIteration statements = connection.getStatements( + null, null, null, false, THEME_GRAPH)) { + while (statements.hasNext()) { + Statement statement = statements.next(); + PoKey key = PoKey.of(statement); + pairCounts.merge(key, 1, Integer::sum); + } + } + + List topPairs = pairCounts.entrySet() + .stream() + .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) + .limit(TOP_PO_PAIRS) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + + Map> subjectsByPair = new HashMap<>(); + for (PoKey pair : topPairs) { + subjectsByPair.put(pair, new HashSet<>()); + } + + try (SailRepositoryConnection connection = repository.getConnection(); + CloseableIteration statements = connection.getStatements( + null, null, null, false, THEME_GRAPH)) { + while (statements.hasNext()) { + Statement statement = statements.next(); + PoKey key = PoKey.of(statement); + Set subjects = subjectsByPair.get(key); + if (subjects != null) { + subjects.add(statement.getSubject()); + } + } + } + + List candidates = new ArrayList<>(); + for (int i = 0; i < topPairs.size(); i++) { + PoKey left = topPairs.get(i); + Set leftSubjects = subjectsByPair.get(left); + if (leftSubjects == null || leftSubjects.isEmpty()) { + continue; + } + + for (int j = i + 1; j < topPairs.size(); j++) { + PoKey right = topPairs.get(j); + Set rightSubjects = subjectsByPair.get(right); + if (rightSubjects == null || rightSubjects.isEmpty()) { + continue; + } + + long intersection = intersectCount(leftSubjects, rightSubjects); + if (intersection > 0L) { + candidates.add( + new JoinScenario(left, right, leftSubjects.size(), rightSubjects.size(), intersection)); + } + } + } + + candidates.sort(Comparator.comparingLong(JoinScenario::actualJoinCount).reversed()); + List strongCandidates = candidates.stream() + .filter(candidate -> candidate.actualJoinCount() >= MIN_INTERSECTION) + .collect(Collectors.toList()); + return strongCandidates.size() >= REQUIRED_JOIN_SCENARIOS ? strongCandidates : candidates; + } + + private static long exactJoinRowsForLocatedAtName(SailRepository repository) { + Map branchNameRows = new HashMap<>(); + + try (SailRepositoryConnection connection = repository.getConnection(); + CloseableIteration branchNames = connection.getStatements( + null, LIBRARY_NAME, null, false); + CloseableIteration locatedAtStatements = connection.getStatements( + null, LIBRARY_LOCATED_AT, null, false)) { + while (branchNames.hasNext()) { + Statement statement = branchNames.next(); + branchNameRows.merge(statement.getSubject(), 1, Integer::sum); + } + + long total = 0L; + while (locatedAtStatements.hasNext()) { + Statement statement = locatedAtStatements.next(); + if (statement.getObject() instanceof Resource branch) { + total += branchNameRows.getOrDefault(branch, 0); + } + } + return total; + } + } + + private static long intersectCount(Set first, Set second) { + Set smaller = first.size() <= second.size() ? first : second; + Set larger = first.size() <= second.size() ? second : first; + + long count = 0L; + for (Resource value : smaller) { + if (larger.contains(value)) { + count++; + } + } + return count; + } + + private record PoKey(IRI predicate, Value object) { + + private PoKey { + Objects.requireNonNull(predicate, "predicate"); + Objects.requireNonNull(object, "object"); + } + + private static PoKey of(Statement statement) { + return new PoKey(statement.getPredicate(), statement.getObject()); + } + } + + private record JoinScenario(PoKey left, PoKey right, int leftSubjects, int rightSubjects, long actualJoinCount) { + } + + private record LibraryJoinLoadResult(double leftRows, double rightRows, double directJoinEstimate, + boolean persisted) { + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java new file mode 100644 index 00000000000..f634c05b33d --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java @@ -0,0 +1,140 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.benchmark; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.io.FileUtils; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.lmdb.LmdbStore; + +public final class BenchmarkJoinEstimatorSupport { + + private static final int BENCHMARK_STALENESS_THRESHOLD = 3; + private static final long ROBUST_READY_TIMEOUT_NANOS = TimeUnit.MINUTES.toNanos(1); + private static final long ROBUST_READY_POLL_MILLIS = 1000L; + private static final long NO_HEADROOM_OVERRIDE = -1L; + private static final String EXPECTED_DB_FILE_SIZES_FILE = "expected-db-file-sizes.properties"; + private static final String TRIPLES_DATA_SIZE_PROPERTY = "triples.data.mdb.size.bytes"; + private static final String VALUES_DATA_SIZE_PROPERTY = "values.data.mdb.size.bytes"; + private static final String TRIPLES_DATA_FILE = "triples/data.mdb"; + private static final String VALUES_DATA_FILE = "values/data.mdb"; + private static final Method GET_BACKING_STORE = reflectMethod(LmdbStore.class, "getBackingStore"); + + private static final Method LAST_JOIN_ORDER_PLANNER_PATH = reflectMethod( + SketchBasedJoinEstimator.class, + "lastJoinOrderPlannerPath"); + + private BenchmarkJoinEstimatorSupport() { + } + + public static void prepareEstimatorForBulkLoad(SailRepository repository, LmdbStore store) throws IOException { + repository.init(); + SketchBasedJoinEstimator estimator = resolveEstimator(store); + estimator.stop(); + estimator.discardAndMarkForRebuild(); + } + + public static void prepareFixedMedicalRecordsExplanationStore(File storeDirectory) throws IOException { + FileUtils.deleteDirectory(storeDirectory); + Files.createDirectories(storeDirectory.toPath()); + + LmdbStore store = new LmdbStore(storeDirectory, ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); + var vf = SimpleValueFactory.getInstance(); + var condition = vf.createIRI("http://example.com/theme/medical/Condition"); + var medication = vf.createIRI("http://example.com/theme/medical/Medication"); + var code = vf.createIRI("http://example.com/theme/medical/code"); + + try { + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + connection.add(vf.createIRI("urn:test:condition:1"), org.eclipse.rdf4j.model.vocabulary.RDF.TYPE, + condition); + connection.add(vf.createIRI("urn:test:condition:1"), code, vf.createLiteral("DX-200")); + connection.add(vf.createIRI("urn:test:condition:2"), org.eclipse.rdf4j.model.vocabulary.RDF.TYPE, + condition); + connection.add(vf.createIRI("urn:test:condition:2"), code, vf.createLiteral("DX-202")); + connection.add(vf.createIRI("urn:test:medication:1"), org.eclipse.rdf4j.model.vocabulary.RDF.TYPE, + medication); + connection.add(vf.createIRI("urn:test:medication:1"), code, vf.createLiteral("DX-201")); + connection.commit(); + } + } finally { + repository.shutDown(); + } + + writeExpectedDbFileSizes(storeDirectory); + } + + private static SketchBasedJoinEstimator resolveEstimator(LmdbStore store) throws IOException { + Object backingStore = invoke(GET_BACKING_STORE, store); + Method getSketchBasedJoinEstimator = reflectMethod(backingStore.getClass(), "getSketchBasedJoinEstimator"); + return (SketchBasedJoinEstimator) invoke(getSketchBasedJoinEstimator, backingStore); + } + + private static void persistReusableEstimatorSnapshot(SketchBasedJoinEstimator estimator) { + estimator.persistIfDirty(); + + } + + private static void writeExpectedDbFileSizes(File storeDirectory) throws IOException { + Properties properties = new Properties(); + properties.setProperty(TRIPLES_DATA_SIZE_PROPERTY, + Long.toString(new File(storeDirectory, TRIPLES_DATA_FILE).length())); + properties.setProperty(VALUES_DATA_SIZE_PROPERTY, + Long.toString(new File(storeDirectory, VALUES_DATA_FILE).length())); + try (var outputStream = new FileOutputStream(new File(storeDirectory, EXPECTED_DB_FILE_SIZES_FILE))) { + properties.store(outputStream, "Expected LMDB data file sizes for ThemeQueryBenchmark"); + } + } + + private static Method reflectMethod(Class owner, String methodName, Class... parameterTypes) { + try { + Method method = owner.getDeclaredMethod(methodName, parameterTypes); + method.setAccessible(true); + return method; + } catch (NoSuchMethodException e) { + throw new ExceptionInInitializerError(e); + } + } + + private static Object invoke(Method method, Object target, Object... args) throws IOException { + try { + return method.invoke(target, args); + } catch (IllegalAccessException e) { + throw new IOException("Unable to access benchmark join-estimator helper " + method.getName(), e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof IOException ioException) { + throw ioException; + } + if (cause instanceof RuntimeException runtimeException) { + throw runtimeException; + } + if (cause instanceof Error error) { + throw error; + } + throw new IOException("Benchmark join-estimator helper failed: " + method.getName(), cause); + } + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java new file mode 100644 index 00000000000..9623e8436e4 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.benchmark; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.nio.file.Files; +import java.nio.file.Path; + +import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; +import org.junit.jupiter.api.Test; + +class ThemeQueryBenchmarkSmokeTest { + + @Test + void executeQueryReturnsExpectedCountForMedicalRecordsQueryTwo() throws Exception { + ThemeQueryBenchmark benchmark = new ThemeQueryBenchmark(); + benchmark.themeName = Theme.MEDICAL_RECORDS.name(); + benchmark.z_queryIndex = 2; + + benchmark.setup(); + try { + assertEquals(ThemeQueryCatalog.expectedCountFor(Theme.MEDICAL_RECORDS, 2), benchmark.executeQuery()); + } finally { + benchmark.tearDown(); + } + } + + @Test + void executeQueryTwiceReturnsExpectedCountForMedicalRecordsQueryTwo() throws Exception { + ThemeQueryBenchmark benchmark = new ThemeQueryBenchmark(); + benchmark.themeName = Theme.MEDICAL_RECORDS.name(); + benchmark.z_queryIndex = 2; + + benchmark.setup(); + try { + long expected = ThemeQueryCatalog.expectedCountFor(Theme.MEDICAL_RECORDS, 2); + assertEquals(expected, benchmark.executeQuery()); + assertEquals(expected, benchmark.executeQuery()); + } finally { + benchmark.tearDown(); + } + } + + @Test + void secondBenchmarkTrialReusesPersistedJoinEstimatorSnapshot() throws Exception { + Path snapshot = Path.of("target", "lmdb-theme-query-benchmark", "complete", "join-estimator.rjes"); + Path sketches = Path.of("target", "lmdb-theme-query-benchmark", "complete", "join-estimator.rjes.sketches"); + + ThemeQueryBenchmark first = new ThemeQueryBenchmark(); + first.themeName = Theme.MEDICAL_RECORDS.name(); + first.z_queryIndex = 0; + first.setup(); + try { + assertEquals(ThemeQueryCatalog.expectedCountFor(Theme.MEDICAL_RECORDS, 0), first.executeQuery()); + } finally { + first.tearDown(); + } + + assertTrue(Files.exists(snapshot), "Expected persisted join-estimator snapshot after first benchmark trial"); + assertTrue(Files.exists(sketches), "Expected persisted join-estimator sketches after first benchmark trial"); + long snapshotLastModified = Files.getLastModifiedTime(snapshot).toMillis(); + long sketchesLastModified = Files.getLastModifiedTime(sketches).toMillis(); + + ThemeQueryBenchmark second = new ThemeQueryBenchmark(); + second.themeName = Theme.MEDICAL_RECORDS.name(); + second.z_queryIndex = 1; + second.setup(); + try { + assertEquals(ThemeQueryCatalog.expectedCountFor(Theme.MEDICAL_RECORDS, 1), second.executeQuery()); + } finally { + second.tearDown(); + } + + assertEquals(snapshotLastModified, Files.getLastModifiedTime(snapshot).toMillis(), + "Second benchmark trial should reuse the persisted join-estimator snapshot instead of rewriting it"); + assertEquals(sketchesLastModified, Files.getLastModifiedTime(sketches).toMillis(), + "Second benchmark trial should reuse the persisted join-estimator sketches instead of rebuilding them"); + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java new file mode 100644 index 00000000000..09e6ac85a9e --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java @@ -0,0 +1,507 @@ +/******************************************************************************* + * Copyright (c) 2025 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.benchmark; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.io.FileUtils; +import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; +import org.eclipse.rdf4j.benchmark.common.plan.FeatureFlagCollector; +import org.eclipse.rdf4j.benchmark.common.plan.QueryPlanCapture; +import org.eclipse.rdf4j.benchmark.common.plan.QueryPlanCaptureContext; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.query.TupleQuery; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.util.RDFInserter; +import org.eclipse.rdf4j.sail.lmdb.LmdbStore; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.OptionsBuilder; +import org.openjdk.jmh.runner.options.TimeValue; + +@State(Scope.Benchmark) +@Warmup(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 30) +@BenchmarkMode({ Mode.AverageTime }) +@Fork(value = 1, jvmArgs = { "-Xms1G", "-Xmx32G" }) +@Measurement(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 10) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +public class ThemeQueryHexaBenchmark { + + private static final String STORE_NAME = "lmdb"; + private static final String TARGET_DIRECTORY_ROOT = "core/sail/lmdb/"; + private static final File STORE_DIRECTORY; + + static { + File target = new File("target", "lmdb-theme-query-hexa-benchmark"); + if (target.getAbsolutePath().toLowerCase().contains(TARGET_DIRECTORY_ROOT)) { + STORE_DIRECTORY = target; + } else { + // In case the benchmark is run from an IDE with a different working directory, we want to ensure the store + // directory is still in the target directory of the project. + STORE_DIRECTORY = new File(TARGET_DIRECTORY_ROOT + "target", "lmdb-theme-query-hexa-benchmark"); + } + } + + private static final String TRIPLES_DATA_FILE = "triples/data.mdb"; + private static final String VALUES_DATA_FILE = "values/data.mdb"; + private static final String EXPECTED_DB_FILE_SIZES_FILE = "expected-db-file-sizes.properties"; + private static final String TRIPLES_DATA_SIZE_PROPERTY = "triples.data.mdb.size.bytes"; + private static final String VALUES_DATA_SIZE_PROPERTY = "values.data.mdb.size.bytes"; + private static final long EXPECTED_TRIPLES_DATA_SIZE_BYTES = 1500921856L; + private static final long EXPECTED_VALUES_DATA_SIZE_BYTES = 713687040L; + + @Param({ + "0", + "1", + "2", + "3", "4", + "5", "6", "7", "8", + "9", "10" + }) + public int z_queryIndex; + + @Param({ +// "MEDICAL_RECORDS", +// "SOCIAL_MEDIA", +// "LIBRARY", +// "ENGINEERING", +// "HIGHLY_CONNECTED", +// "TRAIN", + "ELECTRICAL_GRID", +// "PHARMA" + }) + public String themeName; + + private SailRepository repository; + private LmdbStore store; + private LmdbStoreConfig storeConfig; + private QueryJoinOptimizer.JoinOrderStrategy previousJoinOrderStrategy; + private Theme theme; + private String query; + private long expected; + + public static void main(String[] args) throws RunnerException { + var opt = new OptionsBuilder() + .include("ThemeQueryHexaBenchmark.explainQuery") + .forks(0) + .measurementIterations(1) + .measurementBatchSize(1) + .measurementTime(TimeValue.milliseconds(1)) + .warmupIterations(0) + .build(); + new Runner(opt).run(); + } + + @Setup(Level.Trial) + public void setup() throws IOException { +// previousJoinOrderStrategy = QueryJoinOptimizer.JOIN_ORDER_STRATEGY; +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = QueryJoinOptimizer.JoinOrderStrategy.GREEDY; + + System.out.println(STORE_DIRECTORY.getAbsolutePath()); + theme = Theme.valueOf(themeName); + query = ThemeQueryCatalog.queryFor(theme, z_queryIndex); + expected = ThemeQueryCatalog.expectedCountFor(theme, z_queryIndex); + if (!STORE_DIRECTORY.exists() && !STORE_DIRECTORY.mkdirs()) { + throw new IOException("Unable to create fixed LMDB benchmark directory: " + STORE_DIRECTORY); + } + storeConfig = ConfigUtil.createConfig(); + storeConfig.setTripleIndexes("spoc,sopc,psoc,posc,ospc,opsc"); + store = new LmdbStore(STORE_DIRECTORY, storeConfig); + repository = new SailRepository(store); + ensureDataLoadedAndValidated(); + if (QueryPlanCapture.isCaptureEnabled()) { + captureQueryPlanSnapshot(); + } + } + + private void ensureDataLoadedAndValidated() throws IOException { + var expectedDbFileSizes = readExpectedDbFileSizes(); + if (!hasExpectedDbFileSizes(expectedDbFileSizes)) { + rebuildStoreFromScratch(); + expectedDbFileSizes = currentDbFileSizes(); + writeExpectedDbFileSizes(expectedDbFileSizes); + } + + if (!hasExpectedDbFileSizes(expectedDbFileSizes)) { + var currentDbFileSizes = currentDbFileSizes(); + throw new IllegalStateException("Unexpected LMDB db file sizes in fixed benchmark store. Expected " + + TRIPLES_DATA_FILE + "=" + expectedDbFileSizes.triplesDataSizeBytes + " and " + + VALUES_DATA_FILE + "=" + expectedDbFileSizes.valuesDataSizeBytes + " but got " + + TRIPLES_DATA_FILE + "=" + currentDbFileSizes.triplesDataSizeBytes + " and " + + VALUES_DATA_FILE + "=" + currentDbFileSizes.valuesDataSizeBytes); + } + + if (!expectedDbFileSizeFile().isFile()) { + writeExpectedDbFileSizes(expectedDbFileSizes); + } + } + + private void rebuildStoreFromScratch() throws IOException { + if (repository != null) { + repository.shutDown(); + } + + FileUtils.deleteDirectory(STORE_DIRECTORY); + if (!STORE_DIRECTORY.exists() && !STORE_DIRECTORY.mkdirs()) { + throw new IOException("Unable to recreate fixed LMDB benchmark directory: " + STORE_DIRECTORY); + } + + storeConfig = ConfigUtil.createConfig(); + store = new LmdbStore(STORE_DIRECTORY, storeConfig); + repository = new SailRepository(store); + loadData(); + } + + private DbFileSizes readExpectedDbFileSizes() throws IOException { + var expectedDbFileSizeFile = expectedDbFileSizeFile(); + if (!expectedDbFileSizeFile.isFile()) { + return defaultExpectedDbFileSizes(); + } + var properties = new Properties(); + try (var inputStream = new FileInputStream(expectedDbFileSizeFile)) { + properties.load(inputStream); + } + try { + return new DbFileSizes( + parseSizeProperty(properties, TRIPLES_DATA_SIZE_PROPERTY), + parseSizeProperty(properties, VALUES_DATA_SIZE_PROPERTY)); + } catch (IllegalStateException e) { + System.out.println("Ignoring invalid expected LMDB size file " + expectedDbFileSizeFile + ": " + + e.getMessage()); + if (!expectedDbFileSizeFile.delete()) { + System.out.println("Unable to delete invalid expected LMDB size file: " + expectedDbFileSizeFile); + } + return defaultExpectedDbFileSizes(); + } + } + + private void writeExpectedDbFileSizes(DbFileSizes expectedDbFileSizes) throws IOException { + var properties = new Properties(); + properties.setProperty(TRIPLES_DATA_SIZE_PROPERTY, Long.toString(expectedDbFileSizes.triplesDataSizeBytes)); + properties.setProperty(VALUES_DATA_SIZE_PROPERTY, Long.toString(expectedDbFileSizes.valuesDataSizeBytes)); + try (var outputStream = new FileOutputStream(expectedDbFileSizeFile())) { + properties.store(outputStream, "Expected LMDB data file sizes for ThemeQueryBenchmark"); + } + } + + private long parseSizeProperty(Properties properties, String propertyName) { + var value = properties.getProperty(propertyName); + if (value == null) { + throw new IllegalStateException("Missing property " + propertyName); + } + try { + return Long.parseLong(value); + } catch (NumberFormatException e) { + throw new IllegalStateException("Invalid long value for property " + propertyName + ": " + value, e); + } + } + + private DbFileSizes defaultExpectedDbFileSizes() { + return new DbFileSizes(EXPECTED_TRIPLES_DATA_SIZE_BYTES, EXPECTED_VALUES_DATA_SIZE_BYTES); + } + + private DbFileSizes currentDbFileSizes() { + return new DbFileSizes(dbFileSize(TRIPLES_DATA_FILE), dbFileSize(VALUES_DATA_FILE)); + } + + private boolean hasExpectedDbFileSizes(DbFileSizes expectedDbFileSizes) { + var currentDbFileSizes = currentDbFileSizes(); + return currentDbFileSizes.triplesDataSizeBytes == expectedDbFileSizes.triplesDataSizeBytes + && currentDbFileSizes.valuesDataSizeBytes == expectedDbFileSizes.valuesDataSizeBytes; + } + + private File expectedDbFileSizeFile() { + return new File(STORE_DIRECTORY, EXPECTED_DB_FILE_SIZES_FILE); + } + + private long dbFileSize(String relativePath) { + return new File(STORE_DIRECTORY, relativePath).length(); + } + + private void loadData() throws IOException { + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + var inserter = new RDFInserter(connection); + for (var themeDataset : Theme.values()) { + System.out.println("Loading theme dataset: " + themeDataset); + ThemeDataSetGenerator.generate(themeDataset, inserter); + } + connection.commit(); + } + } + + private void captureQueryPlanSnapshot() throws IOException { + var benchmarkQuery = ThemeQueryCatalog.benchmarkQueryFor(theme, z_queryIndex); + var featureFlags = new FeatureFlagCollector() + .addValue("themeBenchmark.themeName", () -> themeName) + .addValue("themeBenchmark.queryIndex", () -> z_queryIndex) + .addReflectiveGetter("lmdbStore.writable", store, "isWritable") + .addReflectiveGetter("lmdbConfig.tripleIndexes", storeConfig, "getTripleIndexes") + .addReflectiveGetter("lmdbConfig.forceSync", storeConfig, "getForceSync") + .addReflectiveField("lmdbConfig.autoGrow", storeConfig, "autoGrow") + .addReflectiveGetter("lmdbConfig.valueDbSize", storeConfig, "getValueDBSize") + .addReflectiveGetter("lmdbConfig.tripleDbSize", storeConfig, "getTripleDBSize"); + QueryPlanCapture.registerConfiguredFeatureFlags(featureFlags); + + var context = QueryPlanCaptureContext.builder() + .outputDirectory(QueryPlanCapture.resolveOutputDirectory().resolve(STORE_NAME)) + .queryId(STORE_NAME + "-" + themeName + "-q" + z_queryIndex) + .queryString(query) + .benchmark("ThemeQueryBenchmark") + .addMetadata("store", STORE_NAME) + .addMetadata("theme", themeName) + .addMetadata("queryIndex", Integer.toString(z_queryIndex)) + .addMetadata("queryName", benchmarkQuery.getName()) + .addMetadata("expectedCount", Long.toString(expected)) + .addMetadata(QueryPlanCapture.metadataFromSystemProperties()) + .featureFlagCollector(featureFlags) + .tupleExprRenderer(this::renderTupleExprWithIr) + .build(); + + try (var connection = repository.getConnection()) { + var snapshotPath = new QueryPlanCapture() + .captureAndWrite(context, () -> connection.prepareTupleQuery(query)); + System.out.println("Query plan snapshot written to: " + snapshotPath); + } + } + + private String renderTupleExprWithIr(TupleExpr tupleExpr) { + var config = new TupleExprIRRenderer.Config(); + config.verifyRoundTrip = false; + return new TupleExprIRRenderer(config).render(tupleExpr); + } + + @TearDown(Level.Trial) + public void tearDown() { +// if (previousJoinOrderStrategy != null) { +// QueryJoinOptimizer.JOIN_ORDER_STRATEGY = previousJoinOrderStrategy; +// previousJoinOrderStrategy = null; +// } + if (repository != null) { + repository.shutDown(); + repository = null; + } + store = null; + storeConfig = null; + } + + @Benchmark + public long executeQuery() { + try (var connection = repository.getConnection()) { + long count; + TupleQuery tupleQuery = connection.prepareTupleQuery(query); + tupleQuery.setMaxExecutionTime(60 * 5); // 5 minutes + try (var evaluate = tupleQuery.evaluate()) { + count = evaluate + .stream() + .count(); + } + + if (count != expected) { + throw new IllegalStateException("Unexpected count: expected " + expected + " but got " + count); + } + + return count; + } + } + + @Benchmark + public void explainQuery() { + System.out.println("=== Explanation for theme " + themeName + " and query index " + z_queryIndex + " ==="); + System.out.println("Query:\n" + query); + System.out.println(); + + try { + QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = false; + try (var connection = repository.getConnection()) { + System.out.println("=== Explanation with join reordering disabled ==="); + Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + System.out.println(explain); + System.out.println(); + TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); + System.out.println("=== Rendered optimized TupleExpr with join reordering disabled ==="); + System.out.println(new TupleExprIRRenderer().render(tupleExpr)); + System.out.println(); + System.out.println(); + } + QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; + try (var connection = repository.getConnection()) { + System.out.println("=== Explanation with join reordering enabled ==="); + Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + System.out.println(explain); + System.out.println(); + TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); + System.out.println("=== Rendered optimized TupleExpr with join reordering enabled ==="); + System.out.println(new TupleExprIRRenderer().render(tupleExpr)); + System.out.println(); + System.out.println(); + } +// QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; +// try (var connection = repository.getConnection()) { +// System.out.println("=== Explanation with join reordering enabled and telemetry ==="); +// TupleQuery tupleQuery = connection.prepareTupleQuery(query); +// tupleQuery.setMaxExecutionTime(9999999); +// Explanation explain = tupleQuery.explain(Explanation.Level.Telemetry); +// System.out.println(explain); +// System.out.println(); +// } + } finally { + QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; + } + + } + + @Test + @Disabled + public void testQueryCounts() throws IOException { + var queryIndexes = paramValues("z_queryIndex"); + var themeNames = paramValues("themeName"); + for (var themeNameValue : themeNames) { + for (var queryIndexValue : queryIndexes) { + themeName = themeNameValue; + z_queryIndex = Integer.parseInt(queryIndexValue); + setup(); + try { + var actual = executeQuery(); + var expected = ThemeQueryCatalog.expectedCountFor(theme, z_queryIndex); + System.out.println("For theme " + themeName + " and query index " + z_queryIndex + + ", expected count is " + expected + " and actual count is " + actual); + assertEquals(expected, actual, + "Unexpected count for theme " + themeName + " and query index " + z_queryIndex); + } finally { + tearDown(); + } + } + } + } + + @Test + public void setupVerifiesExpectedDbFileSizesInFixedStore() throws IOException { + themeName = "MEDICAL_RECORDS"; + z_queryIndex = 0; + setup(); + try { + var expectedDbFileSizes = readExpectedDbFileSizes(); + assertEquals(expectedDbFileSizes.triplesDataSizeBytes, dbFileSize(TRIPLES_DATA_FILE), + "Unexpected byte size for " + TRIPLES_DATA_FILE); + assertEquals(expectedDbFileSizes.valuesDataSizeBytes, dbFileSize(VALUES_DATA_FILE), + "Unexpected byte size for " + VALUES_DATA_FILE); + assertTrue(expectedDbFileSizeFile().isFile(), + "Expected sidecar file to exist: " + expectedDbFileSizeFile()); + } finally { + tearDown(); + } + } + + @Test + @Disabled + public void executeQueryReturnsExpectedCountForPharmaQueryTenAfterFreshGeneration() throws IOException { + FileUtils.deleteDirectory(STORE_DIRECTORY); + themeName = "PHARMA"; + z_queryIndex = 10; + setup(); + try { + assertEquals(ThemeQueryCatalog.expectedCountFor(theme, z_queryIndex), executeQuery(), + "Unexpected count for freshly generated PHARMA query index 10"); + } finally { + tearDown(); + } + } + + @Test +// @Disabled + public void testQueryExplanation() throws IOException { + var queryIndexes = paramValues("z_queryIndex"); + var themeNames = paramValues("themeName"); + for (var themeNameValue : themeNames) { + for (var queryIndexValue : queryIndexes) { + themeName = themeNameValue; + z_queryIndex = Integer.parseInt(queryIndexValue); + setup(); + try (var connection = repository.getConnection()) { + + Explanation explain = connection + .prepareTupleQuery(query) + .explain(Explanation.Level.Unoptimized); + + System.out.println("Unoptimized explanation for theme " + themeName + " and query index " + + z_queryIndex + ":"); + System.out.println(new TupleExprIRRenderer().render(((TupleExpr) explain.tupleExpr()))); + + explain = connection + .prepareTupleQuery(query) + .explain(Explanation.Level.Optimized); + + System.out.println( + "Optimized explanation for theme " + themeName + " and query index " + z_queryIndex + ":"); + System.out.println(new TupleExprIRRenderer().render(((TupleExpr) explain.tupleExpr()))); + System.out.println(); + + var explanation = connection + .prepareTupleQuery(query) + .explain(Explanation.Level.Optimized) + .toString(); + System.out.println("Query Explanation for theme " + themeName + " and query index " + z_queryIndex + + ":\n" + explanation); + } finally { + tearDown(); + } + } + } + } + + private static String[] paramValues(String fieldName) { + try { + var param = ThemeQueryHexaBenchmark.class.getField(fieldName).getAnnotation(Param.class); + if (param == null) { + throw new IllegalStateException("Missing @Param annotation for field " + fieldName); + } + return param.value(); + } catch (NoSuchFieldException e) { + throw new IllegalStateException("Missing field " + fieldName, e); + } + } + + private record DbFileSizes(long triplesDataSizeBytes, long valuesDataSizeBytes) { + } + +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-01.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-01.md new file mode 100644 index 00000000000..0171b4768ee --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-01.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 59.052 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 290.378 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 72.900 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 124.589 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 132.043 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 73.973 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 70.852 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 56.734 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 62.968 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 307.130 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 246.063 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.048 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 9.148 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.049 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.051 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.060 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 880.725 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.074 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.689 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 730.712 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.291 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 3.328 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 658.005 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 301.606 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 39.191 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 42.221 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 134.712 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.408 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 29281.598 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 90830.842 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 71.424 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 148.854 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 187.643 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 224.962 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 286.600 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.142 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 122.660 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 127.226 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.078 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 220.726 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.960 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.452 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 1901.927 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.639 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 338.523 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1113.878 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 886.277 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 103.863 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 222.918 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 116.741 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1325.332 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 115.104 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1090.631 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1290.647 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 140751.815 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 34.541 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 79.949 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.347 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 148.100 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 134.613 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 19.452 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 89.116 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 46.000 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 275.416 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 238.211 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 182.938 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 38.920 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 50.325 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.945 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 320.412 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.937 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 10.012 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 88.343 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 20.176 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.090 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.675 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 511.752 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.822 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.535 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 19588.110 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 11.627 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 28.768 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.716 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.133 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.990 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.280 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 14.682 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 19379.224 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-02.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-02.md new file mode 100644 index 00000000000..33dd786e612 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-02.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 50.179 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 150.667 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 43.901 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 81.122 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 141.986 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 62.976 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 64.735 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 47.021 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 53.938 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 254.664 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 202.070 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.044 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 12.500 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.052 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.051 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.061 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 904.445 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.075 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 6.335 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 770.499 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 4681.066 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 4.227 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 664.798 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 301.284 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 38.207 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 42.733 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 127.925 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.818 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26661.618 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 93077.359 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 76.559 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 443961.380 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 192.258 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 233.067 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 278.631 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.131 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 135.693 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 135.338 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.103 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 219.020 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.923 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.853 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 1929.993 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.673 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 347.498 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1110.189 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 898.585 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 106.116 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 242.191 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 120.086 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1362.123 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 123.206 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1137.599 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1346.296 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 141632.209 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 36.147 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 83.379 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.020 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 157.836 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 138.839 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 19.999 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 93.163 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 49.422 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 180.268 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 250.984 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 189.867 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 41.291 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 51.930 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 4.328 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 323.182 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 20.924 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 9.768 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 86.055 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 20.822 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.555 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.612 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 500.532 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 1.287 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.550 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 19684.171 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.560 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 12113.225 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.974 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.757 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.652 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.980 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 15.186 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 17892.806 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-04.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-04.md new file mode 100644 index 00000000000..2d138e8f18d --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-04.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 3 58.805 ± 95.851 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 3 182.374 ± 222.716 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 3 45.908 ± 0.560 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 3 82.593 ± 1.829 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 3 128.823 ± 2.756 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 3 72.391 ± 4.567 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 3 56.876 ± 1.370 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 3 42.710 ± 0.788 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 3 53.009 ± 0.174 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 3 204.791 ± 5.155 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 3 219.049 ± 4.404 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 3 31.922 ± 0.096 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 3 45.215 ± 0.601 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 3 73.094 ± 5.289 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 3 35.707 ± 0.631 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 3 107.169 ± 1.461 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 3 900.495 ± 25.798 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 3 44.066 ± 0.266 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 3 81.318 ± 3.198 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 3 750.824 ± 15.999 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 3 95.022 ± 1.887 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 3 103.102 ± 0.536 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 3 647.452 ± 26.585 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 3 177.598 ± 3.931 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 3 40.814 ± 0.826 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 3 42.799 ± 0.615 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 3 130.676 ± 3.763 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 3 5.028 ± 0.772 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 3 25628.220 ± 5394.406 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 3 75072.462 ± 427102.602 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 3 85.258 ± 1.486 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 3 96.528 ± 1.832 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 3 191.651 ± 2.846 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 3 232.326 ± 8.067 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 3 235.034 ± 1.189 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 3 1.208 ± 0.016 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 3 123.001 ± 7.176 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 3 127.813 ± 23.816 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 3 1.076 ± 0.011 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 3 206.946 ± 4.479 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3 4.033 ± 0.061 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 3 2.604 ± 0.189 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3 4.830 ± 0.139 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 3 1.676 ± 0.019 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 3 342.394 ± 13.437 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 3 1175.399 ± 30.074 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 3 1027.265 ± 54.165 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 3 109.002 ± 2.050 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 3 232.976 ± 4.370 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 3 119.924 ± 2.679 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 3 1332.682 ± 19.061 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 3 117.200 ± 1.234 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 3 1211.464 ± 7.728 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 3 1316.930 ± 99.242 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 3 141266.409 ± 889.909 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 3 35.275 ± 1.151 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 3 74.852 ± 1.392 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 3 8.057 ± 0.154 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 3 147.138 ± 2.446 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 3 136.910 ± 2.497 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 3 13.530 ± 0.231 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 3 106.011 ± 2.388 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 3 48.624 ± 0.633 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 3 222.851 ± 6.677 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 3 240.821 ± 4.473 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 3 195.298 ± 2.915 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 3 39.411 ± 0.534 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 3 41.750 ± 1.353 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3 4.176 ± 0.061 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 3 332.693 ± 10.415 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3 4.075 ± 0.082 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 3 4.627 ± 0.030 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 3 83.408 ± 1.117 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 3 20.247 ± 0.361 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 3 12.878 ± 0.389 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 3 4.561 ± 0.118 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 3 495.630 ± 2.346 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 3 2.655 ± 0.048 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3 1.388 ± 0.042 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 3 19756.655 ± 3238.604 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 3 14.826 ± 0.302 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 3 32.884 ± 0.963 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 3 2.255 ± 0.188 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3 6.279 ± 0.450 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 3 22.254 ± 0.230 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 3 26.117 ± 0.410 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 3 16.441 ± 0.708 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 3 19357.234 ± 3613.233 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05.md new file mode 100644 index 00000000000..f3b0c7f9499 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 48.406 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 124.513 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 31.909 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 84.874 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 124.957 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 69.328 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 58.045 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 43.907 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 53.589 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 209.404 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 195.215 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.196 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 20.115 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.229 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.224 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.236 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 888.397 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.254 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.924 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 723.702 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 9.977 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 7.146 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 654.797 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 177.419 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 39.155 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 42.732 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 133.057 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 5.107 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 29931.968 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 42052.204 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 83.174 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 124.388 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 202.177 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 232.653 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 162.953 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.242 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 140.351 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 131.782 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.184 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 219.167 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.177 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 3.515 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 4.488 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.859 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 362.134 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1138.110 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 1198.277 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 229.419 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 411.789 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 196.900 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1584.838 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 136.241 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1251.393 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1622.671 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 160896.068 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 36.674 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 46.596 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.431 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 154.362 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 143.039 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 21.317 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 130.245 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 49.081 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 212.225 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 238.878 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 198.790 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 41.315 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 32.445 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 41.934 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 385.323 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 59.681 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 5.794 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 87.724 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 52.012 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 16.764 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.118 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 536.701 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 6.854 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.783 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 23884.205 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 16.330 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 40.271 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 3.448 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 8.770 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 22.661 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 30.906 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 17.615 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 20891.363 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05_greedy.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05_greedy.md new file mode 100644 index 00000000000..1d00dcffa4d --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-05_greedy.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 48.126 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 132.271 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 47.689 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 81.135 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 128.137 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 76.944 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 58.561 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 44.263 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 53.378 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 236.630 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 220.295 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 32.066 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 43.911 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 75.903 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 36.060 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 109.183 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 934.248 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 44.148 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 80.917 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 722.734 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 97.863 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 103.258 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 635.858 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 154.151 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 40.371 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 43.957 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 124.122 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 5.136 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26618.802 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 44849.653 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 86.258 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 109.761 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 192.415 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 215.268 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 160.927 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.194 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 121.738 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 129.211 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.185 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 208.229 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.935 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 3.039 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 5.478 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.677 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 341.972 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1181.723 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 1016.870 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.120 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 231.172 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 138.949 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1330.401 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 120.875 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1219.676 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1332.404 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 141674.391 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 34.917 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 44.073 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.310 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 153.508 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 135.798 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 14.150 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 103.477 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 47.124 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 225.366 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 237.240 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 186.468 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 40.123 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 46.057 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 37.054 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 318.863 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 39.516 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 4.678 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 87.489 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 44.354 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.957 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.528 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 500.589 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 6.932 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 2.429 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 19328.744 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 15.270 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 33.431 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 10.303 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 6.316 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 22.663 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.849 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 16.585 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 255.649 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-06.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-06.md new file mode 100644 index 00000000000..a3df55682f0 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-06.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 48.784 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 128.298 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 31.716 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 84.971 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 113.358 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 73.678 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 59.676 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 46.329 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.373 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 257.935 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 205.594 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.238 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 9.235 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.267 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.258 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.279 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 883.332 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.290 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 6.091 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 739.613 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 16.344 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.574 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 650.541 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 301.182 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 36.913 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 44.177 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 131.973 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 5.895 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26413.497 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 43399.513 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 152.038 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 259.752 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 192.231 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 218.651 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 273.509 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.165 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 122.344 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 133.990 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.168 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 221.735 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.974 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 3.909 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.643 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.657 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 343.679 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1081.286 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 920.301 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 106.626 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 240.455 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 115.465 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1383.596 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 121.398 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1161.618 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1346.354 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 249.669 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 36.022 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 85.990 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.680 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 150.528 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 134.435 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 21.029 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 107.100 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 48.601 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 223.783 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 250.209 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 198.368 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 41.330 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 34.308 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 5.598 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 337.581 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.394 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 5.117 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 88.432 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 21.268 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.653 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.523 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 483.802 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 52.783 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.448 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 40.247 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 23.213 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 37.226 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 8.895 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 9.097 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.873 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 27.300 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.960 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 245.618 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-19.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-19.md new file mode 100644 index 00000000000..8300817af3f --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-03-19.md @@ -0,0 +1,90 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 48.436 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 108.227 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 28.612 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 80.276 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 112.888 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 45.021 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 55.479 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 44.848 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 57.793 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 185.506 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 211.408 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.048 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.744 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.058 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.058 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.067 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 868.915 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.080 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.672 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 729.884 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.151 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 1.193 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 632.187 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 266.414 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 37.470 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 43.227 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 121.023 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.827 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 28978.777 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 100998.178 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 178.308 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 222.287 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 267.684 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.101 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 127.876 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 129.035 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.028 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 226.391 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.931 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.362 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 610.475 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.631 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 341.573 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1068.447 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 527.911 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.404 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 238.045 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 114.784 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1414.627 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 121.197 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1144.812 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1359.559 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 239.801 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 34.896 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 78.350 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.866 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 153.308 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 135.157 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 19.630 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 97.013 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 48.583 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 228.350 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 249.039 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 184.938 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 39.933 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 70572.170 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 40.302 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 328.537 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 19.459 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 10.177 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 92.783 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 36.869 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.804 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.342 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 476.628 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.185 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.405 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 1491.450 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.266 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 14130.247 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 75.968 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.035 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.235 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.491 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 14.494 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 3203.127 ms/op + +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md new file mode 100644 index 00000000000..68124f7edc8 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md @@ -0,0 +1,5735 @@ +/Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=55841 -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/test-classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/classes:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-linux.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-linux-arm64.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-linux-ppc64le.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-macos.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-macos-arm64.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-windows.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl-lmdb/3.3.6/lwjgl-lmdb-3.3.6-natives-windows-arm64.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-linux.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-linux-arm64.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-linux-ppc64le.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-macos.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-macos-arm64.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-windows.jar:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6-natives-windows-arm64.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/base/target/classes:/Users/havardottestad/.m2/repository/org/apache/datasketches/datasketches-java/7.0.1/datasketches-java-7.0.1.jar:/Users/havardottestad/.m2/repository/org/apache/datasketches/datasketches-memory/4.1.0/datasketches-memory-4.1.0.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/api/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/transaction/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/order/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryalgebra/evaluation/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/repository/sparql/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryparser/sparql/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/trig/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryresultio/sparqlxml/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/iterator/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/http/client/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryresultio/binary/target/classes:/Users/havardottestad/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar:/Users/havardottestad/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar:/Users/havardottestad/.m2/repository/commons-codec/commons-codec/1.15/commons-codec-1.15.jar:/Users/havardottestad/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.36/jcl-over-slf4j-1.7.36.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/collection-factory/api/target/classes:/Users/havardottestad/.m2/repository/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryalgebra/model/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/query/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/api/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/xml/target/classes:/Users/havardottestad/.m2/repository/no/hasmac/hasmac-json-ld/0.10.2/hasmac-json-ld-0.10.2.jar:/Users/havardottestad/.m2/repository/com/github/jsonld-java/jsonld-java/0.13.4/jsonld-java-0.13.4.jar:/Users/havardottestad/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.21/jackson-annotations-2.21.jar:/Users/havardottestad/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.21.0/jackson-core-2.21.0.jar:/Users/havardottestad/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.21.0/jackson-databind-2.21.0.jar:/Users/havardottestad/.m2/repository/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar:/Users/havardottestad/.m2/repository/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/model/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/model-api/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/annotation/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/model-vocabulary/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/exception/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/text/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/common/io/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/collection-factory/mapdb3/target/classes:/Users/havardottestad/.m2/repository/org/mapdb/mapdb/3.1.0/mapdb-3.1.0.jar:/Users/havardottestad/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.jar:/Users/havardottestad/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar:/Users/havardottestad/.m2/repository/org/eclipse/collections/eclipse-collections-api/10.4.0/eclipse-collections-api-10.4.0.jar:/Users/havardottestad/.m2/repository/org/eclipse/collections/eclipse-collections/10.4.0/eclipse-collections-10.4.0.jar:/Users/havardottestad/.m2/repository/org/eclipse/collections/eclipse-collections-forkjoin/10.4.0/eclipse-collections-forkjoin-10.4.0.jar:/Users/havardottestad/.m2/repository/org/mapdb/elsa/3.0.0-M5/elsa-3.0.0-M5.jar:/Users/havardottestad/.m2/repository/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar:/Users/havardottestad/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/Users/havardottestad/.m2/repository/com/google/guava/guava/32.1.3-jre/guava-32.1.3-jre.jar:/Users/havardottestad/.m2/repository/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:/Users/havardottestad/.m2/repository/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/testsuites/sail/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/repository/api/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryparser/api/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/ntriples/target/classes:/Users/havardottestad/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.3/junit-jupiter-api-5.9.3.jar:/Users/havardottestad/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/Users/havardottestad/.m2/repository/org/junit/platform/junit-platform-commons/1.9.3/junit-platform-commons-1.9.3.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/testsuites/repository/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryresultio/api/target/classes:/Users/havardottestad/.m2/repository/org/junit/platform/junit-platform-suite-engine/1.9.3/junit-platform-suite-engine-1.9.3.jar:/Users/havardottestad/.m2/repository/org/junit/platform/junit-platform-suite-api/1.9.3/junit-platform-suite-api-1.9.3.jar:/Users/havardottestad/.m2/repository/org/junit/platform/junit-platform-suite-commons/1.9.3/junit-platform-suite-commons-1.9.3.jar:/Users/havardottestad/.m2/repository/org/junit/vintage/junit-vintage-engine/5.9.3/junit-vintage-engine-5.9.3.jar:/Users/havardottestad/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar:/Users/havardottestad/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/repository/sail/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/turtle/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/repository/manager/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/repository/event/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/repository/http/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/binary/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/http/protocol/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/nquads/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/datatypes/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/rio/languages/target/classes:/Users/havardottestad/.m2/repository/commons-io/commons-io/2.18.0/commons-io-2.18.0.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/testsuites/model/target/classes:/Users/havardottestad/Documents/Programming/rdf4j-stf/testsuites/benchmark-common/target/classes:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar:/Users/havardottestad/.m2/repository/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-generator-annprocess/1.37/jmh-generator-annprocess-1.37.jar:/Users/havardottestad/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.3/junit-jupiter-params-5.9.3.jar:/Users/havardottestad/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/Users/havardottestad/Documents/Programming/rdf4j-stf/core/queryrender/target/classes:/Users/havardottestad/.m2/repository/com/google/code/gson/gson/2.13.2/gson-2.13.2.jar:/Users/havardottestad/.m2/repository/com/google/errorprone/error_prone_annotations/2.41.0/error_prone_annotations-2.41.0.jar:/Users/havardottestad/.m2/repository/org/junit/platform/junit-platform-launcher/1.9.3/junit-platform-launcher-1.9.3.jar:/Users/havardottestad/.m2/repository/org/junit/platform/junit-platform-engine/1.9.3/junit-platform-engine-1.9.3.jar:/Users/havardottestad/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.3/junit-jupiter-engine-5.9.3.jar:/Users/havardottestad/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar:/Users/havardottestad/.m2/repository/net/bytebuddy/byte-buddy/1.12.21/byte-buddy-1.12.21.jar:/Users/havardottestad/.m2/repository/org/mockito/mockito-core/4.11.0/mockito-core-4.11.0.jar:/Users/havardottestad/.m2/repository/net/bytebuddy/byte-buddy-agent/1.12.19/byte-buddy-agent-1.12.19.jar:/Users/havardottestad/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar:/Users/havardottestad/.m2/repository/org/mockito/mockito-junit-jupiter/4.11.0/mockito-junit-jupiter-4.11.0.jar:/Users/havardottestad/.m2/repository/ch/qos/logback/logback-classic/1.2.13/logback-classic-1.2.13.jar:/Users/havardottestad/.m2/repository/ch/qos/logback/logback-core/1.2.13/logback-core-1.2.13.jar org.openjdk.jmh.Main org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery$ +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:58:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter ?enc . +?enc med:recordedOn ?date . +BIND(?date AS ?optDate) +} +FILTER(?optDate >= "2024-06-01"^^xsd:date) +OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0010a6a60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +Loading theme dataset: MEDICAL_RECORDS +Loading theme dataset: SOCIAL_MEDIA +Loading theme dataset: LIBRARY +Loading theme dataset: ENGINEERING +Loading theme dataset: HIGHLY_CONNECTED +Loading theme dataset: TRAIN +Loading theme dataset: ELECTRICAL_GRID +Loading theme dataset: PHARMA +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?date . +BIND(?date AS ?optDate) +} +FILTER (?optDate >= "2024-06-01"^^) +OPTIONAL { +?patient ?med . +} +} + +RdfJoinEstimator: Rebuilding bufA, seen 100000 triples so far. Elapsed: 4 s. +RdfJoinEstimator: Rebuilding bufA, seen 200000 triples so far. Elapsed: 6 s. +RdfJoinEstimator: Rebuilding bufA, seen 300000 triples so far. Elapsed: 9 s. +RdfJoinEstimator: Rebuilding bufA, seen 400000 triples so far. Elapsed: 12 s. +RdfJoinEstimator: Rebuilding bufA, seen 500000 triples so far. Elapsed: 18 s. +RdfJoinEstimator: Rebuilding bufA, seen 100000 triples so far. Elapsed: 2 s. +RdfJoinEstimator: Rebuilding bufA, seen 200000 triples so far. Elapsed: 4 s. +RdfJoinEstimator: Rebuilding bufA, seen 300000 triples so far. Elapsed: 6 s. +RdfJoinEstimator: Rebuilding bufA, seen 400000 triples so far. Elapsed: 9 s. +60.469 ms/op +Iteration 1: RdfJoinEstimator: Rebuilding bufA, seen 500000 triples so far. Elapsed: 12 s. +RdfJoinEstimator: Rebuilding bufA, seen 100000 triples so far. Elapsed: 2 s. +RdfJoinEstimator: Rebuilding bufA, seen 200000 triples so far. Elapsed: 4 s. +59.518 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +59.518 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 02:46:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "DX-200" "DX-201" } +{ ?entity a med:Condition ; med:code ?code . } +UNION +{ ?entity a med:Medication ; med:code ?code . } +FILTER(?code = ?target || ?code = "DX-202") +OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?code . +VALUES ?target { "DX-200" "DX-201" } +FILTER ((?code = ?target) || (?code = "DX-202")) +} +UNION +{ +?entity a . +?entity ?code . +VALUES ?target { "DX-200" "DX-201" } +FILTER ((?code = ?target) || (?code = "DX-202")) +} +OPTIONAL { +?entity ?alt . +} +} + +108.710 ms/op +Iteration 1: 103.621 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +103.621 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 01:53:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . +FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) +OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc ?date . +FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) +?enc a . +?enc ?practitioner . +OPTIONAL { +?enc ?cond . +} +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +15.045 ms/op +Iteration 1: 14.487 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +14.487 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 01:35:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter/med:hasObservation ?obs . +?obs med:value ?value . +BIND(?value AS ?optValue) +} +FILTER(?optValue > 60) +MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient / ?obs . +?obs ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 60) +MINUS { +?patient ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "test")) +} +} + +82.463 ms/op +Iteration 1: 79.156 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +79.156 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 01:26:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a med:Encounter ; med:hasCondition ?cond . +?cond med:code ?code . +FILTER(?code = "DX-200" || ?code = "DX-201") +FILTER EXISTS { ?enc med:hasObservation ?obs . } +OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc ?cond . +?enc a . +?cond ?code . +FILTER ((?code = "DX-200") || (?code = "DX-201")) +OPTIONAL { +?enc ?practitioner . +} +FILTER EXISTS { +?enc ?obs . +} +} + +130.512 ms/op +Iteration 1: 127.168 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +127.168 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 01:20:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +VALUES ?limit { 55 } +?patient a med:Patient ; med:hasEncounter ?enc . +?enc med:hasObservation ?obs . +?obs med:value ?value . +FILTER(?value IN (50, 60, 70)) +FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +?patient ?enc . +?enc ?obs . +?obs ?value . +FILTER (?value IN (50, 60, 70)) +VALUES ?limit { 55 } +FILTER NOT EXISTS { +?enc ?cond . +} +} + +59.062 ms/op +Iteration 1: 57.237 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +57.237 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 01:16:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ ?patient a med:Patient . } +UNION +{ ?patient med:hasEncounter ?enc . } +OPTIONAL { +?patient med:hasMedication ?med . +BIND(?med AS ?optMed) +} +FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ +?patient a . +} +UNION +{ +?patient ?enc . +} +OPTIONAL { +?patient ?med . +BIND(?med AS ?optMed) +} +FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +57.836 ms/op +Iteration 1: 57.394 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +57.394 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 01:12:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a med:Medication ; med:code ?code . +FILTER(?code = "MED-1000" || ?code = "MED-1001") +FILTER EXISTS { ?patient med:hasMedication ?med . } +MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a . +?med ?code . +FILTER ((?code = "MED-1000") || (?code = "MED-1001")) +FILTER EXISTS { +?patient ?med . +} +MINUS { +?med ?dose . +FILTER (CONTAINS(LCASE(STR(?dose)), "x")) +} +} + +42.295 ms/op +Iteration 1: 42.051 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +42.051 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 01:09:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter ?enc . +?enc med:handledBy ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER(?optPractitioner != ?patient) +FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +54.303 ms/op +Iteration 1: 54.130 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +54.130 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 01:06:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +VALUES ?code { "DX-200" "DX-201" } +?enc a med:Encounter ; med:hasCondition ?cond . +?cond med:code ?condCode . +FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) +OPTIONAL { ?enc med:handledBy ?practitioner . } +MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000070001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a . +?enc ?cond . +?cond ?condCode . +FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) +VALUES ?code { "DX-200" "DX-201" } +OPTIONAL { +?enc ?practitioner . +} +MINUS { +?enc ?obs . +{ +{ +?obs ?value . +FILTER (?value < 60) +} +} +} +} + +190.739 ms/op +Iteration 1: 188.022 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +188.022 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 01:04:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ ?patient a med:Patient ; med:hasMedication ?med . } +UNION +{ ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } +OPTIONAL { ?patient med:name ?optName . } +FILTER(?optName != "") +FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . +FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ +?patient a . +?patient ?med . +} +UNION +{ +?patient a . +?patient ?enc . +?enc ?obs . +} +OPTIONAL { +?patient ?optName . +} +FILTER (NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") } && (?optName != "")) +} + +204.232 ms/op +Iteration 1: 201.401 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +201.401 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 01:02:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES ?u { + + } +VALUES ?v { + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.042 ms/op +Iteration 1: 0.041 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.041 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 01:01:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES ?u1 { + + } +VALUES ?u2 { + + } +VALUES ?u3 { + + } +FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) +?u1 social:follows ?u2 . +?u2 social:follows ?u1 . +?u1 social:follows ?u3 . +?u3 social:follows ?u1 . +?u2 social:follows ?u3 . +?u3 social:follows ?u2 . +FILTER EXISTS { ?u1 social:name ?name . +FILTER(?name = "user0" || ?name = "user1") } +MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES (?u1 ?u2) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u1 != ?u2) +?u1 ?u2 . +?u2 ?u1 . +VALUES ?u3 { } +FILTER ((?u1 != ?u3) && (?u2 != ?u3)) +?u1 ?u3 . +?u3 ?u1 . +?u2 ?u3 . +?u3 ?u2 . +FILTER EXISTS { +?u1 ?name . +FILTER ((?name = "user0") || (?name = "user1")) +} +MINUS { +?u1 ?u1 . +BIND(?u1 AS ?_anon_path_9797669ca65784d3c8981ee77d35f781f012345678) +} +} + +5.769 ms/op +Iteration 1: 5.592 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.592 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:59:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + } +VALUES ?v { + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName != "") +FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111e5f8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (EXISTS { ?v ?u . } && (?u != ?v)) +?u ?v . +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + +0.051 ms/op +Iteration 1: 0.050 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.050 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:58:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES ?u { + + + } +VALUES ?v { + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } +FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.050 ms/op +Iteration 1: 0.050 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.050 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:56:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + + } +VALUES ?v { + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +FILTER NOT EXISTS { ?u social:follows ?u . } +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { } +FILTER NOT EXISTS { +?u ?u . +BIND(?u AS ?_anon_path_301f8c5c6701d45d896affb9a498499e5012) +} +VALUES ?v { } +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + +0.058 ms/op +Iteration 1: 0.057 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.057 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:55:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { + + + + } +{ +?u social:follows ?v . +?v social:follows ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post social:authored ?u . +BIND(?post AS ?activity) +} +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +{ +{ +?u ?v . +?v ?u . +BIND(?v AS ?activity) +} +VALUES ?u { } +} +UNION +{ +{ +?post ?u . +BIND(?post AS ?activity) +} +VALUES ?u { } +} +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +861.691 ms/op +Iteration 1: 855.881 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +855.881 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:54:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES ?u { + + + + + } +VALUES ?v { + + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.071 ms/op +Iteration 1: 0.069 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.069 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:53:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + + + } +VALUES ?v { + + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +FILTER EXISTS { ?v social:follows ?u . } +MINUS { ?v social:follows ?v . } +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (EXISTS { ?v ?u . } && (?u != ?v)) +?u ?v . +MINUS { +?v ?v . +BIND(?v AS ?_anon_path_42974088a5bda4353a91dd292289b05180123) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.624 ms/op +Iteration 1: 5.557 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.557 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:52:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { ?a social:name ?optName . } +FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000e01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a ?b . +?b ?c . +?c ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { +?a ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +} + +718.605 ms/op +Iteration 1: 715.131 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +715.131 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:51:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { + + + } +FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?d . +?d social:follows ?a . +OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } +FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { } +?a ?b . +FILTER (?a != ?b) +?b ?c . +FILTER (?b != ?c) +?c ?d . +FILTER (?c != ?d) +FILTER (?d != ?a) +?d ?a . +OPTIONAL { +?b ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias != "") +} + +5.864 ms/op +Iteration 1: 5.792 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.792 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:50:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?a { + + + + } +VALUES ?b { + + + + } +VALUES ?c { + + + + } +VALUES ?d { + + + + } +VALUES ?e { + + + + } +FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?d . +?d social:follows ?e . +?e social:follows ?a . +FILTER EXISTS { ?a social:name ?name . +FILTER(?name = "user7" || ?name = "user8") } +OPTIONAL { ?e social:name ?optName . } +FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe0111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES (?a ?b) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?a != ?b) +?a ?b . +VALUES ?c { } +FILTER ((?b != ?c) && (?a != ?c)) +?b ?c . +VALUES ?d { } +FILTER (?c != ?d) +?c ?d . +VALUES ?e { } +FILTER (?d != ?e) +?d ?e . +?e ?a . +OPTIONAL { +?e ?optName . +} +FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +0.247 ms/op +Iteration 1: 0.243 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.243 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:49:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a lib:Book . +OPTIONAL { +?book lib:hasCopy ?copy . +?copy lib:locatedAt ?branch . +BIND(?branch AS ?optBranch) +} +FILTER(?optBranch != ?book) +OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +OPTIONAL { +?book ?copy . +?copy ?branch . +BIND(?branch AS ?optBranch) +} +FILTER (?optBranch != ?book) +OPTIONAL { +?book ?author . +} +} + +649.052 ms/op +Iteration 1: 635.873 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +635.873 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:48:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "Member 1" "Member 2" } +{ ?entity a lib:Member ; lib:name ?name . } +UNION +{ ?entity a lib:Book ; lib:title ?name . } +FILTER(?name = ?target || ?name = "Member 3") +OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "Member 1" "Member 2" } +FILTER ((?name = ?target) || (?name = "Member 3")) +} +UNION +{ +?entity a . +?entity ?name . +VALUES ?target { "Member 1" "Member 2" } +FILTER ((?name = ?target) || (?name = "Member 3")) +} +OPTIONAL { +?entity ?copy . +} +} + +149.842 ms/op +Iteration 1: 148.945 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +148.945 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:47:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a lib:Author ; lib:name ?authorName . +FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000008001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a . +?author ?authorName . +FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { +?book ?author . +} +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +38.395 ms/op +Iteration 1: 37.903 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +37.903 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:46:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a lib:Loan ; lib:borrowedBy ?member . +OPTIONAL { +?loan lib:dueDate ?due . +BIND(?due AS ?optDue) +} +FILTER(?optDue > "2024-01-10"^^xsd:date) +MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a . +?loan ?member . +OPTIONAL { +?loan ?due . +BIND(?due AS ?optDue) +} +FILTER (?optDue > "2024-01-10"^^) +MINUS { +?member ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) +} +} + +41.538 ms/op +Iteration 1: 41.009 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +41.009 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:45:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a lib:Book ; lib:title ?title . +FILTER(?title = "Book 1" || ?title = "Book 2") +FILTER EXISTS { ?book lib:hasCopy ?copy . } +OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +?book ?title . +FILTER ((?title = "Book 1") || (?title = "Book 2")) +OPTIONAL { +?book ?author . +} +FILTER EXISTS { +?book ?copy . +} +} + +118.742 ms/op +Iteration 1: 117.704 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +117.704 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:44:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +VALUES ?threshold { "2024-01-01"^^xsd:date } +?loan a lib:Loan ; lib:loanDate ?loanDate . +FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) +FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000200001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a . +?loan ?loanDate . +FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) +VALUES ?threshold { "2024-01-01"^^ } +FILTER NOT EXISTS { +?loan ?due . +FILTER (?due < ?threshold) +} +} + +9.835 ms/op +Iteration 1: 9.673 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +9.673 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:43:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ ?loan a lib:Loan ; lib:borrowedBy ?member . } +UNION +{ ?member a lib:Member . } +OPTIONAL { +?loan lib:loanedCopy ?copy . +BIND(?copy AS ?optCopy) +} +FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ +?loan a . +?loan ?member . +} +UNION +{ +?member a . +} +OPTIONAL { +?loan ?copy . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +27000.707 ms/op +Iteration 1: 26285.276 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +26285.276 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:44:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?copy a lib:Copy ; lib:locatedAt ?branch . +?branch lib:name ?branchName . +FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") +FILTER EXISTS { ?copy a lib:Copy . } +MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?branch ?branchName . +FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) +?copy ?branch . +FILTER EXISTS { +?copy a . +} +?copy a . +MINUS { +?copy ?branch . +FILTER (CONTAINS(STR(?branch), "branch/0")) +} +} + +33143.497 ms/op +Iteration 1: 69818.336 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +69818.336 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:45:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . +?copy lib:locatedAt ?branch . +?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . +OPTIONAL { ?member lib:name ?optName . } +FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?loan ?copy . +?loan a . +?loan ?member . +?book ?copy . +?book a . +?book ?author . +?copy ?branch . +OPTIONAL { +?member ?optName . +} +FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +71.822 ms/op +Iteration 1: 72.396 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +72.396 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:44:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +VALUES ?target { "Author 1" "Author 2" } +?member a lib:Member . +?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . +?book lib:hasCopy ?copy ; lib:writtenBy ?author . +?author lib:name ?authorName . +FILTER(?authorName = ?target || ?authorName = "Author 3") +FILTER NOT EXISTS { ?loan lib:dueDate ?due . +FILTER(?due < "2024-01-10"^^xsd:date) } +OPTIONAL { ?book lib:title ?optTitle . } +FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000008001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +?loan ?member . +?member a . +?loan a . +?loan ?copy . +?book ?copy . +?book ?author . +?author ?authorName . +VALUES ?target { "Author 1" "Author 2" } +FILTER ((?authorName = ?target) || (?authorName = "Author 3")) +OPTIONAL { +?book ?optTitle . +} +FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +71.224 ms/op +Iteration 1: 70.311 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +70.311 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:43:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ ?branch a lib:Branch . } +UNION +{ ?branch a lib:Branch ; lib:name ?name . } +OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } +FILTER(?optCopy != ?branch) +MINUS { ?branch lib:name ?name2 . +FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ +?branch a . +} +UNION +{ +?branch a . +?branch ?name . +} +OPTIONAL { +?copy ?branch . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?branch) +MINUS { +?branch ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) +} +} + +188.683 ms/op +Iteration 1: 185.966 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +185.966 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:42:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a eng:Component . +OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } +FILTER(?optAssembly != ?component) +OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +OPTIONAL { +?component ?assembly . +BIND(?assembly AS ?optAssembly) +} +FILTER (?optAssembly != ?component) +OPTIONAL { +?component ?dep . +} +} + +219.269 ms/op +Iteration 1: 218.175 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +218.175 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:41:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "REQ-1000" "REQ-1001" } +{ ?entity a eng:Requirement ; eng:name ?name . } +UNION +{ ?entity a eng:Component ; eng:name ?name . } +FILTER(?name = ?target || ?name = "REQ-1002") +OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "REQ-1000" "REQ-1001" } +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +UNION +{ +?entity a . +?entity ?name . +VALUES ?target { "REQ-1000" "REQ-1001" } +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +OPTIONAL { +?entity ?assembly . +} +} + +150.347 ms/op +Iteration 1: 149.603 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +149.603 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:40:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a eng:Assembly ; eng:name ?assemblyName . +FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a . +?assembly ?assemblyName . +FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { +?component ?assembly . +} +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.143 ms/op +Iteration 1: 1.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:39:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a eng:Requirement ; eng:satisfies ?component . +OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } +FILTER(?optTest != ?requirement) +MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000700001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?component . +OPTIONAL { +?requirement ?test . +BIND(?test AS ?optTest) +} +FILTER (?optTest != ?requirement) +MINUS { +?component ?name . +FILTER (CONTAINS(STR(?name), "Component 1")) +} +} + +126.281 ms/op +Iteration 1: 122.859 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +122.859 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:38:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a eng:Component ; eng:name ?name . +FILTER(?name = "Component 1" || ?name = "Component 2") +FILTER EXISTS { ?component eng:dependsOn ?dep . } +OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +?component ?name . +FILTER ((?name = "Component 1") || (?name = "Component 2")) +OPTIONAL { +?component ?assembly . +} +FILTER EXISTS { +?component ?dep . +} +} + +129.185 ms/op +Iteration 1: 127.292 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +127.292 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:38:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?measurement a eng:Measurement ; eng:measuredValue ?value . +FILTER(?value IN (0.9, 0.95)) +FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +?measurement a . +?measurement ?value . +FILTER (?value IN (0.9, 0.95)) +VALUES ?threshold { 0.85 } +FILTER NOT EXISTS { +?measurement ?value2 . +FILTER (?value2 < ?threshold) +} +} + +1.907 ms/op +Iteration 1: 1.878 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.878 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:37:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ ?requirement a eng:Requirement ; eng:satisfies ?component . } +UNION +{ ?component a eng:Component . } +OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } +FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff0111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ +?requirement a . +?requirement ?component . +} +UNION +{ +?component a . +} +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +213.571 ms/op +Iteration 1: 209.080 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +209.080 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:36:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a eng:Requirement ; eng:name ?name . +FILTER(?name = "REQ-1000" || ?name = "REQ-1001") +FILTER EXISTS { ?requirement eng:satisfies ?component . } +MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?name . +FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) +FILTER EXISTS { +?requirement ?component . +} +MINUS { +?requirement ?test . +?test ?measurement . +} +} + +3.767 ms/op +Iteration 1: 3.696 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.696 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:35:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?component a eng:Component ; eng:partOf ?assembly . +OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } +FILTER(?optDep != ?component) +?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?requirement ?component . +?component a . +?requirement a . +?component ?assembly . +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.263 ms/op +Iteration 1: 2.198 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +2.198 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:34:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?requirement a eng:Requirement ; eng:verifiedBy ?test . +?test eng:verifiedBy ?measurement . +?measurement eng:measuredValue ?value . +FILTER(?value IN (0.85, 0.9, 0.95)) +FILTER EXISTS { ?requirement eng:satisfies ?component . } +OPTIONAL { ?component eng:name ?optName . } +FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?test . +?test ?measurement . +?measurement ?value . +FILTER (?value IN (0.85, 0.9, 0.95)) +VALUES ?threshold { 0.85 } +OPTIONAL { +?component ?optName . +} +FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +3.350 ms/op +Iteration 1: 3.288 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.288 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:33:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a eng:Assembly ; eng:name ?name . +FILTER(?name = "Assembly 1" || ?name = "Assembly 2") +OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } +FILTER(?optComponent != ?assembly) +MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a . +?assembly ?name . +FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) +OPTIONAL { +?component ?assembly . +BIND(?component AS ?optComponent) +} +FILTER (?optComponent != ?assembly) +MINUS { +?requirement ?component . +} +} + +1.643 ms/op +Iteration 1: 1.614 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.614 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:33:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node . +OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } +FILTER(?optNeighbor != ?node) +OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?neighbor . +BIND(?neighbor AS ?optNeighbor) +} +FILTER (?optNeighbor != ?node) +OPTIONAL { +?node ?w . +} +} + +343.762 ms/op +Iteration 1: 340.772 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +340.772 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:32:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { 1 2 } +{ ?entity a conn:Node ; conn:connectsTo ?targetNode . } +UNION +{ ?entity a conn:Node . } +OPTIONAL { ?entity conn:weight ?w . } +FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?targetNode . +VALUES ?target { 1 2 } +} +UNION +{ +VALUES ?target { 1 2 } +{ +?entity a . +} +} +OPTIONAL { +?entity ?w . +} +FILTER ((?w = ?target) || (?w = 3)) +} + +1044.442 ms/op +Iteration 1: 1035.819 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1035.819 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:31:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a conn:Node ; conn:connectsTo ?neighbor . +?node conn:weight ?w . +FILTER(?w IN (1, 2, 3)) +OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3)) +?node ?neighbor . +OPTIONAL { +?neighbor ?node . +} +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +530.203 ms/op +Iteration 1: 523.138 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +523.138 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:30:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node . +OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight > 5) +MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight > 5) +MINUS { +?node ?neighbor . +FILTER (?neighbor = ?node) +} +} + +105.256 ms/op +Iteration 1: 104.087 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +104.087 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:29:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:weight ?w . +FILTER(?w = 1 || ?w = 2) +FILTER EXISTS { ?node conn:connectsTo ?neighbor . } +OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 1) || (?w = 2)) +OPTIONAL { +?neighbor ?node . +} +FILTER EXISTS { +?node ?neighbor . +} +} + +234.391 ms/op +Iteration 1: 232.049 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +232.049 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:28:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 4 } +?node a conn:Node ; conn:weight ?w . +FILTER(?w IN (4, 5, 6)) +FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (4, 5, 6)) +VALUES ?threshold { 4 } +FILTER NOT EXISTS { +?node ?w2 . +FILTER (?w2 < ?threshold) +} +} + +118.634 ms/op +Iteration 1: 117.818 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +117.818 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:28:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ ?node a conn:Node ; conn:connectsTo ?neighbor . } +UNION +{ ?neighbor conn:connectsTo ?node . } +OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ +?node a . +?node ?neighbor . +} +UNION +{ +?neighbor ?node . +} +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1325.660 ms/op +Iteration 1: 1294.214 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1294.214 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:27:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:weight ?w . +FILTER(?w = 8 || ?w = 9) +FILTER EXISTS { ?node conn:connectsTo ?neighbor . } +MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000601124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 8) || (?w = 9)) +FILTER EXISTS { +?node ?neighbor . +} +MINUS { +?neighbor ?node . +FILTER (?neighbor = ?node) +} +} + +119.206 ms/op +Iteration 1: 118.493 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +118.493 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:26:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:connectsTo ?mid . +?mid conn:connectsTo ?end . +OPTIONAL { ?node conn:weight ?optWeight . } +FILTER(?optWeight IN (7, 8, 9)) +FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?mid . +?mid ?end . +FILTER EXISTS { +?end ?node . +} +OPTIONAL { +?node ?optWeight . +} +FILTER (?optWeight IN (7, 8, 9)) +} + +1114.292 ms/op +Iteration 1: 1098.791 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1098.791 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:25:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +{ ?node conn:connectsTo ?neighbor . } +UNION +{ ?neighbor conn:connectsTo ?node . } +OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +?node (|^) ?neighbor . +OPTIONAL { +?neighbor ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1346.961 ms/op +Iteration 1: 1313.064 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1313.064 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:25:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 3 } +?node a conn:Node ; conn:weight ?w . +FILTER(?w IN (1, 2, 3, 4)) +FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . +?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } +MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3, 4)) +VALUES ?threshold { 3 } +FILTER NOT EXISTS { +?node ?n2 . +?n2 ?w2 . +FILTER (?w2 < ?threshold) +} +MINUS { +?node ?node . +BIND(?node AS ?_anon_path_61e9ac7226ff248009bea3fb16a2cdaa1012345) +} +} + +247.458 ms/op +Iteration 1: 246.687 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +246.687 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:24:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a train:TrainService . +OPTIONAL { +?service train:scheduledTime ?time . +BIND(?time AS ?optTime) +} +FILTER(?optTime > "08:00:00"^^xsd:time) +OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +OPTIONAL { +?service ?time . +BIND(?time AS ?optTime) +} +FILTER (?optTime > "08:00:00"^^) +OPTIONAL { +?service ?name . +} +} + +34.310 ms/op +Iteration 1: 33.597 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +33.597 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:23:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "OP 1" "OP 2" } +{ ?entity a train:OperationalPoint ; train:name ?name . } +UNION +{ ?entity a train:Line ; train:name ?name . } +FILTER(?name = ?target || ?name = "OP 3") +OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "OP 1" "OP 2" } +FILTER ((?name = ?target) || (?name = "OP 3")) +} +UNION +{ +?entity a . +?entity ?name . +VALUES ?target { "OP 1" "OP 2" } +FILTER ((?name = ?target) || (?name = "OP 3")) +} +OPTIONAL { +?entity ?op . +} +} + +43.677 ms/op +Iteration 1: 43.811 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +43.811 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:22:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a train:Line ; train:name ?lineName . +FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a . +?line ?lineName . +FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { +?section ?line . +} +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +8.042 ms/op +Iteration 1: 7.868 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +7.868 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:22:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a train:SectionOfLine ; train:partOfLine ?line . +OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } +FILTER(?optTrack != ?section) +MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a . +?section ?line . +OPTIONAL { +?section ?track . +BIND(?track AS ?optTrack) +} +FILTER (?optTrack != ?section) +MINUS { +?line ?name . +FILTER (CONTAINS(STR(?name), "Line 0")) +} +} + +150.347 ms/op +Iteration 1: 148.770 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +148.770 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:21:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a train:Line ; train:name ?name . +FILTER(?name = "Line 1" || ?name = "Line 2") +FILTER EXISTS { ?section train:partOfLine ?line . } +OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?name . +FILTER ((?name = "Line 1") || (?name = "Line 2")) +OPTIONAL { +?section ?op . +} +FILTER EXISTS { +?section ?line . +} +} + +136.449 ms/op +Iteration 1: 135.111 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +135.111 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:20:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +VALUES ?threshold { "10:00:00"^^xsd:time } +?service a train:TrainService ; train:scheduledTime ?time . +FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) +FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +?service ?time . +FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) +VALUES ?threshold { "10:00:00"^^ } +FILTER NOT EXISTS { +?service ?late . +FILTER (?late > ?threshold) +} +} + +19.074 ms/op +Iteration 1: 18.965 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +18.965 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:19:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ ?service a train:TrainService ; train:runsOnSection ?section . +?section train:partOfLine ?line . } +UNION +{ ?line a train:Line . } +OPTIONAL { ?line train:name ?optName . } +FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ +?service a . +?service ?section . +?section ?line . +} +UNION +{ +?line a . +} +OPTIONAL { +?line ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +90.260 ms/op +Iteration 1: 88.828 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +88.828 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:18:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a train:OperationalPoint ; train:name ?name . +FILTER(?name = "OP 1" || ?name = "OP 2") +FILTER EXISTS { ?service train:passesThrough ?op . } +MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a . +?op ?name . +FILTER ((?name = "OP 1") || (?name = "OP 2")) +FILTER EXISTS { +?service ?op . +} +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) +} +} + +46.354 ms/op +Iteration 1: 45.954 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +45.954 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:18:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . +?s1 train:partOfLine ?line . +?s2 train:partOfLine ?line . +OPTIONAL { ?line train:name ?optName . } +FILTER(?optName IN ("Line 0", "Line 1")) +FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . +?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +?service ?s1 . +?service ?s2 . +?s1 ?line . +?s2 ?line . +OPTIONAL { +?line ?optName . +} +FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) +} + +209.416 ms/op +Iteration 1: 207.675 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +207.675 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:17:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section a train:SectionOfLine ; train:hasTrackSection ?track . +OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } +FILTER(?optOp != ?section) +FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section a . +?section ?track . +FILTER EXISTS { +?track a . +} +OPTIONAL { +?section ?op . +BIND(?op AS ?optOp) +} +FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +237.309 ms/op +Iteration 1: 233.403 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +233.403 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:16:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ ?op a train:OperationalPoint . } +UNION +{ ?op a train:OperationalPoint ; train:name ?name . } +OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } +FILTER(?optSection != ?op) +MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe00111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ +?op a . +} +UNION +{ +?op a . +?op ?name . +} +OPTIONAL { +?section ?op . +BIND(?section AS ?optSection) +} +FILTER (?optSection != ?op) +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) +} +} + +189.318 ms/op +Iteration 1: 186.867 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +186.867 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:15:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a grid:Substation . +OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } +FILTER(?optCap > 600) +OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a . +OPTIONAL { +?generator ?substation . +?generator ?cap . +BIND(?cap AS ?optCap) +} +FILTER (?optCap > 600) +OPTIONAL { +?substation ?name . +} +} + +39.937 ms/op +Iteration 1: 39.448 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +39.448 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:15:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "Substation 1" "Substation 2" } +{ ?entity a grid:Substation ; grid:name ?name . } +UNION +{ ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } +FILTER(?name = ?target || ?name = "Substation 3") +OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "Substation 1" "Substation 2" } +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +UNION +{ +?entity a . +?entity ?substation . +?substation ?name . +VALUES ?target { "Substation 1" "Substation 2" } +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +OPTIONAL { +?entity ?substation2 . +} +} + +26.524 ms/op +Iteration 1: 26.026 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +26.026 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:14:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?transformer a grid:Transformer ; grid:feeds ?substation . +?substation grid:name ?name . +FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) +OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?substation ?name . +FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) +?transformer ?substation . +?transformer a . +OPTIONAL { +?transformer ?meter . +} +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +3.714 ms/op +Iteration 1: 3.653 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.653 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:13:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a grid:Meter ; grid:measures ?load . +OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } +FILTER(?optValue > 100) +MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a . +?meter ?load . +OPTIONAL { +?load ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 100) +MINUS { +?meter ?load2 . +{ +{ +?load2 ?value2 . +FILTER (?value2 > 180) +} +} +} +} + +314.318 ms/op +Iteration 1: 311.200 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +311.200 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:13:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a grid:Line ; grid:connectsTo ?substation . +?substation grid:name ?name . +FILTER(?name = "Substation 0" || ?name = "Substation 1") +FILTER EXISTS { ?line grid:connectsTo ?other . } +OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff0111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +?line ?substation . +?line a . +OPTIONAL { +?line ?other2 . +} +FILTER EXISTS { +?line ?other . +} +} + +3.565 ms/op +Iteration 1: 3.521 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.521 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:12:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +VALUES ?threshold { 700 } +?generator a grid:Generator ; grid:capacity ?capacity . +FILTER(?capacity IN (700, 800, 900)) +FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +?generator a . +?generator ?capacity . +FILTER (?capacity IN (700, 800, 900)) +VALUES ?threshold { 700 } +FILTER NOT EXISTS { +?generator ?cap2 . +FILTER (?cap2 < ?threshold) +} +} + +9.209 ms/op +Iteration 1: 8.993 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +8.993 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:11:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ ?asset a grid:Transformer ; grid:feeds ?substation . } +UNION +{ ?asset a grid:Generator ; grid:feeds ?substation . } +OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } +FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ +?asset a . +?asset ?substation . +} +UNION +{ +?asset a . +?asset ?substation . +} +OPTIONAL { +?asset ?substation . +BIND(?substation AS ?optSub) +} +FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +83.838 ms/op +Iteration 1: 82.853 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +82.853 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:10:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?transformer a grid:Transformer ; grid:feeds ?substation . +?substation grid:name ?name . +FILTER(?name = "Substation 0" || ?name = "Substation 1") +FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111ea60 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +?transformer ?substation . +?transformer a . +FILTER EXISTS { +?transformer ?meter . +} +MINUS { +?meter ?load . +FILTER (?load = ?substation) +} +} + +19.726 ms/op +Iteration 1: 19.598 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +19.598 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:10:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation a grid:Substation ; grid:name ?name . +OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } +FILTER(?optTransformer != ?substation) +FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation a . +?substation ?name . +OPTIONAL { +?substation ?transformer . +BIND(?transformer AS ?optTransformer) +} +FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +12.991 ms/op +Iteration 1: 12.767 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +12.767 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:09:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a grid:Line ; grid:capacity ?cap . +FILTER(?cap IN (500, 600, 700)) +OPTIONAL { ?line grid:connectsTo ?substation . } +MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line ?cap . +FILTER (?cap IN (500, 600, 700)) +?line a . +OPTIONAL { +?line ?substation . +} +MINUS { +?line ?cap2 . +FILTER (?cap2 < 500) +} +} + +4.385 ms/op +Iteration 1: 4.330 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.330 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:08:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ ?meter a grid:Meter ; grid:measures ?load . } +UNION +{ ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } +OPTIONAL { ?load grid:loadValue ?optValue . } +FILTER(?optValue > 200) +FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000601124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ +?meter a . +?meter ?load . +} +UNION +{ +?meter ?load . +?meter a . +?load ?value . +} +OPTIONAL { +?load ?optValue . +} +FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) +} + +492.761 ms/op +Iteration 1: 488.039 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +488.039 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:07:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { + } +?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:pValue ?p ; pharma:effectSize ?effect . +OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } +FILTER(?optMarker != ) +FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { } +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?p . +?result ?effect . +FILTER ((?p < 0.05) || (?effect > 0.7)) +OPTIONAL { +?result ?marker . +BIND(?marker AS ?optMarker) +} +FILTER (?optMarker != ) +} + +0.162 ms/op +Iteration 1: 0.160 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.160 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:07:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . +OPTIONAL { +?drug pharma:hasSideEffect ?sideEffect . +?sideEffect pharma:severity ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER(?optSeverity IN ("Mild", "Moderate")) +FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo a . +?combo ?score . +FILTER (?score > 0.7) +?combo ?drug . +OPTIONAL { +?drug ?sideEffect . +?sideEffect ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.452 ms/op +Iteration 1: 1.421 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.421 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:06:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target a pharma:Target ; pharma:inPathway ?pathway . +?drug a pharma:Drug ; pharma:targets ?target . +OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } +FILTER(?optDisease IN (, +)) +FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target a . +?target ?pathway . +?drug ?target . +?drug a . +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +38.665 ms/op +Iteration 1: 38.046 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +38.046 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:05:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { +?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:responseRate ?rate . +FILTER(?rate > 0.6) +FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } +OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } +FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000401124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug ?disease WHERE { +?trial a . +?trial ?arm . +?arm ?result . +?trial ?disease . +?arm ?drug . +FILTER NOT EXISTS { +?drug ?disease . +} +?result ?rate . +FILTER (?rate > 0.6) +OPTIONAL { +?drug ?target . +BIND(?target AS ?optTarget) +} +FILTER (?optTarget != ) +} + +13.129 ms/op +Iteration 1: 12.904 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +12.904 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:05:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } +UNION +{ ?combo a pharma:Combination ; pharma:combinationOf ?drug . +?drug pharma:hasMolecule ?mol . } +?mol pharma:inClass ?class . +OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } +FILTER(?optClassName != "") +MINUS { ?drug pharma:contraindicatedFor ?disease . +FILTER(?disease IN (, +)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +?drug a . +?drug ?mol . +?mol ?class . +} +UNION +{ +?combo a . +?combo ?drug . +?drug ?mol . +?mol ?class . +} +OPTIONAL { +?class ?optName . +BIND(?optName AS ?optClassName) +} +FILTER (?optClassName != "") +MINUS { +?drug ?disease . +FILTER (?disease IN (, )) +} +} + +27.958 ms/op +Iteration 1: 27.610 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +27.610 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:04:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { + + } +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +?arm pharma:hasResult ?result . +?result pharma:biomarker ?marker ; pharma:pValue ?p . +OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } +FILTER(?optEffect > 0.3) +FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { } +?result ?marker . +?arm ?result . +?trial ?arm . +?trial a . +?result ?p . +FILTER ((?p < 0.05) || (?p = 0.05)) +OPTIONAL { +?result ?effect . +BIND(?effect AS ?optEffect) +} +FILTER (?optEffect > 0.3) +} + +0.345 ms/op +Iteration 1: 0.340 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.340 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:03:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . +FILTER(?drugA != ?drugB) +?drugA pharma:targets ?target . +?drugB pharma:targets ?target . +OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } +FILTER(?optSideEffect != ) +FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a . +?combo ?drugA . +?combo ?drugB . +FILTER (?drugA != ?drugB) +?drugA ?target . +?drugB ?target . +OPTIONAL { +?drugA ?sideEffect . +BIND(?sideEffect AS ?optSideEffect) +} +FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +3.167 ms/op +Iteration 1: 3.100 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.100 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:02:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +{ ?arm pharma:armComparator ?comp . } +UNION +{ ?arm pharma:armDrug ?comp . } +OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } +FILTER(?optCompName != "") +FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . +FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial a . +?trial ?arm . +?arm (|) ?comp . +OPTIONAL { +?comp ?optName . +BIND(?optName AS ?optCompName) +} +FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} + +20.201 ms/op +Iteration 1: 20.175 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +20.175 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:02:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a pharma:Drug ; pharma:targets ?target . +OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } +FILTER(?optMol != ) +MINUS { ?drug pharma:contraindicatedFor ?disease . +FILTER(?disease = +|| ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000038001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a . +?drug ?target . +OPTIONAL { +?drug ?mol . +BIND(?mol AS ?optMol) +} +FILTER (?optMol != ) +MINUS { +{ +?drug . +FILTER (sameTerm(?disease, )) +} +UNION +{ +?drug . +FILTER (sameTerm(?disease, )) +} +} +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +27.234 ms/op +Iteration 1: 26.730 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +26.730 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:01:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:effectSize ?effect . +OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } +FILTER(?optRate > 0.2) +} +GROUP BY ?drug +HAVING(AVG(?effect) > 0.4) +} +FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } +OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } +FILTER(?optDisease IN (, +)) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?effect . +OPTIONAL { +?result ?rate . +BIND(?rate AS ?optRate) +} +FILTER (?optRate > 0.2) +} +GROUP BY ?drug +HAVING (AVG(?effect) > 0.4) +} +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +14.597 ms/op +Iteration 1: 14.107 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +14.107 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +VALUES ?marker { + } +?drug a pharma:Drug ; pharma:targets ?target . +?target pharma:inPathway ?pathway . +OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } +FILTER(?optTrial != ) +FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . +?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000400001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target ?pathway . +?drug ?target . +?drug a . +VALUES ?marker { } +OPTIONAL { +?drug ?trial . +BIND(?trial AS ?optTrial) +} +FILTER (EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +231.154 ms/op +Iteration 1: 229.013 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +229.013 ms/op + + +# Run complete. Total time: 01:02:51 + +REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on +why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial +experiments, perform baseline and negative tests that provide experimental control, make sure +the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts. +Do not assume the numbers tell you what you want them to tell. + +NOTE: Current JVM experimentally supports Compiler Blackholes, and they are in use. Please exercise +extra caution when trusting the results, look into the generated code to check the benchmark still +works, and factor in a small probability of new VM bugs. Additionally, while comparisons between +different JVMs are already problematic, the performance difference caused by different Blackhole +modes can be very significant. Please make sure you use the consistent Blackhole mode for comparisons. + +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 59.518 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 103.621 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 14.487 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 79.156 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 127.168 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 57.237 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 57.394 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 42.051 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 54.130 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 188.022 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 201.401 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.041 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.592 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.050 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.050 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.057 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 855.881 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.069 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.557 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 715.131 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 5.792 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 0.243 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 635.873 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 148.945 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 37.903 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 41.009 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 117.704 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.673 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26285.276 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 69818.336 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 72.396 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 70.311 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 185.966 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 218.175 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 149.603 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.115 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 122.859 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 127.292 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.878 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 209.080 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.696 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.198 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.288 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.614 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 340.772 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1035.819 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 523.138 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.087 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 232.049 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.818 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1294.214 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 118.493 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1098.791 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1313.064 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 246.687 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.597 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 43.811 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.868 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 148.770 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 135.111 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 18.965 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 88.828 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 45.954 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 207.675 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 233.403 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 186.867 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 39.448 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 26.026 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.653 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 311.200 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.521 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 8.993 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 82.853 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 19.598 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.767 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.330 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 488.039 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.160 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.421 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 38.046 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.904 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 27.610 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.340 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.100 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.175 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.730 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 14.107 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 229.013 ms/op + +Process finished with exit code 0 diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2.md new file mode 100644 index 00000000000..380f6bd4c76 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 59.518 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 103.621 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 14.487 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 79.156 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 127.168 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 57.237 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 57.394 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 42.051 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 54.130 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 188.022 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 201.401 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.041 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.592 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.050 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.050 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.057 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 855.881 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.069 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.557 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 715.131 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 5.792 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 0.243 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 635.873 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 148.945 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 37.903 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 41.009 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 117.704 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.673 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26285.276 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 69818.336 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 72.396 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 70.311 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 185.966 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 218.175 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 149.603 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.115 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 122.859 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 127.292 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.878 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 209.080 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.696 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.198 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.288 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.614 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 340.772 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1035.819 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 523.138 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.087 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 232.049 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.818 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1294.214 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 118.493 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1098.791 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1313.064 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 246.687 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.597 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 43.811 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.868 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 148.770 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 135.111 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 18.965 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 88.828 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 45.954 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 207.675 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 233.403 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 186.867 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 39.448 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 26.026 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.653 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 311.200 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.521 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 8.993 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 82.853 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 19.598 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.767 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.330 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 488.039 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.160 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.421 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 38.046 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.904 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 27.610 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.340 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.100 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.175 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.730 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 14.107 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 229.013 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09.md new file mode 100644 index 00000000000..12e5a12fc32 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 47.264 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 109.805 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 44.909 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 83.466 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 112.469 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 62.118 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 54.547 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 41.541 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 54.234 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 177.489 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 197.227 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.049 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.478 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.058 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.057 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.067 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 851.384 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.080 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.439 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 687.902 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.112 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 1.200 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 623.870 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 266.503 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 38.461 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 40.861 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 119.227 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.340 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26071.786 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 102382.366 ms/op + + +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 183.492 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 223.363 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 262.090 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.099 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 118.126 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 121.655 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.964 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 205.784 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.672 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.116 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 605.803 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.569 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 349.020 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1047.046 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 519.333 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 103.432 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 225.420 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 112.109 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1302.136 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 113.166 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1064.946 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1269.865 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 236.118 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.033 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 72.654 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.649 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 140.043 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 130.430 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 19.611 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 87.102 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 45.053 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 203.941 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 239.919 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 173.767 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 38.841 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 66564.860 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 39.059 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 318.112 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 19.057 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 9.328 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 86.971 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 34.303 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.686 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.431 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 477.394 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.182 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.396 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 1511.283 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.163 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 14199.676 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 75.709 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.015 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.678 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 25.313 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 13.578 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 3175.818 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md new file mode 100644 index 00000000000..f16fab77106 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md @@ -0,0 +1,100 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 46.716 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 103.052 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 41.490 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 77.037 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 103.994 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 58.169 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 53.840 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 41.168 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 51.812 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 177.495 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 200.784 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.040 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.482 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.049 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.049 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.056 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 859.739 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.070 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.577 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 693.018 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 5.841 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 0.245 ms/op +``` + +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 662.494 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 159.661 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 39.925 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 41.392 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 119.855 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.722 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 28740.236 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 71455.004 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 73.149 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 70.783 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 188.566 ms/op +``` + +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 209.646 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 150.281 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.090 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 124.655 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 130.694 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.868 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 213.409 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.950 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.284 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.125 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.578 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 344.973 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1031.865 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 519.626 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 101.458 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 220.957 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 116.401 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1283.486 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 118.615 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1053.060 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1276.574 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 242.732 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.371 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 41.732 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.604 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 145.397 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 132.498 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 19.932 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 85.811 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 44.951 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 207.856 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 231.185 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 183.420 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 38.138 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 26.586 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.784 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 316.751 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.432 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 9.319 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 84.277 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 19.120 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.329 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.318 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 489.188 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.160 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.404 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 36.596 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.648 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 27.215 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.337 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.054 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.251 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 25.877 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 13.434 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 228.363 ms/op + +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-2.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-2.md new file mode 100644 index 00000000000..cdf1e3f179c --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-2.md @@ -0,0 +1,5704 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 46.653 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 109.100 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 40.433 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 78.719 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 111.893 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 58.177 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 56.067 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 44.816 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 53.915 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 187.079 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 205.587 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.042 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.490 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.050 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.049 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.057 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 854.734 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.070 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.596 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 733.145 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 5.987 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 0.250 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 634.970 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 151.376 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 38.132 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 40.646 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 122.603 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.414 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26995.992 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 78318.002 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 74.003 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 71.027 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 192.343 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 223.568 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 154.620 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.080 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 126.394 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 122.915 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.874 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 208.961 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.795 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.135 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.110 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.597 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 344.700 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1023.516 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 507.722 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 105.341 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 221.784 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 115.883 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1278.707 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 116.867 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1084.124 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1270.580 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 244.674 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 32.877 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 41.478 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.201 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 146.291 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 132.228 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 19.285 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 89.658 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 46.870 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 206.224 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 238.251 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 190.042 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 39.828 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 26.724 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.573 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 315.650 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.618 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 9.126 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 84.504 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 19.928 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.454 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.319 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 488.950 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.159 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.414 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 36.774 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.935 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 28.646 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.333 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.206 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.331 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 25.518 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 13.564 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 229.894 ms/op +``` + + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +47.001 ms/op +Iteration 1: 46.653 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.653 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 00:22:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +112.896 ms/op +Iteration 1: 109.100 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 109.100 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 00:22:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a . + ?enc ?practitioner . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +42.084 ms/op +Iteration 1: 40.433 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.433 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:22:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000006000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +81.553 ms/op +Iteration 1: 78.719 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 78.719 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:21:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +111.848 ms/op +Iteration 1: 111.893 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 111.893 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:21:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + ?patient ?enc . + ?enc ?obs . + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +60.390 ms/op +Iteration 1: 58.177 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 58.177 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:21:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +56.391 ms/op +Iteration 1: 56.067 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 56.067 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:21:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +46.796 ms/op +Iteration 1: 44.816 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.816 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:20:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +55.410 ms/op +Iteration 1: 53.915 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.915 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:20:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +190.497 ms/op +Iteration 1: 187.079 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 187.079 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:20:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER (NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") } && (?optName != "")) +} + +206.209 ms/op +Iteration 1: 205.587 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 205.587 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:20:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.043 ms/op +Iteration 1: 0.042 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.042 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:19:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + ?u2 ?u1 . + VALUES ?u3 { } + FILTER ((?u1 != ?u3) && (?u2 != ?u3)) + ?u1 ?u3 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_9f1be50aca26a4e50ae102e334fd8020b012345678) + } +} + +5.814 ms/op +Iteration 1: 5.490 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.490 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:19:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.052 ms/op +Iteration 1: 0.050 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.050 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:19:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.052 ms/op +Iteration 1: 0.049 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.049 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:18:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_3020c0f79bf3a4f42a0aa9b0225ca5244012) + } + VALUES ?v { } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.060 ms/op +Iteration 1: 0.057 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.057 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:18:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +871.084 ms/op +Iteration 1: 854.734 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 854.734 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:18:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000020000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.073 ms/op +Iteration 1: 0.070 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.070 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:18:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_46c1dd0ece7dc4a41a65bf77ee670a5c80123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.910 ms/op +Iteration 1: 5.596 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.596 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:17:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +731.229 ms/op +Iteration 1: 733.145 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 733.145 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:17:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +6.135 ms/op +Iteration 1: 5.987 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.987 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:17:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?b != ?c) && (?a != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +0.263 ms/op +Iteration 1: 0.250 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.250 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:17:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +660.574 ms/op +Iteration 1: 634.970 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 634.970 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:16:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +153.431 ms/op +Iteration 1: 151.376 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 151.376 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:16:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +39.258 ms/op +Iteration 1: 38.132 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.132 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:16:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +42.791 ms/op +Iteration 1: 40.646 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.646 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:16:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +125.179 ms/op +Iteration 1: 122.603 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 122.603 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:15:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +10.781 ms/op +Iteration 1: 10.414 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.414 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:15:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan a . + ?loan ?member . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +26986.769 ms/op +Iteration 1: 26995.992 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 26995.992 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:16:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +36939.794 ms/op +Iteration 1: 78318.002 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 78318.002 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:19:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f80111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +78.703 ms/op +Iteration 1: 74.003 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 74.003 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:19:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc0111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?member a . + ?loan ?member . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +75.108 ms/op +Iteration 1: 71.027 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 71.027 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:18:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +199.429 ms/op +Iteration 1: 192.343 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 192.343 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:18:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +229.907 ms/op +Iteration 1: 223.568 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 223.568 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:17:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +158.391 ms/op +Iteration 1: 154.620 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 154.620 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:17:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.155 ms/op +Iteration 1: 1.080 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.080 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:16:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +126.238 ms/op +Iteration 1: 126.394 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 126.394 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:16:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000038000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +127.204 ms/op +Iteration 1: 122.915 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 122.915 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:16:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +1.953 ms/op +Iteration 1: 1.874 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.874 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:15:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +216.813 ms/op +Iteration 1: 208.961 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 208.961 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:15:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +3.993 ms/op +Iteration 1: 3.795 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.795 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:14:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c0111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?requirement a . + ?component a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.348 ms/op +Iteration 1: 2.135 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.135 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:14:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?test . + ?test ?measurement . + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +3.277 ms/op +Iteration 1: 3.110 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.110 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:14:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +1.676 ms/op +Iteration 1: 1.597 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.597 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:13:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +350.153 ms/op +Iteration 1: 344.700 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 344.700 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:13:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?targetNode . + VALUES ?target { 1 2 } + } + UNION + { + VALUES ?target { 1 2 } + { + ?entity a . + } + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1056.563 ms/op +Iteration 1: 1023.516 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1023.516 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:13:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +535.571 ms/op +Iteration 1: 507.722 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 507.722 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:12:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +108.725 ms/op +Iteration 1: 105.341 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 105.341 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:12:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +231.754 ms/op +Iteration 1: 221.784 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 221.784 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:12:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +118.632 ms/op +Iteration 1: 115.883 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 115.883 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:11:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1380.143 ms/op +Iteration 1: 1278.707 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1278.707 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:11:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +120.720 ms/op +Iteration 1: 116.867 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 116.867 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:10:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1095.908 ms/op +Iteration 1: 1084.124 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1084.124 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:10:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1350.930 ms/op +Iteration 1: 1270.580 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1270.580 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:10:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_655bda2395b774fd18a23159578985483012345) + } +} + +248.168 ms/op +Iteration 1: 244.674 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 244.674 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:10:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +34.204 ms/op +Iteration 1: 32.877 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.877 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:09:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +42.611 ms/op +Iteration 1: 41.478 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.478 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:09:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +8.580 ms/op +Iteration 1: 8.201 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.201 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:09:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +155.319 ms/op +Iteration 1: 146.291 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 146.291 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:08:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +135.825 ms/op +Iteration 1: 132.228 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 132.228 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:08:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +19.099 ms/op +Iteration 1: 19.285 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.285 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:08:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +93.060 ms/op +Iteration 1: 89.658 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 89.658 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:07:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +48.004 ms/op +Iteration 1: 46.870 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.870 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:07:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?s1 . + ?service ?s2 . + ?s1 ?line . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) +} + +222.037 ms/op +Iteration 1: 206.224 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 206.224 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:07:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111d9a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a . + ?section ?track . + FILTER EXISTS { + ?track a . + } + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +243.208 ms/op +Iteration 1: 238.251 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 238.251 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:06:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +192.796 ms/op +Iteration 1: 190.042 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 190.042 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:06:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +40.896 ms/op +Iteration 1: 39.828 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 39.828 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:06:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + ?entity a . + ?entity ?substation . + ?substation ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +28.088 ms/op +Iteration 1: 26.724 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 26.724 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:05:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer a . + ?transformer ?substation . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +3.805 ms/op +Iteration 1: 3.573 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.573 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:05:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +325.057 ms/op +Iteration 1: 315.650 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 315.650 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:05:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line a . + ?line ?substation . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +3.718 ms/op +Iteration 1: 3.618 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.618 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:04:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +9.714 ms/op +Iteration 1: 9.126 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.126 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:04:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +88.276 ms/op +Iteration 1: 84.504 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 84.504 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer a . + ?transformer ?substation . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +20.347 ms/op +Iteration 1: 19.928 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.928 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:04:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +13.072 ms/op +Iteration 1: 12.454 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 12.454 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:03:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +4.473 ms/op +Iteration 1: 4.319 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.319 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) +} + +495.714 ms/op +Iteration 1: 488.950 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 488.950 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:03:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +0.167 ms/op +Iteration 1: 0.159 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.159 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:02:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a . + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.497 ms/op +Iteration 1: 1.414 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.414 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +37.996 ms/op +Iteration 1: 36.774 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 36.774 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug ?disease WHERE { + ?trial a . + ?trial ?disease . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + ?result ?rate . + FILTER (?rate > 0.6) + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +13.544 ms/op +Iteration 1: 12.935 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 12.935 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:02:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?drug a . + ?mol ?class . + ?drug ?mol . + } + UNION + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +29.185 ms/op +Iteration 1: 28.646 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 28.646 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + ?trial a . + VALUES ?marker { } + ?result ?marker . + ?trial ?arm . + ?arm ?result . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +0.355 ms/op +Iteration 1: 0.333 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.333 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff00111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +3.220 ms/op +Iteration 1: 3.206 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.206 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000006000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} + +20.000 ms/op +Iteration 1: 19.331 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.331 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +26.361 ms/op +Iteration 1: 25.518 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.518 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +14.658 ms/op +Iteration 1: 13.564 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.564 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?drug ?target . + ?drug a . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER (EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +236.425 ms/op +Iteration 1: 229.894 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 229.894 ms/op + + +# Run complete. Total time: 00:25:16 + +``` + + diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md new file mode 100644 index 00000000000..5561711b0fa --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md @@ -0,0 +1,5702 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 44.359 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 101.529 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 48.432 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 80.410 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 110.961 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 77.519 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 53.840 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 42.246 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 52.324 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 181.850 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 200.828 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.062 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.872 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.078 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.071 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.086 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 855.139 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.095 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.910 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 716.788 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.478 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 0.995 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 653.958 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 150.725 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 37.276 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 41.051 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 122.706 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.961 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26308.010 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 408.237 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 71.290 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 75.836 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 183.097 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 214.691 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 145.044 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.078 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 121.413 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 127.229 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.874 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 215.178 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.916 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.207 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.201 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.672 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 350.388 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1036.863 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 505.086 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 102.805 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 220.534 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 115.845 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1279.858 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 117.233 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1078.918 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1259.700 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 251.478 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 32.395 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 41.833 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.426 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 147.172 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 131.876 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 18.210 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 81.059 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 45.688 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 186.280 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 228.698 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 181.203 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 37.685 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 25.945 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 37.825 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 295.543 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 18.736 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 8.885 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 80.051 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 34.774 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.453 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.369 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 469.461 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.202 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.397 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 35.531 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 10.417 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 11316.779 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 151.724 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.024 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 18.945 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 24.760 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 13.204 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 237.288 ms/op +``` + + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +44.658 ms/op +Iteration 1: 44.359 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.359 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 00:37:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +105.762 ms/op +Iteration 1: 101.529 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 101.529 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 00:36:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?practitioner . + ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +50.168 ms/op +Iteration 1: 48.432 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 48.432 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:35:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +83.542 ms/op +Iteration 1: 80.410 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 80.410 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:35:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +112.993 ms/op +Iteration 1: 110.961 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 110.961 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:34:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + ?patient ?enc . + ?enc ?obs . + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +80.492 ms/op +Iteration 1: 77.519 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 77.519 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:34:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +56.323 ms/op +Iteration 1: 53.840 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.840 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:31:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +43.016 ms/op +Iteration 1: 42.246 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 42.246 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:30:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +54.083 ms/op +Iteration 1: 52.324 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 52.324 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:28:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +190.336 ms/op +Iteration 1: 181.850 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 181.850 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:27:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER (NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") } && (?optName != "")) +} + +199.827 ms/op +Iteration 1: 200.828 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 200.828 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:26:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.069 ms/op +Iteration 1: 0.062 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.062 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:25:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + ?u2 ?u1 . + VALUES ?u3 { } + FILTER ((?u1 != ?u3) && (?u2 != ?u3)) + ?u1 ?u3 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_9509e493f7d224f45b3b52d716d0d4042012345678) + } +} + +6.454 ms/op +Iteration 1: 5.872 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.872 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:24:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.082 ms/op +Iteration 1: 0.078 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.078 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:24:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.077 ms/op +Iteration 1: 0.071 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.071 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:23:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_38a3e7951fc07439fb0040611d1173cf3012) + } + VALUES ?v { } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.092 ms/op +Iteration 1: 0.086 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.086 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:22:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +867.099 ms/op +Iteration 1: 855.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 855.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:22:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.100 ms/op +Iteration 1: 0.095 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.095 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:21:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_4bf7d0c4a9757488a9c6ab245fadaa6a80123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +6.037 ms/op +Iteration 1: 5.910 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.910 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:21:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +710.397 ms/op +Iteration 1: 716.788 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 716.788 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:20:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + ?b ?c . + ?c ?d . + FILTER (?c != ?d) + FILTER (((?a != ?b) && (?b != ?c)) && (?d != ?a)) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +6.775 ms/op +Iteration 1: 6.478 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.478 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:20:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?b != ?c) && (?a != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +1.058 ms/op +Iteration 1: 0.995 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.995 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:20:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +665.455 ms/op +Iteration 1: 653.958 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 653.958 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:19:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +154.146 ms/op +Iteration 1: 150.725 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 150.725 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:19:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +38.884 ms/op +Iteration 1: 37.276 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 37.276 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:18:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +42.726 ms/op +Iteration 1: 41.051 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.051 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:18:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +125.278 ms/op +Iteration 1: 122.706 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 122.706 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:18:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +10.357 ms/op +Iteration 1: 9.961 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.961 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:17:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan a . + ?loan ?member . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +27606.117 ms/op +Iteration 1: 26308.010 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 26308.010 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:18:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111ddb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +428.850 ms/op +Iteration 1: 408.237 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 408.237 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:18:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe0111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +68.940 ms/op +Iteration 1: c71.290 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 71.290 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:17:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?member a . + ?loan ?member . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +76.917 ms/op +Iteration 1: 75.836 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 75.836 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:17:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +188.624 ms/op +Iteration 1: 183.097 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 183.097 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:17:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +221.775 ms/op +Iteration 1: 214.691 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 214.691 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:16:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +148.909 ms/op +Iteration 1: 145.044 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 145.044 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:16:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.152 ms/op +Iteration 1: 1.078 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.078 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:15:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +126.848 ms/op +Iteration 1: 121.413 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 121.413 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:15:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +128.384 ms/op +Iteration 1: 127.229 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 127.229 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:15:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +1.989 ms/op +Iteration 1: 1.874 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.874 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:14:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +225.494 ms/op +Iteration 1: 215.178 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 215.178 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:14:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +4.095 ms/op +Iteration 1: 3.916 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.916 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:14:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?requirement a . + ?component a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.340 ms/op +Iteration 1: 2.207 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.207 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:13:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?test . + ?test ?measurement . + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +3.385 ms/op +Iteration 1: 3.201 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.201 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:13:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +1.788 ms/op +Iteration 1: 1.672 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.672 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:13:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +353.879 ms/op +Iteration 1: 350.388 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 350.388 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:12:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000070000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?targetNode . + VALUES ?target { 1 2 } + } + UNION + { + VALUES ?target { 1 2 } + { + ?entity a . + } + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1062.473 ms/op +Iteration 1: 1036.863 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1036.863 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:12:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +527.264 ms/op +Iteration 1: 505.086 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 505.086 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:12:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +106.269 ms/op +Iteration 1: 102.805 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 102.805 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:11:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +226.002 ms/op +Iteration 1: 220.534 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 220.534 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:11:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +118.568 ms/op +Iteration 1: 115.845 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 115.845 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:11:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1344.513 ms/op +Iteration 1: 1279.858 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1279.858 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:10:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +119.245 ms/op +Iteration 1: 117.233 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 117.233 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:10:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1099.889 ms/op +Iteration 1: 1078.918 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1078.918 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:10:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1344.623 ms/op +Iteration 1: 1259.700 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1259.700 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:09:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_69270a925af1c4d69a02203f6a210a55d012345) + } +} + +255.350 ms/op +Iteration 1: 251.478 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 251.478 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:09:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +33.780 ms/op +Iteration 1: 32.395 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.395 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:09:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +44.719 ms/op +Iteration 1: 41.833 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.833 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:08:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +7.855 ms/op +Iteration 1: 7.426 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.426 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:08:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +151.794 ms/op +Iteration 1: 147.172 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 147.172 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:08:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +135.102 ms/op +Iteration 1: 131.876 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 131.876 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:08:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +18.831 ms/op +Iteration 1: 18.210 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.210 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:07:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +84.567 ms/op +Iteration 1: 81.059 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 81.059 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:07:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +46.782 ms/op +Iteration 1: 45.688 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.688 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:07:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?s1 . + ?service ?s2 . + ?s1 ?line . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) +} + +194.964 ms/op +Iteration 1: 186.280 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 186.280 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:06:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a . + ?section ?track . + FILTER EXISTS { + ?track a . + } + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +236.277 ms/op +Iteration 1: 228.698 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 228.698 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:06:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +188.292 ms/op +Iteration 1: 181.203 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 181.203 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:06:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +39.337 ms/op +Iteration 1: 37.685 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 37.685 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:05:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + ?entity a . + ?entity ?substation . + ?substation ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +26.741 ms/op +Iteration 1: 25.945 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.945 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:05:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer a . + ?transformer ?substation . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +39.158 ms/op +Iteration 1: 37.825 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 37.825 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:05:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +306.927 ms/op +Iteration 1: 295.543 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 295.543 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:05:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line a . + ?line ?substation . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +19.230 ms/op +Iteration 1: 18.736 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.736 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:04:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +9.288 ms/op +Iteration 1: 8.885 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.885 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:04:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +81.206 ms/op +Iteration 1: 80.051 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 80.051 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer a . + ?transformer ?substation . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +35.928 ms/op +Iteration 1: 34.774 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 34.774 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:03:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +12.359 ms/op +Iteration 1: 12.453 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 12.453 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:03:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +4.706 ms/op +Iteration 1: 4.369 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.369 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) +} + +482.918 ms/op +Iteration 1: 469.461 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 469.461 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:03:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +0.215 ms/op +Iteration 1: 0.202 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.202 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:02:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a . + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.476 ms/op +Iteration 1: 1.397 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.397 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +36.995 ms/op +Iteration 1: 35.531 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 35.531 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug ?disease WHERE { + ?trial a . + ?trial ?disease . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?rate . + FILTER (?rate > 0.6) + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +10.953 ms/op +Iteration 1: 10.417 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.417 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:01:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?drug a . + ?mol ?class . + ?drug ?mol . + } + UNION + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +11453.397 ms/op +Iteration 1: 11316.779 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 11316.779 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + ?trial a . + VALUES ?marker { } + ?result ?marker . + ?trial ?arm . + ?arm ?result . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +156.481 ms/op +Iteration 1: 151.724 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 151.724 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +3.159 ms/op +Iteration 1: 3.024 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.024 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} + +19.737 ms/op +Iteration 1: 18.945 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.945 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +25.906 ms/op +Iteration 1: 24.760 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 24.760 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +13.834 ms/op +Iteration 1: 13.204 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.204 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?drug ?target . + ?drug a . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER (EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +236.081 ms/op +Iteration 1: 237.288 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 237.288 ms/op + + +# Run complete. Total time: 00:24:41 + +``` + + diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md new file mode 100644 index 00000000000..ac2a73a0691 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md @@ -0,0 +1,5701 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 44.805 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 105.197 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 54.691 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 86.547 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 113.359 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 40.708 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 54.076 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 47.188 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 52.252 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 188.917 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 202.824 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.081 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.852 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.099 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.093 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.109 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 867.947 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.119 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.887 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 703.847 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 294.178 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 1.101 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 647.490 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 149.276 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 17.068 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 40.875 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 45.475 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 4.758 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 26211.981 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 440.933 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 64.859 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 67.634 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 187.625 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 218.768 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 146.071 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 50.985 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 115.909 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 49.622 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.041 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 208.255 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 52.243 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.103 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 1.279 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 50.155 ms/op <--- +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 340.723 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1013.433 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 494.208 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.356 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 221.330 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 134.501 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1330.188 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 113.613 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1078.033 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1270.960 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 272.114 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.133 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 41.040 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 17.931 ms/op <--- +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 147.991 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 142.117 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 13.063 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 92.198 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 36.313 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 153.999 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 226.254 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 182.888 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 40.051 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 27.139 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.697 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 275.005 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.621 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 4.475 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 83.677 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 19.588 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.521 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.446 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 360.905 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.232 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.314 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 25.231 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 8.314 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 26.885 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 4.276 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.118 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.393 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 25.222 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 13.545 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 235.810 ms/op +``` + + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:10:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc0111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +102.739 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +44.805 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.805 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 00:21:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000020000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +242.594 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +105.197 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 105.197 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 00:21:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +123.200 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?practitioner . + ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +54.691 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 54.691 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:21:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +218.556 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +86.547 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 86.547 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:21:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +263.982 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +113.359 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 113.359 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:20:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +92.802 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +40.708 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.708 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:20:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +59.142 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +54.076 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 54.076 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:18:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +51.065 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + ?med a . + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +47.188 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 47.188 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:17:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +58.171 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +52.252 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 52.252 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:16:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +212.501 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc ?cond . + ?enc a . + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + ?enc ?obs . + } +} + +188.917 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 188.917 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:15:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +219.349 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +202.824 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 202.824 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:14:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.097 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.081 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.081 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:14:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.858 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + ?u2 ?u1 . + VALUES ?u3 { } + FILTER ((?u1 != ?u3) && (?u2 != ?u3)) + ?u1 ?u3 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_666967a7eacc6b0b4531a678375e4db33585012345) + } +} + +5.852 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.852 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:13:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.118 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.099 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.099 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:13:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.111 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.093 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.093 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:12:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.130 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_329622308a6d2cbe1242d3b7241cbe3ec22521012) + } + VALUES ?v { } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.109 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.109 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:12:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +926.666 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +867.947 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 867.947 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:11:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.141 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.119 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.119 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:11:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.727 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_9245e34ec41aec584882ade5bd2b89e69b50012345678) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.887 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.887 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:11:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +774.519 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +703.847 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 703.847 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:10:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +321.817 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?c ?d . + FILTER (?c != ?d) + VALUES ?b { } + ?b ?c . + ?a ?b . + FILTER (((?a != ?b) && (?b != ?c)) && (?d != ?a)) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +294.178 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 294.178 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:10:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.278 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?b != ?c) && (?a != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +1.101 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.101 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:10:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +717.148 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +647.490 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 647.490 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:10:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +161.779 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +149.276 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 149.276 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:09:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +18.748 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +17.068 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 17.068 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:09:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +44.971 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +40.875 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.875 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:09:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +48.799 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + ?book a . + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +45.475 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.475 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:09:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.345 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +4.758 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.758 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:09:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +26581.765 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan a . + ?loan ?member . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +26211.981 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 26211.981 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:10:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +479.437 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +440.933 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 440.933 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:10:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +70.750 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +64.859 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 64.859 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:09:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +77.903 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?loan ?member . + ?member a . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +67.634 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 67.634 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:09:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +211.424 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +187.625 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 187.625 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:09:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +240.253 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +218.768 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 218.768 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:09:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +158.508 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +146.071 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 146.071 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:08:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +55.588 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + ?assembly a . + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +50.985 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 50.985 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:08:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +126.172 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +115.909 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 115.909 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:08:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +53.428 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +49.622 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 49.622 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:08:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.184 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +1.041 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.041 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:07:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +233.766 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +208.255 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 208.255 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:07:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.604 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + ?requirement a . + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +52.243 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 52.243 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:07:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.456 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?requirement a . + ?component a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.103 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.103 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:07:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.457 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +1.279 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.279 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:07:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.146 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + ?assembly a . + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +50.155 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 50.155 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:06:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +380.007 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +340.723 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 340.723 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:06:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1103.782 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?targetNode . + VALUES ?target { 1 2 } + } + UNION + { + VALUES ?target { 1 2 } + { + ?entity a . + } + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1013.433 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1013.433 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:06:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +540.627 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node a . + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +494.208 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 494.208 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:06:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +114.207 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +104.356 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 104.356 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:06:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +243.251 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + ?node a . + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +221.330 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 221.330 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:06:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +146.459 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node ?w . + FILTER (?w IN (4, 5, 6)) + ?node a . + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +134.501 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 134.501 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:05:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1469.436 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1330.188 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1330.188 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:05:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +123.473 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + ?node a . + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +113.613 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 113.613 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:05:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1146.004 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1078.033 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1078.033 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:05:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1419.555 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1270.960 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1270.960 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:05:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +297.141 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + ?node a . + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_6510fcb15c177f4465581277207833b8074012345) + } +} + +272.114 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 272.114 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:05:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +36.538 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +33.133 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 33.133 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:04:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +45.800 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +41.040 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.040 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:04:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +19.479 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + ?line a . + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +17.931 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 17.931 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:04:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +163.311 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +147.991 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 147.991 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:04:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +154.206 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + ?line a . + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +142.117 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 142.117 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:04:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.534 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +13.063 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.063 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:04:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +98.231 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +92.198 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 92.198 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:03:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +40.284 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + ?op a . + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +36.313 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 36.313 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:03:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f80111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +173.458 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?s1 . + ?service ?s2 . + ?s1 ?line . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +153.999 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 153.999 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:03:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +254.148 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +226.254 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 226.254 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:03:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111ddb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +203.410 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +182.888 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 182.888 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:03:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +44.536 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +40.051 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.051 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:03:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +29.864 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + ?entity a . + ?entity ?substation . + ?substation ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +27.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 27.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:02:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.155 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +3.697 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.697 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:02:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +314.826 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + ?meter ?load2 . + } +} + +275.005 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 275.005 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:02:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.105 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +3.621 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.621 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:02:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.130 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +4.475 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.475 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:02:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +91.877 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +83.677 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 83.677 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:02:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +21.366 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +19.588 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.588 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:02:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff00111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.914 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +12.521 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 12.521 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:01:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.908 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +4.446 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.446 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:01:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +388.556 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +360.905 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 360.905 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:01:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.271 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +0.232 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.232 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:01:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.518 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo a . + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.314 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.314 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:01:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +27.843 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +25.231 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.231 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:01:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.376 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?drug ?disease WHERE { + ?result ?rate . + FILTER (?rate > 0.6) + ?arm ?result . + ?trial ?arm . + ?trial a . + ?trial ?disease . + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +8.314 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.314 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:01:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f800111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +29.886 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?drug a . + ?drug ?mol . + ?mol ?class . + } + UNION + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +26.885 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 26.885 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:00:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.838 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +4.276 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.276 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:00:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc0111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.574 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +3.118 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.118 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:00:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +21.509 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +19.393 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.393 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +27.886 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +25.222 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.222 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f790 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +15.241 ms/op +Iteration 1: ### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +13.545 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.545 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +255.094 ms/op +Iteration 1: ### Optimized Query ### +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?drug ?target . + ?drug a . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +235.810 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 235.810 ms/op + + +# Run complete. Total time: 00:12:29 +``` + + diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md new file mode 100644 index 00000000000..4accd1cfa81 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md @@ -0,0 +1,10146 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 46.689 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 105.472 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 54.450 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 80.437 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 107.815 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 38.424 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 53.275 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 41.131 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 52.512 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 195.694 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 207.016 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.441 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 1229.919 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.469 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.465 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.355 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 856.219 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.484 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.830 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 667.115 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 321.401 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 9555.769 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 643.675 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 159.064 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 39.831 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 43.039 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 125.386 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 6.155 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 24636.411 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 641.259 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 235.927 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 180.108 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 191.649 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 213.812 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 147.949 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.638 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 118.612 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 122.886 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.561 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 213.769 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.659 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 7.653 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 4.838 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 2.103 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 339.420 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1067.021 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 506.659 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 100.776 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 217.266 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 120.875 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1339.965 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 116.021 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1059.420 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1290.182 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 255.162 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.263 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 45.724 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.837 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 144.789 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 133.276 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 15.776 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 89.777 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 47.821 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 153.575 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 223.739 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 181.958 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 38.470 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 31.399 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 36.359 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 285.986 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 50.400 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 6.110 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 84.626 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 48.090 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.521 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.696 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 375.959 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 82.594 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 2.238 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 29.629 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 41.761 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 43.270 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 22.808 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 383.693 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 21.602 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 27.031 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 28.953 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 240.960 ms/op +``` + + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:10:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800010ab348 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +102.739 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ s: Var (name=patient) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +46.689 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.689 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 02:39:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +219.163 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=50.4K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=50.4K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ ║ o: Var (name=code) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=16.3K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=code) + │ ║ │ ╚══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +105.472 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 105.472 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 01:24:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +113.876 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0148de6faca0f6b41aeb81c4291806f9a93, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=24.8K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ s: Var (name=enc) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ │ o: Var (name=practitioner) + │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Filter (costEstimate=420, resultSizeEstimate=1.3K) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=date) + │ ║ │ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ │ ValueConstant (value="2024-02-01"^^) + │ ║ │ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) + │ ║ GroupElem (_anon_having_0148de6faca0f6b41aeb81c4291806f9a93) + │ ║ Count + │ ║ Var (name=enc) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) + │ ╚══ ExtensionElem (_anon_having_0148de6faca0f6b41aeb81c4291806f9a93) + │ Count + │ Var (name=enc) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?practitioner . + ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +54.450 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 54.450 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:58:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe00111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +168.272 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.5K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_772aa164b64e5cd4617b6d4edfccc2f292f0123456, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_772aa164b64e5cd4617b6d4edfccc2f292f0123456, anonymous) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=obs) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +80.437 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 80.437 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:46:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +228.455 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [left] + │ ║ ║ │ ║ s: Var (name=enc) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] + │ ║ ║ │ s: Var (name=enc) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) + │ ║ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=code) + │ ║ ║ ║ │ ValueConstant (value="DX-200") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=code) + │ ║ ║ ║ ValueConstant (value="DX-201") + │ ║ ║ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) + │ ║ ║ s: Var (name=cond) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +107.815 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 107.815 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:38:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +81.070 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=9.0K, resultSizeEstimate=3.0K) [left] + │ ║ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) + │ ║ ║ │ ║ │ s: Var (name=obs) + │ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ │ ║ │ o: Var (name=value) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ ║ │ ║ s: Var (name=enc) + │ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ │ ║ o: Var (name=obs) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ │ s: Var (name=patient) + │ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ │ o: Var (name=enc) + │ ║ ║ └── StatementPattern (costEstimate=25.0K, resultSizeEstimate=8.3K) [right] + │ ║ ║ s: Var (name=patient) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +38.424 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.424 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:33:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.106 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_805a740577dc65e467ebd067ef3aaff87b901234567, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) + │ ║ │ Var (name=patient) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) + │ ║ GroupElem (_anon_having_805a740577dc65e467ebd067ef3aaff87b901234567) + │ ║ Count + │ ║ Var (name=med) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) + │ ╚══ ExtensionElem (_anon_having_805a740577dc65e467ebd067ef3aaff87b901234567) + │ Count + │ Var (name=med) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +53.275 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.275 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:29:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +89.669 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=med) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +41.131 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.131 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:27:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000070000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +111.577 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_524a6f32b2177d1436f8331c94eb614a07501234, anonymous) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) + │ ║ │ ║ Var (name=patient) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) + │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) + │ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) + │ ║ GroupElem (_anon_having_524a6f32b2177d1436f8331c94eb614a07501234) + │ ║ Count + │ ║ Var (name=enc) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) + │ ╚══ ExtensionElem (_anon_having_524a6f32b2177d1436f8331c94eb614a07501234) + │ Count + │ Var (name=enc) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +52.512 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 52.512 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:24:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +399.821 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=629.3M) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=629.3M) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ║ s: Var (name=enc) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ │ ╚══ Filter (costEstimate=2.0K, resultSizeEstimate=25.2K) [right] + │ ║ │ ║ │ ├── ListMemberOperator + │ ║ │ ║ │ │ Var (name=condCode) + │ ║ │ ║ │ │ ValueConstant (value="DX-200") + │ ║ │ ║ │ │ ValueConstant (value="DX-201") + │ ║ │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=50.4K) + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ │ ║ s: Var (name=enc) + │ ║ │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ o: Var (name=cond) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ │ s: Var (name=cond) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=condCode) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=51.0K) + │ ║ ╠══ StatementPattern (costEstimate=1860.7M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) + │ ║ ╚══ Filter (new scope) (costEstimate=224, resultSizeEstimate=50.1K) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +195.694 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 195.694 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:23:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +425.609 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (=) + │ ║ │ │ Var (name=c) + │ ║ │ │ ValueConstant (value="MED-1005") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ╠══ StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=m2) + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ s: Var (name=m2) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ║ s: Var (name=patient) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] + │ ║ ║ │ s: Var (name=patient) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] + │ ║ ║ ║ │ s: Var (name=patient) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ ║ s: Var (name=patient) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) + │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ ║ s: Var (name=enc) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +207.016 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 207.016 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:21:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.037 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ╠══ Filter (costEstimate=14, resultSizeEstimate=9.00) [left] + │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ Var (name=u) + │ ║ │ │ ║ │ Var (name=v) + │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) + │ ║ └── Str + │ ║ Var (name=v) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.441 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.441 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:20:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2517.709 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ╠══ Or + │ ║ │ ║ ║ ├── Compare (=) + │ ║ │ ║ ║ │ Var (name=name) + │ ║ │ ║ ║ │ ValueConstant (value="user0") + │ ║ │ ║ ║ └── Compare (=) + │ ║ │ ║ ║ Var (name=name) + │ ║ │ ║ ║ ValueConstant (value="user1") + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ ║ s: Var (name=u1) + │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=7.75094822068962E13M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=2.69130146552E10M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=187223.6M) [left] + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ │ │ ║ │ ║ s: Var (name=u1) + │ ║ │ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=u3) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ s: Var (name=u2) + │ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ o: Var (name=u3) + │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ s: Var (name=u3) + │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ o: Var (name=u1) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u3) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u2) + │ ║ │ └── Filter (costEstimate=577, resultSizeEstimate=2.9K) [right] + │ ║ │ ╠══ And + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) + │ ║ │ ║ │ Var (name=u3) + │ ║ │ ║ └── Compare (!=) + │ ║ │ ║ Var (name=u2) + │ ║ │ ║ Var (name=u3) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=185971.4M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=185971.4M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ║ ├── Filter (costEstimate=14, resultSizeEstimate=9.00) [left] + │ ║ │ │ ║ │ ╠══ Compare (!=) + │ ║ │ │ ║ │ ║ Var (name=u1) + │ ║ │ │ ║ │ ║ Var (name=u2) + │ ║ │ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ │ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ s: Var (name=u1) + │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ o: Var (name=u2) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u2) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u1) + │ ║ │ └── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) + │ ║ ╚══ ExtensionElem (_anon_path_5431a30237bfda4e4a9f8e423a2395593601234) + │ ║ Var (name=u1) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + ?u1 ?u3 . + ?u2 ?u3 . + ?u3 ?u1 . + ?u3 ?u2 . + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + ?u2 ?u1 . + VALUES ?u3 { } + FILTER ((?u1 != ?u3) && (?u2 != ?u3)) + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_5431a30237bfda4e4a9f8e423a2395593601234) + } +} + +1229.919 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1229.919 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:19:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.165 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter (costEstimate=7.00, resultSizeEstimate=16) [left] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=u) + │ ║ ║ │ ║ │ Var (name=v) + │ ║ ║ │ ║ └── Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=v) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.469 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.469 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:18:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.117 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_9046218bfb1ff264b4ab2a1dccceb27bf7a5a012345678, anonymous) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter (costEstimate=21, resultSizeEstimate=16) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) + │ ║ GroupElem (_anon_having_9046218bfb1ff264b4ab2a1dccceb27bf7a5a012345678) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ╚══ ExtensionElem (_anon_having_9046218bfb1ff264b4ab2a1dccceb27bf7a5a012345678) + │ Count (Distinct) + │ Var (name=v) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.465 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.465 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:17:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.868 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.6M) [left] + │ ║ ║ ├── Filter (costEstimate=15, resultSizeEstimate=25) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=5.00) + │ ║ ║ │ ├── Filter (costEstimate=150, resultSizeEstimate=5.00) [left] + │ ║ ║ │ │ ╠══ Not + │ ║ ║ │ │ ║ Exists + │ ║ ║ │ │ ║ Extension + │ ║ ║ │ │ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ │ ║ │ s: Var (name=u) + │ ║ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ ║ │ o: Var (name=u) + │ ║ ║ │ │ ║ └── ExtensionElem (_anon_path_97654c7aaee43faa8469cb6060dc7abd60bc1012345678) + │ ║ ║ │ │ ║ Var (name=u) + │ ║ ║ │ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ └── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_97654c7aaee43faa8469cb6060dc7abd60bc1012345678) + } + VALUES ?v { } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.355 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.355 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:16:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1670.749 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Union (new scope) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ │ ╠══ Extension (new scope) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=287.5K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=u) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=v) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ s: Var (name=v) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) + │ ║ ║ │ ║ └── ExtensionElem (activity) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=1.4M) + │ ║ ║ ╠══ Extension (new scope) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ ║ │ s: Var (name=post) + │ ║ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ ║ │ o: Var (name=u) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=post) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +856.219 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 856.219 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:16:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.162 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_1045297b26bec5c9441d1b51d7ce2a79138d80, anonymous) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.2M) [left] + │ ║ ║ ├── Filter (costEstimate=41, resultSizeEstimate=36) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ║ GroupElem (_anon_having_1045297b26bec5c9441d1b51d7ce2a79138d80) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ╚══ ExtensionElem (_anon_having_1045297b26bec5c9441d1b51d7ce2a79138d80) + │ Count (Distinct) + │ Var (name=v) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.484 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.484 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:15:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.233 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.2M) + │ ║ ║ │ ╠══ Filter (costEstimate=14, resultSizeEstimate=36) [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ │ ║ Var (name=v) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=v) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) + │ ║ ║ ╚══ ExtensionElem (_anon_path_426342785f86777d4331b923e6a814eda1570123) + │ ║ ║ Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_426342785f86777d4331b923e6a814eda1570123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.830 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.830 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:14:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1318.017 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=188738.0M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ s: Var (name=a) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +667.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 667.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:14:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +648.805 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=21011.5M) [left] + │ ║ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ s: Var (name=d) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) + │ ║ ║ └── Filter (costEstimate=2.8K, resultSizeEstimate=146.2K) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=d) + │ ║ ║ ║ Var (name=a) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=139.3M) + │ ║ ║ ├── Filter (costEstimate=87, resultSizeEstimate=960) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=15.2M) + │ ║ ║ │ ├── Filter (costEstimate=5.27, resultSizeEstimate=106) [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=a) + │ ║ ║ │ │ ║ Var (name=b) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=106) + │ ║ ║ │ │ ├── BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ s: Var (name=a) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=b) + │ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=b) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) + │ ║ ║ └── Filter (costEstimate=0.50, resultSizeEstimate=145.1K) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=c) + │ ║ ║ ║ Var (name=d) + │ ║ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=c) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=d) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?d ?a . + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +321.401 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 321.401 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:13:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +12216.833 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4764048.8M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ s: Var (name=d) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=e) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=e) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) + │ ║ ║ └── Filter (costEstimate=23.6K, resultSizeEstimate=3.6M) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=d) + │ ║ ║ ║ Var (name=e) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=11520.0M) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11520.0M) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ s: Var (name=c) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=d) + │ ║ ║ │ ╚══ Filter (costEstimate=283, resultSizeEstimate=80.1K) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=c) + │ ║ ║ │ │ Var (name=d) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=254.4M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=254.4M) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=21, resultSizeEstimate=1.8K) [left] + │ ║ ║ │ ║ │ ╠══ And + │ ║ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ ║ │ Var (name=b) + │ ║ ║ │ ║ │ ║ │ Var (name=c) + │ ║ ║ │ ║ │ ║ └── Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3.6M) + │ ║ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=3.6M) [left] + │ ║ ║ │ ║ │ │ ╠══ Filter (costEstimate=30, resultSizeEstimate=25) [left] + │ ║ ║ │ ║ │ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ │ ║ │ Var (name=a) + │ ║ ║ │ ║ │ │ ║ │ Var (name=b) + │ ║ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ │ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) + │ ║ ║ │ ║ │ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ │ s: Var (name=a) + │ ║ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ │ o: Var (name=b) + │ ║ ║ │ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) + │ ║ ║ │ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?d ?e . + ?e ?a . + ?c ?d . + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?b != ?c) && (?a != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + VALUES ?e { } + FILTER (?d != ?e) + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +9555.769 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9555.769 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:14:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1285.538 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) + │ ║ │ ║ Var (name=book) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=390.0K) + │ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ │ s: Var (name=book) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) + │ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +643.675 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 643.675 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:13:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +338.089 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=4.7K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4.7K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=133.3K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +159.064 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 159.064 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:13:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +84.997 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_44404b8f19a393a407a9a5b461b4a824d3d0123, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=authorName) + │ ║ │ ║ ValueConstant (value="Author 1") + │ ║ │ ║ ValueConstant (value="Author 2") + │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=41.4K) + │ ║ │ ├── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [left] + │ ║ │ │ s: Var (name=author) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=authorName) + │ ║ │ └── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [right] + │ ║ │ s: Var (name=author) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) + │ ║ GroupElem (_anon_having_44404b8f19a393a407a9a5b461b4a824d3d0123) + │ ║ Count + │ ║ Var (name=book) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) + │ ╚══ ExtensionElem (_anon_having_44404b8f19a393a407a9a5b461b4a824d3d0123) + │ Count + │ Var (name=book) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author ?authorName . + ?author a . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +39.831 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 39.831 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:12:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +93.395 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ │ │ ║ s: Var (name=loan) + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ ║ o: Var (name=member) + │ ║ │ │ ╚══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [right] + │ ║ │ │ s: Var (name=loan) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?member . + ?loan a . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +43.039 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 43.039 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:12:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +267.480 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [left] + │ ║ ║ │ s: Var (name=book) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter (costEstimate=361, resultSizeEstimate=130.6K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) + │ ║ ║ s: Var (name=book) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +125.386 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 125.386 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:12:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff80111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.852 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=511) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=511) [left] + │ ║ ║ ├── Filter (costEstimate=1.5K, resultSizeEstimate=501) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=loanDate) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) + │ ║ ║ │ s: Var (name=loan) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ │ o: Var (name=loanDate) + │ ║ ║ └── StatementPattern (costEstimate=30.5K, resultSizeEstimate=10.2K) [right] + │ ║ ║ s: Var (name=loan) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +6.155 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.155 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:11:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111ddb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +29285.036 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_51187140f2cdb3457384807c37b34ff01601234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) + │ ║ │ Var (name=member) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ s: Var (name=loan) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) + │ ║ GroupElem (_anon_having_51187140f2cdb3457384807c37b34ff01601234) + │ ║ Count + │ ║ Var (name=loan) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) + │ ╚══ ExtensionElem (_anon_having_51187140f2cdb3457384807c37b34ff01601234) + │ Count + │ Var (name=loan) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan ?member . + ?loan a . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +24636.411 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 24636.411 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:13:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1333.037 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ╠══ Filter (costEstimate=2.50, resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Exists + │ ║ │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ │ s: Var (name=copy) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ ║ s: Var (name=copy) + │ ║ │ ║ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ ║ o: Var (name=branch) + │ ║ │ ║ ╚══ Filter (costEstimate=57.3K, resultSizeEstimate=45.8K) [right] + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=branchName) + │ ║ │ ║ │ ║ ValueConstant (value="Branch 0") + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=branchName) + │ ║ │ ║ │ ValueConstant (value="Branch 1") + │ ║ │ ║ └── StatementPattern (costEstimate=22.7K, resultSizeEstimate=45.3K) + │ ║ │ ║ s: Var (name=branch) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=branchName) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=386.3K) [right] + │ ║ │ s: Var (name=copy) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy ?branch . + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +641.259 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 641.259 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:12:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +474.199 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_98102204d0f2d99425a863e69ce48412eb2012345678, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=272.6K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=272.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=272.7K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.2K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=copy) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=member) + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=copy) + │ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ │ o: Var (name=branch) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] + │ ║ ║ │ ║ s: Var (name=book) + │ ║ ║ │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ o: Var (name=author) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] + │ ║ ║ s: Var (name=book) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) + │ ║ GroupElem (_anon_having_98102204d0f2d99425a863e69ce48412eb2012345678) + │ ║ Count + │ ║ Var (name=loan) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) + │ ╚══ ExtensionElem (_anon_having_98102204d0f2d99425a863e69ce48412eb2012345678) + │ Count + │ Var (name=loan) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book ?author . + ?loan a . + ?book a . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +235.927 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 235.927 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:12:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +391.106 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ Var (name=target) + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=authorName) + │ ║ ║ │ ValueConstant (value="Author 3") + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=271.0K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=271.0K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=264.1K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) + │ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=member) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=loan) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=copy) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ ║ ║ │ ║ s: Var (name=book) + │ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=copy) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] + │ ║ ║ ║ │ s: Var (name=book) + │ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ │ o: Var (name=author) + │ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ ║ ║ s: Var (name=author) + │ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ ║ o: Var (name=authorName) + │ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?loan ?member . + ?loan a . + ?member a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +180.108 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 180.108 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:11:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +420.134 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) + │ ║ │ ║ Var (name=branch) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ │ s: Var (name=branch) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ │ s: Var (name=branch) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +191.649 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 191.649 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:11:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +227.401 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) + │ ║ │ ║ Var (name=component) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +213.812 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 213.812 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:11:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +320.462 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=531) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=531) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=137.2K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=137.2K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +147.949 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 147.949 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:10:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.930 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_610019a61e55cd6af4bf3b51615b047fbd542012345, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=assemblyName) + │ ║ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ ║ ValueConstant (value="Assembly 3") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ s: Var (name=assembly) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ s: Var (name=assembly) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) + │ ║ GroupElem (_anon_having_610019a61e55cd6af4bf3b51615b047fbd542012345) + │ ║ Count + │ ║ Var (name=component) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) + │ ╚══ ExtensionElem (_anon_having_610019a61e55cd6af4bf3b51615b047fbd542012345) + │ Count + │ Var (name=component) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.638 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.638 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:10:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +251.554 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) + │ ║ │ ║ Var (name=requirement) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ ║ s: Var (name=requirement) + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ ║ o: Var (name=component) + │ ║ │ │ ╚══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [right] + │ ║ │ │ s: Var (name=requirement) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement ?component . + ?requirement a . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +118.612 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 118.612 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:10:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +255.404 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137.2K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=66.3K, resultSizeEstimate=132.7K) [left] + │ ║ ║ │ s: Var (name=component) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) + │ ║ ║ ║ │ ValueConstant (value="Component 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) + │ ║ ║ ║ ValueConstant (value="Component 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) + │ ║ ║ s: Var (name=component) + │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ o: Var (name=name) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +122.886 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 122.886 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:09:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.730 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=78) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ ├── Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=40, resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) + │ ║ ║ └── StatementPattern (costEstimate=4.7K, resultSizeEstimate=1.6K) [right] + │ ║ ║ s: Var (name=measurement) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +1.561 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.561 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:09:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f800111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +461.722 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_011d5923d82bf3345fe9c6790677810ffdd, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) + │ ║ │ Var (name=component) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ s: Var (name=requirement) + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ o: Var (name=component) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) + │ ║ GroupElem (_anon_having_011d5923d82bf3345fe9c6790677810ffdd) + │ ║ Count + │ ║ Var (name=requirement) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) + │ ╚══ ExtensionElem (_anon_having_011d5923d82bf3345fe9c6790677810ffdd) + │ Count + │ Var (name=requirement) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement ?component . + ?requirement a . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +213.769 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 213.769 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:09:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.760 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=531) + │ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ s: Var (name=requirement) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (costEstimate=571.3K, resultSizeEstimate=3.1K) [left] + │ ║ ║ s: Var (name=requirement) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) + │ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] + │ ║ s: Var (name=test) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +4.659 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.659 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:09:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +17.982 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_2523f27f097585ee4c4f953fa3a8473adddf01, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) + │ ║ │ Var (name=component) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=659) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ │ ║ s: Var (name=component) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) + │ ║ GroupElem (_anon_having_2523f27f097585ee4c4f953fa3a8473adddf01) + │ ║ Count + │ ║ Var (name=requirement) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) + │ ╚══ ExtensionElem (_anon_having_2523f27f097585ee4c4f953fa3a8473adddf01) + │ Count + │ Var (name=requirement) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?component a . + ?requirement a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +7.653 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.653 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:08:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +12.023 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=40, resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +4.838 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.838 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:08:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.966 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) + │ ║ │ ║ Var (name=assembly) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) + │ ║ │ │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ │ s: Var (name=assembly) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ │ s: Var (name=assembly) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +2.103 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.103 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:08:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +361.404 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) + │ ║ │ ║ Var (name=node) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +339.420 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 339.420 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:08:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c00111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1898.028 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) + │ ║ │ ║ Var (name=target) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=98.2K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.2K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ║ │ s: Var (name=entity) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ ║ s: Var (name=entity) + │ ║ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ ║ o: Var (name=targetNode) + │ ║ ║ │ ╚══ BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── Join (HashJoinIteration) (resultSizeEstimate=40.3K) + │ ║ ║ ╠══ BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=4861.6M, resultSizeEstimate=40.3K) [right] + │ ║ ║ s: Var (name=entity) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?targetNode . + VALUES ?target { 1 2 } + } + UNION + { + VALUES ?target { 1 2 } + { + ?entity a . + } + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1067.021 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1067.021 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:07:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1044.068 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_05283dd02b1eff40588dee62dc6b802e84, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=17862.3M) [left] + │ ║ │ ╠══ Filter (costEstimate=33.4K, resultSizeEstimate=66.8K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=w) + │ ║ │ ║ │ ValueConstant (value="1"^^) + │ ║ │ ║ │ ValueConstant (value="2"^^) + │ ║ │ ║ │ ValueConstant (value="3"^^) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=222.8K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=672.6M, resultSizeEstimate=40.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) + │ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) + │ ║ GroupElem (_anon_having_05283dd02b1eff40588dee62dc6b802e84) + │ ║ Count + │ ║ Var (name=neighbor) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) + │ ╚══ ExtensionElem (_anon_having_05283dd02b1eff40588dee62dc6b802e84) + │ Count + │ Var (name=neighbor) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +506.659 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 506.659 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:07:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +107.224 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) + │ ║ ║ Var (name=node) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +100.776 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 100.776 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:07:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +457.274 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=222.8K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=473, resultSizeEstimate=223.9K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +217.266 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 217.266 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:07:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +253.638 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=66.8K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=66.8K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=259, resultSizeEstimate=67.2K) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +120.875 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 120.875 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:06:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2670.645 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5234691a5f2eae4bcaae552323d944d89401234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=98.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ║ s: Var (name=node) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) + │ ║ GroupElem (_anon_having_5234691a5f2eae4bcaae552323d944d89401234) + │ ║ Count + │ ║ Var (name=neighbor) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) + │ ╚══ ExtensionElem (_anon_having_5234691a5f2eae4bcaae552323d944d89401234) + │ Count + │ Var (name=neighbor) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1339.965 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1339.965 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:06:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +239.043 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=222.8K) + │ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (costEstimate=473, resultSizeEstimate=223.9K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) + │ ║ ║ Var (name=node) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +116.021 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 116.021 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:06:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1945.411 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=95.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=node) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=node) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) + │ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ s: Var (name=mid) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1059.420 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1059.420 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:06:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1398.218 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_82dbf43ed36e2a400a9e84bac5a0225e2301234567, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) + │ ║ GroupElem (_anon_having_82dbf43ed36e2a400a9e84bac5a0225e2301234567) + │ ║ Count + │ ║ Var (name=neighbor) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) + │ ╚══ ExtensionElem (_anon_having_82dbf43ed36e2a400a9e84bac5a0225e2301234567) + │ Count + │ Var (name=neighbor) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1290.182 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1290.182 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:06:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +512.468 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=w2) + │ ║ │ ║ │ Var (name=threshold) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=522.4K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) + │ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ ║ o: Var (name=n2) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=n2) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=89.1K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=89.1K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ ║ s: Var (name=node) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter (costEstimate=299, resultSizeEstimate=89.5K) [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) + │ ║ ╚══ ExtensionElem (_anon_path_41168689a021b714a94a762c99358c3e3b20123) + │ ║ Var (name=node) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_41168689a021b714a94a762c99358c3e3b20123) + } +} + +255.162 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 255.162 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:05:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +35.870 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +33.263 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 33.263 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:05:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000e0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +97.242 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=30.7K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=8.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +45.724 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.724 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:05:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +19.279 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_25913ae817d65c034f6993dca4581dc695e401, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=lineName) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ║ ValueConstant (value="Line 2") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=8.9K) + │ ║ │ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] + │ ║ │ │ s: Var (name=line) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ s: Var (name=line) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) + │ ║ GroupElem (_anon_having_25913ae817d65c034f6993dca4581dc695e401) + │ ║ Count + │ ║ Var (name=section) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) + │ ╚══ ExtensionElem (_anon_having_25913ae817d65c034f6993dca4581dc695e401) + │ Count + │ Var (name=section) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +8.837 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.837 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:05:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +303.381 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) + │ ║ │ ║ Var (name=section) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] + │ ║ │ │ ║ s: Var (name=section) + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ ║ o: Var (name=line) + │ ║ │ │ ╚══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [right] + │ ║ │ │ s: Var (name=section) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section ?line . + ?section a . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +144.789 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 144.789 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:05:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +278.689 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] + │ ║ ║ │ s: Var (name=line) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) + │ ║ ║ s: Var (name=line) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +133.276 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 133.276 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:04:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff0111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +34.800 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.3K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ ║ ├── Filter (costEstimate=3.9K, resultSizeEstimate=1.3K) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=time) + │ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=161, resultSizeEstimate=25.8K) + │ ║ ║ │ s: Var (name=service) + │ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ │ o: Var (name=time) + │ ║ ║ └── StatementPattern (costEstimate=25.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ s: Var (name=service) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +15.776 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 15.776 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:04:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +194.778 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0037dcdde221575431ebbe1fd0807d99e1c, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.6K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [left] + │ ║ ║ │ ║ │ s: Var (name=service) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ ║ s: Var (name=service) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ o: Var (name=section) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ s: Var (name=section) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) + │ ║ GroupElem (_anon_having_0037dcdde221575431ebbe1fd0807d99e1c) + │ ║ Count + │ ║ Var (name=service) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) + │ ╚══ ExtensionElem (_anon_having_0037dcdde221575431ebbe1fd0807d99e1c) + │ Count + │ Var (name=service) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +89.777 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 89.777 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:04:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111ddb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +98.751 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ s: Var (name=op) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=op) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +47.821 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 47.821 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:04:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +320.128 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=595.5K) + │ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ ║ │ ║ s: Var (name=s1) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] + │ ║ │ s: Var (name=s2) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5565.7M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=82.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.5K) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?s1 . + ?s1 ?line . + ?service a . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +153.575 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 153.575 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:04:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +472.015 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_501ca9f329e637c40eeb518c2c2d3f6593601234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) + │ ║ │ Var (name=section) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) + │ ║ ║ └── StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=section) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) + │ ║ GroupElem (_anon_having_501ca9f329e637c40eeb518c2c2d3f6593601234) + │ ║ Count + │ ║ Var (name=track) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) + │ ╚══ ExtensionElem (_anon_having_501ca9f329e637c40eeb518c2c2d3f6593601234) + │ Count + │ Var (name=track) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +223.739 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 223.739 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:03:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +458.104 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) + │ ║ │ ║ Var (name=op) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ │ s: Var (name=op) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ │ s: Var (name=op) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +181.958 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 181.958 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:03:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +83.673 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ │ ║ │ s: Var (name=generator) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=generator) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +38.470 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.470 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:03:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +66.218 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=9.4K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.5K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.5K) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=substation) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + ?entity a . + ?entity ?substation . + ?substation ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +31.399 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.399 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:03:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +104.632 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5252f92df60de4d40c5a132cac98d2c523001234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ │ │ ║ s: Var (name=substation) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) + │ ║ GroupElem (_anon_having_5252f92df60de4d40c5a132cac98d2c523001234) + │ ║ Count + │ ║ Var (name=meter) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) + │ ╚══ ExtensionElem (_anon_having_5252f92df60de4d40c5a132cac98d2c523001234) + │ Count + │ Var (name=meter) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + ?transformer ?substation . + ?transformer a . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +36.359 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 36.359 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:03:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +631.531 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=275.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ │ │ ║ s: Var (name=meter) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ │ │ s: Var (name=meter) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=278.8K) + │ ║ ╠══ Filter (new scope) (costEstimate=3132.2M, resultSizeEstimate=111.8K) [left] + │ ║ ║ ├── Compare (>) + │ ║ ║ │ Var (name=value2) + │ ║ ║ │ ValueConstant (value="180"^^) + │ ║ ║ └── StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) + │ ║ ║ s: Var (name=load2) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value2) + │ ║ ╚══ StatementPattern (costEstimate=3139.2M, resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=meter) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + ?meter ?load2 . + } +} + +285.986 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 285.986 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:02:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +107.278 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.3K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [left] + │ ║ ║ │ ║ s: Var (name=line) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] + │ ║ ║ │ s: Var (name=line) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) + │ ║ ║ └── Filter (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) + │ ║ ║ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) + │ ║ ║ ║ ValueConstant (value="Substation 1") + │ ║ ║ ╚══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) + │ ║ ║ s: Var (name=substation) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?substation . + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +50.400 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 50.400 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:02:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.332 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=477) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=477) [left] + │ ║ ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=472) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=capacity) + │ ║ ║ │ ║ ValueConstant (value="700"^^) + │ ║ ║ │ ║ ValueConstant (value="800"^^) + │ ║ ║ │ ║ ValueConstant (value="900"^^) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) + │ ║ ║ │ s: Var (name=generator) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ │ o: Var (name=capacity) + │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=generator) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +6.110 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.110 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:02:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +181.462 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_813411ba24a87644dae982bec5d4713892601234567, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) + │ ║ │ Var (name=asset) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] + │ ║ ║ │ ║ s: Var (name=asset) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ │ s: Var (name=asset) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] + │ ║ ║ ║ s: Var (name=asset) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ s: Var (name=asset) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) + │ ║ GroupElem (_anon_having_813411ba24a87644dae982bec5d4713892601234567) + │ ║ Count + │ ║ Var (name=asset) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) + │ ╚══ ExtensionElem (_anon_having_813411ba24a87644dae982bec5d4713892601234567) + │ Count + │ Var (name=asset) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +84.626 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 84.626 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:02:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +109.313 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [left] + │ ║ │ │ ║ s: Var (name=transformer) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) + │ ║ │ └── Filter (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ╚══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) + │ ║ ║ Var (name=substation) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a . + ?transformer ?substation . + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +48.090 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 48.090 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:02:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff0111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +29.838 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5851ee6a9e0d6d764a3ba9c11a24f364482001234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) + │ ║ │ ║ Var (name=substation) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ ║ │ s: Var (name=substation) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) + │ ║ ║ └── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=substation) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) + │ ║ GroupElem (_anon_having_5851ee6a9e0d6d764a3ba9c11a24f364482001234) + │ ║ Count + │ ║ Var (name=transformer) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) + │ ╚══ ExtensionElem (_anon_having_5851ee6a9e0d6d764a3ba9c11a24f364482001234) + │ Count + │ Var (name=transformer) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation ?name . + ?substation a . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +13.521 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.521 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:02:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.124 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=cap) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ s: Var (name=line) + │ ║ │ ║ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ ║ o: Var (name=cap) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ │ ║ s: Var (name=line) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + ?line a . + FILTER (?cap IN (500, 600, 700)) + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +4.696 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.696 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:01:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +748.316 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=275.5K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ ║ │ ║ s: Var (name=meter) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ │ s: Var (name=meter) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=204.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=278.8K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [left] + │ ║ ║ ║ │ s: Var (name=load) + │ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ ║ │ o: Var (name=value) + │ ║ ║ ║ └── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [right] + │ ║ ║ ║ s: Var (name=meter) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) + │ ║ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] + │ ║ ║ s: Var (name=meter) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?load ?value . + ?meter ?load . + ?meter a . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +375.959 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 375.959 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:01:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +167.875 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=trial) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=arm) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ s: Var (name=arm) + │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=result) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ s: Var (name=arm) + │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ o: Var (name=drug) + │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ s: Var (name=result) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ s: Var (name=result) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +82.594 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 82.594 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:01:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_61311240bc1e516b04d40b2b834a9204ce0bb012345, anonymous) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=477) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=161, resultSizeEstimate=477) [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=22, resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=477) [right] + │ ║ ║ │ s: Var (name=combo) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] + │ ║ ║ s: Var (name=combo) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] + │ ║ │ ║ s: Var (name=drug) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) + │ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] + │ ║ │ s: Var (name=sideEffect) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) + │ ║ GroupElem (_anon_having_61311240bc1e516b04d40b2b834a9204ce0bb012345) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ╚══ ExtensionElem (_anon_having_61311240bc1e516b04d40b2b834a9204ce0bb012345) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo a . + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +2.238 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.238 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:01:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +63.686 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4811592cf919653043b68bc98f313b2595e00123, anonymous) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ s: Var (name=arm) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=224, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ │ s: Var (name=target) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=666) [right] + │ ║ ║ │ ║ s: Var (name=target) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drug) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ s: Var (name=drug) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) + │ ║ GroupElem (_anon_having_4811592cf919653043b68bc98f313b2595e00123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ╚══ ExtensionElem (_anon_having_4811592cf919653043b68bc98f313b2595e00123) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?target a . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +29.629 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 29.629 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:01:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +93.313 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Join (JoinIterator) (resultSizeEstimate=8.3M) [left] + ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=2.9K) [left] + ║ │ ╠══ Not + ║ │ ║ Exists + ║ │ ║ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ s: Var (name=drug) + ║ │ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ o: Var (name=disease) + ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.9K) + ║ │ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=462.4K, resultSizeEstimate=955) [left] + ║ │ │ ║ │ ║ s: Var (name=trial) + ║ │ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ │ ║ │ ║ o: Var (name=disease) + ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + ║ │ │ ║ │ s: Var (name=trial) + ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ │ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + ║ │ │ ║ s: Var (name=trial) + ║ │ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ │ │ ║ o: Var (name=arm) + ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ │ │ s: Var (name=arm) + ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ │ o: Var (name=result) + ║ │ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ │ s: Var (name=arm) + ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ │ o: Var (name=drug) + ║ └── Filter (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ ╠══ Compare (>) + ║ ║ Var (name=rate) + ║ ║ ValueConstant (value="0.6"^^) + ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) + ║ s: Var (name=result) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) + └── ExtensionElem (optTarget) + Var (name=target) + +SELECT ?drug ?disease WHERE { + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + ?result ?rate . + FILTER (?rate > 0.6) + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +41.761 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.761 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:01:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +93.266 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ │ ║ s: Var (name=mol) + │ ║ │ │ ║ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=class) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [right] + │ ║ │ │ ║ │ s: Var (name=drug) + │ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ o: Var (name=mol) + │ ║ │ │ ║ └── StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=drug) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (costEstimate=15, resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=drug) + │ ║ │ │ │ ║ └── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [right] + │ ║ │ │ │ ║ s: Var (name=combo) + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [right] + │ ║ │ │ │ s: Var (name=drug) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?mol ?class . + ?drug ?mol . + ?drug a . + } + UNION + { + ?combo ?drug . + ?combo a . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +43.270 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 43.270 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:00:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +52.975 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ s: Var (name=trial) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ │ s: Var (name=trial) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Filter (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?trial ?arm . + ?trial a . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +22.808 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 22.808 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:00:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +762.076 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_21110c13fd2c6494a83b46a6abdce4a3cef01, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1162.6M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=615.8K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [left] + │ ║ ║ │ ║ s: Var (name=drugA) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugB) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) + │ ║ ║ └── Filter (costEstimate=631, resultSizeEstimate=1.9K) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=drugA) + │ ║ ║ ║ Var (name=drugB) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=1.9K) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=31, resultSizeEstimate=949) [left] + │ ║ ║ │ ║ s: Var (name=combo) + │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ o: Var (name=drugA) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=101.4K, resultSizeEstimate=477) [right] + │ ║ ║ │ s: Var (name=combo) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ s: Var (name=combo) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drugB) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) + │ ║ GroupElem (_anon_having_21110c13fd2c6494a83b46a6abdce4a3cef01) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ╚══ ExtensionElem (_anon_having_21110c13fd2c6494a83b46a6abdce4a3cef01) + │ Count (Distinct) + │ Var (name=target) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?drugA ?target . + ?drugB ?target . + ?combo ?drugA . + ?combo a . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +383.693 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 383.693 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:00:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.280 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) + │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ │ s: Var (name=arm) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) + │ ║ │ └── Filter (costEstimate=12, resultSizeEstimate=144) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=16.6M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ │ ║ s: Var (name=trial) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ s: Var (name=trial) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) + │ ║ ║ └── Union (costEstimate=76, resultSizeEstimate=5.8K) [right] + │ ║ ║ ╠══ StatementPattern (new scope) (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) + │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +21.602 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 21.602 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +59.969 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_008f60aebec561b46b38f26d6e94aefad03, anonymous) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ s: Var (name=drug) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] + │ ║ │ │ s: Var (name=drug) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) + │ ║ GroupElem (_anon_having_008f60aebec561b46b38f26d6e94aefad03) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ╚══ ExtensionElem (_anon_having_008f60aebec561b46b38f26d6e94aefad03) + │ Count (Distinct) + │ Var (name=target) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +27.031 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 27.031 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +66.316 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_1231d7d2728d01f8470c8b84f2cb0bac12770, anonymous) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=480, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=result) + │ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=drug) + │ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ s: Var (name=result) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) + │ ║ ║ ║ │ GroupElem (_anon_having_1231d7d2728d01f8470c8b84f2cb0bac12770) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) + │ ║ ║ ║ └── ExtensionElem (_anon_having_1231d7d2728d01f8470c8b84f2cb0bac12770) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial ?arm . + ?trial a . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +28.953 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 28.953 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 2 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +503.707 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0613b563eac7f724cf989ed47d2dcbf90cb, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ │ s: Var (name=result) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) + │ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ │ ║ s: Var (name=arm) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) + │ ║ ║ │ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ │ o: Var (name=target) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] + │ ║ ║ │ s: Var (name=target) + │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ o: Var (name=pathway) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) + │ ║ GroupElem (_anon_having_0613b563eac7f724cf989ed47d2dcbf90cb) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ╚══ ExtensionElem (_anon_having_0613b563eac7f724cf989ed47d2dcbf90cb) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?drug ?target . + ?drug a . + ?target ?pathway . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +240.960 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 240.960 ms/op + + +# Run complete. Total time: 00:13:53 +``` + + diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-6.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-6.md new file mode 100644 index 00000000000..b69c9750026 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-6.md @@ -0,0 +1,10171 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 45.677 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 108.269 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 48.963 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 79.367 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 108.477 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 68.846 ms/op <--- +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 53.192 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 42.461 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 52.855 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 191.351 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 209.552 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.406 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 14.289 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.421 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.420 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.318 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 845.722 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.430 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.858 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 687.638 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 18.765 ms/op <--- main +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 94.875 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 667.354 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 159.229 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 40.380 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 42.922 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 46.039 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.379 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 25924.940 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 431.608 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 160.341 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 129.407 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 195.656 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 222.308 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 150.385 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.340 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 120.923 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 48.709 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.139 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 210.010 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.160 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.879 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 4.887 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.949 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 345.795 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1041.886 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 517.186 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.215 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 225.509 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 115.288 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1306.881 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 114.640 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1097.210 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1302.261 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 250.846 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.606 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 44.235 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.174 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 147.553 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 134.848 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 20.342 ms/op <--- +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 91.459 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 47.226 ms/op <--- +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 149.586 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 236.414 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 196.515 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 41.931 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 31.708 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 35.572 ms/op <--- +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 304.986 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 5.872 ms/op <--- +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 11.025 ms/op <--- +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 90.067 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 22.828 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.334 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.326 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 374.245 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 41.892 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.839 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 27.725 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 34.761 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 36.955 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 13.364 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.786 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 22.781 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.051 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 21.957 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 240.289 ms/op +``` + + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:58:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000c0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.651 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ s: Var (name=patient) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +45.677 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.677 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 00:58:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +119.279 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=50.4K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=50.4K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ ║ o: Var (name=code) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=16.3K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=code) + │ ║ │ ╚══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + ?entity a . + ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +108.269 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 108.269 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 00:58:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.422 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0973068e5e7129cf40278b885f9bf546902f, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.2K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ s: Var (name=enc) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ │ o: Var (name=practitioner) + │ ║ │ ║ └── StatementPattern (costEstimate=8.3K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=date) + │ ║ │ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ │ ValueConstant (value="2024-02-01"^^) + │ ║ │ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) + │ ║ GroupElem (_anon_having_0973068e5e7129cf40278b885f9bf546902f) + │ ║ Count + │ ║ Var (name=enc) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) + │ ╚══ ExtensionElem (_anon_having_0973068e5e7129cf40278b885f9bf546902f) + │ Count + │ Var (name=enc) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?practitioner . + ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +48.963 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 48.963 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:57:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000070000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +88.389 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.5K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_7332ce65e821303542f880555f952a3f762a0123456, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_7332ce65e821303542f880555f952a3f762a0123456, anonymous) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=obs) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +79.367 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 79.367 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:56:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +119.908 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [left] + │ ║ ║ │ ║ s: Var (name=enc) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] + │ ║ ║ │ s: Var (name=enc) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=code) + │ ║ ║ ║ │ ValueConstant (value="DX-200") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=code) + │ ║ ║ ║ ValueConstant (value="DX-201") + │ ║ ║ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) + │ ║ ║ s: Var (name=cond) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +108.477 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 108.477 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:56:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +76.184 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=52.9K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=52.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=25.0K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ║ │ s: Var (name=patient) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ │ ║ s: Var (name=patient) + │ ║ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ │ ║ o: Var (name=enc) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ ║ │ s: Var (name=enc) + │ ║ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ │ o: Var (name=obs) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=value) + │ ║ ║ ║ ValueConstant (value="50"^^) + │ ║ ║ ║ ValueConstant (value="60"^^) + │ ║ ║ ║ ValueConstant (value="70"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) + │ ║ ║ s: Var (name=obs) + │ ║ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ o: Var (name=value) + │ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + ?patient ?enc . + ?enc ?obs . + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +68.846 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 68.846 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:55:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.075 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0892072562930147436390697a179857743a, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) + │ ║ │ Var (name=patient) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) + │ ║ GroupElem (_anon_having_0892072562930147436390697a179857743a) + │ ║ Count + │ ║ Var (name=med) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) + │ ╚══ ExtensionElem (_anon_having_0892072562930147436390697a179857743a) + │ Count + │ Var (name=med) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +53.192 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.192 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:54:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +47.158 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=med) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +42.461 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 42.461 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:54:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +58.811 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_01532e3640e2755541a6a17fd1fc35f4861c, anonymous) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) + │ ║ │ ║ Var (name=patient) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) + │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) + │ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) + │ ║ GroupElem (_anon_having_01532e3640e2755541a6a17fd1fc35f4861c) + │ ║ Count + │ ║ Var (name=enc) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) + │ ╚══ ExtensionElem (_anon_having_01532e3640e2755541a6a17fd1fc35f4861c) + │ Count + │ Var (name=enc) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +52.855 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 52.855 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:53:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +212.479 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) [left] + │ ║ │ ║ ├── Filter [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=condCode) + │ ║ │ ║ │ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=52.6K) + │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ │ ║ │ │ ╠══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ │ ║ s: Var (name=enc) + │ ║ │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] + │ ║ │ ║ │ │ s: Var (name=enc) + │ ║ │ ║ │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ │ o: Var (name=cond) + │ ║ │ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ │ s: Var (name=cond) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=condCode) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=51.0K) + │ ║ ╠══ StatementPattern (costEstimate=1860.7M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +191.351 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 191.351 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:52:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +228.487 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (=) + │ ║ │ │ Var (name=c) + │ ║ │ │ ValueConstant (value="MED-1005") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ╠══ StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=m2) + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ s: Var (name=m2) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ║ s: Var (name=patient) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] + │ ║ ║ │ s: Var (name=patient) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] + │ ║ ║ ║ │ s: Var (name=patient) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ ║ s: Var (name=patient) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) + │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ ║ s: Var (name=enc) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +209.552 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 209.552 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:52:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.455 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ Var (name=u) + │ ║ │ │ ║ │ Var (name=v) + │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) + │ ║ └── Str + │ ║ Var (name=v) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.406 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.406 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:51:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +15.844 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ╠══ Or + │ ║ │ ║ ║ ├── Compare (=) + │ ║ │ ║ ║ │ Var (name=name) + │ ║ │ ║ ║ │ ValueConstant (value="user0") + │ ║ │ ║ ║ └── Compare (=) + │ ║ │ ║ ║ Var (name=name) + │ ║ │ ║ ║ ValueConstant (value="user1") + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ ║ s: Var (name=u1) + │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.7079188633118568E15M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.18813400069E10M) [left] + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=82654.0M) [left] + │ ║ │ │ ║ │ ╠══ Filter [left] + │ ║ │ │ ║ │ ║ ├── And + │ ║ │ │ ║ │ ║ │ ╠══ Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u1) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u3) + │ ║ │ │ ║ │ ║ │ ╚══ Compare (!=) + │ ║ │ │ ║ │ ║ │ Var (name=u2) + │ ║ │ │ ║ │ ║ │ Var (name=u3) + │ ║ │ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=575.0K) + │ ║ │ │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=575.0K) [left] + │ ║ │ │ ║ │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ │ │ ║ │ ║ ║ │ ╠══ Filter [left] + │ ║ │ │ ║ │ ║ ║ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ ║ │ ║ │ Var (name=u1) + │ ║ │ │ ║ │ ║ ║ │ ║ │ Var (name=u2) + │ ║ │ │ ║ │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ ║ │ s: Var (name=u1) + │ ║ │ │ ║ │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ ║ │ o: Var (name=u2) + │ ║ │ │ ║ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ ║ s: Var (name=u2) + │ ║ │ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ ║ o: Var (name=u1) + │ ║ │ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ s: Var (name=u1) + │ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ o: Var (name=u3) + │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ s: Var (name=u3) + │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ o: Var (name=u1) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u2) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u3) + │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) + │ ║ ╚══ ExtensionElem (_anon_path_46332e67b62a6a0a043a996e90222967e42610123) + │ ║ Var (name=u1) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + ?u2 ?u1 . + VALUES ?u3 { } + FILTER ((?u1 != ?u3) && (?u2 != ?u3)) + ?u1 ?u3 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_46332e67b62a6a0a043a996e90222967e42610123) + } +} + +14.289 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 14.289 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:50:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.471 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=u) + │ ║ ║ │ ║ │ Var (name=v) + │ ║ ║ │ ║ └── Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=v) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.421 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.421 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:49:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.472 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_9832623b1d3abcb8f94eee9f9679d04099a8be012345678, anonymous) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) + │ ║ GroupElem (_anon_having_9832623b1d3abcb8f94eee9f9679d04099a8be012345678) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ╚══ ExtensionElem (_anon_having_9832623b1d3abcb8f94eee9f9679d04099a8be012345678) + │ Count (Distinct) + │ Var (name=v) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.420 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.420 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:49:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.356 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.00) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ └── Filter [right] + │ ║ ║ │ ╠══ Not + │ ║ ║ │ ║ Exists + │ ║ ║ │ ║ Extension + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=u) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) + │ ║ ║ │ ║ └── ExtensionElem (_anon_path_55336450aec374c81c465daaeea753357048ea01234) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_55336450aec374c81c465daaeea753357048ea01234) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.318 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.318 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:48:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +959.654 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Union (new scope) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ │ ╠══ Extension (new scope) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=287.5K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=u) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=v) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ s: Var (name=v) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) + │ ║ ║ │ ║ └── ExtensionElem (activity) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=1.4M) + │ ║ ║ ╠══ Extension (new scope) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ ║ │ s: Var (name=post) + │ ║ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ ║ │ o: Var (name=u) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=post) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +845.722 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 845.722 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:47:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.480 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_991752832fe0a95f1244f1b7c3688a0363efa8012345678, anonymous) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ Var (name=v) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ║ GroupElem (_anon_having_991752832fe0a95f1244f1b7c3688a0363efa8012345678) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) + │ ╚══ ExtensionElem (_anon_having_991752832fe0a95f1244f1b7c3688a0363efa8012345678) + │ Count (Distinct) + │ Var (name=v) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.430 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.430 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:47:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.593 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) + │ ║ ║ │ ║ │ ║ Var (name=v) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=v) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) + │ ║ ║ ╚══ ExtensionElem (_anon_path_4031305c93d0b1d2e41c0a0f5ddb04aaf34f70123) + │ ║ ║ Var (name=v) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?v ?u) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_4031305c93d0b1d2e41c0a0f5ddb04aaf34f70123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.858 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.858 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:46:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +761.272 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=188738.0M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ s: Var (name=a) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +687.638 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 687.638 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:45:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +20.930 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=21011.5M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=146.2K) + │ ║ ║ │ ├── Filter [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=b) + │ ║ ║ │ │ ║ Var (name=c) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=960) + │ ║ ║ │ │ ├── Filter [left] + │ ║ ║ │ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ │ ║ Var (name=a) + │ ║ ║ │ │ │ ║ Var (name=b) + │ ║ ║ │ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=106) + │ ║ ║ │ │ │ ├── BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ │ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ s: Var (name=a) + │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ o: Var (name=b) + │ ║ ║ │ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ s: Var (name=b) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=c) + │ ║ ║ │ └── Filter [right] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=d) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +18.765 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.765 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:45:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +105.919 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.1M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=8.00) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=d) + │ ║ ║ │ ║ │ Var (name=e) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=8.00) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.00) [left] + │ ║ ║ │ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=8.00) + │ ║ ║ │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=8.00) [left] + │ ║ ║ │ ║ ║ │ │ ╠══ Filter [left] + │ ║ ║ │ ║ ║ │ │ ║ ├── And + │ ║ ║ │ ║ ║ │ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ║ │ │ ║ │ ╚══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=a) + │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=c) + │ ║ ║ │ ║ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=8.00) + │ ║ ║ │ ║ ║ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.00) [left] + │ ║ ║ │ ║ ║ │ │ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ │ │ ║ ║ s: Var (name=a) + │ ║ ║ │ ║ ║ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ │ │ ║ ║ o: Var (name=b) + │ ║ ║ │ ║ ║ │ │ ║ ╚══ BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ │ │ s: Var (name=b) + │ ║ ║ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ │ │ o: Var (name=c) + │ ║ ║ │ ║ ║ │ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ s: Var (name=c) + │ ║ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=d) + │ ║ ║ │ ║ ╚══ BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?b != ?c) && (?a != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +94.875 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 94.875 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:44:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +747.414 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) + │ ║ │ ║ Var (name=book) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=390.0K) + │ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ │ s: Var (name=book) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) + │ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +667.354 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 667.354 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:43:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +174.956 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=4.7K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4.7K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=133.3K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +159.229 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 159.229 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:43:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +44.700 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4863bf823cbe7ba5494d894a8e8588780cc60123, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=authorName) + │ ║ │ ║ ValueConstant (value="Author 1") + │ ║ │ ║ ValueConstant (value="Author 2") + │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=41.4K) + │ ║ │ ├── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [left] + │ ║ │ │ s: Var (name=author) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=authorName) + │ ║ │ └── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [right] + │ ║ │ s: Var (name=author) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) + │ ║ GroupElem (_anon_having_4863bf823cbe7ba5494d894a8e8588780cc60123) + │ ║ Count + │ ║ Var (name=book) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) + │ ╚══ ExtensionElem (_anon_having_4863bf823cbe7ba5494d894a8e8588780cc60123) + │ Count + │ Var (name=book) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author ?authorName . + ?author a . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +40.380 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.380 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:42:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +47.722 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [left] + │ ║ │ │ ║ s: Var (name=loan) + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ ║ o: Var (name=member) + │ ║ │ │ ╚══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [right] + │ ║ │ │ s: Var (name=loan) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?member . + ?loan a . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +42.922 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 42.922 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:41:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.792 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=title) + │ ║ ║ │ ║ │ ValueConstant (value="Book 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=title) + │ ║ ║ │ ║ ValueConstant (value="Book 2") + │ ║ ║ │ ╚══ StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) + │ ║ ║ │ s: Var (name=book) + │ ║ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ │ o: Var (name=title) + │ ║ ║ └── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [right] + │ ║ ║ s: Var (name=book) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + ?book a . + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +46.039 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.039 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:41:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +11.613 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=30.5K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ s: Var (name=loan) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=loanDate) + │ ║ ║ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) + │ ║ ║ s: Var (name=loan) + │ ║ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ o: Var (name=loanDate) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +10.379 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.379 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:40:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +27852.101 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_02b5b5257a95504e9cad9247959dd1b675, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) + │ ║ │ Var (name=member) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ s: Var (name=loan) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) + │ ║ GroupElem (_anon_having_02b5b5257a95504e9cad9247959dd1b675) + │ ║ Count + │ ║ Var (name=loan) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) + │ ╚══ ExtensionElem (_anon_having_02b5b5257a95504e9cad9247959dd1b675) + │ Count + │ Var (name=loan) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan ?member . + ?loan a . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +25924.940 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25924.940 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:41:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +482.705 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Exists + │ ║ │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ │ s: Var (name=copy) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ Filter [left] + │ ║ │ ║ ║ ├── Or + │ ║ │ ║ ║ │ ╠══ Compare (=) + │ ║ │ ║ ║ │ ║ Var (name=branchName) + │ ║ │ ║ ║ │ ║ ValueConstant (value="Branch 0") + │ ║ │ ║ ║ │ ╚══ Compare (=) + │ ║ │ ║ ║ │ Var (name=branchName) + │ ║ │ ║ ║ │ ValueConstant (value="Branch 1") + │ ║ │ ║ ║ └── StatementPattern (costEstimate=22.7K, resultSizeEstimate=45.3K) + │ ║ │ ║ ║ s: Var (name=branch) + │ ║ │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ ║ o: Var (name=branchName) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=386.3K) [right] + │ ║ │ s: Var (name=copy) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +431.608 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 431.608 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:40:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +178.776 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_880231d5d02d556942e4859372891313e8bf01234567, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=272.6K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=272.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=272.7K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.2K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=copy) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=member) + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=copy) + │ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ │ o: Var (name=branch) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] + │ ║ ║ │ ║ s: Var (name=book) + │ ║ ║ │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ o: Var (name=author) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] + │ ║ ║ s: Var (name=book) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) + │ ║ GroupElem (_anon_having_880231d5d02d556942e4859372891313e8bf01234567) + │ ║ Count + │ ║ Var (name=loan) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) + │ ╚══ ExtensionElem (_anon_having_880231d5d02d556942e4859372891313e8bf01234567) + │ Count + │ Var (name=loan) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book ?author . + ?loan a . + ?book a . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +160.341 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 160.341 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:39:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +142.101 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ Var (name=target) + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=authorName) + │ ║ ║ │ ValueConstant (value="Author 3") + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=271.0K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=271.0K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=264.1K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=member) + │ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=member) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=loan) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=loan) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=copy) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ ║ ║ │ ║ s: Var (name=book) + │ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=copy) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] + │ ║ ║ ║ │ s: Var (name=book) + │ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ │ o: Var (name=author) + │ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ ║ ║ s: Var (name=author) + │ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ ║ o: Var (name=authorName) + │ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?member a . + ?loan ?member . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +129.407 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 129.407 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:39:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +216.275 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) + │ ║ │ ║ Var (name=branch) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ │ s: Var (name=branch) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ │ s: Var (name=branch) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +195.656 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 195.656 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:38:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +220.273 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) + │ ║ │ ║ Var (name=component) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +222.308 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 222.308 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:37:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +166.560 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=531) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=531) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=137.2K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=137.2K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +150.385 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 150.385 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:36:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff0111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.506 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_275901948aac810a7f4beab126d85e7452b14401, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=assemblyName) + │ ║ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ ║ ValueConstant (value="Assembly 3") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ s: Var (name=assembly) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ s: Var (name=assembly) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) + │ ║ GroupElem (_anon_having_275901948aac810a7f4beab126d85e7452b14401) + │ ║ Count + │ ║ Var (name=component) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) + │ ╚══ ExtensionElem (_anon_having_275901948aac810a7f4beab126d85e7452b14401) + │ Count + │ Var (name=component) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.340 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.340 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:36:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +133.102 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) + │ ║ │ ║ Var (name=requirement) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [left] + │ ║ │ │ ║ s: Var (name=requirement) + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ ║ o: Var (name=component) + │ ║ │ │ ╚══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [right] + │ ║ │ │ s: Var (name=requirement) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement ?component . + ?requirement a . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +120.923 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 120.923 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:35:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +53.792 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137.2K) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) + │ ║ ║ │ s: Var (name=component) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) + │ ║ ║ └── StatementPattern (costEstimate=66.3K, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +48.709 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 48.709 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:34:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.396 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.6K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=1.6K) [left] + │ ║ ║ │ s: Var (name=measurement) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=value) + │ ║ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=40, resultSizeEstimate=1.6K) + │ ║ ║ s: Var (name=measurement) + │ ║ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ o: Var (name=value) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +2.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:34:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +233.254 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_098f40c3a3b875a4c9cb10fdb7b0884fa61, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) + │ ║ │ Var (name=component) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ s: Var (name=requirement) + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ o: Var (name=component) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) + │ ║ GroupElem (_anon_having_098f40c3a3b875a4c9cb10fdb7b0884fa61) + │ ║ Count + │ ║ Var (name=requirement) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) + │ ╚══ ExtensionElem (_anon_having_098f40c3a3b875a4c9cb10fdb7b0884fa61) + │ Count + │ Var (name=requirement) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement ?component . + ?requirement a . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +210.010 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 210.010 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:33:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.676 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=531) + │ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ s: Var (name=requirement) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (costEstimate=571.1K, resultSizeEstimate=3.1K) [left] + │ ║ ║ s: Var (name=requirement) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) + │ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] + │ ║ s: Var (name=test) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +4.160 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.160 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:32:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.532 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_65844c50eed0a1e694c5f84591fd2ff30a740012345, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) + │ ║ │ Var (name=component) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=659) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ │ ║ s: Var (name=component) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) + │ ║ GroupElem (_anon_having_65844c50eed0a1e694c5f84591fd2ff30a740012345) + │ ║ Count + │ ║ Var (name=requirement) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) + │ ╚══ ExtensionElem (_anon_having_65844c50eed0a1e694c5f84591fd2ff30a740012345) + │ Count + │ Var (name=requirement) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?component a . + ?requirement a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +4.879 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.879 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:31:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.513 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=780) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=requirement) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=requirement) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=test) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=test) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=measurement) + │ ║ ║ │ ╚══ Filter [right] + │ ║ ║ │ ├── ListMemberOperator + │ ║ ║ │ │ Var (name=value) + │ ║ ║ │ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ └── StatementPattern (costEstimate=40, resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?test . + ?test ?measurement . + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +4.887 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.887 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:31:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.207 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) + │ ║ │ ║ Var (name=assembly) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) + │ ║ │ │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ │ s: Var (name=assembly) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ │ s: Var (name=assembly) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +1.949 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.949 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:30:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +352.167 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) + │ ║ │ ║ Var (name=node) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +345.795 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 345.795 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:29:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1143.726 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) + │ ║ │ ║ Var (name=target) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=98.2K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.2K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ║ │ s: Var (name=entity) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ ║ s: Var (name=entity) + │ ║ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ ║ o: Var (name=targetNode) + │ ║ ║ │ ╚══ BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── Join (HashJoinIteration) (resultSizeEstimate=40.3K) + │ ║ ║ ╠══ BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=4861.6M, resultSizeEstimate=40.3K) [right] + │ ║ ║ s: Var (name=entity) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?targetNode . + VALUES ?target { 1 2 } + } + UNION + { + VALUES ?target { 1 2 } + { + ?entity a . + } + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1041.886 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1041.886 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:29:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +578.141 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_563cbe6f4607db94253925d14db1d3f88d101234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=542.2K) [left] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=w) + │ ║ │ ║ │ ValueConstant (value="1"^^) + │ ║ │ ║ │ ValueConstant (value="2"^^) + │ ║ │ ║ │ ValueConstant (value="3"^^) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=222.8K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=13.4K, resultSizeEstimate=40.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) + │ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) + │ ║ GroupElem (_anon_having_563cbe6f4607db94253925d14db1d3f88d101234) + │ ║ Count + │ ║ Var (name=neighbor) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) + │ ╚══ ExtensionElem (_anon_having_563cbe6f4607db94253925d14db1d3f88d101234) + │ Count + │ Var (name=neighbor) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +517.186 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 517.186 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:28:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +106.150 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) + │ ║ ║ Var (name=node) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +104.215 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 104.215 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:27:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000038000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +248.798 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=222.8K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +225.509 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 225.509 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:26:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +127.779 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=222.8K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=222.8K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +115.288 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 115.288 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:26:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1463.046 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0515115e7a4a04847df969868f82c0d9cb1, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=98.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ║ s: Var (name=node) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) + │ ║ GroupElem (_anon_having_0515115e7a4a04847df969868f82c0d9cb1) + │ ║ Count + │ ║ Var (name=neighbor) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) + │ ╚══ ExtensionElem (_anon_having_0515115e7a4a04847df969868f82c0d9cb1) + │ Count + │ Var (name=neighbor) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1306.881 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1306.881 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:25:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +126.216 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=222.8K) + │ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) + │ ║ ║ Var (name=node) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +114.640 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 114.640 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:24:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1200.437 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=95.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=node) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=node) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) + │ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ s: Var (name=mid) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1097.210 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1097.210 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:24:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1342.008 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8219230dd9e93124898a2d24ed5ea5f98f801234567, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) + │ ║ GroupElem (_anon_having_8219230dd9e93124898a2d24ed5ea5f98f801234567) + │ ║ Count + │ ║ Var (name=neighbor) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) + │ ╚══ ExtensionElem (_anon_having_8219230dd9e93124898a2d24ed5ea5f98f801234567) + │ Count + │ Var (name=neighbor) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1302.261 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1302.261 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:23:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +277.869 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=w2) + │ ║ │ ║ │ Var (name=threshold) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=522.4K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) + │ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ ║ o: Var (name=n2) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=n2) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=222.8K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=222.8K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ ║ s: Var (name=node) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) + │ ║ ╚══ ExtensionElem (_anon_path_498658e69cdb0594e1d9c620c5c003cca7b0123) + │ ║ Var (name=node) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_498658e69cdb0594e1d9c620c5c003cca7b0123) + } +} + +250.846 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 250.846 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:22:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +34.248 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +33.606 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 33.606 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:22:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.201 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=30.7K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=8.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + ?entity a . + ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +44.235 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.235 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:21:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.182 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_089710dfb267b4259455f8b48f462558a640d, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=lineName) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ║ ValueConstant (value="Line 2") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=8.9K) + │ ║ │ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] + │ ║ │ │ s: Var (name=line) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ s: Var (name=line) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) + │ ║ GroupElem (_anon_having_089710dfb267b4259455f8b48f462558a640d) + │ ║ Count + │ ║ Var (name=section) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) + │ ╚══ ExtensionElem (_anon_having_089710dfb267b4259455f8b48f462558a640d) + │ Count + │ Var (name=section) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +8.174 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.174 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:20:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +163.241 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) + │ ║ │ ║ Var (name=section) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [left] + │ ║ │ │ ║ s: Var (name=section) + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ ║ o: Var (name=line) + │ ║ │ │ ╚══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [right] + │ ║ │ │ s: Var (name=section) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section ?line . + ?section a . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +147.553 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 147.553 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:19:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +148.238 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] + │ ║ ║ │ s: Var (name=line) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) + │ ║ ║ s: Var (name=line) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +134.848 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 134.848 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:19:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +22.518 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=26.1K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=26.1K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=25.9K, resultSizeEstimate=8.6K) [left] + │ ║ ║ │ s: Var (name=service) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=time) + │ ║ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=161, resultSizeEstimate=25.8K) + │ ║ ║ s: Var (name=service) + │ ║ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ o: Var (name=time) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +20.342 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.342 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:18:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +99.959 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_27426acf73ebd3134084910a5c76b7ecef8101, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.6K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [left] + │ ║ ║ │ ║ │ s: Var (name=service) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ ║ s: Var (name=service) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ o: Var (name=section) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ s: Var (name=section) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) + │ ║ GroupElem (_anon_having_27426acf73ebd3134084910a5c76b7ecef8101) + │ ║ Count + │ ║ Var (name=service) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) + │ ╚══ ExtensionElem (_anon_having_27426acf73ebd3134084910a5c76b7ecef8101) + │ Count + │ Var (name=service) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +91.459 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 91.459 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:17:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +51.550 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ s: Var (name=op) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=op) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +47.226 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 47.226 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:17:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +159.448 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=595.5K) + │ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ ║ │ ║ s: Var (name=s1) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] + │ ║ │ s: Var (name=s2) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5565.7M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=82.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.5K) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?s1 . + ?s1 ?line . + ?service a . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +149.586 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 149.586 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:16:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +259.568 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_00817a3d3b1c08a4844b3b440032d892b5f, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) + │ ║ │ Var (name=section) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) + │ ║ ║ └── StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=section) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) + │ ║ GroupElem (_anon_having_00817a3d3b1c08a4844b3b440032d892b5f) + │ ║ Count + │ ║ Var (name=track) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) + │ ╚══ ExtensionElem (_anon_having_00817a3d3b1c08a4844b3b440032d892b5f) + │ Count + │ Var (name=track) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +236.414 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 236.414 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:15:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000780111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +222.485 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) + │ ║ │ ║ Var (name=op) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ │ s: Var (name=op) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ │ s: Var (name=op) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +196.515 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 196.515 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:15:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +46.864 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ │ ║ │ s: Var (name=generator) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=generator) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +41.931 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.931 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000040000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +35.390 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) + │ ║ │ ║ │ ║ Var (name=target) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=9.4K) + │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ │ s: Var (name=entity) + │ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ║ s: Var (name=entity) + │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ ║ o: Var (name=name) + │ ║ │ ║ ╚══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) + │ ║ │ │ ║ Var (name=target) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.5K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.5K) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ │ ║ s: Var (name=entity) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ ║ │ s: Var (name=entity) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=substation) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) + │ ║ │ ╚══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + ?entity a . + ?entity ?substation . + ?substation ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +31.708 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.708 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:13:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +39.623 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_502599dd18ad4b0740219331af272b72a55801234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=name) + │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ │ │ ║ s: Var (name=substation) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) + │ ║ GroupElem (_anon_having_502599dd18ad4b0740219331af272b72a55801234) + │ ║ Count + │ ║ Var (name=meter) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) + │ ╚══ ExtensionElem (_anon_having_502599dd18ad4b0740219331af272b72a55801234) + │ Count + │ Var (name=meter) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + ?transformer ?substation . + ?transformer a . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +35.572 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 35.572 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:13:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +342.627 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=275.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ │ │ ║ s: Var (name=meter) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ │ │ s: Var (name=meter) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=278.8K) + │ ║ ╠══ Filter (new scope) [left] + │ ║ ║ ├── Compare (>) + │ ║ ║ │ Var (name=value2) + │ ║ ║ │ ValueConstant (value="180"^^) + │ ║ ║ └── StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) + │ ║ ║ s: Var (name=load2) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value2) + │ ║ ╚══ StatementPattern (costEstimate=3139.2M, resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=meter) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + ?meter ?load2 . + } +} + +304.986 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 304.986 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:12:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111e1c8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.604 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=name) + │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=name) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ ║ │ ║ └── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) + │ ║ ║ │ ║ s: Var (name=substation) + │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ ║ o: Var (name=name) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] + │ ║ ║ │ s: Var (name=line) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ ║ s: Var (name=line) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +5.872 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.872 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:11:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +12.335 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=9.5K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.5K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ ║ │ s: Var (name=generator) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=capacity) + │ ║ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ║ ValueConstant (value="900"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) + │ ║ ║ s: Var (name=generator) + │ ║ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ o: Var (name=capacity) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +11.025 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 11.025 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:10:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +98.481 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_80522c706a91a851446392057dd55d72231601234567, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) + │ ║ │ Var (name=asset) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] + │ ║ ║ │ ║ s: Var (name=asset) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ │ s: Var (name=asset) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] + │ ║ ║ ║ s: Var (name=asset) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ s: Var (name=asset) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) + │ ║ GroupElem (_anon_having_80522c706a91a851446392057dd55d72231601234567) + │ ║ Count + │ ║ Var (name=asset) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) + │ ╚══ ExtensionElem (_anon_having_80522c706a91a851446392057dd55d72231601234567) + │ Count + │ Var (name=asset) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +90.067 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 90.067 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:10:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +25.617 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] + │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ ├── Or + │ ║ │ │ ║ │ ╠══ Compare (=) + │ ║ │ │ ║ │ ║ Var (name=name) + │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ │ ║ │ ╚══ Compare (=) + │ ║ │ │ ║ │ Var (name=name) + │ ║ │ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ │ ║ └── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) + │ ║ │ │ ║ s: Var (name=substation) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) + │ ║ ║ Var (name=substation) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +22.828 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 22.828 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:09:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +15.394 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_01531ea06f4def3ea4b28a8582610f6dcc6ff, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) + │ ║ │ ║ Var (name=substation) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [left] + │ ║ ║ │ s: Var (name=substation) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) + │ ║ ║ └── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=substation) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) + │ ║ GroupElem (_anon_having_01531ea06f4def3ea4b28a8582610f6dcc6ff) + │ ║ Count + │ ║ Var (name=transformer) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) + │ ╚══ ExtensionElem (_anon_having_01531ea06f4def3ea4b28a8582610f6dcc6ff) + │ Count + │ Var (name=transformer) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation ?name . + ?substation a . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +13.334 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.334 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:08:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.805 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=cap) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ s: Var (name=line) + │ ║ │ ║ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ ║ o: Var (name=cap) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ │ ║ s: Var (name=line) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + ?line a . + FILTER (?cap IN (500, 600, 700)) + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +4.326 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.326 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:08:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +412.232 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=275.5K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ ║ │ ║ s: Var (name=meter) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ │ s: Var (name=meter) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=204.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=278.8K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [left] + │ ║ ║ ║ │ s: Var (name=load) + │ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ ║ │ o: Var (name=value) + │ ║ ║ ║ └── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [right] + │ ║ ║ ║ s: Var (name=meter) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) + │ ║ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] + │ ║ ║ s: Var (name=meter) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?load ?value . + ?meter ?load . + ?meter a . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +374.245 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 374.245 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:07:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +46.552 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=trial) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=arm) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ s: Var (name=arm) + │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=result) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ s: Var (name=arm) + │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ o: Var (name=drug) + │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ s: Var (name=result) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ s: Var (name=result) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +41.892 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.892 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:06:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.046 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_66602182a2c56a08c140228f48b1c9b4f8aa85012345, anonymous) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=477) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=22, resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=161, resultSizeEstimate=477) [right] + │ ║ ║ │ s: Var (name=combo) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] + │ ║ ║ s: Var (name=combo) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] + │ ║ │ ║ s: Var (name=drug) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) + │ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] + │ ║ │ s: Var (name=sideEffect) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) + │ ║ GroupElem (_anon_having_66602182a2c56a08c140228f48b1c9b4f8aa85012345) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ╚══ ExtensionElem (_anon_having_66602182a2c56a08c140228f48b1c9b4f8aa85012345) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo a . + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.839 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.839 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:06:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +31.076 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_42601d1ba56a5bfe34f02b09f82523294a4220123, anonymous) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ s: Var (name=arm) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=26, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ │ s: Var (name=target) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=224, resultSizeEstimate=666) [right] + │ ║ ║ │ ║ s: Var (name=target) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drug) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ s: Var (name=drug) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) + │ ║ GroupElem (_anon_having_42601d1ba56a5bfe34f02b09f82523294a4220123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ╚══ ExtensionElem (_anon_having_42601d1ba56a5bfe34f02b09f82523294a4220123) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?target a . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +27.725 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 27.725 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:05:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +39.124 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ├── Filter [left] + ║ │ ╠══ Not + ║ │ ║ Exists + ║ │ ║ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ s: Var (name=drug) + ║ │ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ o: Var (name=disease) + ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.9K) + ║ │ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=31, resultSizeEstimate=955) [left] + ║ │ │ ║ │ ║ s: Var (name=trial) + ║ │ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ │ ║ │ ║ o: Var (name=disease) + ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=320, resultSizeEstimate=955) [right] + ║ │ │ ║ │ s: Var (name=trial) + ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ │ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + ║ │ │ ║ s: Var (name=trial) + ║ │ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ │ │ ║ o: Var (name=arm) + ║ │ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + ║ │ │ s: Var (name=arm) + ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ │ o: Var (name=result) + ║ │ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ │ s: Var (name=arm) + ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ │ o: Var (name=drug) + ║ └── Filter [right] + ║ ╠══ Compare (>) + ║ ║ Var (name=rate) + ║ ║ ValueConstant (value="0.6"^^) + ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) + ║ s: Var (name=result) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) + └── ExtensionElem (optTarget) + Var (name=target) + +SELECT ?drug ?disease WHERE { + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + ?result ?rate . + FILTER (?rate > 0.6) + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +34.761 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 34.761 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:04:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +40.978 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ │ ║ s: Var (name=mol) + │ ║ │ │ ║ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=class) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [right] + │ ║ │ │ ║ │ s: Var (name=drug) + │ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ o: Var (name=mol) + │ ║ │ │ ║ └── StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=drug) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (costEstimate=15, resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=drug) + │ ║ │ │ │ ║ └── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [right] + │ ║ │ │ │ ║ s: Var (name=combo) + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [right] + │ ║ │ │ │ s: Var (name=drug) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?mol ?class . + ?drug ?mol . + ?drug a . + } + UNION + { + ?combo ?drug . + ?combo a . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +36.955 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 36.955 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:04:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.842 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ s: Var (name=trial) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ │ s: Var (name=trial) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?trial ?arm . + ?trial a . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +13.364 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.364 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:03:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.458 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_42015eb0be1b38a634add9498c7d1318e1d1b0123, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=74.2M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.7K) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=drugA) + │ ║ ║ │ ║ │ Var (name=drugB) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=drugA) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ s: Var (name=combo) + │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ o: Var (name=drugB) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) + │ ║ GroupElem (_anon_having_42015eb0be1b38a634add9498c7d1318e1d1b0123) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ╚══ ExtensionElem (_anon_having_42015eb0be1b38a634add9498c7d1318e1d1b0123) + │ Count (Distinct) + │ Var (name=target) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +5.786 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.786 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:02:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +25.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ │ s: Var (name=arm) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ s: Var (name=trial) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [right] + │ ║ ║ │ s: Var (name=trial) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) + │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=54, resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial ?arm . + ?trial a . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +22.781 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 22.781 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:02:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111dbb8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +28.845 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_53172fd9b942b39546a2bd8ebbc169c83fb401234, anonymous) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ s: Var (name=drug) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] + │ ║ │ │ s: Var (name=drug) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) + │ ║ GroupElem (_anon_having_53172fd9b942b39546a2bd8ebbc169c83fb401234) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) + │ ╚══ ExtensionElem (_anon_having_53172fd9b942b39546a2bd8ebbc169c83fb401234) + │ Count (Distinct) + │ Var (name=target) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +26.051 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 26.051 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:01:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +24.688 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_55051910fbbfd3d88438d9b41060768f3530e01234, anonymous) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=480, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=result) + │ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=drug) + │ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ s: Var (name=result) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) + │ ║ ║ ║ │ GroupElem (_anon_having_55051910fbbfd3d88438d9b41060768f3530e01234) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) + │ ║ ║ ║ └── ExtensionElem (_anon_having_55051910fbbfd3d88438d9b41060768f3530e01234) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial ?arm . + ?trial a . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +21.957 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 21.957 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 30 s each +# Measurement: 1 iterations, 10 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +267.142 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_84212e3bb6f670d34032897263b9ab8df13601234567, anonymous) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ │ s: Var (name=result) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) + │ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ │ ║ s: Var (name=arm) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ │ s: Var (name=target) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ │ s: Var (name=drug) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) + │ ║ GroupElem (_anon_having_84212e3bb6f670d34032897263b9ab8df13601234567) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) + │ ╚══ ExtensionElem (_anon_having_84212e3bb6f670d34032897263b9ab8df13601234567) + │ Count (Distinct) + │ Var (name=drug) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?drug ?target . + ?drug a . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +240.289 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 240.289 ms/op + + +# Run complete. Total time: 01:00:14 +``` + + diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md new file mode 100644 index 00000000000..ecb0c7a4e5c --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md @@ -0,0 +1,5704 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 45.640 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 104.836 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 42.245 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 76.840 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 110.034 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 58.854 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 55.102 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 41.410 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 52.241 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 181.327 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 201.850 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.041 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 5.498 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.050 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.049 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.056 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 861.664 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.070 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.503 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 709.966 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 5.851 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 0.245 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 671.541 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 156.120 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 37.474 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 41.394 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 120.263 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.858 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 24644.122 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 64080.638 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 75.352 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 71.164 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 178.230 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 224.932 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 145.290 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.069 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 118.164 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 128.784 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.845 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 203.671 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.597 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.043 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.242 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.614 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 342.919 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1027.834 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 517.929 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 100.602 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 213.867 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.469 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1266.178 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 114.678 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1035.451 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1263.290 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 236.960 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 33.105 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 43.755 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.507 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 144.329 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 131.514 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 18.645 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 83.475 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 44.401 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 189.401 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 229.336 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 176.286 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 37.542 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 26.416 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.652 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 315.359 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.517 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 9.094 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 81.085 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 19.467 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.596 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.273 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 479.665 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.157 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.415 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 35.575 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 12.591 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 27.017 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.330 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.052 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.115 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 25.037 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 13.215 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 226.964 ms/op +``` + + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter ?enc . +?enc med:recordedOn ?date . +BIND(?date AS ?optDate) +} +FILTER(?optDate >= "2024-06-01"^^xsd:date) +OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe0111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?date . +BIND(?date AS ?optDate) +} +FILTER (?optDate >= "2024-06-01"^^) +OPTIONAL { +?patient ?med . +} +} + +47.010 ms/op +Iteration 1: 45.640 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +45.640 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 00:22:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "DX-200" "DX-201" } +{ ?entity a med:Condition ; med:code ?code . } +UNION +{ ?entity a med:Medication ; med:code ?code . } +FILTER(?code = ?target || ?code = "DX-202") +OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?code . +VALUES ?target { "DX-200" "DX-201" } +FILTER ((?code = ?target) || (?code = "DX-202")) +} +UNION +{ +?entity a . +?entity ?code . +VALUES ?target { "DX-200" "DX-201" } +FILTER ((?code = ?target) || (?code = "DX-202")) +} +OPTIONAL { +?entity ?alt . +} +} + +107.238 ms/op +Iteration 1: 104.836 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +104.836 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 00:22:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . +FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) +OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc a . +?enc ?practitioner . +?enc ?date . +FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) +OPTIONAL { +?enc ?cond . +} +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +43.517 ms/op +Iteration 1: 42.245 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +42.245 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:22:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter/med:hasObservation ?obs . +?obs med:value ?value . +BIND(?value AS ?optValue) +} +FILTER(?optValue > 60) +MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient / ?obs . +?obs ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 60) +MINUS { +?patient ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "test")) +} +} + +79.423 ms/op +Iteration 1: 76.840 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +76.840 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:21:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a med:Encounter ; med:hasCondition ?cond . +?cond med:code ?code . +FILTER(?code = "DX-200" || ?code = "DX-201") +FILTER EXISTS { ?enc med:hasObservation ?obs . } +OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a . +?enc ?cond . +?cond ?code . +FILTER ((?code = "DX-200") || (?code = "DX-201")) +OPTIONAL { +?enc ?practitioner . +} +FILTER EXISTS { +?enc ?obs . +} +} + +112.349 ms/op +Iteration 1: 110.034 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +110.034 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:21:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +VALUES ?limit { 55 } +?patient a med:Patient ; med:hasEncounter ?enc . +?enc med:hasObservation ?obs . +?obs med:value ?value . +FILTER(?value IN (50, 60, 70)) +FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000078001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +?patient ?enc . +?enc ?obs . +?obs ?value . +FILTER (?value IN (50, 60, 70)) +VALUES ?limit { 55 } +FILTER NOT EXISTS { +?enc ?cond . +} +} + +60.172 ms/op +Iteration 1: 58.854 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +58.854 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:21:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ ?patient a med:Patient . } +UNION +{ ?patient med:hasEncounter ?enc . } +OPTIONAL { +?patient med:hasMedication ?med . +BIND(?med AS ?optMed) +} +FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ +?patient a . +} +UNION +{ +?patient ?enc . +} +OPTIONAL { +?patient ?med . +BIND(?med AS ?optMed) +} +FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +56.177 ms/op +Iteration 1: 55.102 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +55.102 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:21:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a med:Medication ; med:code ?code . +FILTER(?code = "MED-1000" || ?code = "MED-1001") +FILTER EXISTS { ?patient med:hasMedication ?med . } +MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a . +?med ?code . +FILTER ((?code = "MED-1000") || (?code = "MED-1001")) +FILTER EXISTS { +?patient ?med . +} +MINUS { +?med ?dose . +FILTER (CONTAINS(LCASE(STR(?dose)), "x")) +} +} + +43.181 ms/op +Iteration 1: 41.410 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +41.410 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:20:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter ?enc . +?enc med:handledBy ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER(?optPractitioner != ?patient) +FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +53.648 ms/op +Iteration 1: 52.241 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +52.241 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:20:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +VALUES ?code { "DX-200" "DX-201" } +?enc a med:Encounter ; med:hasCondition ?cond . +?cond med:code ?condCode . +FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) +OPTIONAL { ?enc med:handledBy ?practitioner . } +MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a . +?enc ?cond . +?cond ?condCode . +FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) +VALUES ?code { "DX-200" "DX-201" } +OPTIONAL { +?enc ?practitioner . +} +MINUS { +?enc ?obs . +{ +{ +?obs ?value . +FILTER (?value < 60) +} +} +} +} + +185.816 ms/op +Iteration 1: 181.327 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +181.327 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:20:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ ?patient a med:Patient ; med:hasMedication ?med . } +UNION +{ ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } +OPTIONAL { ?patient med:name ?optName . } +FILTER(?optName != "") +FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . +FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ +?patient a . +?patient ?med . +} +UNION +{ +?patient a . +?patient ?enc . +?enc ?obs . +} +OPTIONAL { +?patient ?optName . +} +FILTER (NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") } && (?optName != "")) +} + +205.738 ms/op +Iteration 1: 201.850 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +201.850 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:20:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES ?u { + + } +VALUES ?v { + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f918 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.043 ms/op +Iteration 1: 0.041 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.041 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:19:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES ?u1 { + + } +VALUES ?u2 { + + } +VALUES ?u3 { + + } +FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) +?u1 social:follows ?u2 . +?u2 social:follows ?u1 . +?u1 social:follows ?u3 . +?u3 social:follows ?u1 . +?u2 social:follows ?u3 . +?u3 social:follows ?u2 . +FILTER EXISTS { ?u1 social:name ?name . +FILTER(?name = "user0" || ?name = "user1") } +MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES (?u1 ?u2) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u1 != ?u2) +?u1 ?u2 . +?u2 ?u1 . +VALUES ?u3 { } +FILTER ((?u1 != ?u3) && (?u2 != ?u3)) +?u1 ?u3 . +?u3 ?u1 . +?u2 ?u3 . +?u3 ?u2 . +FILTER EXISTS { +?u1 ?name . +FILTER ((?name = "user0") || (?name = "user1")) +} +MINUS { +?u1 ?u1 . +BIND(?u1 AS ?_anon_path_9269173c0487b4dd28e49e1b89ae944ef012345678) +} +} + +5.727 ms/op +Iteration 1: 5.498 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.498 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:19:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + } +VALUES ?v { + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName != "") +FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (EXISTS { ?v ?u . } && (?u != ?v)) +?u ?v . +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + +0.052 ms/op +Iteration 1: 0.050 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.050 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:19:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES ?u { + + + } +VALUES ?v { + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } +FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.051 ms/op +Iteration 1: 0.049 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.049 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:18:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + + } +VALUES ?v { + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +FILTER NOT EXISTS { ?u social:follows ?u . } +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { } +FILTER NOT EXISTS { +?u ?u . +BIND(?u AS ?_anon_path_3afc84691eb614a7286df1a644e93f4ae012) +} +VALUES ?v { } +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + +0.059 ms/op +Iteration 1: 0.056 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.056 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:18:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { + + + + } +{ +?u social:follows ?v . +?v social:follows ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post social:authored ?u . +BIND(?post AS ?activity) +} +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +{ +{ +?u ?v . +?v ?u . +BIND(?v AS ?activity) +} +VALUES ?u { } +} +UNION +{ +{ +?post ?u . +BIND(?post AS ?activity) +} +VALUES ?u { } +} +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +871.380 ms/op +Iteration 1: 861.664 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +861.664 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:18:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES ?u { + + + + + } +VALUES ?v { + + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.073 ms/op +Iteration 1: 0.070 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.070 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:18:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + + + } +VALUES ?v { + + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +FILTER EXISTS { ?v social:follows ?u . } +MINUS { ?v social:follows ?v . } +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (EXISTS { ?v ?u . } && (?u != ?v)) +?u ?v . +MINUS { +?v ?v . +BIND(?v AS ?_anon_path_4b9e53d5102be4c72805ece50dd9999830123) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.711 ms/op +Iteration 1: 5.503 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.503 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:17:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { ?a social:name ?optName . } +FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a ?b . +?b ?c . +?c ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { +?a ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +} + +715.637 ms/op +Iteration 1: 709.966 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +709.966 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:17:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { + + + } +FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?d . +?d social:follows ?a . +OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } +FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { } +?a ?b . +FILTER (?a != ?b) +?b ?c . +FILTER (?b != ?c) +?c ?d . +FILTER (?c != ?d) +FILTER (?d != ?a) +?d ?a . +OPTIONAL { +?b ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias != "") +} + +6.064 ms/op +Iteration 1: 5.851 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.851 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:17:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?a { + + + + } +VALUES ?b { + + + + } +VALUES ?c { + + + + } +VALUES ?d { + + + + } +VALUES ?e { + + + + } +FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?d . +?d social:follows ?e . +?e social:follows ?a . +FILTER EXISTS { ?a social:name ?name . +FILTER(?name = "user7" || ?name = "user8") } +OPTIONAL { ?e social:name ?optName . } +FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES (?a ?b) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?a != ?b) +?a ?b . +VALUES ?c { } +FILTER ((?b != ?c) && (?a != ?c)) +?b ?c . +VALUES ?d { } +FILTER (?c != ?d) +?c ?d . +VALUES ?e { } +FILTER (?d != ?e) +?d ?e . +?e ?a . +OPTIONAL { +?e ?optName . +} +FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +0.256 ms/op +Iteration 1: 0.245 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.245 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:17:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a lib:Book . +OPTIONAL { +?book lib:hasCopy ?copy . +?copy lib:locatedAt ?branch . +BIND(?branch AS ?optBranch) +} +FILTER(?optBranch != ?book) +OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +OPTIONAL { +?book ?copy . +?copy ?branch . +BIND(?branch AS ?optBranch) +} +FILTER (?optBranch != ?book) +OPTIONAL { +?book ?author . +} +} + +683.014 ms/op +Iteration 1: 671.541 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +671.541 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:16:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "Member 1" "Member 2" } +{ ?entity a lib:Member ; lib:name ?name . } +UNION +{ ?entity a lib:Book ; lib:title ?name . } +FILTER(?name = ?target || ?name = "Member 3") +OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "Member 1" "Member 2" } +FILTER ((?name = ?target) || (?name = "Member 3")) +} +UNION +{ +?entity a . +?entity ?name . +VALUES ?target { "Member 1" "Member 2" } +FILTER ((?name = ?target) || (?name = "Member 3")) +} +OPTIONAL { +?entity ?copy . +} +} + +161.000 ms/op +Iteration 1: 156.120 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +156.120 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:16:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a lib:Author ; lib:name ?authorName . +FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a . +?author ?authorName . +FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { +?book ?author . +} +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +38.860 ms/op +Iteration 1: 37.474 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +37.474 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:16:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a lib:Loan ; lib:borrowedBy ?member . +OPTIONAL { +?loan lib:dueDate ?due . +BIND(?due AS ?optDue) +} +FILTER(?optDue > "2024-01-10"^^xsd:date) +MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a . +?loan ?member . +OPTIONAL { +?loan ?due . +BIND(?due AS ?optDue) +} +FILTER (?optDue > "2024-01-10"^^) +MINUS { +?member ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) +} +} + +42.834 ms/op +Iteration 1: 41.394 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +41.394 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:16:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a lib:Book ; lib:title ?title . +FILTER(?title = "Book 1" || ?title = "Book 2") +FILTER EXISTS { ?book lib:hasCopy ?copy . } +OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +?book ?title . +FILTER ((?title = "Book 1") || (?title = "Book 2")) +OPTIONAL { +?book ?author . +} +FILTER EXISTS { +?book ?copy . +} +} + +122.824 ms/op +Iteration 1: 120.263 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +120.263 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:15:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +VALUES ?threshold { "2024-01-01"^^xsd:date } +?loan a lib:Loan ; lib:loanDate ?loanDate . +FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) +FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000080111f0d8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a . +?loan ?loanDate . +FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) +VALUES ?threshold { "2024-01-01"^^ } +FILTER NOT EXISTS { +?loan ?due . +FILTER (?due < ?threshold) +} +} + +10.168 ms/op +Iteration 1: 9.858 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +9.858 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:15:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ ?loan a lib:Loan ; lib:borrowedBy ?member . } +UNION +{ ?member a lib:Member . } +OPTIONAL { +?loan lib:loanedCopy ?copy . +BIND(?copy AS ?optCopy) +} +FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000008001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ +?loan a . +?loan ?member . +} +UNION +{ +?member a . +} +OPTIONAL { +?loan ?copy . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +26528.650 ms/op +Iteration 1: 24644.122 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +24644.122 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:16:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?copy a lib:Copy ; lib:locatedAt ?branch . +?branch lib:name ?branchName . +FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") +FILTER EXISTS { ?copy a lib:Copy . } +MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000040001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?branch ?branchName . +FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) +?copy ?branch . +FILTER EXISTS { +?copy a . +} +?copy a . +MINUS { +?copy ?branch . +FILTER (CONTAINS(STR(?branch), "branch/0")) +} +} + +36937.526 ms/op +Iteration 1: 64080.638 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +64080.638 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:19:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . +?copy lib:locatedAt ?branch . +?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . +OPTIONAL { ?member lib:name ?optName . } +FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?loan ?copy . +?loan a . +?loan ?member . +?book a . +?book ?author . +?book ?copy . +?copy ?branch . +OPTIONAL { +?member ?optName . +} +FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +79.221 ms/op +Iteration 1: 75.352 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +75.352 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:18:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +VALUES ?target { "Author 1" "Author 2" } +?member a lib:Member . +?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . +?book lib:hasCopy ?copy ; lib:writtenBy ?author . +?author lib:name ?authorName . +FILTER(?authorName = ?target || ?authorName = "Author 3") +FILTER NOT EXISTS { ?loan lib:dueDate ?due . +FILTER(?due < "2024-01-10"^^xsd:date) } +OPTIONAL { ?book lib:title ?optTitle . } +FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011206a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +?member a . +?loan ?member . +?loan a . +?loan ?copy . +?author ?authorName . +?book ?author . +?book ?copy . +VALUES ?target { "Author 1" "Author 2" } +FILTER ((?authorName = ?target) || (?authorName = "Author 3")) +OPTIONAL { +?book ?optTitle . +} +FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +74.248 ms/op +Iteration 1: 71.164 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +71.164 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:18:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ ?branch a lib:Branch . } +UNION +{ ?branch a lib:Branch ; lib:name ?name . } +OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } +FILTER(?optCopy != ?branch) +MINUS { ?branch lib:name ?name2 . +FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ +?branch a . +} +UNION +{ +?branch a . +?branch ?name . +} +OPTIONAL { +?copy ?branch . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?branch) +MINUS { +?branch ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) +} +} + +183.677 ms/op +Iteration 1: 178.230 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +178.230 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:17:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a eng:Component . +OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } +FILTER(?optAssembly != ?component) +OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +OPTIONAL { +?component ?assembly . +BIND(?assembly AS ?optAssembly) +} +FILTER (?optAssembly != ?component) +OPTIONAL { +?component ?dep . +} +} + +231.907 ms/op +Iteration 1: 224.932 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +224.932 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:17:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "REQ-1000" "REQ-1001" } +{ ?entity a eng:Requirement ; eng:name ?name . } +UNION +{ ?entity a eng:Component ; eng:name ?name . } +FILTER(?name = ?target || ?name = "REQ-1002") +OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "REQ-1000" "REQ-1001" } +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +UNION +{ +?entity a . +?entity ?name . +VALUES ?target { "REQ-1000" "REQ-1001" } +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +OPTIONAL { +?entity ?assembly . +} +} + +149.786 ms/op +Iteration 1: 145.290 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +145.290 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:16:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a eng:Assembly ; eng:name ?assemblyName . +FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a . +?assembly ?assemblyName . +FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { +?component ?assembly . +} +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.138 ms/op +Iteration 1: 1.069 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.069 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:16:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a eng:Requirement ; eng:satisfies ?component . +OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } +FILTER(?optTest != ?requirement) +MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?component . +OPTIONAL { +?requirement ?test . +BIND(?test AS ?optTest) +} +FILTER (?optTest != ?requirement) +MINUS { +?component ?name . +FILTER (CONTAINS(STR(?name), "Component 1")) +} +} + +120.564 ms/op +Iteration 1: 118.164 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +118.164 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:16:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a eng:Component ; eng:name ?name . +FILTER(?name = "Component 1" || ?name = "Component 2") +FILTER EXISTS { ?component eng:dependsOn ?dep . } +OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000078001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +?component ?name . +FILTER ((?name = "Component 1") || (?name = "Component 2")) +OPTIONAL { +?component ?assembly . +} +FILTER EXISTS { +?component ?dep . +} +} + +129.369 ms/op +Iteration 1: 128.784 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +128.784 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:15:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?measurement a eng:Measurement ; eng:measuredValue ?value . +FILTER(?value IN (0.9, 0.95)) +FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +?measurement a . +?measurement ?value . +FILTER (?value IN (0.9, 0.95)) +VALUES ?threshold { 0.85 } +FILTER NOT EXISTS { +?measurement ?value2 . +FILTER (?value2 < ?threshold) +} +} + +1.939 ms/op +Iteration 1: 1.845 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.845 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:15:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ ?requirement a eng:Requirement ; eng:satisfies ?component . } +UNION +{ ?component a eng:Component . } +OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } +FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ +?requirement a . +?requirement ?component . +} +UNION +{ +?component a . +} +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +222.072 ms/op +Iteration 1: 203.671 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +203.671 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:14:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a eng:Requirement ; eng:name ?name . +FILTER(?name = "REQ-1000" || ?name = "REQ-1001") +FILTER EXISTS { ?requirement eng:satisfies ?component . } +MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?name . +FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) +FILTER EXISTS { +?requirement ?component . +} +MINUS { +?requirement ?test . +?test ?measurement . +} +} + +3.768 ms/op +Iteration 1: 3.597 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.597 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:14:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?component a eng:Component ; eng:partOf ?assembly . +OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } +FILTER(?optDep != ?component) +?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f8001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?requirement ?component . +?requirement a . +?component a . +?component ?assembly . +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.177 ms/op +Iteration 1: 2.043 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +2.043 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:14:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?requirement a eng:Requirement ; eng:verifiedBy ?test . +?test eng:verifiedBy ?measurement . +?measurement eng:measuredValue ?value . +FILTER(?value IN (0.85, 0.9, 0.95)) +FILTER EXISTS { ?requirement eng:satisfies ?component . } +OPTIONAL { ?component eng:name ?optName . } +FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f0011208e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?measurement ?value . +FILTER (?value IN (0.85, 0.9, 0.95)) +?requirement ?test . +?test ?measurement . +VALUES ?threshold { 0.85 } +OPTIONAL { +?component ?optName . +} +FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +3.367 ms/op +Iteration 1: 3.242 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.242 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:13:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a eng:Assembly ; eng:name ?name . +FILTER(?name = "Assembly 1" || ?name = "Assembly 2") +OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } +FILTER(?optComponent != ?assembly) +MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc00111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a . +?assembly ?name . +FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) +OPTIONAL { +?component ?assembly . +BIND(?component AS ?optComponent) +} +FILTER (?optComponent != ?assembly) +MINUS { +?requirement ?component . +} +} + +1.718 ms/op +Iteration 1: 1.614 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.614 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:13:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node . +OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } +FILTER(?optNeighbor != ?node) +OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?neighbor . +BIND(?neighbor AS ?optNeighbor) +} +FILTER (?optNeighbor != ?node) +OPTIONAL { +?node ?w . +} +} + +347.806 ms/op +Iteration 1: 342.919 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +342.919 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:13:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { 1 2 } +{ ?entity a conn:Node ; conn:connectsTo ?targetNode . } +UNION +{ ?entity a conn:Node . } +OPTIONAL { ?entity conn:weight ?w . } +FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?targetNode . +VALUES ?target { 1 2 } +} +UNION +{ +VALUES ?target { 1 2 } +{ +?entity a . +} +} +OPTIONAL { +?entity ?w . +} +FILTER ((?w = ?target) || (?w = 3)) +} + +1051.677 ms/op +Iteration 1: 1027.834 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1027.834 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:12:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a conn:Node ; conn:connectsTo ?neighbor . +?node conn:weight ?w . +FILTER(?w IN (1, 2, 3)) +OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3)) +?node ?neighbor . +OPTIONAL { +?neighbor ?node . +} +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +536.962 ms/op +Iteration 1: 517.929 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +517.929 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:12:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node . +OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight > 5) +MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c000111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight > 5) +MINUS { +?node ?neighbor . +FILTER (?neighbor = ?node) +} +} + +103.857 ms/op +Iteration 1: 100.602 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +100.602 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:12:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:weight ?w . +FILTER(?w = 1 || ?w = 2) +FILTER EXISTS { ?node conn:connectsTo ?neighbor . } +OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 1) || (?w = 2)) +OPTIONAL { +?neighbor ?node . +} +FILTER EXISTS { +?node ?neighbor . +} +} + +217.856 ms/op +Iteration 1: 213.867 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +213.867 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:11:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 4 } +?node a conn:Node ; conn:weight ?w . +FILTER(?w IN (4, 5, 6)) +FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (4, 5, 6)) +VALUES ?threshold { 4 } +FILTER NOT EXISTS { +?node ?w2 . +FILTER (?w2 < ?threshold) +} +} + +119.767 ms/op +Iteration 1: 117.469 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +117.469 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:11:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ ?node a conn:Node ; conn:connectsTo ?neighbor . } +UNION +{ ?neighbor conn:connectsTo ?node . } +OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe0111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ +?node a . +?node ?neighbor . +} +UNION +{ +?neighbor ?node . +} +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1330.671 ms/op +Iteration 1: 1266.178 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1266.178 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:11:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:weight ?w . +FILTER(?w = 8 || ?w = 9) +FILTER EXISTS { ?node conn:connectsTo ?neighbor . } +MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 8) || (?w = 9)) +FILTER EXISTS { +?node ?neighbor . +} +MINUS { +?neighbor ?node . +FILTER (?neighbor = ?node) +} +} + +116.621 ms/op +Iteration 1: 114.678 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +114.678 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:10:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:connectsTo ?mid . +?mid conn:connectsTo ?end . +OPTIONAL { ?node conn:weight ?optWeight . } +FILTER(?optWeight IN (7, 8, 9)) +FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?mid . +?mid ?end . +FILTER EXISTS { +?end ?node . +} +OPTIONAL { +?node ?optWeight . +} +FILTER (?optWeight IN (7, 8, 9)) +} + +1054.422 ms/op +Iteration 1: 1035.451 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1035.451 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:10:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +{ ?node conn:connectsTo ?neighbor . } +UNION +{ ?neighbor conn:connectsTo ?node . } +OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +?node (|^) ?neighbor . +OPTIONAL { +?neighbor ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1350.732 ms/op +Iteration 1: 1263.290 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1263.290 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:10:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 3 } +?node a conn:Node ; conn:weight ?w . +FILTER(?w IN (1, 2, 3, 4)) +FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . +?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } +MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000060111f0d8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3, 4)) +VALUES ?threshold { 3 } +FILTER NOT EXISTS { +?node ?n2 . +?n2 ?w2 . +FILTER (?w2 < ?threshold) +} +MINUS { +?node ?node . +BIND(?node AS ?_anon_path_60a60982f2b264b4697fd6b55a18dbd26012345) +} +} + +241.242 ms/op +Iteration 1: 236.960 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +236.960 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:09:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a train:TrainService . +OPTIONAL { +?service train:scheduledTime ?time . +BIND(?time AS ?optTime) +} +FILTER(?optTime > "08:00:00"^^xsd:time) +OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +OPTIONAL { +?service ?time . +BIND(?time AS ?optTime) +} +FILTER (?optTime > "08:00:00"^^) +OPTIONAL { +?service ?name . +} +} + +34.503 ms/op +Iteration 1: 33.105 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +33.105 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:09:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "OP 1" "OP 2" } +{ ?entity a train:OperationalPoint ; train:name ?name . } +UNION +{ ?entity a train:Line ; train:name ?name . } +FILTER(?name = ?target || ?name = "OP 3") +OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000e01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "OP 1" "OP 2" } +FILTER ((?name = ?target) || (?name = "OP 3")) +} +UNION +{ +?entity a . +?entity ?name . +VALUES ?target { "OP 1" "OP 2" } +FILTER ((?name = ?target) || (?name = "OP 3")) +} +OPTIONAL { +?entity ?op . +} +} + +44.397 ms/op +Iteration 1: 43.755 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +43.755 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:09:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a train:Line ; train:name ?lineName . +FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a . +?line ?lineName . +FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { +?section ?line . +} +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +7.824 ms/op +Iteration 1: 7.507 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +7.507 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:08:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a train:SectionOfLine ; train:partOfLine ?line . +OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } +FILTER(?optTrack != ?section) +MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a . +?section ?line . +OPTIONAL { +?section ?track . +BIND(?track AS ?optTrack) +} +FILTER (?optTrack != ?section) +MINUS { +?line ?name . +FILTER (CONTAINS(STR(?name), "Line 0")) +} +} + +149.149 ms/op +Iteration 1: 144.329 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +144.329 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:08:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a train:Line ; train:name ?name . +FILTER(?name = "Line 1" || ?name = "Line 2") +FILTER EXISTS { ?section train:partOfLine ?line . } +OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?name . +FILTER ((?name = "Line 1") || (?name = "Line 2")) +OPTIONAL { +?section ?op . +} +FILTER EXISTS { +?section ?line . +} +} + +133.939 ms/op +Iteration 1: 131.514 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +131.514 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:08:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +VALUES ?threshold { "10:00:00"^^xsd:time } +?service a train:TrainService ; train:scheduledTime ?time . +FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) +FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +?service ?time . +FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) +VALUES ?threshold { "10:00:00"^^ } +FILTER NOT EXISTS { +?service ?late . +FILTER (?late > ?threshold) +} +} + +19.178 ms/op +Iteration 1: 18.645 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +18.645 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:07:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ ?service a train:TrainService ; train:runsOnSection ?section . +?section train:partOfLine ?line . } +UNION +{ ?line a train:Line . } +OPTIONAL { ?line train:name ?optName . } +FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ +?service a . +?service ?section . +?section ?line . +} +UNION +{ +?line a . +} +OPTIONAL { +?line ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +86.418 ms/op +Iteration 1: 83.475 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +83.475 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:07:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a train:OperationalPoint ; train:name ?name . +FILTER(?name = "OP 1" || ?name = "OP 2") +FILTER EXISTS { ?service train:passesThrough ?op . } +MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000060111f0d8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a . +?op ?name . +FILTER ((?name = "OP 1") || (?name = "OP 2")) +FILTER EXISTS { +?service ?op . +} +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) +} +} + +45.938 ms/op +Iteration 1: 44.401 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +44.401 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:07:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . +?s1 train:partOfLine ?line . +?s2 train:partOfLine ?line . +OPTIONAL { ?line train:name ?optName . } +FILTER(?optName IN ("Line 0", "Line 1")) +FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . +?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +?service ?s1 . +?service ?s2 . +?s1 ?line . +?s2 ?line . +OPTIONAL { +?line ?optName . +} +FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) +} + +193.432 ms/op +Iteration 1: 189.401 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +189.401 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:07:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section a train:SectionOfLine ; train:hasTrackSection ?track . +OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } +FILTER(?optOp != ?section) +FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c000111f708 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section a . +?section ?track . +FILTER EXISTS { +?track a . +} +OPTIONAL { +?section ?op . +BIND(?op AS ?optOp) +} +FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +235.023 ms/op +Iteration 1: 229.336 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +229.336 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:06:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ ?op a train:OperationalPoint . } +UNION +{ ?op a train:OperationalPoint ; train:name ?name . } +OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } +FILTER(?optSection != ?op) +MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ +?op a . +} +UNION +{ +?op a . +?op ?name . +} +OPTIONAL { +?section ?op . +BIND(?section AS ?optSection) +} +FILTER (?optSection != ?op) +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) +} +} + +182.686 ms/op +Iteration 1: 176.286 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +176.286 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:06:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a grid:Substation . +OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } +FILTER(?optCap > 600) +OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a . +OPTIONAL { +?generator ?substation . +?generator ?cap . +BIND(?cap AS ?optCap) +} +FILTER (?optCap > 600) +OPTIONAL { +?substation ?name . +} +} + +39.352 ms/op +Iteration 1: 37.542 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +37.542 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:06:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "Substation 1" "Substation 2" } +{ ?entity a grid:Substation ; grid:name ?name . } +UNION +{ ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } +FILTER(?name = ?target || ?name = "Substation 3") +OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111f918 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +?entity a . +?entity ?name . +VALUES ?target { "Substation 1" "Substation 2" } +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +UNION +{ +?entity a . +?substation ?name . +?entity ?substation . +VALUES ?target { "Substation 1" "Substation 2" } +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +OPTIONAL { +?entity ?substation2 . +} +} + +27.134 ms/op +Iteration 1: 26.416 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +26.416 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:05:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?transformer a grid:Transformer ; grid:feeds ?substation . +?substation grid:name ?name . +FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) +OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?substation ?name . +FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) +?transformer a . +?transformer ?substation . +OPTIONAL { +?transformer ?meter . +} +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +3.797 ms/op +Iteration 1: 3.652 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.652 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:05:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a grid:Meter ; grid:measures ?load . +OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } +FILTER(?optValue > 100) +MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a . +?meter ?load . +OPTIONAL { +?load ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 100) +MINUS { +?meter ?load2 . +{ +{ +?load2 ?value2 . +FILTER (?value2 > 180) +} +} +} +} + +324.039 ms/op +Iteration 1: 315.359 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +315.359 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:05:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a grid:Line ; grid:connectsTo ?substation . +?substation grid:name ?name . +FILTER(?name = "Substation 0" || ?name = "Substation 1") +FILTER EXISTS { ?line grid:connectsTo ?other . } +OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +?line a . +?line ?substation . +OPTIONAL { +?line ?other2 . +} +FILTER EXISTS { +?line ?other . +} +} + +3.658 ms/op +Iteration 1: 3.517 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.517 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:04:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +VALUES ?threshold { 700 } +?generator a grid:Generator ; grid:capacity ?capacity . +FILTER(?capacity IN (700, 800, 900)) +FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f088 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +?generator a . +?generator ?capacity . +FILTER (?capacity IN (700, 800, 900)) +VALUES ?threshold { 700 } +FILTER NOT EXISTS { +?generator ?cap2 . +FILTER (?cap2 < ?threshold) +} +} + +9.416 ms/op +Iteration 1: 9.094 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +9.094 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:04:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ ?asset a grid:Transformer ; grid:feeds ?substation . } +UNION +{ ?asset a grid:Generator ; grid:feeds ?substation . } +OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } +FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f801124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ +?asset a . +?asset ?substation . +} +UNION +{ +?asset a . +?asset ?substation . +} +OPTIONAL { +?asset ?substation . +BIND(?substation AS ?optSub) +} +FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +82.921 ms/op +Iteration 1: 81.085 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +81.085 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?transformer a grid:Transformer ; grid:feeds ?substation . +?substation grid:name ?name . +FILTER(?name = "Substation 0" || ?name = "Substation 1") +FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +?transformer a . +?transformer ?substation . +FILTER EXISTS { +?transformer ?meter . +} +MINUS { +?meter ?load . +FILTER (?load = ?substation) +} +} + +19.581 ms/op +Iteration 1: 19.467 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +19.467 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:04:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation a grid:Substation ; grid:name ?name . +OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } +FILTER(?optTransformer != ?substation) +FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation a . +?substation ?name . +OPTIONAL { +?substation ?transformer . +BIND(?transformer AS ?optTransformer) +} +FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +12.985 ms/op +Iteration 1: 12.596 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +12.596 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:03:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a grid:Line ; grid:capacity ?cap . +FILTER(?cap IN (500, 600, 700)) +OPTIONAL { ?line grid:connectsTo ?substation . } +MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line ?cap . +FILTER (?cap IN (500, 600, 700)) +?line a . +OPTIONAL { +?line ?substation . +} +MINUS { +?line ?cap2 . +FILTER (?cap2 < 500) +} +} + +4.422 ms/op +Iteration 1: 4.273 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.273 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ ?meter a grid:Meter ; grid:measures ?load . } +UNION +{ ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } +OPTIONAL { ?load grid:loadValue ?optValue . } +FILTER(?optValue > 200) +FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ +?meter a . +?meter ?load . +} +UNION +{ +?meter ?load . +?meter a . +?load ?value . +} +OPTIONAL { +?load ?optValue . +} +FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) +} + +488.334 ms/op +Iteration 1: 479.665 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +479.665 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:03:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { + } +?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:pValue ?p ; pharma:effectSize ?effect . +OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } +FILTER(?optMarker != ) +FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { } +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?p . +?result ?effect . +FILTER ((?p < 0.05) || (?effect > 0.7)) +OPTIONAL { +?result ?marker . +BIND(?marker AS ?optMarker) +} +FILTER (?optMarker != ) +} + +0.165 ms/op +Iteration 1: 0.157 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.157 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:02:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . +OPTIONAL { +?drug pharma:hasSideEffect ?sideEffect . +?sideEffect pharma:severity ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER(?optSeverity IN ("Mild", "Moderate")) +FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo a . +?combo ?score . +FILTER (?score > 0.7) +?combo ?drug . +OPTIONAL { +?drug ?sideEffect . +?sideEffect ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.489 ms/op +Iteration 1: 1.415 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.415 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target a pharma:Target ; pharma:inPathway ?pathway . +?drug a pharma:Drug ; pharma:targets ?target . +OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } +FILTER(?optDisease IN (, +)) +FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target a . +?target ?pathway . +?drug a . +?drug ?target . +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +36.862 ms/op +Iteration 1: 35.575 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +35.575 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { +?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:responseRate ?rate . +FILTER(?rate > 0.6) +FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } +OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } +FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug ?disease WHERE { +?trial a . +?trial ?disease . +?trial ?arm . +?arm ?result . +?arm ?drug . +FILTER NOT EXISTS { +?drug ?disease . +} +?result ?rate . +FILTER (?rate > 0.6) +OPTIONAL { +?drug ?target . +BIND(?target AS ?optTarget) +} +FILTER (?optTarget != ) +} + +13.244 ms/op +Iteration 1: 12.591 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +12.591 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:02:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } +UNION +{ ?combo a pharma:Combination ; pharma:combinationOf ?drug . +?drug pharma:hasMolecule ?mol . } +?mol pharma:inClass ?class . +OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } +FILTER(?optClassName != "") +MINUS { ?drug pharma:contraindicatedFor ?disease . +FILTER(?disease IN (, +)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +?drug a . +?mol ?class . +?drug ?mol . +} +UNION +{ +?combo a . +?combo ?drug . +?mol ?class . +?drug ?mol . +} +OPTIONAL { +?class ?optName . +BIND(?optName AS ?optClassName) +} +FILTER (?optClassName != "") +MINUS { +?drug ?disease . +FILTER (?disease IN (, )) +} +} + +28.253 ms/op +Iteration 1: 27.017 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +27.017 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { + + } +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +?arm pharma:hasResult ?result . +?result pharma:biomarker ?marker ; pharma:pValue ?p . +OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } +FILTER(?optEffect > 0.3) +FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007000111f700 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +?trial a . +VALUES ?marker { } +?result ?marker . +?arm ?result . +?trial ?arm . +?result ?p . +FILTER ((?p < 0.05) || (?p = 0.05)) +OPTIONAL { +?result ?effect . +BIND(?effect AS ?optEffect) +} +FILTER (?optEffect > 0.3) +} + +0.350 ms/op +Iteration 1: 0.330 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.330 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . +FILTER(?drugA != ?drugB) +?drugA pharma:targets ?target . +?drugB pharma:targets ?target . +OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } +FILTER(?optSideEffect != ) +FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111f0d8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a . +?combo ?drugA . +?combo ?drugB . +FILTER (?drugA != ?drugB) +?drugA ?target . +?drugB ?target . +OPTIONAL { +?drugA ?sideEffect . +BIND(?sideEffect AS ?optSideEffect) +} +FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +3.144 ms/op +Iteration 1: 3.052 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.052 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +{ ?arm pharma:armComparator ?comp . } +UNION +{ ?arm pharma:armDrug ?comp . } +OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } +FILTER(?optCompName != "") +FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . +FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial a . +?trial ?arm . +?arm (|) ?comp . +OPTIONAL { +?comp ?optName . +BIND(?optName AS ?optCompName) +} +FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} + +19.916 ms/op +Iteration 1: 19.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +19.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a pharma:Drug ; pharma:targets ?target . +OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } +FILTER(?optMol != ) +MINUS { ?drug pharma:contraindicatedFor ?disease . +FILTER(?disease = +|| ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a . +?drug ?target . +OPTIONAL { +?drug ?mol . +BIND(?mol AS ?optMol) +} +FILTER (?optMol != ) +MINUS { +{ +?drug . +FILTER (sameTerm(?disease, )) +} +UNION +{ +?drug . +FILTER (sameTerm(?disease, )) +} +} +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +25.938 ms/op +Iteration 1: 25.037 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +25.037 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:effectSize ?effect . +OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } +FILTER(?optRate > 0.2) +} +GROUP BY ?drug +HAVING(AVG(?effect) > 0.4) +} +FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } +OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } +FILTER(?optDisease IN (, +)) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff001124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?effect . +OPTIONAL { +?result ?rate . +BIND(?rate AS ?optRate) +} +FILTER (?optRate > 0.2) +} +GROUP BY ?drug +HAVING (AVG(?effect) > 0.4) +} +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +13.804 ms/op +Iteration 1: 13.215 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +13.215 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +VALUES ?marker { + } +?drug a pharma:Drug ; pharma:targets ?target . +?target pharma:inPathway ?pathway . +OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } +FILTER(?optTrial != ) +FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . +?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f01124000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +### Optimized Query ### +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target ?pathway . +?drug a . +?drug ?target . +VALUES ?marker { } +OPTIONAL { +?drug ?trial . +BIND(?trial AS ?optTrial) +} +FILTER (EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +232.532 ms/op +Iteration 1: 226.964 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +226.964 ms/op + + +# Run complete. Total time: 00:24:58 + +``` + + diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md new file mode 100644 index 00000000000..56cbb5e1794 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md @@ -0,0 +1,10303 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 45.587 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 99.712 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 16.107 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 78.046 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 118.093 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 22.715 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 53.194 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 41.663 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 51.735 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 204.399 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 194.412 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.116 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 9.391 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.123 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.125 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.181 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 642.956 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.146 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 5.503 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 669.847 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 299.406 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.491 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 644.334 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 143.142 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 17.538 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 40.574 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 120.430 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 4.936 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 24599.399 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 55249.473 ms/op <--- +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 74.796 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 74.747 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 183.705 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 211.010 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 138.312 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.181 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 119.307 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 126.860 ms/op <--- +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.181 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 202.264 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.846 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.939 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 1.938 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.687 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 349.184 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1116.338 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 512.042 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 100.170 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 214.485 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.942 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1277.790 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 113.267 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1034.976 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1265.025 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 246.032 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 32.988 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 39.073 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 17.825 ms/op <--- +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 143.416 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 130.920 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 13.612 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 95.506 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 46.136 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 127.294 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 230.341 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 180.745 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 37.214 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 26.555 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 4.339 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 315.426 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 4.184 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 4.866 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 82.972 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 43.468 ms/op <--- +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 12.589 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.412 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 376.856 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 3.637 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.589 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 26.077 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 2510.998 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 28.543 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 1.867 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.739 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 19.842 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 25.218 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 14.826 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 229.437 ms/op +``` + +``` +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter ?enc . +?enc med:recordedOn ?date . +BIND(?date AS ?optDate) +} +FILTER(?optDate >= "2024-06-01"^^xsd:date) +OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0010accd0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +Loading theme dataset: MEDICAL_RECORDS +Loading theme dataset: SOCIAL_MEDIA +Loading theme dataset: LIBRARY +Loading theme dataset: ENGINEERING +Loading theme dataset: HIGHLY_CONNECTED +Loading theme dataset: TRAIN +Loading theme dataset: ELECTRICAL_GRID +Loading theme dataset: PHARMA +RdfJoinEstimator: Rebuilding bufB, seen 100000 triples so far. Elapsed: 0 s. +RdfJoinEstimator: Rebuilding bufB, seen 200000 triples so far. Elapsed: 0 s. +RdfJoinEstimator: Rebuilding bufB, seen 300000 triples so far. Elapsed: 0 s. +RdfJoinEstimator: Rebuilding bufB, seen 400000 triples so far. Elapsed: 1 s. +RdfJoinEstimator: Rebuilding bufB, seen 500000 triples so far. Elapsed: 1 s. +RdfJoinEstimator: Rebuilding bufB, seen 600000 triples so far. Elapsed: 2 s. +RdfJoinEstimator: Rebuilding bufB, seen 700000 triples so far. Elapsed: 3 s. +RdfJoinEstimator: Rebuilding bufB, seen 800000 triples so far. Elapsed: 4 s. +RdfJoinEstimator: Rebuilding bufB, seen 900000 triples so far. Elapsed: 4 s. +RdfJoinEstimator: Rebuilding bufB, seen 1000000 triples so far. Elapsed: 5 s. +RdfJoinEstimator: Rebuilding bufB, seen 1100000 triples so far. Elapsed: 6 s. +RdfJoinEstimator: Rebuilding bufB, seen 1200000 triples so far. Elapsed: 7 s. +RdfJoinEstimator: Rebuilding bufB, seen 1300000 triples so far. Elapsed: 7 s. +RdfJoinEstimator: Rebuilding bufB, seen 1400000 triples so far. Elapsed: 8 s. +RdfJoinEstimator: Rebuilding bufB, seen 1500000 triples so far. Elapsed: 9 s. +RdfJoinEstimator: Rebuilding bufB, seen 1600000 triples so far. Elapsed: 10 s. +RdfJoinEstimator: Rebuilding bufB, seen 1700000 triples so far. Elapsed: 10 s. +RdfJoinEstimator: Rebuilding bufB, seen 1800000 triples so far. Elapsed: 11 s. +RdfJoinEstimator: Rebuilding bufB, seen 1900000 triples so far. Elapsed: 12 s. +RdfJoinEstimator: Rebuilding bufB, seen 2000000 triples so far. Elapsed: 13 s. +RdfJoinEstimator: Rebuilding bufB, seen 2100000 triples so far. Elapsed: 13 s. +RdfJoinEstimator: Rebuilding bufB, seen 2200000 triples so far. Elapsed: 14 s. +RdfJoinEstimator: Rebuilding bufB, seen 2300000 triples so far. Elapsed: 15 s. +RdfJoinEstimator: Rebuilding bufB, seen 2400000 triples so far. Elapsed: 16 s. +RdfJoinEstimator: Rebuilding bufB, seen 2500000 triples so far. Elapsed: 17 s. +RdfJoinEstimator: Rebuilding bufB, seen 2600000 triples so far. Elapsed: 17 s. +RdfJoinEstimator: Rebuilding bufB, seen 2700000 triples so far. Elapsed: 18 s. +RdfJoinEstimator: Rebuilding bufB, seen 2800000 triples so far. Elapsed: 19 s. +RdfJoinEstimator: Rebuilding bufB, seen 2900000 triples so far. Elapsed: 20 s. +RdfJoinEstimator: Rebuilding bufB, seen 3000000 triples so far. Elapsed: 20 s. +RdfJoinEstimator: Rebuilding bufB, seen 3100000 triples so far. Elapsed: 21 s. +RdfJoinEstimator: Rebuilding bufB, seen 3200000 triples so far. Elapsed: 22 s. +RdfJoinEstimator: Rebuilding bufB, seen 3300000 triples so far. Elapsed: 23 s. +RdfJoinEstimator: Rebuilding bufB, seen 3400000 triples so far. Elapsed: 23 s. +RdfJoinEstimator: Rebuilding bufB, seen 3500000 triples so far. Elapsed: 24 s. +RdfJoinEstimator: Rebuilding bufB, seen 3600000 triples so far. Elapsed: 24 s. +RdfJoinEstimator: Rebuilding bufB, seen 3700000 triples so far. Elapsed: 25 s. +RdfJoinEstimator: Rebuilding bufB, seen 3800000 triples so far. Elapsed: 25 s. +RdfJoinEstimator: Rebuilding bufB, seen 3900000 triples so far. Elapsed: 25 s. +RdfJoinEstimator: Rebuilding bufB, seen 4000000 triples so far. Elapsed: 26 s. +RdfJoinEstimator: Rebuilding bufB, seen 4100000 triples so far. Elapsed: 26 s. +RdfJoinEstimator: Rebuilding bufB, seen 4200000 triples so far. Elapsed: 26 s. +RdfJoinEstimator: Rebuilding bufB, seen 4300000 triples so far. Elapsed: 27 s. +RdfJoinEstimator: Rebuilding bufB, seen 4400000 triples so far. Elapsed: 27 s. +RdfJoinEstimator: Rebuilding bufB, seen 4500000 triples so far. Elapsed: 27 s. +RdfJoinEstimator: Rebuilding bufB, seen 4600000 triples so far. Elapsed: 27 s. +RdfJoinEstimator: Rebuilding bufB, seen 4700000 triples so far. Elapsed: 28 s. +RdfJoinEstimator: Rebuilding bufB, seen 4800000 triples so far. Elapsed: 28 s. +RdfJoinEstimator: Rebuilding bufB, seen 4900000 triples so far. Elapsed: 28 s. +RdfJoinEstimator: Rebuilding bufB, seen 5000000 triples so far. Elapsed: 28 s. +RdfJoinEstimator: Rebuilding bufB, seen 5100000 triples so far. Elapsed: 29 s. +RdfJoinEstimator: Rebuilding bufB, seen 5200000 triples so far. Elapsed: 29 s. +RdfJoinEstimator: Rebuilding bufB, seen 5300000 triples so far. Elapsed: 29 s. +RdfJoinEstimator: Rebuilding bufB, seen 5400000 triples so far. Elapsed: 29 s. +RdfJoinEstimator: Rebuilding bufB, seen 5500000 triples so far. Elapsed: 30 s. +RdfJoinEstimator: Rebuilding bufB, seen 5600000 triples so far. Elapsed: 30 s. +RdfJoinEstimator: Rebuilding bufB, seen 5700000 triples so far. Elapsed: 30 s. +RdfJoinEstimator: Rebuilding bufB, seen 5800000 triples so far. Elapsed: 31 s. +RdfJoinEstimator: Rebuilding bufB, seen 5900000 triples so far. Elapsed: 31 s. +RdfJoinEstimator: Rebuilding bufB, seen 6000000 triples so far. Elapsed: 32 s. +RdfJoinEstimator: Rebuilding bufB, seen 6100000 triples so far. Elapsed: 33 s. +RdfJoinEstimator: Rebuilding bufB, seen 6200000 triples so far. Elapsed: 34 s. +RdfJoinEstimator: Rebuilding bufB, seen 6300000 triples so far. Elapsed: 35 s. +RdfJoinEstimator: Rebuilding bufB, seen 6400000 triples so far. Elapsed: 36 s. +RdfJoinEstimator: Rebuilding bufB, seen 6500000 triples so far. Elapsed: 37 s. +RdfJoinEstimator: Rebuilding bufB, seen 6600000 triples so far. Elapsed: 38 s. +RdfJoinEstimator: Rebuilding bufB, seen 6700000 triples so far. Elapsed: 39 s. +RdfJoinEstimator: Rebuilding bufB, seen 6800000 triples so far. Elapsed: 40 s. +RdfJoinEstimator: Rebuilding bufB, seen 6900000 triples so far. Elapsed: 41 s. +RdfJoinEstimator: Rebuilding bufB, seen 7000000 triples so far. Elapsed: 41 s. +RdfJoinEstimator: Rebuilding bufB, seen 7100000 triples so far. Elapsed: 42 s. +RdfJoinEstimator: Rebuilding bufB, seen 7200000 triples so far. Elapsed: 43 s. +RdfJoinEstimator: Rebuilding bufB, seen 7300000 triples so far. Elapsed: 44 s. +RdfJoinEstimator: Rebuilding bufB, seen 7400000 triples so far. Elapsed: 45 s. +RdfJoinEstimator: Rebuilding bufB, seen 7500000 triples so far. Elapsed: 45 s. +RdfJoinEstimator: Rebuilding bufB, seen 7600000 triples so far. Elapsed: 46 s. +RdfJoinEstimator: Rebuilding bufB, seen 7700000 triples so far. Elapsed: 47 s. +RdfJoinEstimator: Rebuilding bufB, seen 7800000 triples so far. Elapsed: 48 s. +RdfJoinEstimator: Rebuilding bufB, seen 7900000 triples so far. Elapsed: 49 s. +RdfJoinEstimator: Rebuilding bufB, seen 8000000 triples so far. Elapsed: 50 s. +RdfJoinEstimator: Rebuilding bufB, seen 8100000 triples so far. Elapsed: 50 s. +RdfJoinEstimator: Rebuilding bufB, seen 8200000 triples so far. Elapsed: 51 s. +RdfJoinEstimator: Rebuilding bufB, seen 8300000 triples so far. Elapsed: 52 s. +RdfJoinEstimator: Rebuilding bufB, seen 8400000 triples so far. Elapsed: 53 s. +RdfJoinEstimator: Rebuilding bufB, seen 8500000 triples so far. Elapsed: 54 s. +RdfJoinEstimator: Rebuilding bufB, seen 8600000 triples so far. Elapsed: 55 s. +RdfJoinEstimator: Rebuilding bufB, seen 8700000 triples so far. Elapsed: 55 s. +RdfJoinEstimator: Rebuilding bufB, seen 8800000 triples so far. Elapsed: 56 s. +RdfJoinEstimator: Rebuilding bufB, seen 8900000 triples so far. Elapsed: 57 s. +RdfJoinEstimator: Rebuilding bufB, seen 9000000 triples so far. Elapsed: 57 s. +RdfJoinEstimator: Rebuilding bufB, seen 9100000 triples so far. Elapsed: 58 s. +RdfJoinEstimator: Rebuilding bufB, seen 9200000 triples so far. Elapsed: 58 s. +RdfJoinEstimator: Rebuilding bufB, seen 9300000 triples so far. Elapsed: 58 s. +RdfJoinEstimator: Rebuilding bufB, seen 9400000 triples so far. Elapsed: 58 s. +RdfJoinEstimator: Rebuilding bufB, seen 9500000 triples so far. Elapsed: 59 s. +RdfJoinEstimator: Rebuilding bufB, seen 9600000 triples so far. Elapsed: 59 s. +RdfJoinEstimator: Rebuilding bufB, seen 9700000 triples so far. Elapsed: 59 s. +RdfJoinEstimator: Rebuilding bufB, seen 9800000 triples so far. Elapsed: 59 s. +RdfJoinEstimator: Rebuilding bufB, seen 9900000 triples so far. Elapsed: 60 s. +RdfJoinEstimator: Rebuilding bufB, seen 10000000 triples so far. Elapsed: 61 s. +RdfJoinEstimator: Rebuilding bufB, seen 10100000 triples so far. Elapsed: 61 s. +RdfJoinEstimator: Rebuilding bufB, seen 10200000 triples so far. Elapsed: 62 s. +RdfJoinEstimator: Rebuilding bufB, seen 10300000 triples so far. Elapsed: 63 s. +RdfJoinEstimator: Rebuilding bufB, seen 10400000 triples so far. Elapsed: 64 s. +RdfJoinEstimator: Rebuilding bufB, seen 10500000 triples so far. Elapsed: 64 s. +RdfJoinEstimator: Rebuilding bufB, seen 10600000 triples so far. Elapsed: 65 s. +RdfJoinEstimator: Rebuilding bufB, seen 10700000 triples so far. Elapsed: 65 s. +RdfJoinEstimator: Rebuilding bufB, seen 10800000 triples so far. Elapsed: 66 s. +RdfJoinEstimator: Rebuilding bufB, seen 10900000 triples so far. Elapsed: 67 s. +RdfJoinEstimator: Rebuilding bufB, seen 11000000 triples so far. Elapsed: 67 s. +RdfJoinEstimator: Rebuilding bufB, seen 11100000 triples so far. Elapsed: 67 s. +RdfJoinEstimator: Rebuilding bufB, seen 11200000 triples so far. Elapsed: 68 s. +RdfJoinEstimator: Rebuilding bufB, seen 11300000 triples so far. Elapsed: 68 s. +RdfJoinEstimator: Rebuilding bufB, seen 11400000 triples so far. Elapsed: 69 s. +RdfJoinEstimator: Rebuilding bufB, seen 11500000 triples so far. Elapsed: 69 s. +RdfJoinEstimator: Rebuilding bufB, seen 11600000 triples so far. Elapsed: 70 s. +RdfJoinEstimator: Rebuilding bufB, seen 11700000 triples so far. Elapsed: 70 s. +RdfJoinEstimator: Rebuilding bufB, seen 11800000 triples so far. Elapsed: 71 s. +RdfJoinEstimator: Rebuilding bufB, seen 11900000 triples so far. Elapsed: 71 s. +RdfJoinEstimator: Rebuilding bufB, seen 12000000 triples so far. Elapsed: 71 s. +RdfJoinEstimator: Rebuilding bufB, seen 12100000 triples so far. Elapsed: 72 s. +RdfJoinEstimator: Rebuilding bufB, seen 12200000 triples so far. Elapsed: 72 s. +RdfJoinEstimator: Rebuilding bufB, seen 12300000 triples so far. Elapsed: 73 s. +RdfJoinEstimator: Rebuilding bufB, seen 12400000 triples so far. Elapsed: 73 s. +RdfJoinEstimator: Rebuilding bufB, seen 12500000 triples so far. Elapsed: 73 s. +RdfJoinEstimator: Rebuilding bufB, seen 12600000 triples so far. Elapsed: 74 s. +RdfJoinEstimator: Rebuilding bufB, seen 12700000 triples so far. Elapsed: 74 s. +RdfJoinEstimator: Rebuilding bufB, seen 12800000 triples so far. Elapsed: 75 s. +RdfJoinEstimator: Rebuilding bufB, seen 12900000 triples so far. Elapsed: 75 s. +61.979 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (>=) +│ ║ │ ║ Var (name=optDate) +│ ║ │ ║ ValueConstant (value="2024-06-01"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ │ │ s: Var (name=patient) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) +│ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] +│ ║ │ ║ │ s: Var (name=patient) +│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ │ o: Var (name=enc) +│ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] +│ ║ │ ║ s: Var (name=enc) +│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) +│ ║ │ ║ o: Var (name=date) +│ ║ │ ╚══ ExtensionElem (optDate) +│ ║ │ Var (name=date) +│ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] +│ ║ s: Var (name=patient) +│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ o: Var (name=med) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?date . +BIND(?date AS ?optDate) +} +FILTER (?optDate >= "2024-06-01"^^) +OPTIONAL { +?patient ?med . +} +} + +45.587 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +45.587 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 02:56:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "DX-200" "DX-201" } +{ ?entity a med:Condition ; med:code ?code . } +UNION +{ ?entity a med:Medication ; med:code ?code . } +FILTER(?code = ?target || ?code = "DX-202") +OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +137.453 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=code) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=code) +│ ║ │ ║ │ ValueConstant (value="DX-202") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.4K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.4K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ o: Var (name=code) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=code) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=code) +│ ║ │ │ ValueConstant (value="DX-202") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.3K) +│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.3K) [right] +│ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) +│ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ o: Var (name=alt) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity a . +?entity ?code . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +UNION +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity a . +?entity ?code . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +OPTIONAL { +?entity ?alt . +} +} + +99.712 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +99.712 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 01:38:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . +FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) +OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000020000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +22.562 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_587381c4d38c9bac4b41b7ba69828686daf401234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (practitioner) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] +│ ║ │ ║ ├── Filter (costEstimate=420, resultSizeEstimate=1.3K) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ Var (name=date) +│ ║ │ ║ │ ║ ValueConstant (value="2024-01-01"^^) +│ ║ │ ║ │ ║ ValueConstant (value="2024-02-01"^^) +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) +│ ║ │ ║ │ s: Var (name=enc) +│ ║ │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) +│ ║ │ ║ │ o: Var (name=date) +│ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] +│ ║ │ ║ s: Var (name=enc) +│ ║ │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ ║ o: Var (name=practitioner) +│ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] +│ ║ s: Var (name=enc) +│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ o: Var (name=cond) +│ ║ GroupElem (_anon_having_587381c4d38c9bac4b41b7ba69828686daf401234) +│ ║ Count +│ ║ Var (name=enc) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) +│ ╚══ ExtensionElem (_anon_having_587381c4d38c9bac4b41b7ba69828686daf401234) +│ Count +│ Var (name=enc) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc ?date . +FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) +?enc ?practitioner . +?enc a . +OPTIONAL { +?enc ?cond . +} +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +16.107 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +16.107 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 01:12:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter/med:hasObservation ?obs . +?obs med:value ?value . +BIND(?value AS ?optValue) +} +FILTER(?optValue > 60) +MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +108.325 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) +│ ║ │ ║ ValueConstant (value="60"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ │ │ s: Var (name=patient) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.5K) +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] +│ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] +│ ║ │ ║ │ ║ s: Var (name=patient) +│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ │ ║ o: Var (name=_anon_path_2979fa9c2ee6895484194705c65cd6abfd201, anonymous) +│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] +│ ║ │ ║ │ s: Var (name=_anon_path_2979fa9c2ee6895484194705c65cd6abfd201, anonymous) +│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ ║ │ o: Var (name=obs) +│ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] +│ ║ │ ║ s: Var (name=obs) +│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ │ ║ o: Var (name=value) +│ ║ │ ╚══ ExtensionElem (optValue) +│ ║ │ Var (name=value) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) +│ ║ ║ └── ValueConstant (value="test") +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) +│ ║ s: Var (name=patient) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient / ?obs . +?obs ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 60) +MINUS { +?patient ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "test")) +} +} + +78.046 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +78.046 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:58:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a med:Encounter ; med:hasCondition ?cond . +?cond med:code ?code . +FILTER(?code = "DX-200" || ?code = "DX-201") +FILTER EXISTS { ?enc med:hasObservation ?obs . } +OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +162.038 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.7K) +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ o: Var (name=obs) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=50.4K) [left] +│ ║ ║ │ ╠══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] +│ ║ ║ │ ║ s: Var (name=enc) +│ ║ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ ║ │ ║ o: Var (name=cond) +│ ║ ║ │ ╚══ Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] +│ ║ ║ │ ├── Or +│ ║ ║ │ │ ╠══ Compare (=) +│ ║ ║ │ │ ║ Var (name=code) +│ ║ ║ │ │ ║ ValueConstant (value="DX-200") +│ ║ ║ │ │ ╚══ Compare (=) +│ ║ ║ │ │ Var (name=code) +│ ║ ║ │ │ ValueConstant (value="DX-201") +│ ║ ║ │ └── StatementPattern (resultSizeEstimate=66.5K) +│ ║ ║ │ s: Var (name=cond) +│ ║ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ ║ │ o: Var (name=code) +│ ║ ║ └── StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [right] +│ ║ ║ s: Var (name=enc) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] +│ ║ s: Var (name=enc) +│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ o: Var (name=practitioner) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=enc) +└── ExtensionElem (count) +Count (Distinct) +Var (name=enc) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc ?cond . +?cond ?code . +FILTER ((?code = "DX-200") || (?code = "DX-201")) +?enc a . +OPTIONAL { +?enc ?practitioner . +} +FILTER EXISTS { +?enc ?obs . +} +} + +118.093 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +118.093 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:50:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +VALUES ?limit { 55 } +?patient a med:Patient ; med:hasEncounter ?enc . +?enc med:hasObservation ?obs . +?obs med:value ?value . +FILTER(?value IN (50, 60, 70)) +FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +31.750 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ o: Var (name=cond) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] +│ ║ ║ │ ║ ├── Filter (costEstimate=9.0K, resultSizeEstimate=3.0K) [left] +│ ║ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ ║ │ ║ │ ║ Var (name=value) +│ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) +│ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) +│ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) +│ ║ ║ │ ║ │ s: Var (name=obs) +│ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ ║ │ ║ │ o: Var (name=value) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] +│ ║ ║ │ ║ s: Var (name=enc) +│ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ │ ║ o: Var (name=obs) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] +│ ║ ║ │ s: Var (name=patient) +│ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ │ o: Var (name=enc) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] +│ ║ ║ s: Var (name=patient) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?obs ?value . +FILTER (?value IN (50, 60, 70)) +?enc ?obs . +?patient ?enc . +?patient a . +VALUES ?limit { 55 } +FILTER NOT EXISTS { +?enc ?cond . +} +} + +22.715 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +22.715 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:45:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ ?patient a med:Patient . } +UNION +{ ?patient med:hasEncounter ?enc . } +OPTIONAL { +?patient med:hasMedication ?med . +BIND(?med AS ?optMed) +} +FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000038000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +55.637 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_40111033d7b89ae744379f2acb849323d9050123, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (patient) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optMed) +│ ║ │ Var (name=patient) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) +│ ║ ║ │ s: Var (name=patient) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) +│ ║ ║ s: Var (name=patient) +│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ o: Var (name=enc) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ s: Var (name=patient) +│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ o: Var (name=med) +│ ║ └── ExtensionElem (optMed) +│ ║ Var (name=med) +│ ║ GroupElem (_anon_having_40111033d7b89ae744379f2acb849323d9050123) +│ ║ Count +│ ║ Var (name=med) +│ ║ GroupElem (medCount) +│ ║ Count (Distinct) +│ ║ Var (name=med) +│ ╚══ ExtensionElem (_anon_having_40111033d7b89ae744379f2acb849323d9050123) +│ Count +│ Var (name=med) +└── ExtensionElem (medCount) +Count (Distinct) +Var (name=med) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ +?patient a . +} +UNION +{ +?patient ?enc . +} +OPTIONAL { +?patient ?med . +BIND(?med AS ?optMed) +} +FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +53.194 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +53.194 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:41:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a med:Medication ; med:code ?code . +FILTER(?code = "MED-1000" || ?code = "MED-1001") +FILTER EXISTS { ?patient med:hasMedication ?med . } +MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.945 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ ║ s: Var (name=patient) +│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ ║ o: Var (name=med) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=16.3K) +│ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] +│ ║ │ │ s: Var (name=med) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=code) +│ ║ │ ║ │ ValueConstant (value="MED-1000") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=code) +│ ║ │ ║ ValueConstant (value="MED-1001") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ s: Var (name=med) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=dose) +│ ║ ║ └── ValueConstant (value="x") +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) +│ ║ s: Var (name=med) +│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) +│ ║ o: Var (name=dose) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=med) +└── ExtensionElem (count) +Count (Distinct) +Var (name=med) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a . +?med ?code . +FILTER ((?code = "MED-1000") || (?code = "MED-1001")) +FILTER EXISTS { +?patient ?med . +} +MINUS { +?med ?dose . +FILTER (CONTAINS(LCASE(STR(?dose)), "x")) +} +} + +41.663 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +41.663 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:38:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a med:Patient . +OPTIONAL { +?patient med:hasEncounter ?enc . +?enc med:handledBy ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER(?optPractitioner != ?patient) +FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +71.193 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_5911754ba04afef348bb8da5249da1b84b3301234, anonymous) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (patient) +│ ║ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optPractitioner) +│ ║ │ ║ Var (name=patient) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ o: Var (name=cond) +│ ║ └── LeftJoin +│ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ ║ s: Var (name=patient) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) +│ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] +│ ║ │ ║ s: Var (name=patient) +│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ o: Var (name=enc) +│ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) +│ ║ └── ExtensionElem (optPractitioner) +│ ║ Var (name=practitioner) +│ ║ GroupElem (_anon_having_5911754ba04afef348bb8da5249da1b84b3301234) +│ ║ Count +│ ║ Var (name=enc) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) +│ ╚══ ExtensionElem (_anon_having_5911754ba04afef348bb8da5249da1b84b3301234) +│ Count +│ Var (name=enc) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +51.735 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +51.735 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:35:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +VALUES ?code { "DX-200" "DX-201" } +?enc a med:Encounter ; med:hasCondition ?cond . +?cond med:code ?condCode . +FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) +OPTIONAL { ?enc med:handledBy ?practitioner . } +MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +281.412 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── LeftJoin +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.3K) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] +│ ║ │ ║ │ ║ ├── Filter (costEstimate=183, resultSizeEstimate=33.4K) [left] +│ ║ │ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ │ ║ Var (name=condCode) +│ ║ │ ║ │ ║ │ ║ ValueConstant (value="DX-200") +│ ║ │ ║ │ ║ │ ║ ValueConstant (value="DX-201") +│ ║ │ ║ │ ║ │ ║ ValueConstant (value="DX-202") +│ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ ║ │ ║ │ s: Var (name=cond) +│ ║ │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ │ ║ │ o: Var (name=condCode) +│ ║ │ ║ │ ║ └── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] +│ ║ │ ║ │ ║ s: Var (name=enc) +│ ║ │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ ║ │ ║ o: Var (name=cond) +│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] +│ ║ │ ║ │ s: Var (name=enc) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=51.0K) +│ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] +│ ║ ║ s: Var (name=enc) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) +│ ║ ╚══ Filter (new scope) [right] +│ ║ ├── Compare (<) +│ ║ │ Var (name=value) +│ ║ │ ValueConstant (value="60"^^) +│ ║ └── StatementPattern (resultSizeEstimate=49.7K) +│ ║ s: Var (name=obs) +│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ o: Var (name=value) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=enc) +└── ExtensionElem (count) +Count (Distinct) +Var (name=enc) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?cond ?condCode . +FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) +?enc ?cond . +?enc a . +VALUES ?code { "DX-200" "DX-201" } +OPTIONAL { +?enc ?practitioner . +} +MINUS { +?enc ?obs . +{ +{ +?obs ?value . +FILTER (?value < 60) +} +} +} +} + +204.399 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +204.399 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:34:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ ?patient a med:Patient ; med:hasMedication ?med . } +UNION +{ ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } +OPTIONAL { ?patient med:name ?optName . } +FILTER(?optName != "") +FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . +FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +264.105 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=16.3K) +│ ║ │ ├── StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] +│ ║ │ │ s: Var (name=patient) +│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ o: Var (name=m2) +│ ║ │ └── Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=c) +│ ║ │ ║ ValueConstant (value="MED-1005") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ s: Var (name=m2) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=c) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] +│ ║ ║ │ ║ s: Var (name=patient) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] +│ ║ ║ │ s: Var (name=patient) +│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ ║ │ o: Var (name=med) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] +│ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] +│ ║ ║ ║ │ s: Var (name=patient) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] +│ ║ ║ ║ s: Var (name=patient) +│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ ║ o: Var (name=enc) +│ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] +│ ║ ║ s: Var (name=enc) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] +│ ║ s: Var (name=patient) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ +?patient a . +?patient ?med . +} +UNION +{ +?patient a . +?patient ?enc . +?enc ?obs . +} +OPTIONAL { +?patient ?optName . +} +FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +194.412 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +194.412 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:32:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES ?u { + + } +VALUES ?v { + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.172 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Extension +│ ║ ├── Filter +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="user0") +│ ║ │ ║ ValueConstant (value="user1") +│ ║ │ ║ ValueConstant (value="user2") +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] +│ ║ │ │ ╠══ Filter [left] +│ ║ │ │ ║ ├── Compare (!=) +│ ║ │ │ ║ │ Var (name=u) +│ ║ │ │ ║ │ Var (name=v) +│ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ │ s: Var (name=u) +│ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ o: Var (name=v) +│ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ │ s: Var (name=u) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) +│ ║ └── ExtensionElem (pair) +│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) +│ ║ ├── Str +│ ║ │ Var (name=u) +│ ║ └── Str +│ ║ Var (name=v) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=pair) +└── ExtensionElem (count) +Count (Distinct) +Var (name=pair) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.116 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.116 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:30:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES ?u1 { + + } +VALUES ?u2 { + + } +VALUES ?u3 { + + } +FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) +?u1 social:follows ?u2 . +?u2 social:follows ?u1 . +?u1 social:follows ?u3 . +?u3 social:follows ?u1 . +?u2 social:follows ?u3 . +?u3 social:follows ?u2 . +FILTER EXISTS { ?u1 social:name ?name . +FILTER(?name = "user0" || ?name = "user1") } +MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.695 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ Filter +│ ║ │ ║ ╠══ Or +│ ║ │ ║ ║ ├── Compare (=) +│ ║ │ ║ ║ │ Var (name=name) +│ ║ │ ║ ║ │ ValueConstant (value="user0") +│ ║ │ ║ ║ └── Compare (=) +│ ║ │ ║ ║ Var (name=name) +│ ║ │ ║ ║ ValueConstant (value="user1") +│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ ║ s: Var (name=u1) +│ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3577954963329259E17M) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.445665305485E11M) [left] +│ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6570989.0M) [left] +│ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=45.7M) [left] +│ ║ │ │ ║ │ ║ ├── Filter [left] +│ ║ │ │ ║ │ ║ │ ╠══ And +│ ║ │ │ ║ │ ║ │ ║ ├── Compare (!=) +│ ║ │ │ ║ │ ║ │ ║ │ Var (name=u2) +│ ║ │ │ ║ │ ║ │ ║ │ Var (name=u3) +│ ║ │ │ ║ │ ║ │ ║ └── Compare (!=) +│ ║ │ │ ║ │ ║ │ ║ Var (name=u1) +│ ║ │ │ ║ │ ║ │ ║ Var (name=u3) +│ ║ │ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.3M) +│ ║ │ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] +│ ║ │ │ ║ │ ║ │ │ ╠══ Filter [left] +│ ║ │ │ ║ │ ║ │ │ ║ ├── Compare (!=) +│ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u1) +│ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u2) +│ ║ │ │ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ │ │ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ │ ║ │ ║ │ │ s: Var (name=u1) +│ ║ │ │ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ ║ │ ║ │ │ o: Var (name=u2) +│ ║ │ │ ║ │ ║ │ └── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ │ ║ │ ║ s: Var (name=u3) +│ ║ │ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ ║ │ ║ o: Var (name=u2) +│ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ │ ║ │ s: Var (name=u2) +│ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ ║ │ o: Var (name=u1) +│ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ │ ║ s: Var (name=u3) +│ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ ║ o: Var (name=u1) +│ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ │ s: Var (name=u1) +│ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ o: Var (name=u3) +│ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ s: Var (name=u2) +│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ o: Var (name=u3) +│ ║ └── Extension +│ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ s: Var (name=u1) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=u1) +│ ║ ╚══ ExtensionElem (_anon_path_493118e19e5f0dc12415cb51d6d798605f3f50123) +│ ║ Var (name=u1) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u1) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u1) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES (?u1 ?u2) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u1 != ?u2) +?u1 ?u2 . +VALUES ?u3 { } +FILTER ((?u2 != ?u3) && (?u1 != ?u3)) +?u3 ?u2 . +?u2 ?u1 . +?u3 ?u1 . +?u1 ?u3 . +?u2 ?u3 . +FILTER EXISTS { +?u1 ?name . +FILTER ((?name = "user0") || (?name = "user1")) +} +MINUS { +?u1 ?u1 . +BIND(?u1 AS ?_anon_path_493118e19e5f0dc12415cb51d6d798605f3f50123) +} +} + +9.391 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +9.391 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:29:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + } +VALUES ?v { + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName != "") +FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.178 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] +│ ║ ║ ├── Filter [left] +│ ║ ║ │ ╠══ And +│ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ Var (name=u) +│ ║ ║ │ ║ │ Var (name=v) +│ ║ ║ │ ║ └── Exists +│ ║ ║ │ ║ StatementPattern +│ ║ ║ │ ║ s: Var (name=v) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=u) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=u) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=v) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER ((?u != ?v) && EXISTS { ?v ?u . }) +?u ?v . +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + +0.123 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.123 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:28:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES ?u { + + + } +VALUES ?v { + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } +FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.180 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_689682e3024d1c5f5746bfb54946720e08ad1b012345, anonymous) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── Group (u) +│ ║ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optAlias) +│ ║ │ ValueConstant (value="user3") +│ ║ │ ValueConstant (value="user4") +│ ║ │ ValueConstant (value="user5") +│ ║ │ ValueConstant (value="user6") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] +│ ║ ║ ├── Filter [left] +│ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ Var (name=u) +│ ║ ║ │ ║ Var (name=v) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=u) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=v) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=u) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) +│ ║ └── ExtensionElem (optAlias) +│ ║ Var (name=optName) +│ ║ GroupElem (_anon_having_689682e3024d1c5f5746bfb54946720e08ad1b012345) +│ ║ Count (Distinct) +│ ║ Var (name=v) +│ ║ GroupElem (degree) +│ ║ Count (Distinct) +│ ║ Var (name=v) +│ ╚══ ExtensionElem (_anon_having_689682e3024d1c5f5746bfb54946720e08ad1b012345) +│ Count (Distinct) +│ Var (name=v) +└── ExtensionElem (degree) +Count (Distinct) +Var (name=v) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.125 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.125 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:27:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + + } +VALUES ?v { + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +FILTER NOT EXISTS { ?u social:follows ?u . } +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.260 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=355) [left] +│ ║ ║ ├── Filter [left] +│ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ Var (name=u) +│ ║ ║ │ ║ Var (name=v) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=71) +│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] +│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=u) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=v) +│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] +│ ║ ║ ╠══ Not +│ ║ ║ ║ Exists +│ ║ ║ ║ Extension +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ │ s: Var (name=u) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) +│ ║ ║ ║ └── ExtensionElem (_anon_path_7874626f0bfbcdaa444648a0315bb69281259b0123456) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER NOT EXISTS { +?u ?u . +BIND(?u AS ?_anon_path_7874626f0bfbcdaa444648a0315bb69281259b0123456) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + +0.181 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.181 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:26:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { + + + + } +{ +?u social:follows ?v . +?v social:follows ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post social:authored ?u . +BIND(?post AS ?activity) +} +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +865.637 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="user7") +│ ║ │ ValueConstant (value="user8") +│ ║ │ ValueConstant (value="user9") +│ ║ │ ValueConstant (value="user10") +│ ║ │ ValueConstant (value="user11") +│ ║ └── LeftJoin +│ ║ ╠══ Join (HashJoinIteration) [left] +│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union (new scope) [right] +│ ║ ║ ╠══ Extension (new scope) +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) +│ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] +│ ║ ║ ║ │ ║ s: Var (name=u) +│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=v) +│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ ║ │ s: Var (name=v) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) +│ ║ ║ ║ └── ExtensionElem (activity) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ╚══ Extension (new scope) +│ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) +│ ║ ║ │ s: Var (name=post) +│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) +│ ║ ║ │ o: Var (name=u) +│ ║ ║ └── ExtensionElem (activity) +│ ║ ║ Var (name=post) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=activity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=activity) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { } +{ +?u ?v . +?v ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post ?u . +BIND(?post AS ?activity) +} +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +642.956 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +642.956 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:25:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES ?u { + + + + + } +VALUES ?v { + + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +OPTIONAL { ?u social:name ?optName . } +FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.207 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_946842a4cc77fa560b4fb4a43fcc91fbd8b59a012345678, anonymous) +│ ║ │ ValueConstant (value="5"^^) +│ ║ └── Group (u) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.2M) [left] +│ ║ ║ ├── Filter [left] +│ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ Var (name=u) +│ ║ ║ │ ║ Var (name=v) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=u) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=v) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ║ GroupElem (_anon_having_946842a4cc77fa560b4fb4a43fcc91fbd8b59a012345678) +│ ║ Count (Distinct) +│ ║ Var (name=v) +│ ║ GroupElem (connections) +│ ║ Count (Distinct) +│ ║ Var (name=v) +│ ╚══ ExtensionElem (_anon_having_946842a4cc77fa560b4fb4a43fcc91fbd8b59a012345678) +│ Count (Distinct) +│ Var (name=v) +└── ExtensionElem (connections) +Count (Distinct) +Var (name=v) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.146 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +0.146 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:24:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?u { + + + + + } +VALUES ?v { + + + + + } +FILTER(?u != ?v) +?u social:follows ?v . +FILTER EXISTS { ?v social:follows ?u . } +MINUS { ?v social:follows ?v . } +OPTIONAL { ?v social:name ?optName . } +FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +7.609 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="user12") +│ ║ │ ValueConstant (value="user13") +│ ║ │ ValueConstant (value="user14") +│ ║ │ ValueConstant (value="user15") +│ ║ │ ValueConstant (value="user16") +│ ║ │ ValueConstant (value="user17") +│ ║ └── LeftJoin +│ ║ ╠══ Difference [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.2M) +│ ║ ║ │ ╠══ Filter [left] +│ ║ ║ │ ║ ├── And +│ ║ ║ │ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ ║ Var (name=u) +│ ║ ║ │ ║ │ ║ Var (name=v) +│ ║ ║ │ ║ │ ╚══ Exists +│ ║ ║ │ ║ │ StatementPattern +│ ║ ║ │ ║ │ s: Var (name=v) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ o: Var (name=u) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=u) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=v) +│ ║ ║ └── Extension +│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ s: Var (name=v) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) +│ ║ ║ ╚══ ExtensionElem (_anon_path_931116bfc587bcf5a4f208bb43b3f4d2a0b04012345678) +│ ║ ║ Var (name=v) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER ((?u != ?v) && EXISTS { ?v ?u . }) +?u ?v . +MINUS { +?v ?v . +BIND(?v AS ?_anon_path_931116bfc587bcf5a4f208bb43b3f4d2a0b04012345678) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +5.503 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +5.503 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:24:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { ?a social:name ?optName . } +FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000060111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +886.102 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="user0") +│ ║ │ ValueConstant (value="user1") +│ ║ │ ValueConstant (value="user2") +│ ║ └── LeftJoin +│ ║ ╠══ Extension [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=188738.0M) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] +│ ║ ║ │ ║ │ s: Var (name=a) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ o: Var (name=b) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ ║ s: Var (name=b) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=c) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=c) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=a) +│ ║ ║ └── ExtensionElem (cycleStart) +│ ║ ║ Var (name=a) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=a) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a ?b . +?b ?c . +?c ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { +?a ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +} + +669.847 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +669.847 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:23:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { + + + } +FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?d . +?d social:follows ?a . +OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } +FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +404.744 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optAlias) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=190546.1M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=145.0K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=145.1K) [left] +│ ║ ║ │ ║ │ ╠══ Filter [left] +│ ║ ║ │ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ ║ │ Var (name=d) +│ ║ ║ │ ║ │ ║ │ Var (name=a) +│ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) +│ ║ ║ │ ║ │ ║ s: Var (name=d) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=a) +│ ║ ║ │ ║ │ ╚══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ ║ └── Filter (costEstimate=190, resultSizeEstimate=145.1K) [right] +│ ║ ║ │ ║ ╠══ Compare (!=) +│ ║ ║ │ ║ ║ Var (name=a) +│ ║ ║ │ ║ ║ Var (name=b) +│ ║ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ ║ s: Var (name=a) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=b) +│ ║ ║ │ ╚══ Filter (costEstimate=190, resultSizeEstimate=145.1K) [right] +│ ║ ║ │ ├── Compare (!=) +│ ║ ║ │ │ Var (name=b) +│ ║ ║ │ │ Var (name=c) +│ ║ ║ │ └── StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ s: Var (name=b) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=c) +│ ║ ║ └── Filter (costEstimate=0.50, resultSizeEstimate=145.1K) [right] +│ ║ ║ ╠══ Compare (!=) +│ ║ ║ ║ Var (name=c) +│ ║ ║ ║ Var (name=d) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ s: Var (name=c) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=d) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=b) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) +│ ║ └── ExtensionElem (optAlias) +│ ║ Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?d ?a . +FILTER (?d != ?a) +VALUES ?b { } +?a ?b . +FILTER (?a != ?b) +?b ?c . +FILTER (?b != ?c) +?c ?d . +FILTER (?c != ?d) +OPTIONAL { +?b ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias != "") +} + +299.406 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +299.406 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:23:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?a { + + + + } +VALUES ?b { + + + + } +VALUES ?c { + + + + } +VALUES ?d { + + + + } +VALUES ?e { + + + + } +FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) +?a social:follows ?b . +?b social:follows ?c . +?c social:follows ?d . +?d social:follows ?e . +?e social:follows ?a . +FILTER EXISTS { ?a social:name ?name . +FILTER(?name = "user7" || ?name = "user8") } +OPTIONAL { ?e social:name ?optName . } +FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.805 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="user7") +│ ║ │ ║ ValueConstant (value="user8") +│ ║ │ ║ ValueConstant (value="user9") +│ ║ │ ║ ValueConstant (value="user10") +│ ║ │ ║ ValueConstant (value="user11") +│ ║ │ ╚══ Exists +│ ║ │ Filter +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="user7") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) +│ ║ │ ║ ValueConstant (value="user8") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=a) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8624891561316215E15M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.29566265696E10M) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=90134.3M) [left] +│ ║ ║ │ ║ ├── Filter [left] +│ ║ ║ │ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ ║ Var (name=d) +│ ║ ║ │ ║ │ ║ Var (name=e) +│ ║ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1272.2M) +│ ║ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1272.2M) [left] +│ ║ ║ │ ║ │ │ ╠══ Filter [left] +│ ║ ║ │ ║ │ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ │ ║ │ Var (name=c) +│ ║ ║ │ ║ │ │ ║ │ Var (name=d) +│ ║ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.8K) +│ ║ ║ │ ║ │ │ ║ ╠══ Filter [left] +│ ║ ║ │ ║ │ │ ║ ║ ├── And +│ ║ ║ │ ║ │ │ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ │ ║ ║ │ ║ Var (name=a) +│ ║ ║ │ ║ │ │ ║ ║ │ ║ Var (name=c) +│ ║ ║ │ ║ │ │ ║ ║ │ ╚══ Compare (!=) +│ ║ ║ │ ║ │ │ ║ ║ │ Var (name=b) +│ ║ ║ │ ║ │ │ ║ ║ │ Var (name=c) +│ ║ ║ │ ║ │ │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.6M) +│ ║ ║ │ ║ │ │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.6M) [left] +│ ║ ║ │ ║ │ │ ║ ║ ║ ├── Filter [left] +│ ║ ║ │ ║ │ │ ║ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ │ ║ ║ ║ │ ║ Var (name=a) +│ ║ ║ │ ║ │ │ ║ ║ ║ │ ║ Var (name=b) +│ ║ ║ │ ║ │ │ ║ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) +│ ║ ║ │ ║ │ │ ║ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ ║ │ │ ║ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ ║ │ │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ ║ │ │ ║ ║ ║ s: Var (name=a) +│ ║ ║ │ ║ │ │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ │ ║ ║ ║ o: Var (name=b) +│ ║ ║ │ ║ │ │ ║ ║ ╚══ BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ ║ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ ║ │ │ s: Var (name=c) +│ ║ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ │ o: Var (name=d) +│ ║ ║ │ ║ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ ║ s: Var (name=d) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=e) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=b) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=c) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=e) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=a) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=e) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES (?a ?b) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?a != ?b) +?a ?b . +VALUES ?c { } +FILTER ((?a != ?c) && (?b != ?c)) +VALUES ?d { } +FILTER (?c != ?d) +?c ?d . +VALUES ?e { } +FILTER (?d != ?e) +?d ?e . +?b ?c . +?e ?a . +OPTIONAL { +?e ?optName . +} +FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +2.491 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +2.491 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:22:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a lib:Book . +OPTIONAL { +?book lib:hasCopy ?copy . +?copy lib:locatedAt ?branch . +BIND(?branch AS ?optBranch) +} +FILTER(?optBranch != ?book) +OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +937.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optBranch) +│ ║ │ ║ Var (name=book) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] +│ ║ │ │ s: Var (name=book) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=390.0K) +│ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] +│ ║ │ ║ │ s: Var (name=book) +│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ │ ║ │ o: Var (name=copy) +│ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] +│ ║ │ ║ s: Var (name=copy) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) +│ ║ │ ╚══ ExtensionElem (optBranch) +│ ║ │ Var (name=branch) +│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=book) +└── ExtensionElem (count) +Count (Distinct) +Var (name=book) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +OPTIONAL { +?book ?copy . +?copy ?branch . +BIND(?branch AS ?optBranch) +} +FILTER (?optBranch != ?book) +OPTIONAL { +?book ?author . +} +} + +644.334 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +644.334 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:21:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "Member 1" "Member 2" } +{ ?entity a lib:Member ; lib:name ?name . } +UNION +{ ?entity a lib:Book ; lib:title ?name . } +FILTER(?name = ?target || ?name = "Member 3") +OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +198.456 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="Member 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Member 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] +│ ║ │ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ │ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ o: Var (name=copy) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +UNION +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +OPTIONAL { +?entity ?copy . +} +} + +143.142 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +143.142 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:21:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a lib:Author ; lib:name ?authorName . +FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +25.114 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_447299ff97f880784363b5fad3cff8f7f0480123, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (author) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] +│ ║ │ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] +│ ║ │ ║ ├── ListMemberOperator +│ ║ │ ║ │ Var (name=authorName) +│ ║ │ ║ │ ValueConstant (value="Author 1") +│ ║ │ ║ │ ValueConstant (value="Author 2") +│ ║ │ ║ │ ValueConstant (value="Author 3") +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) +│ ║ │ ║ s: Var (name=author) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ ║ o: Var (name=authorName) +│ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=40.3K) [right] +│ ║ │ s: Var (name=author) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) +│ ║ GroupElem (_anon_having_447299ff97f880784363b5fad3cff8f7f0480123) +│ ║ Count +│ ║ Var (name=book) +│ ║ GroupElem (bookCount) +│ ║ Count (Distinct) +│ ║ Var (name=book) +│ ╚══ ExtensionElem (_anon_having_447299ff97f880784363b5fad3cff8f7f0480123) +│ Count +│ Var (name=book) +└── ExtensionElem (bookCount) +Count (Distinct) +Var (name=book) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author ?authorName . +FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) +?author a . +OPTIONAL { +?book ?author . +} +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +17.538 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +17.538 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:20:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a lib:Loan ; lib:borrowedBy ?member . +OPTIONAL { +?loan lib:dueDate ?due . +BIND(?due AS ?optDue) +} +FILTER(?optDue > "2024-01-10"^^xsd:date) +MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111e848 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +56.980 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optDue) +│ ║ │ ║ ValueConstant (value="2024-01-10"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] +│ ║ │ │ ║ s: Var (name=loan) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] +│ ║ │ │ s: Var (name=loan) +│ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ │ │ o: Var (name=member) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ ║ s: Var (name=loan) +│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ ║ o: Var (name=due) +│ ║ │ ╚══ ExtensionElem (optDue) +│ ║ │ Var (name=due) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) +│ ║ ║ └── ValueConstant (value="member 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=member) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a . +?loan ?member . +OPTIONAL { +?loan ?due . +BIND(?due AS ?optDue) +} +FILTER (?optDue > "2024-01-10"^^) +MINUS { +?member ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) +} +} + +40.574 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +40.574 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:20:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a lib:Book ; lib:title ?title . +FILTER(?title = "Book 1" || ?title = "Book 2") +FILTER EXISTS { ?book lib:hasCopy ?copy . } +OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +162.885 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ s: Var (name=book) +│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ │ o: Var (name=copy) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [left] +│ ║ ║ │ s: Var (name=book) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ ║ └── Filter (costEstimate=361, resultSizeEstimate=130.6K) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=title) +│ ║ ║ ║ │ ValueConstant (value="Book 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=title) +│ ║ ║ ║ ValueConstant (value="Book 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) +│ ║ ║ s: Var (name=book) +│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ ║ o: Var (name=title) +│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=book) +└── ExtensionElem (count) +Count (Distinct) +Var (name=book) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +?book ?title . +FILTER ((?title = "Book 1") || (?title = "Book 2")) +OPTIONAL { +?book ?author . +} +FILTER EXISTS { +?book ?copy . +} +} + +120.430 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +120.430 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:19:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +VALUES ?threshold { "2024-01-01"^^xsd:date } +?loan a lib:Loan ; lib:loanDate ?loanDate . +FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) +FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.988 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=due) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ o: Var (name=due) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=511) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=511) [left] +│ ║ ║ ├── Filter (costEstimate=1.5K, resultSizeEstimate=501) [left] +│ ║ ║ │ ╠══ ListMemberOperator +│ ║ ║ │ ║ Var (name=loanDate) +│ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) +│ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ ║ │ s: Var (name=loan) +│ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) +│ ║ ║ │ o: Var (name=loanDate) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] +│ ║ ║ s: Var (name=loan) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan ?loanDate . +FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) +?loan a . +VALUES ?threshold { "2024-01-01"^^ } +FILTER NOT EXISTS { +?loan ?due . +FILTER (?due < ?threshold) +} +} + +4.936 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.936 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:19:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ ?loan a lib:Loan ; lib:borrowedBy ?member . } +UNION +{ ?member a lib:Member . } +OPTIONAL { +?loan lib:loanedCopy ?copy . +BIND(?copy AS ?optCopy) +} +FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +28951.161 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_5144580a306a764e1c98521b839d529baf01234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (member) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optCopy) +│ ║ │ Var (name=member) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] +│ ║ ║ │ ║ s: Var (name=loan) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] +│ ║ ║ │ s: Var (name=loan) +│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ o: Var (name=member) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) +│ ║ ║ s: Var (name=member) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) +│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ │ o: Var (name=copy) +│ ║ └── ExtensionElem (optCopy) +│ ║ Var (name=copy) +│ ║ GroupElem (_anon_having_5144580a306a764e1c98521b839d529baf01234) +│ ║ Count +│ ║ Var (name=loan) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) +│ ╚══ ExtensionElem (_anon_having_5144580a306a764e1c98521b839d529baf01234) +│ Count +│ Var (name=loan) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ +?loan a . +?loan ?member . +} +UNION +{ +?member a . +} +OPTIONAL { +?loan ?copy . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +24599.399 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +24599.399 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:20:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?copy a lib:Copy ; lib:locatedAt ?branch . +?branch lib:name ?branchName . +FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") +FILTER EXISTS { ?copy a lib:Copy . } +MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +60341.622 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=384.2K) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=386.3K) [left] +│ ║ │ ║ ├── Filter (costEstimate=22.9K, resultSizeEstimate=45.8K) [left] +│ ║ │ ║ │ ╠══ Or +│ ║ │ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ ║ │ Var (name=branchName) +│ ║ │ ║ │ ║ │ ValueConstant (value="Branch 0") +│ ║ │ ║ │ ║ └── Compare (=) +│ ║ │ ║ │ ║ Var (name=branchName) +│ ║ │ ║ │ ║ ValueConstant (value="Branch 1") +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ │ ║ │ s: Var (name=branch) +│ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ ║ │ o: Var (name=branchName) +│ ║ │ ║ └── StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] +│ ║ │ ║ s: Var (name=copy) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) +│ ║ │ ╚══ Filter (costEstimate=0.50, resultSizeEstimate=387.8K) [right] +│ ║ │ ├── Exists +│ ║ │ │ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ │ s: Var (name=copy) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ └── StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ s: Var (name=copy) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=branch) +│ ║ ║ └── ValueConstant (value="branch/0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) +│ ║ s: Var (name=copy) +│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ o: Var (name=branch) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=copy) +└── ExtensionElem (count) +Count (Distinct) +Var (name=copy) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?branch ?branchName . +FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) +?copy ?branch . +?copy a . +FILTER EXISTS { +?copy a . +} +MINUS { +?copy ?branch . +FILTER (CONTAINS(STR(?branch), "branch/0")) +} +} + +55249.473 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +55249.473 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:22:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . +?copy lib:locatedAt ?branch . +?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . +OPTIONAL { ?member lib:name ?optName . } +FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +104.955 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_6741bc86f339983a4dac95682ef1fbca56c1012345, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (author) +│ ║ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="Member 1") +│ ║ │ ValueConstant (value="Member 2") +│ ║ │ ValueConstant (value="Member 3") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=272.6K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=137.7K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=11.1K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.8K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=member) +│ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=loan) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] +│ ║ ║ │ ║ │ s: Var (name=book) +│ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ ║ │ ║ │ o: Var (name=copy) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] +│ ║ ║ │ ║ s: Var (name=copy) +│ ║ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ ║ │ ║ o: Var (name=branch) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] +│ ║ ║ │ s: Var (name=book) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] +│ ║ ║ s: Var (name=book) +│ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ ║ o: Var (name=author) +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] +│ ║ s: Var (name=member) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=optName) +│ ║ GroupElem (_anon_having_6741bc86f339983a4dac95682ef1fbca56c1012345) +│ ║ Count +│ ║ Var (name=loan) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) +│ ╚══ ExtensionElem (_anon_having_6741bc86f339983a4dac95682ef1fbca56c1012345) +│ Count +│ Var (name=loan) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?loan a . +?loan ?member . +?loan ?copy . +?book ?copy . +?copy ?branch . +?book a . +?book ?author . +OPTIONAL { +?member ?optName . +} +FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +74.796 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +74.796 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:22:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +VALUES ?target { "Author 1" "Author 2" } +?member a lib:Member . +?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . +?book lib:hasCopy ?copy ; lib:writtenBy ?author . +?author lib:name ?authorName . +FILTER(?authorName = ?target || ?authorName = "Author 3") +FILTER NOT EXISTS { ?loan lib:dueDate ?due . +FILTER(?due < "2024-01-10"^^xsd:date) } +OPTIONAL { ?book lib:title ?optTitle . } +FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +107.078 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTitle) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ├── Compare (<) +│ ║ │ │ Var (name=due) +│ ║ │ │ ValueConstant (value="2024-01-10"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ o: Var (name=due) +│ ║ └── LeftJoin +│ ║ ╠══ Filter [left] +│ ║ ║ ├── Or +│ ║ ║ │ ╠══ Compare (=) +│ ║ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ Var (name=target) +│ ║ ║ │ ╚══ Compare (=) +│ ║ ║ │ Var (name=authorName) +│ ║ ║ │ ValueConstant (value="Author 3") +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=271.0K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=271.0K) [left] +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=264.1K) [left] +│ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] +│ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] +│ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.3K) [left] +│ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [left] +│ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) +│ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) +│ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] +│ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) +│ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [right] +│ ║ ║ ║ │ ║ │ ║ s: Var (name=member) +│ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] +│ ║ ║ ║ │ ║ │ s: Var (name=loan) +│ ║ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ ║ ║ │ ║ │ o: Var (name=copy) +│ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] +│ ║ ║ ║ │ ║ s: Var (name=book) +│ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=copy) +│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] +│ ║ ║ ║ │ s: Var (name=book) +│ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ ║ ║ │ o: Var (name=author) +│ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] +│ ║ ║ ║ s: Var (name=author) +│ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ ║ ║ o: Var (name=authorName) +│ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] +│ ║ s: Var (name=book) +│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ o: Var (name=optTitle) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=member) +└── ExtensionElem (count) +Count (Distinct) +Var (name=member) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +?loan ?member . +?loan a . +?member a . +?loan ?copy . +?book ?copy . +?book ?author . +?author ?authorName . +VALUES ?target { "Author 1" "Author 2" } +FILTER ((?authorName = ?target) || (?authorName = "Author 3")) +OPTIONAL { +?book ?optTitle . +} +FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +74.747 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +74.747 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:21:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ ?branch a lib:Branch . } +UNION +{ ?branch a lib:Branch ; lib:name ?name . } +OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } +FILTER(?optCopy != ?branch) +MINUS { ?branch lib:name ?name2 . +FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +251.675 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optCopy) +│ ║ │ ║ Var (name=branch) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) +│ ║ │ │ ║ s: Var (name=branch) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) +│ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] +│ ║ │ │ │ s: Var (name=branch) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) +│ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] +│ ║ │ │ s: Var (name=branch) +│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ │ o: Var (name=name) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ ║ s: Var (name=copy) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) +│ ║ │ ╚══ ExtensionElem (optCopy) +│ ║ │ Var (name=copy) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) +│ ║ ║ └── ValueConstant (value="branch 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=branch) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=branch) +└── ExtensionElem (count) +Count (Distinct) +Var (name=branch) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ +?branch a . +} +UNION +{ +?branch a . +?branch ?name . +} +OPTIONAL { +?copy ?branch . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?branch) +MINUS { +?branch ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) +} +} + +183.705 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +183.705 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:21:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a eng:Component . +OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } +FILTER(?optAssembly != ?component) +OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +221.627 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optAssembly) +│ ║ │ ║ Var (name=component) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] +│ ║ │ │ s: Var (name=component) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ ║ s: Var (name=component) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ │ ║ o: Var (name=assembly) +│ ║ │ ╚══ ExtensionElem (optAssembly) +│ ║ │ Var (name=assembly) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) +│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ o: Var (name=dep) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=component) +└── ExtensionElem (count) +Count (Distinct) +Var (name=component) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +OPTIONAL { +?component ?assembly . +BIND(?assembly AS ?optAssembly) +} +FILTER (?optAssembly != ?component) +OPTIONAL { +?component ?dep . +} +} + +211.010 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +211.010 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:20:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "REQ-1000" "REQ-1001" } +{ ?entity a eng:Requirement ; eng:name ?name . } +UNION +{ ?entity a eng:Component ; eng:name ?name . } +FILTER(?name = ?target || ?name = "REQ-1002") +OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000040000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +189.965 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="REQ-1002") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="REQ-1002") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K) +│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] +│ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +UNION +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +OPTIONAL { +?entity ?assembly . +} +} + +138.312 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +138.312 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:19:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a eng:Assembly ; eng:name ?assemblyName . +FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.687 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_807047345d16dcad8437da7aff2ad5708fb2101234567, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (assembly) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] +│ ║ │ ╠══ StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] +│ ║ │ ║ s: Var (name=assembly) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) +│ ║ │ ╚══ Filter (costEstimate=82, resultSizeEstimate=6.7K) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=assemblyName) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ ValueConstant (value="Assembly 3") +│ ║ │ └── StatementPattern (resultSizeEstimate=134.1K) +│ ║ │ s: Var (name=assembly) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=assemblyName) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) +│ ║ GroupElem (_anon_having_807047345d16dcad8437da7aff2ad5708fb2101234567) +│ ║ Count +│ ║ Var (name=component) +│ ║ GroupElem (componentCount) +│ ║ Count (Distinct) +│ ║ Var (name=component) +│ ╚══ ExtensionElem (_anon_having_807047345d16dcad8437da7aff2ad5708fb2101234567) +│ Count +│ Var (name=component) +└── ExtensionElem (componentCount) +Count (Distinct) +Var (name=component) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a . +?assembly ?assemblyName . +FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { +?component ?assembly . +} +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.181 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.181 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:19:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a eng:Requirement ; eng:satisfies ?component . +OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } +FILTER(?optTest != ?requirement) +MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +161.597 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTest) +│ ║ │ ║ Var (name=requirement) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] +│ ║ │ │ ║ s: Var (name=requirement) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] +│ ║ │ │ s: Var (name=requirement) +│ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ o: Var (name=component) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) +│ ║ │ ║ s: Var (name=requirement) +│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ │ ║ o: Var (name=test) +│ ║ │ ╚══ ExtensionElem (optTest) +│ ║ │ Var (name=test) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) +│ ║ ║ └── ValueConstant (value="Component 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ s: Var (name=component) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?component . +OPTIONAL { +?requirement ?test . +BIND(?test AS ?optTest) +} +FILTER (?optTest != ?requirement) +MINUS { +?component ?name . +FILTER (CONTAINS(STR(?name), "Component 1")) +} +} + +119.307 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +119.307 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:18:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a eng:Component ; eng:name ?name . +FILTER(?name = "Component 1" || ?name = "Component 2") +FILTER EXISTS { ?component eng:dependsOn ?dep . } +OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +170.405 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137.2K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=66.3K, resultSizeEstimate=132.7K) [left] +│ ║ ║ │ s: Var (name=component) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ║ └── Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) +│ ║ ║ ║ │ ValueConstant (value="Component 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) +│ ║ ║ ║ ValueConstant (value="Component 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ ║ s: Var (name=component) +│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ ║ o: Var (name=name) +│ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=component) +└── ExtensionElem (count) +Count (Distinct) +Var (name=component) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +?component ?name . +FILTER ((?name = "Component 1") || (?name = "Component 2")) +OPTIONAL { +?component ?assembly . +} +FILTER EXISTS { +?component ?dep . +} +} + +126.860 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +126.860 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:18:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?measurement a eng:Measurement ; eng:measuredValue ?value . +FILTER(?value IN (0.9, 0.95)) +FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.667 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=value2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) +│ ║ │ s: Var (name=measurement) +│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ │ o: Var (name=value2) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=78) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=78) [left] +│ ║ ║ ├── Filter (costEstimate=249, resultSizeEstimate=78) [left] +│ ║ ║ │ ╠══ ListMemberOperator +│ ║ ║ │ ║ Var (name=value) +│ ║ ║ │ ║ ValueConstant (value="0.9"^^) +│ ║ ║ │ ║ ValueConstant (value="0.95"^^) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ │ s: Var (name=measurement) +│ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ │ o: Var (name=value) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.6K) [right] +│ ║ ║ s: Var (name=measurement) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) +│ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=measurement) +└── ExtensionElem (count) +Count (Distinct) +Var (name=measurement) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +?measurement ?value . +FILTER (?value IN (0.9, 0.95)) +?measurement a . +VALUES ?threshold { 0.85 } +FILTER NOT EXISTS { +?measurement ?value2 . +FILTER (?value2 < ?threshold) +} +} + +1.181 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.181 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:17:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ ?requirement a eng:Requirement ; eng:satisfies ?component . } +UNION +{ ?component a eng:Component . } +OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } +FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +287.731 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_5038ef753cc8a7d4fe2bc91cb293d0240ab01234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (component) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optDep) +│ ║ │ Var (name=component) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] +│ ║ ║ │ ║ s: Var (name=requirement) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] +│ ║ ║ │ s: Var (name=requirement) +│ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ ║ │ o: Var (name=component) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) +│ ║ ║ s: Var (name=component) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) +│ ║ └── ExtensionElem (optDep) +│ ║ Var (name=dep) +│ ║ GroupElem (_anon_having_5038ef753cc8a7d4fe2bc91cb293d0240ab01234) +│ ║ Count +│ ║ Var (name=requirement) +│ ║ GroupElem (reqCount) +│ ║ Count (Distinct) +│ ║ Var (name=requirement) +│ ╚══ ExtensionElem (_anon_having_5038ef753cc8a7d4fe2bc91cb293d0240ab01234) +│ Count +│ Var (name=requirement) +└── ExtensionElem (reqCount) +Count (Distinct) +Var (name=requirement) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ +?requirement a . +?requirement ?component . +} +UNION +{ +?component a . +} +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +202.264 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +202.264 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:17:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a eng:Requirement ; eng:name ?name . +FILTER(?name = "REQ-1000" || ?name = "REQ-1001") +FILTER EXISTS { ?requirement eng:satisfies ?component . } +MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.465 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=520) +│ ║ │ ║ s: Var (name=requirement) +│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ ║ o: Var (name=component) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=531) +│ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] +│ ║ │ │ s: Var (name=requirement) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ └── Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="REQ-1000") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) +│ ║ │ ║ ValueConstant (value="REQ-1001") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ │ s: Var (name=requirement) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) +│ ║ ╠══ StatementPattern (costEstimate=571.3K, resultSizeEstimate=3.1K) [left] +│ ║ ║ s: Var (name=requirement) +│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ o: Var (name=test) +│ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] +│ ║ s: Var (name=test) +│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ o: Var (name=measurement) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?name . +FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) +FILTER EXISTS { +?requirement ?component . +} +MINUS { +?requirement ?test . +?test ?measurement . +} +} + +3.846 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.846 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:16:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?component a eng:Component ; eng:partOf ?assembly . +OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } +FILTER(?optDep != ?component) +?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000008000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.277 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_072421673497f31f645a8b503fcb77f231ce4, anonymous) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (component) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optDep) +│ ║ │ Var (name=component) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=659) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] +│ ║ ║ │ ║ │ s: Var (name=requirement) +│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ ║ │ ║ │ o: Var (name=component) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] +│ ║ ║ │ ║ s: Var (name=requirement) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] +│ ║ ║ │ s: Var (name=component) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] +│ ║ ║ s: Var (name=component) +│ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ ║ o: Var (name=assembly) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) +│ ║ └── ExtensionElem (optDep) +│ ║ Var (name=dep) +│ ║ GroupElem (_anon_having_072421673497f31f645a8b503fcb77f231ce4) +│ ║ Count +│ ║ Var (name=requirement) +│ ║ GroupElem (reqCount) +│ ║ Count (Distinct) +│ ║ Var (name=requirement) +│ ╚══ ExtensionElem (_anon_having_072421673497f31f645a8b503fcb77f231ce4) +│ Count +│ Var (name=requirement) +└── ExtensionElem (reqCount) +Count (Distinct) +Var (name=requirement) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?requirement ?component . +?requirement a . +?component a . +?component ?assembly . +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.939 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +2.939 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:16:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?requirement a eng:Requirement ; eng:verifiedBy ?test . +?test eng:verifiedBy ?measurement . +?measurement eng:measuredValue ?value . +FILTER(?value IN (0.85, 0.9, 0.95)) +FILTER EXISTS { ?requirement eng:satisfies ?component . } +OPTIONAL { ?component eng:name ?optName . } +FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.732 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ s: Var (name=requirement) +│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ o: Var (name=component) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78) [left] +│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78) [left] +│ ║ ║ │ ║ │ ║ ├── ListMemberOperator +│ ║ ║ │ ║ │ ║ │ Var (name=value) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ │ ║ │ ║ s: Var (name=measurement) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=value) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] +│ ║ ║ │ ║ │ s: Var (name=test) +│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ │ ║ │ o: Var (name=measurement) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] +│ ║ ║ │ ║ s: Var (name=requirement) +│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ │ ║ o: Var (name=test) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] +│ ║ ║ │ s: Var (name=requirement) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] +│ ║ s: Var (name=component) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?measurement ?value . +FILTER (?value IN (0.85, 0.9, 0.95)) +?test ?measurement . +?requirement ?test . +?requirement a . +VALUES ?threshold { 0.85 } +OPTIONAL { +?component ?optName . +} +FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +1.938 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.938 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:15:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a eng:Assembly ; eng:name ?name . +FILTER(?name = "Assembly 1" || ?name = "Assembly 2") +OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } +FILTER(?optComponent != ?assembly) +MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.402 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optComponent) +│ ║ │ ║ Var (name=assembly) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=963) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] +│ ║ │ │ ║ s: Var (name=assembly) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) +│ ║ │ │ ╚══ Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] +│ ║ │ │ ├── Or +│ ║ │ │ │ ╠══ Compare (=) +│ ║ │ │ │ ║ Var (name=name) +│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") +│ ║ │ │ │ ╚══ Compare (=) +│ ║ │ │ │ Var (name=name) +│ ║ │ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K) +│ ║ │ │ s: Var (name=assembly) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ │ o: Var (name=name) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ ║ s: Var (name=component) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ │ ║ o: Var (name=assembly) +│ ║ │ ╚══ ExtensionElem (optComponent) +│ ║ │ Var (name=component) +│ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) +│ ║ s: Var (name=requirement) +│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ o: Var (name=component) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=assembly) +└── ExtensionElem (count) +Count (Distinct) +Var (name=assembly) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a . +?assembly ?name . +FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) +OPTIONAL { +?component ?assembly . +BIND(?component AS ?optComponent) +} +FILTER (?optComponent != ?assembly) +MINUS { +?requirement ?component . +} +} + +1.687 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.687 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:15:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node . +OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } +FILTER(?optNeighbor != ?node) +OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +364.235 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optNeighbor) +│ ║ │ ║ Var (name=node) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) +│ ║ │ ╚══ ExtensionElem (optNeighbor) +│ ║ │ Var (name=neighbor) +│ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?neighbor . +BIND(?neighbor AS ?optNeighbor) +} +FILTER (?optNeighbor != ?node) +OPTIONAL { +?node ?w . +} +} + +349.184 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +349.184 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:15:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { 1 2 } +{ ?entity a conn:Node ; conn:connectsTo ?targetNode . } +UNION +{ ?entity a conn:Node . } +OPTIONAL { ?entity conn:weight ?w . } +FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1499.670 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Or +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=w) +│ ║ │ ║ Var (name=target) +│ ║ │ ╚══ Compare (=) +│ ║ │ Var (name=w) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) [left] +│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union [right] +│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.2K) +│ ║ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] +│ ║ ║ ║ │ s: Var (name=entity) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] +│ ║ ║ ║ s: Var (name=entity) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=targetNode) +│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) +│ ║ ║ s: Var (name=entity) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { 1 2 } +{ +?entity a . +?entity ?targetNode . +} +UNION +{ +?entity a . +} +OPTIONAL { +?entity ?w . +} +FILTER ((?w = ?target) || (?w = 3)) +} + +1116.338 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1116.338 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:14:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a conn:Node ; conn:connectsTo ?neighbor . +?node conn:weight ?w . +FILTER(?w IN (1, 2, 3)) +OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +693.099 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_0319032322934d440bf92c5759fafe881ee, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (node) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=162.7K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66.8K) [left] +│ ║ │ ║ ├── StatementPattern (costEstimate=13.4K, resultSizeEstimate=40.3K) [left] +│ ║ │ ║ │ s: Var (name=node) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ ║ └── Filter (costEstimate=259, resultSizeEstimate=67.2K) [right] +│ ║ │ ║ ╠══ ListMemberOperator +│ ║ │ ║ ║ Var (name=w) +│ ║ │ ║ ║ ValueConstant (value="1"^^) +│ ║ │ ║ ║ ValueConstant (value="2"^^) +│ ║ │ ║ ║ ValueConstant (value="3"^^) +│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) +│ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] +│ ║ │ s: Var (name=node) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ o: Var (name=neighbor) +│ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] +│ ║ s: Var (name=neighbor) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) +│ ║ GroupElem (_anon_having_0319032322934d440bf92c5759fafe881ee) +│ ║ Count +│ ║ Var (name=neighbor) +│ ║ GroupElem (neighborCount) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) +│ ╚══ ExtensionElem (_anon_having_0319032322934d440bf92c5759fafe881ee) +│ Count +│ Var (name=neighbor) +└── ExtensionElem (neighborCount) +Count (Distinct) +Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3)) +?node ?neighbor . +OPTIONAL { +?neighbor ?node . +} +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +512.042 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +512.042 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:14:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node . +OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight > 5) +MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +104.365 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optWeight) +│ ║ │ ║ ValueConstant (value="5"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) +│ ║ │ ╚══ ExtensionElem (optWeight) +│ ║ │ Var (name=w) +│ ║ └── Filter (new scope) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) +│ ║ ║ Var (name=node) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=node) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=neighbor) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight > 5) +MINUS { +?node ?neighbor . +FILTER (?neighbor = ?node) +} +} + +100.170 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +100.170 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:13:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:weight ?w . +FILTER(?w = 1 || ?w = 2) +FILTER EXISTS { ?node conn:connectsTo ?neighbor . } +OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +290.457 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ s: Var (name=node) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ o: Var (name=neighbor) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=222.8K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] +│ ║ ║ │ s: Var (name=node) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ └── Filter (costEstimate=473, resultSizeEstimate=223.9K) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=w) +│ ║ ║ ║ │ ValueConstant (value="1"^^) +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=w) +│ ║ ║ ║ ValueConstant (value="2"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ s: Var (name=node) +│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ o: Var (name=w) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] +│ ║ s: Var (name=neighbor) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 1) || (?w = 2)) +OPTIONAL { +?neighbor ?node . +} +FILTER EXISTS { +?node ?neighbor . +} +} + +214.485 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +214.485 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:13:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 4 } +?node a conn:Node ; conn:weight ?w . +FILTER(?w IN (4, 5, 6)) +FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +160.023 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=w2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w2) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=66.8K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=66.8K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] +│ ║ ║ │ s: Var (name=node) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ └── Filter (costEstimate=259, resultSizeEstimate=67.2K) [right] +│ ║ ║ ╠══ ListMemberOperator +│ ║ ║ ║ Var (name=w) +│ ║ ║ ║ ValueConstant (value="4"^^) +│ ║ ║ ║ ValueConstant (value="5"^^) +│ ║ ║ ║ ValueConstant (value="6"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ s: Var (name=node) +│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ o: Var (name=w) +│ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (4, 5, 6)) +VALUES ?threshold { 4 } +FILTER NOT EXISTS { +?node ?w2 . +FILTER (?w2 < ?threshold) +} +} + +117.942 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +117.942 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:12:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ ?node a conn:Node ; conn:connectsTo ?neighbor . } +UNION +{ ?neighbor conn:connectsTo ?node . } +OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1760.831 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_55175e3ee0d158482cb996b1b051ef584401234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (node) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optWeight) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.2K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] +│ ║ ║ │ ║ s: Var (name=node) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] +│ ║ ║ │ s: Var (name=node) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=neighbor) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=neighbor) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) +│ ║ └── ExtensionElem (optWeight) +│ ║ Var (name=w) +│ ║ GroupElem (_anon_having_55175e3ee0d158482cb996b1b051ef584401234) +│ ║ Count +│ ║ Var (name=neighbor) +│ ║ GroupElem (neighborCount) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) +│ ╚══ ExtensionElem (_anon_having_55175e3ee0d158482cb996b1b051ef584401234) +│ Count +│ Var (name=neighbor) +└── ExtensionElem (neighborCount) +Count (Distinct) +Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ +?node a . +?node ?neighbor . +} +UNION +{ +?neighbor ?node . +} +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1277.790 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1277.790 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:12:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:weight ?w . +FILTER(?w = 8 || ?w = 9) +FILTER EXISTS { ?node conn:connectsTo ?neighbor . } +MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +154.734 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=222.8K) +│ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Filter (costEstimate=473, resultSizeEstimate=223.9K) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=w) +│ ║ │ ║ │ ValueConstant (value="8"^^) +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=w) +│ ║ │ ║ ValueConstant (value="9"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) +│ ║ └── Filter (new scope) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) +│ ║ ║ Var (name=node) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=neighbor) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 8) || (?w = 9)) +FILTER EXISTS { +?node ?neighbor . +} +MINUS { +?neighbor ?node . +FILTER (?neighbor = ?node) +} +} + +113.267 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +113.267 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:12:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a conn:Node ; conn:connectsTo ?mid . +?mid conn:connectsTo ?end . +OPTIONAL { ?node conn:weight ?optWeight . } +FILTER(?optWeight IN (7, 8, 9)) +FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1364.709 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optWeight) +│ ║ │ ValueConstant (value="7"^^) +│ ║ │ ValueConstant (value="8"^^) +│ ║ │ ValueConstant (value="9"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Filter [left] +│ ║ ║ ├── Exists +│ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=end) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=node) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=95.7K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.2K) [left] +│ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] +│ ║ ║ ║ │ s: Var (name=node) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] +│ ║ ║ ║ s: Var (name=node) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=mid) +│ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] +│ ║ ║ s: Var (name=mid) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=end) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=optWeight) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?mid . +?mid ?end . +FILTER EXISTS { +?end ?node . +} +OPTIONAL { +?node ?optWeight . +} +FILTER (?optWeight IN (7, 8, 9)) +} + +1034.976 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1034.976 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:11:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +{ ?node conn:connectsTo ?neighbor . } +UNION +{ ?neighbor conn:connectsTo ?node . } +OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } +FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1354.537 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_25e536f6953bd449b5b31e210570d6a75e01, anonymous) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (node) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optWeight) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=node) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=neighbor) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=neighbor) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=neighbor) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) +│ ║ └── ExtensionElem (optWeight) +│ ║ Var (name=w) +│ ║ GroupElem (_anon_having_25e536f6953bd449b5b31e210570d6a75e01) +│ ║ Count +│ ║ Var (name=neighbor) +│ ║ GroupElem (degree) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) +│ ╚══ ExtensionElem (_anon_having_25e536f6953bd449b5b31e210570d6a75e01) +│ Count +│ Var (name=neighbor) +└── ExtensionElem (degree) +Count (Distinct) +Var (name=neighbor) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +?node (|^) ?neighbor . +OPTIONAL { +?neighbor ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1265.025 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1265.025 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:11:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 3 } +?node a conn:Node ; conn:weight ?w . +FILTER(?w IN (1, 2, 3, 4)) +FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . +?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } +MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +328.372 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Not +│ ║ │ ║ Exists +│ ║ │ ║ Filter +│ ║ │ ║ ├── Compare (<) +│ ║ │ ║ │ Var (name=w2) +│ ║ │ ║ │ Var (name=threshold) +│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=522.4K) +│ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] +│ ║ │ ║ ║ s: Var (name=node) +│ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ ║ o: Var (name=n2) +│ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] +│ ║ │ ║ s: Var (name=n2) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w2) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=89.1K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=89.1K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] +│ ║ │ │ ║ s: Var (name=node) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ │ ╚══ Filter (costEstimate=299, resultSizeEstimate=89.5K) [right] +│ ║ │ │ ├── ListMemberOperator +│ ║ │ │ │ Var (name=w) +│ ║ │ │ │ ValueConstant (value="1"^^) +│ ║ │ │ │ ValueConstant (value="2"^^) +│ ║ │ │ │ ValueConstant (value="3"^^) +│ ║ │ │ │ ValueConstant (value="4"^^) +│ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ │ s: Var (name=node) +│ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ │ o: Var (name=w) +│ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ └── Extension +│ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=node) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) +│ ║ ╚══ ExtensionElem (_anon_path_813d48061ea1d084ac48225d002d9eb822f01234567) +│ ║ Var (name=node) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3, 4)) +VALUES ?threshold { 3 } +FILTER NOT EXISTS { +?node ?n2 . +?n2 ?w2 . +FILTER (?w2 < ?threshold) +} +MINUS { +?node ?node . +BIND(?node AS ?_anon_path_813d48061ea1d084ac48225d002d9eb822f01234567) +} +} + +246.032 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +246.032 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:11:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a train:TrainService . +OPTIONAL { +?service train:scheduledTime ?time . +BIND(?time AS ?optTime) +} +FILTER(?optTime > "08:00:00"^^xsd:time) +OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +34.306 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optTime) +│ ║ │ ║ ValueConstant (value="08:00:00"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] +│ ║ │ │ s: Var (name=service) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ │ ║ s: Var (name=service) +│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ │ ║ o: Var (name=time) +│ ║ │ ╚══ ExtensionElem (optTime) +│ ║ │ Var (name=time) +│ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=service) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +OPTIONAL { +?service ?time . +BIND(?time AS ?optTime) +} +FILTER (?optTime > "08:00:00"^^) +OPTIONAL { +?service ?name . +} +} + +32.988 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +32.988 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:10:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "OP 1" "OP 2" } +{ ?entity a train:OperationalPoint ; train:name ?name . } +UNION +{ ?entity a train:Line ; train:name ?name . } +FILTER(?name = ?target || ?name = "OP 3") +OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.593 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="OP 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="OP 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K) +│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] +│ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +UNION +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +OPTIONAL { +?entity ?op . +} +} + +39.073 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +39.073 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:10:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a train:Line ; train:name ?lineName . +FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +24.182 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_487248eba328d0ab42ddae146929fc0842880123, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (line) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] +│ ║ │ ╠══ Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] +│ ║ │ ║ ├── ListMemberOperator +│ ║ │ ║ │ Var (name=lineName) +│ ║ │ ║ │ ValueConstant (value="Line 0") +│ ║ │ ║ │ ValueConstant (value="Line 1") +│ ║ │ ║ │ ValueConstant (value="Line 2") +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K) +│ ║ │ ║ s: Var (name=line) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ ║ o: Var (name=lineName) +│ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] +│ ║ │ s: Var (name=line) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] +│ ║ s: Var (name=section) +│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ o: Var (name=line) +│ ║ GroupElem (_anon_having_487248eba328d0ab42ddae146929fc0842880123) +│ ║ Count +│ ║ Var (name=section) +│ ║ GroupElem (sectionCount) +│ ║ Count (Distinct) +│ ║ Var (name=section) +│ ╚══ ExtensionElem (_anon_having_487248eba328d0ab42ddae146929fc0842880123) +│ Count +│ Var (name=section) +└── ExtensionElem (sectionCount) +Count (Distinct) +Var (name=section) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line ?lineName . +FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) +?line a . +OPTIONAL { +?section ?line . +} +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +17.825 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +17.825 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:09:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a train:SectionOfLine ; train:partOfLine ?line . +OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } +FILTER(?optTrack != ?section) +MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +196.506 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrack) +│ ║ │ ║ Var (name=section) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] +│ ║ │ │ ║ s: Var (name=section) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] +│ ║ │ │ s: Var (name=section) +│ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ │ o: Var (name=line) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ ║ s: Var (name=section) +│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ │ ║ o: Var (name=track) +│ ║ │ ╚══ ExtensionElem (optTrack) +│ ║ │ Var (name=track) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) +│ ║ ║ └── ValueConstant (value="Line 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=section) +└── ExtensionElem (count) +Count (Distinct) +Var (name=section) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a . +?section ?line . +OPTIONAL { +?section ?track . +BIND(?track AS ?optTrack) +} +FILTER (?optTrack != ?section) +MINUS { +?line ?name . +FILTER (CONTAINS(STR(?name), "Line 0")) +} +} + +143.416 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +143.416 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:09:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a train:Line ; train:name ?name . +FILTER(?name = "Line 1" || ?name = "Line 2") +FILTER EXISTS { ?section train:partOfLine ?line . } +OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +176.386 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ s: Var (name=section) +│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ o: Var (name=line) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] +│ ║ ║ │ s: Var (name=line) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ║ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) +│ ║ ║ ║ │ ValueConstant (value="Line 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) +│ ║ ║ ║ ValueConstant (value="Line 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ ║ s: Var (name=line) +│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ ║ o: Var (name=name) +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=section) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?name . +FILTER ((?name = "Line 1") || (?name = "Line 2")) +OPTIONAL { +?section ?op . +} +FILTER EXISTS { +?section ?line . +} +} + +130.920 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +130.920 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:09:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +VALUES ?threshold { "10:00:00"^^xsd:time } +?service a train:TrainService ; train:scheduledTime ?time . +FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) +FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +18.928 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=late) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ │ s: Var (name=service) +│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ │ o: Var (name=late) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=1.3K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] +│ ║ ║ ├── Filter (costEstimate=3.9K, resultSizeEstimate=1.3K) [left] +│ ║ ║ │ ╠══ ListMemberOperator +│ ║ ║ │ ║ Var (name=time) +│ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) +│ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ ║ │ s: Var (name=service) +│ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ ║ │ o: Var (name=time) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.6K) [right] +│ ║ ║ s: Var (name=service) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service ?time . +FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) +?service a . +VALUES ?threshold { "10:00:00"^^ } +FILTER NOT EXISTS { +?service ?late . +FILTER (?late > ?threshold) +} +} + +13.612 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +13.612 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:08:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ ?service a train:TrainService ; train:runsOnSection ?section . +?section train:partOfLine ?line . } +UNION +{ ?line a train:Line . } +OPTIONAL { ?line train:name ?optName . } +FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +130.508 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_6874ebacedaabe8433791f3358a5a11bce3012345, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (line) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=26.9K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.5K) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] +│ ║ ║ │ ║ │ s: Var (name=service) +│ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ │ o: Var (name=section) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] +│ ║ ║ │ ║ s: Var (name=section) +│ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ ║ o: Var (name=line) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [right] +│ ║ ║ │ s: Var (name=service) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) +│ ║ ║ s: Var (name=line) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) +│ ║ GroupElem (_anon_having_6874ebacedaabe8433791f3358a5a11bce3012345) +│ ║ Count +│ ║ Var (name=service) +│ ║ GroupElem (serviceCount) +│ ║ Count (Distinct) +│ ║ Var (name=service) +│ ╚══ ExtensionElem (_anon_having_6874ebacedaabe8433791f3358a5a11bce3012345) +│ Count +│ Var (name=service) +└── ExtensionElem (serviceCount) +Count (Distinct) +Var (name=service) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ +?service ?section . +?section ?line . +?service a . +} +UNION +{ +?line a . +} +OPTIONAL { +?line ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +95.506 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +95.506 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:08:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a train:OperationalPoint ; train:name ?name . +FILTER(?name = "OP 1" || ?name = "OP 2") +FILTER EXISTS { ?service train:passesThrough ?op . } +MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +62.619 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ ║ s: Var (name=service) +│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ ║ o: Var (name=op) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=30.7K) +│ ║ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] +│ ║ │ │ s: Var (name=op) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="OP 1") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) +│ ║ │ ║ ValueConstant (value="OP 2") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ │ s: Var (name=op) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) +│ ║ ║ └── ValueConstant (value="op 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=op) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=op) +└── ExtensionElem (count) +Count (Distinct) +Var (name=op) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a . +?op ?name . +FILTER ((?name = "OP 1") || (?name = "OP 2")) +FILTER EXISTS { +?service ?op . +} +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) +} +} + +46.136 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +46.136 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:08:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . +?s1 train:partOfLine ?line . +?s2 train:partOfLine ?line . +OPTIONAL { ?line train:name ?optName . } +FILTER(?optName IN ("Line 0", "Line 1")) +FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . +?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +176.021 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="Line 0") +│ ║ │ ║ ValueConstant (value="Line 1") +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=595.5K) +│ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] +│ ║ │ ║ s: Var (name=s1) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) +│ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] +│ ║ │ s: Var (name=s2) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5565.7M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=82.6K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.5K) [left] +│ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] +│ ║ ║ │ ║ │ ║ s: Var (name=service) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=s1) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] +│ ║ ║ │ ║ │ s: Var (name=s1) +│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ ║ │ o: Var (name=line) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] +│ ║ ║ │ ║ s: Var (name=service) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] +│ ║ ║ │ s: Var (name=service) +│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ o: Var (name=s2) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] +│ ║ ║ s: Var (name=s2) +│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ o: Var (name=line) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service ?s1 . +?s1 ?line . +?service a . +?service ?s2 . +?s2 ?line . +OPTIONAL { +?line ?optName . +} +FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +127.294 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +127.294 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:07:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section a train:SectionOfLine ; train:hasTrackSection ?track . +OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } +FILTER(?optOp != ?section) +FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +323.707 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_072ca47ffd5d20b4aec968bc4bcc0f37412, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (section) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optOp) +│ ║ │ Var (name=section) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] +│ ║ ║ │ ╠══ Exists +│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) +│ ║ ║ │ ║ s: Var (name=track) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ ║ │ s: Var (name=section) +│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ ║ │ o: Var (name=track) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=67.4K) [right] +│ ║ ║ s: Var (name=section) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=134.8K) +│ ║ │ s: Var (name=section) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) +│ ║ └── ExtensionElem (optOp) +│ ║ Var (name=op) +│ ║ GroupElem (_anon_having_072ca47ffd5d20b4aec968bc4bcc0f37412) +│ ║ Count +│ ║ Var (name=track) +│ ║ GroupElem (trackCount) +│ ║ Count (Distinct) +│ ║ Var (name=track) +│ ╚══ ExtensionElem (_anon_having_072ca47ffd5d20b4aec968bc4bcc0f37412) +│ Count +│ Var (name=track) +└── ExtensionElem (trackCount) +Count (Distinct) +Var (name=track) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section ?track . +FILTER EXISTS { +?track a . +} +?section a . +OPTIONAL { +?section ?op . +BIND(?op AS ?optOp) +} +FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +230.341 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +230.341 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:07:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ ?op a train:OperationalPoint . } +UNION +{ ?op a train:OperationalPoint ; train:name ?name . } +OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } +FILTER(?optSection != ?op) +MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c00111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +250.980 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optSection) +│ ║ │ ║ Var (name=op) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) +│ ║ │ │ ║ s: Var (name=op) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) +│ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] +│ ║ │ │ │ s: Var (name=op) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] +│ ║ │ │ s: Var (name=op) +│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ │ o: Var (name=name) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) +│ ║ │ ║ s: Var (name=section) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) +│ ║ │ ╚══ ExtensionElem (optSection) +│ ║ │ Var (name=section) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) +│ ║ ║ └── ValueConstant (value="op 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=op) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=op) +└── ExtensionElem (count) +Count (Distinct) +Var (name=op) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ +?op a . +} +UNION +{ +?op a . +?op ?name . +} +OPTIONAL { +?section ?op . +BIND(?section AS ?optSection) +} +FILTER (?optSection != ?op) +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) +} +} + +180.745 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +180.745 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:07:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a grid:Substation . +OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } +FILTER(?optCap > 600) +OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optCap) +│ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] +│ ║ │ │ s: Var (name=substation) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.3K) +│ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] +│ ║ │ ║ │ s: Var (name=generator) +│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ │ o: Var (name=substation) +│ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] +│ ║ │ ║ s: Var (name=generator) +│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ o: Var (name=cap) +│ ║ │ ╚══ ExtensionElem (optCap) +│ ║ │ Var (name=cap) +│ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] +│ ║ s: Var (name=substation) +│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=substation) +└── ExtensionElem (count) +Count (Distinct) +Var (name=substation) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a . +OPTIONAL { +?generator ?substation . +?generator ?cap . +BIND(?cap AS ?optCap) +} +FILTER (?optCap > 600) +OPTIONAL { +?substation ?name . +} +} + +37.214 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +37.214 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:06:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { "Substation 1" "Substation 2" } +{ ?entity a grid:Substation ; grid:name ?name . } +UNION +{ ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } +FILTER(?name = ?target || ?name = "Substation 3") +OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +37.093 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="Substation 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Substation 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] +│ ║ │ │ ║ s: Var (name=entity) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ │ o: Var (name=substation) +│ ║ │ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] +│ ║ │ s: Var (name=substation) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ o: Var (name=substation2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Substation 1" "Substation 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +UNION +{ +VALUES ?target { "Substation 1" "Substation 2" } +{ +{ +?entity a . +?entity ?substation . +?substation ?name . +} +} +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +OPTIONAL { +?entity ?substation2 . +} +} + +26.555 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +26.555 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:06:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?transformer a grid:Transformer ; grid:feeds ?substation . +?substation grid:name ?name . +FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) +OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.140 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_5193172dfca87cd714bddaa63e925b832251201234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (transformer) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8K) [left] +│ ║ │ ║ ├── Filter (costEstimate=237, resultSizeEstimate=468) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ ValueConstant (value="Substation 0") +│ ║ │ ║ │ ║ ValueConstant (value="Substation 1") +│ ║ │ ║ │ ║ ValueConstant (value="Substation 2") +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ ║ │ s: Var (name=substation) +│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ ║ │ o: Var (name=name) +│ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] +│ ║ │ ║ s: Var (name=transformer) +│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ o: Var (name=substation) +│ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] +│ ║ │ s: Var (name=transformer) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] +│ ║ s: Var (name=transformer) +│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ o: Var (name=meter) +│ ║ GroupElem (_anon_having_5193172dfca87cd714bddaa63e925b832251201234) +│ ║ Count +│ ║ Var (name=meter) +│ ║ GroupElem (meterCount) +│ ║ Count (Distinct) +│ ║ Var (name=meter) +│ ╚══ ExtensionElem (_anon_having_5193172dfca87cd714bddaa63e925b832251201234) +│ Count +│ Var (name=meter) +└── ExtensionElem (meterCount) +Count (Distinct) +Var (name=meter) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?substation ?name . +FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) +?transformer ?substation . +?transformer a . +OPTIONAL { +?transformer ?meter . +} +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +4.339 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.339 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:06:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a grid:Meter ; grid:measures ?load . +OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } +FILTER(?optValue > 100) +MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +426.701 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) +│ ║ │ ║ ValueConstant (value="100"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=275.5K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] +│ ║ │ │ ║ s: Var (name=meter) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] +│ ║ │ │ s: Var (name=meter) +│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ │ │ o: Var (name=load) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ ║ s: Var (name=load) +│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ │ ║ o: Var (name=value) +│ ║ │ ╚══ ExtensionElem (optValue) +│ ║ │ Var (name=value) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=278.8K) +│ ║ ╠══ StatementPattern (costEstimate=6278.4M, resultSizeEstimate=112.1K) [left] +│ ║ ║ s: Var (name=meter) +│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ o: Var (name=load2) +│ ║ ╚══ Filter (new scope) [right] +│ ║ ├── Compare (>) +│ ║ │ Var (name=value2) +│ ║ │ ValueConstant (value="180"^^) +│ ║ └── StatementPattern (resultSizeEstimate=112.1K) +│ ║ s: Var (name=load2) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ o: Var (name=value2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=meter) +└── ExtensionElem (count) +Count (Distinct) +Var (name=meter) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a . +?meter ?load . +OPTIONAL { +?load ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 100) +MINUS { +?meter ?load2 . +{ +{ +?load2 ?value2 . +FILTER (?value2 > 180) +} +} +} +} + +315.426 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +315.426 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:05:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a grid:Line ; grid:connectsTo ?substation . +?substation grid:name ?name . +FILTER(?name = "Substation 0" || ?name = "Substation 1") +FILTER EXISTS { ?line grid:connectsTo ?other . } +OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.995 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=37.5K) +│ ║ │ s: Var (name=line) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ │ o: Var (name=other) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=37.2K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] +│ ║ ║ │ ╠══ Filter (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] +│ ║ ║ │ ║ ├── Or +│ ║ ║ │ ║ │ ╠══ Compare (=) +│ ║ ║ │ ║ │ ║ Var (name=name) +│ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") +│ ║ ║ │ ║ │ ╚══ Compare (=) +│ ║ ║ │ ║ │ Var (name=name) +│ ║ ║ │ ║ │ ValueConstant (value="Substation 1") +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ │ ║ s: Var (name=substation) +│ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ ║ │ ║ o: Var (name=name) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] +│ ║ ║ │ s: Var (name=line) +│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=substation) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] +│ ║ ║ s: Var (name=line) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ o: Var (name=other2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +?line ?substation . +?line a . +OPTIONAL { +?line ?other2 . +} +FILTER EXISTS { +?line ?other . +} +} + +4.184 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.184 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:05:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +VALUES ?threshold { 700 } +?generator a grid:Generator ; grid:capacity ?capacity . +FILTER(?capacity IN (700, 800, 900)) +FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000020000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.844 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=cap2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=generator) +│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ o: Var (name=cap2) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=477) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=477) [left] +│ ║ ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=472) [left] +│ ║ ║ │ ╠══ ListMemberOperator +│ ║ ║ │ ║ Var (name=capacity) +│ ║ ║ │ ║ ValueConstant (value="700"^^) +│ ║ ║ │ ║ ValueConstant (value="800"^^) +│ ║ ║ │ ║ ValueConstant (value="900"^^) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ │ s: Var (name=generator) +│ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ ║ │ o: Var (name=capacity) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=9.4K) [right] +│ ║ ║ s: Var (name=generator) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=generator) +└── ExtensionElem (count) +Count (Distinct) +Var (name=generator) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +?generator ?capacity . +FILTER (?capacity IN (700, 800, 900)) +?generator a . +VALUES ?threshold { 700 } +FILTER NOT EXISTS { +?generator ?cap2 . +FILTER (?cap2 < ?threshold) +} +} + +4.866 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.866 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:05:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ ?asset a grid:Transformer ; grid:feeds ?substation . } +UNION +{ ?asset a grid:Generator ; grid:feeds ?substation . } +OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } +FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +114.210 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_0099c355792c1fe42748f04a66d0e89286c, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (substation) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optSub) +│ ║ │ Var (name=asset) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] +│ ║ ║ │ ║ s: Var (name=asset) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] +│ ║ ║ │ s: Var (name=asset) +│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ ║ │ o: Var (name=substation) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) +│ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] +│ ║ ║ ║ s: Var (name=asset) +│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] +│ ║ ║ s: Var (name=asset) +│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ ║ o: Var (name=substation) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) +│ ║ │ s: Var (name=asset) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ o: Var (name=substation) +│ ║ └── ExtensionElem (optSub) +│ ║ Var (name=substation) +│ ║ GroupElem (_anon_having_0099c355792c1fe42748f04a66d0e89286c) +│ ║ Count +│ ║ Var (name=asset) +│ ║ GroupElem (assetCount) +│ ║ Count (Distinct) +│ ║ Var (name=asset) +│ ╚══ ExtensionElem (_anon_having_0099c355792c1fe42748f04a66d0e89286c) +│ Count +│ Var (name=asset) +└── ExtensionElem (assetCount) +Count (Distinct) +Var (name=asset) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ +?asset a . +?asset ?substation . +} +UNION +{ +?asset a . +?asset ?substation . +} +OPTIONAL { +?asset ?substation . +BIND(?substation AS ?optSub) +} +FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +82.972 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +82.972 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?transformer a grid:Transformer ; grid:feeds ?substation . +?substation grid:name ?name . +FILTER(?name = "Substation 0" || ?name = "Substation 1") +FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +59.612 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ ║ s: Var (name=transformer) +│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ ║ o: Var (name=meter) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [left] +│ ║ │ │ ║ s: Var (name=transformer) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] +│ ║ │ │ s: Var (name=transformer) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ │ o: Var (name=substation) +│ ║ │ └── Filter (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="Substation 0") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) +│ ║ │ ║ ValueConstant (value="Substation 1") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=substation) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── Filter (new scope) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=load) +│ ║ ║ Var (name=substation) +│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) +│ ║ s: Var (name=meter) +│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ o: Var (name=load) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=transformer) +└── ExtensionElem (count) +Count (Distinct) +Var (name=transformer) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?transformer a . +?transformer ?substation . +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +FILTER EXISTS { +?transformer ?meter . +} +MINUS { +?meter ?load . +FILTER (?load = ?substation) +} +} + +43.468 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +43.468 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:04:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation a grid:Substation ; grid:name ?name . +OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } +FILTER(?optTransformer != ?substation) +FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +17.188 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_5094173d897876764df4940102dc3d424ef501234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (substation) +│ ║ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTransformer) +│ ║ │ ║ Var (name=substation) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ s: Var (name=transformer) +│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ o: Var (name=meter) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] +│ ║ ║ │ s: Var (name=substation) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] +│ ║ ║ s: Var (name=substation) +│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ ║ o: Var (name=name) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) +│ ║ │ s: Var (name=substation) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ o: Var (name=transformer) +│ ║ └── ExtensionElem (optTransformer) +│ ║ Var (name=transformer) +│ ║ GroupElem (_anon_having_5094173d897876764df4940102dc3d424ef501234) +│ ║ Count +│ ║ Var (name=transformer) +│ ║ GroupElem (transformerCount) +│ ║ Count (Distinct) +│ ║ Var (name=transformer) +│ ╚══ ExtensionElem (_anon_having_5094173d897876764df4940102dc3d424ef501234) +│ Count +│ Var (name=transformer) +└── ExtensionElem (transformerCount) +Count (Distinct) +Var (name=transformer) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation a . +?substation ?name . +OPTIONAL { +?substation ?transformer . +BIND(?transformer AS ?optTransformer) +} +FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +12.589 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +12.589 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:04:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a grid:Line ; grid:capacity ?cap . +FILTER(?cap IN (500, 600, 700)) +OPTIONAL { ?line grid:connectsTo ?substation . } +MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.100 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── LeftJoin +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] +│ ║ │ ║ ├── Filter (costEstimate=239, resultSizeEstimate=472) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ Var (name=cap) +│ ║ │ ║ │ ║ ValueConstant (value="500"^^) +│ ║ │ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ║ │ ║ ValueConstant (value="700"^^) +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ ║ │ s: Var (name=line) +│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ │ o: Var (name=cap) +│ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] +│ ║ │ ║ s: Var (name=line) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] +│ ║ │ s: Var (name=line) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ │ o: Var (name=substation) +│ ║ └── Filter (new scope) +│ ║ ╠══ Compare (<) +│ ║ ║ Var (name=cap2) +│ ║ ║ ValueConstant (value="500"^^) +│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ o: Var (name=cap2) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line ?cap . +FILTER (?cap IN (500, 600, 700)) +?line a . +OPTIONAL { +?line ?substation . +} +MINUS { +?line ?cap2 . +FILTER (?cap2 < 500) +} +} + +4.412 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +4.412 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ ?meter a grid:Meter ; grid:measures ?load . } +UNION +{ ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } +OPTIONAL { ?load grid:loadValue ?optValue . } +FILTER(?optValue > 200) +FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +507.808 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) +│ ║ │ ║ ValueConstant (value="200"^^) +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Filter +│ ║ │ ├── Compare (<) +│ ║ │ │ Var (name=low) +│ ║ │ │ ValueConstant (value="50"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ s: Var (name=load) +│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ │ o: Var (name=low) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=275.5K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] +│ ║ ║ │ ║ s: Var (name=meter) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] +│ ║ ║ │ s: Var (name=meter) +│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ │ o: Var (name=load) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=204.4K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=275.5K) [left] +│ ║ ║ ║ ├── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [left] +│ ║ ║ ║ │ s: Var (name=meter) +│ ║ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ ║ │ o: Var (name=load) +│ ║ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] +│ ║ ║ ║ s: Var (name=meter) +│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ ║ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] +│ ║ ║ s: Var (name=load) +│ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ ║ o: Var (name=value) +│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] +│ ║ s: Var (name=load) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ o: Var (name=optValue) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=meter) +└── ExtensionElem (count) +Count (Distinct) +Var (name=meter) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ +?meter a . +?meter ?load . +} +UNION +{ +?meter ?load . +?meter a . +?load ?value . +} +OPTIONAL { +?load ?optValue . +} +FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +376.856 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +376.856 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:03:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { + } +?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:pValue ?p ; pharma:effectSize ?effect . +OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } +FILTER(?optMarker != ) +FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.152 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optMarker) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) +│ ║ └── LeftJoin +│ ║ ╠══ Filter [left] +│ ║ ║ ├── Or +│ ║ ║ │ ╠══ Compare (<) +│ ║ ║ │ ║ Var (name=p) +│ ║ ║ │ ║ ValueConstant (value="0.05"^^) +│ ║ ║ │ ╚══ Compare (>) +│ ║ ║ │ Var (name=effect) +│ ║ ║ │ ValueConstant (value="0.7"^^) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] +│ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] +│ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] +│ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] +│ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) +│ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) +│ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) +│ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] +│ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) +│ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ ║ │ s: Var (name=trial) +│ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ ║ │ ║ │ o: Var (name=arm) +│ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ ║ s: Var (name=arm) +│ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=result) +│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ s: Var (name=arm) +│ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ ║ │ o: Var (name=drug) +│ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ s: Var (name=result) +│ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ ║ ║ o: Var (name=p) +│ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ s: Var (name=result) +│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ ║ o: Var (name=effect) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=result) +│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ │ o: Var (name=marker) +│ ║ └── ExtensionElem (optMarker) +│ ║ Var (name=marker) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { } +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?p . +?result ?effect . +FILTER ((?p < 0.05) || (?effect > 0.7)) +OPTIONAL { +?result ?marker . +BIND(?marker AS ?optMarker) +} +FILTER (?optMarker != ) +} + +3.637 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.637 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:03:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . +OPTIONAL { +?drug pharma:hasSideEffect ?sideEffect . +?sideEffect pharma:severity ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER(?optSeverity IN ("Mild", "Moderate")) +FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.256 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_2555408957f89a0db43ca972edddb5f0d151901, anonymous) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (combo) +│ ║ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optSeverity) +│ ║ │ ValueConstant (value="Mild") +│ ║ │ ValueConstant (value="Moderate") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=477) [left] +│ ║ ║ │ ╠══ StatementPattern (costEstimate=161, resultSizeEstimate=477) [left] +│ ║ ║ │ ║ s: Var (name=combo) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ ║ │ ╚══ Filter (costEstimate=22, resultSizeEstimate=477) [right] +│ ║ ║ │ ├── Compare (>) +│ ║ ║ │ │ Var (name=score) +│ ║ ║ │ │ ValueConstant (value="0.7"^^) +│ ║ ║ │ └── StatementPattern (resultSizeEstimate=477) +│ ║ ║ │ s: Var (name=combo) +│ ║ ║ │ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) +│ ║ ║ │ o: Var (name=score) +│ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] +│ ║ ║ s: Var (name=combo) +│ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ o: Var (name=drug) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) +│ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] +│ ║ │ ║ s: Var (name=drug) +│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ ║ o: Var (name=sideEffect) +│ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] +│ ║ │ s: Var (name=sideEffect) +│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) +│ ║ │ o: Var (name=sev) +│ ║ └── ExtensionElem (optSeverity) +│ ║ Var (name=sev) +│ ║ GroupElem (_anon_having_2555408957f89a0db43ca972edddb5f0d151901) +│ ║ Count (Distinct) +│ ║ Var (name=drug) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) +│ ╚══ ExtensionElem (_anon_having_2555408957f89a0db43ca972edddb5f0d151901) +│ Count (Distinct) +│ Var (name=drug) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo a . +?combo ?score . +FILTER (?score > 0.7) +?combo ?drug . +OPTIONAL { +?drug ?sideEffect . +?sideEffect ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.589 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.589 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target a pharma:Target ; pharma:inPathway ?pathway . +?drug a pharma:Drug ; pharma:targets ?target . +OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } +FILTER(?optDisease IN (, +)) +FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +36.156 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_06738ea26dbaaf95473c9e2149cde25990fa, anonymous) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (target) +│ ║ Filter +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optDisease) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) +│ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] +│ ║ │ ║ s: Var (name=arm) +│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ │ ║ o: Var (name=drug) +│ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ │ s: Var (name=trial) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ │ o: Var (name=arm) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=224, resultSizeEstimate=666) [left] +│ ║ ║ │ ║ │ s: Var (name=target) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=26, resultSizeEstimate=666) [right] +│ ║ ║ │ ║ s: Var (name=target) +│ ║ ║ │ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) +│ ║ ║ │ ║ o: Var (name=pathway) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ s: Var (name=drug) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ o: Var (name=target) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] +│ ║ ║ s: Var (name=drug) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) +│ ║ │ s: Var (name=drug) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +│ ║ │ o: Var (name=disease) +│ ║ └── ExtensionElem (optDisease) +│ ║ Var (name=disease) +│ ║ GroupElem (_anon_having_06738ea26dbaaf95473c9e2149cde25990fa) +│ ║ Count (Distinct) +│ ║ Var (name=drug) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) +│ ╚══ ExtensionElem (_anon_having_06738ea26dbaaf95473c9e2149cde25990fa) +│ Count (Distinct) +│ Var (name=drug) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target a . +?target ?pathway . +?drug ?target . +?drug a . +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +26.077 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +26.077 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { +?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:responseRate ?rate . +FILTER(?rate > 0.6) +FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } +OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } +FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3359.616 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter +├── Compare (!=) +│ Var (name=optTarget) +│ ValueConstant (value=http://example.com/theme/pharma/target/0) +└── LeftJoin (LeftJoinIterator) +╠══ Join (JoinIterator) (resultSizeEstimate=6.318151175523E13M) [left] +║ ├── Join (JoinIterator) (resultSizeEstimate=2.19000040746E10M) [left] +║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=7590989.3M) [left] +║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=7948.7M) [left] +║ │ ║ │ ╠══ Filter [left] +║ │ ║ │ ║ ├── Not +║ │ ║ │ ║ │ Exists +║ │ ║ │ ║ │ StatementPattern +║ │ ║ │ ║ │ s: Var (name=drug) +║ │ ║ │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ │ ║ │ ║ │ o: Var (name=disease) +║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.8M) +║ │ ║ │ ║ ╠══ StatementPattern (costEstimate=31, resultSizeEstimate=955) [left] +║ │ ║ │ ║ ║ s: Var (name=trial) +║ │ ║ │ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) +║ │ ║ │ ║ ║ o: Var (name=disease) +║ │ ║ │ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +║ │ ║ │ ║ s: Var (name=arm) +║ │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +║ │ ║ │ ║ o: Var (name=drug) +║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] +║ │ ║ │ s: Var (name=trial) +║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +║ │ ║ │ o: Var (name=arm) +║ │ ║ └── StatementPattern (costEstimate=320, resultSizeEstimate=955) [right] +║ │ ║ s: Var (name=trial) +║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] +║ │ s: Var (name=arm) +║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +║ │ o: Var (name=result) +║ └── Filter (costEstimate=54, resultSizeEstimate=2.9K) [right] +║ ╠══ Compare (>) +║ ║ Var (name=rate) +║ ║ ValueConstant (value="0.6"^^) +║ ╚══ StatementPattern (resultSizeEstimate=2.9K) +║ s: Var (name=result) +║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) +║ o: Var (name=rate) +╚══ Extension [right] +├── StatementPattern (resultSizeEstimate=20.0K) +│ s: Var (name=drug) +│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ o: Var (name=target) +└── ExtensionElem (optTarget) +Var (name=target) + +SELECT ?drug ?disease WHERE { +?trial ?disease . +?arm ?drug . +FILTER NOT EXISTS { +?drug ?disease . +} +?trial ?arm . +?trial a . +?arm ?result . +?result ?rate . +FILTER (?rate > 0.6) +OPTIONAL { +?drug ?target . +BIND(?target AS ?optTarget) +} +FILTER (?optTarget != ) +} + +2510.998 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +2510.998 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:02:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } +UNION +{ ?combo a pharma:Combination ; pharma:combinationOf ?drug . +?drug pharma:hasMolecule ?mol . } +?mol pharma:inClass ?class . +OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } +FILTER(?optClassName != "") +MINUS { ?drug pharma:contraindicatedFor ?disease . +FILTER(?disease IN (, +)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +39.515 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optClassName) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) +│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] +│ ║ │ │ ║ │ ║ s: Var (name=drug) +│ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] +│ ║ │ │ ║ │ s: Var (name=drug) +│ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ │ ║ │ o: Var (name=mol) +│ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] +│ ║ │ │ ║ s: Var (name=mol) +│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) +│ ║ │ │ ║ o: Var (name=class) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) +│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] +│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] +│ ║ │ │ │ ║ ├── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [left] +│ ║ │ │ │ ║ │ s: Var (name=combo) +│ ║ │ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ │ │ │ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] +│ ║ │ │ │ ║ s: Var (name=combo) +│ ║ │ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ │ │ │ ║ o: Var (name=drug) +│ ║ │ │ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] +│ ║ │ │ │ s: Var (name=drug) +│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ │ │ o: Var (name=mol) +│ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] +│ ║ │ │ s: Var (name=mol) +│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) +│ ║ │ │ o: Var (name=class) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) +│ ║ │ ║ s: Var (name=class) +│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) +│ ║ │ ║ o: Var (name=optName) +│ ║ │ ╚══ ExtensionElem (optClassName) +│ ║ │ Var (name=optName) +│ ║ └── Filter (new scope) +│ ║ ╠══ ListMemberOperator +│ ║ ║ Var (name=disease) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) +│ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) +│ ║ s: Var (name=drug) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ o: Var (name=disease) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +{ +{ +?drug a . +?drug ?mol . +} +} +?mol ?class . +} +UNION +{ +{ +{ +?combo a . +?combo ?drug . +?drug ?mol . +} +} +?mol ?class . +} +OPTIONAL { +?class ?optName . +BIND(?optName AS ?optClassName) +} +FILTER (?optClassName != "") +MINUS { +?drug ?disease . +FILTER (?disease IN (, )) +} +} + +28.543 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +28.543 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { + + } +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +?arm pharma:hasResult ?result . +?result pharma:biomarker ?marker ; pharma:pValue ?p . +OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } +FILTER(?optEffect > 0.3) +FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff00111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.676 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=optEffect) +│ ║ │ ValueConstant (value="0.3"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] +│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] +│ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=result) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=marker) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) +│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ │ ║ │ o: Var (name=result) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] +│ ║ ║ │ ║ s: Var (name=trial) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ o: Var (name=arm) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] +│ ║ ║ │ s: Var (name=trial) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ └── Filter (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (<) +│ ║ ║ ║ │ Var (name=p) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=p) +│ ║ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ ║ s: Var (name=result) +│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ ║ o: Var (name=p) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=result) +│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ │ o: Var (name=effect) +│ ║ └── ExtensionElem (optEffect) +│ ║ Var (name=effect) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=trial) +└── ExtensionElem (count) +Count (Distinct) +Var (name=trial) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { } +?result ?marker . +?arm ?result . +?trial ?arm . +?trial a . +?result ?p . +FILTER ((?p < 0.05) || (?p = 0.05)) +OPTIONAL { +?result ?effect . +BIND(?effect AS ?optEffect) +} +FILTER (?optEffect > 0.3) +} + +1.867 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +1.867 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . +FILTER(?drugA != ?drugB) +?drugA pharma:targets ?target . +?drugB pharma:targets ?target . +OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } +FILTER(?optSideEffect != ) +FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.292 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_46852f59136cc336a4de1a05d5d446006074f0123, anonymous) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (combo) +│ ║ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optSideEffect) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drugB) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=sideEffect2) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.602304E8M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=18011.5M) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=900.6K) [left] +│ ║ ║ │ ║ ├── Filter [left] +│ ║ ║ │ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ ║ Var (name=drugA) +│ ║ ║ │ ║ │ ║ Var (name=drugB) +│ ║ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.9K) +│ ║ ║ │ ║ │ ├── StatementPattern (costEstimate=15, resultSizeEstimate=949) [left] +│ ║ ║ │ ║ │ │ s: Var (name=combo) +│ ║ ║ │ ║ │ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ ║ │ │ o: Var (name=drugA) +│ ║ ║ │ ║ │ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] +│ ║ ║ │ ║ │ s: Var (name=combo) +│ ║ ║ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ ║ │ o: Var (name=drugB) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=161, resultSizeEstimate=477) [right] +│ ║ ║ │ ║ s: Var (name=combo) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ s: Var (name=drugA) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ o: Var (name=target) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] +│ ║ ║ s: Var (name=drugB) +│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ o: Var (name=target) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drugA) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=sideEffect) +│ ║ └── ExtensionElem (optSideEffect) +│ ║ Var (name=sideEffect) +│ ║ GroupElem (_anon_having_46852f59136cc336a4de1a05d5d446006074f0123) +│ ║ Count (Distinct) +│ ║ Var (name=target) +│ ║ GroupElem (sharedTargets) +│ ║ Count (Distinct) +│ ║ Var (name=target) +│ ╚══ ExtensionElem (_anon_having_46852f59136cc336a4de1a05d5d446006074f0123) +│ Count (Distinct) +│ Var (name=target) +└── ExtensionElem (sharedTargets) +Count (Distinct) +Var (name=target) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo ?drugA . +?combo ?drugB . +FILTER (?drugA != ?drugB) +?combo a . +?drugA ?target . +?drugB ?target . +OPTIONAL { +?drugA ?sideEffect . +BIND(?sideEffect AS ?optSideEffect) +} +FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +3.739 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +3.739 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +{ ?arm pharma:armComparator ?comp . } +UNION +{ ?arm pharma:armDrug ?comp . } +OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } +FILTER(?optCompName != "") +FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . +FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +27.296 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optCompName) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=144) +│ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] +│ ║ │ │ s: Var (name=arm) +│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ │ │ o: Var (name=r) +│ ║ │ └── Filter (costEstimate=12, resultSizeEstimate=144) [right] +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=p) +│ ║ │ ║ ValueConstant (value="0.08"^^) +│ ║ │ ║ ValueConstant (value="0.09"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=r) +│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ │ o: Var (name=p) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] +│ ║ ║ │ ║ s: Var (name=trial) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ │ s: Var (name=trial) +│ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ o: Var (name=arm) +│ ║ ║ └── Union [right] +│ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) +│ ║ ║ ║ s: Var (name=arm) +│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) +│ ║ ║ ║ o: Var (name=comp) +│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) +│ ║ ║ s: Var (name=arm) +│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ o: Var (name=comp) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=13.2K) +│ ║ │ s: Var (name=comp) +│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) +│ ║ │ o: Var (name=optName) +│ ║ └── ExtensionElem (optCompName) +│ ║ Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=arm) +└── ExtensionElem (count) +Count (Distinct) +Var (name=arm) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial a . +?trial ?arm . +?arm (|) ?comp . +OPTIONAL { +?comp ?optName . +BIND(?optName AS ?optCompName) +} +FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +19.842 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +19.842 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a pharma:Drug ; pharma:targets ?target . +OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } +FILTER(?optMol != ) +MINUS { ?drug pharma:contraindicatedFor ?disease . +FILTER(?disease = +|| ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe0111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +35.509 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_014289f482cbcbb841f681e0ddea6edf62c5, anonymous) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── Group (drug) +│ ║ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optMol) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] +│ ║ │ │ ║ s: Var (name=drug) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] +│ ║ │ │ s: Var (name=drug) +│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ │ │ o: Var (name=target) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ ║ s: Var (name=drug) +│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ ║ o: Var (name=mol) +│ ║ │ ╚══ ExtensionElem (optMol) +│ ║ │ Var (name=mol) +│ ║ └── Union +│ ║ ╠══ Filter +│ ║ ║ ├── SameTerm +│ ║ ║ │ Var (name=disease) +│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) +│ ║ ║ └── StatementPattern (resultSizeEstimate=16) +│ ║ ║ s: Var (name=drug) +│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) +│ ║ ╚══ Filter +│ ║ ├── SameTerm +│ ║ │ Var (name=disease) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) +│ ║ └── StatementPattern (resultSizeEstimate=14) +│ ║ s: Var (name=drug) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) +│ ║ GroupElem (_anon_having_014289f482cbcbb841f681e0ddea6edf62c5) +│ ║ Count (Distinct) +│ ║ Var (name=target) +│ ║ GroupElem (targetCount) +│ ║ Count (Distinct) +│ ║ Var (name=target) +│ ╚══ ExtensionElem (_anon_having_014289f482cbcbb841f681e0ddea6edf62c5) +│ Count (Distinct) +│ Var (name=target) +└── ExtensionElem (targetCount) +Count (Distinct) +Var (name=target) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a . +?drug ?target . +OPTIONAL { +?drug ?mol . +BIND(?mol AS ?optMol) +} +FILTER (?optMol != ) +MINUS { +{ +?drug . +FILTER (sameTerm(?disease, )) +} +UNION +{ +?drug . +FILTER (sameTerm(?disease, )) +} +} +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +25.218 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +25.218 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . +?arm pharma:armDrug ?drug ; pharma:hasResult ?result . +?result pharma:effectSize ?effect . +OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } +FILTER(?optRate > 0.2) +} +GROUP BY ?drug +HAVING(AVG(?effect) > 0.4) +} +FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } +OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } +FILTER(?optDisease IN (, +)) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111dfc8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +20.909 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optDisease) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drug) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=se) +│ ║ └── LeftJoin +│ ║ ╠══ Projection (new scope) [left] +│ ║ ║ ├── ProjectionElemList +│ ║ ║ │ ProjectionElem "drug" +│ ║ ║ │ ProjectionElem "avgEffect" +│ ║ ║ └── Extension +│ ║ ║ ╠══ Extension +│ ║ ║ ║ ├── Filter +│ ║ ║ ║ │ ╠══ Compare (>) +│ ║ ║ ║ │ ║ Var (name=_anon_having_06374e847d5dd0134bd5bf250bf99e347e46, anonymous) +│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) +│ ║ ║ ║ │ ╚══ Group (drug) +│ ║ ║ ║ │ Filter +│ ║ ║ ║ │ ╠══ Compare (>) +│ ║ ║ ║ │ ║ Var (name=optRate) +│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) +│ ║ ║ ║ │ ╚══ LeftJoin +│ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] +│ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] +│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) +│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) +│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=arm) +│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) +│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ ║ │ │ ║ │ o: Var (name=result) +│ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ │ ║ s: Var (name=arm) +│ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ ║ │ │ ║ o: Var (name=drug) +│ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ ║ ║ │ │ s: Var (name=result) +│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ ║ ║ │ │ o: Var (name=effect) +│ ║ ║ ║ │ └── Extension [right] +│ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ ║ ║ │ ║ s: Var (name=result) +│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=rate) +│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) +│ ║ ║ ║ │ Var (name=rate) +│ ║ ║ ║ │ GroupElem (_anon_having_06374e847d5dd0134bd5bf250bf99e347e46) +│ ║ ║ ║ │ Avg +│ ║ ║ ║ │ Var (name=effect) +│ ║ ║ ║ │ GroupElem (avgEffect) +│ ║ ║ ║ │ Avg +│ ║ ║ ║ │ Var (name=effect) +│ ║ ║ ║ └── ExtensionElem (_anon_having_06374e847d5dd0134bd5bf250bf99e347e46) +│ ║ ║ ║ Avg +│ ║ ║ ║ Var (name=effect) +│ ║ ║ ╚══ ExtensionElem (avgEffect) +│ ║ ║ Avg +│ ║ ║ Var (name=effect) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) +│ ║ │ s: Var (name=drug) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +│ ║ │ o: Var (name=disease) +│ ║ └── ExtensionElem (optDisease) +│ ║ Var (name=disease) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?effect . +OPTIONAL { +?result ?rate . +BIND(?rate AS ?optRate) +} +FILTER (?optRate > 0.2) +} +GROUP BY ?drug +HAVING (AVG(?effect) > 0.4) +} +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +14.826 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +14.826 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +VALUES ?marker { + } +?drug a pharma:Drug ; pharma:targets ?target . +?target pharma:inPathway ?pathway . +OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } +FILTER(?optTrial != ) +FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . +?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111f460 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.3.6/lwjgl-3.3.6.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +307.490 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_844c994b98973e2444ca265ea59ce22407401234567, anonymous) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (pathway) +│ ║ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrial) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] +│ ║ │ ║ │ s: Var (name=result) +│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ │ ║ │ o: Var (name=marker) +│ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] +│ ║ │ ║ s: Var (name=arm) +│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ │ ║ o: Var (name=result) +│ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] +│ ║ │ s: Var (name=trial) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ │ o: Var (name=arm) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [left] +│ ║ ║ │ ║ │ s: Var (name=drug) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ ║ s: Var (name=drug) +│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ ║ o: Var (name=target) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] +│ ║ ║ │ s: Var (name=target) +│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) +│ ║ ║ │ o: Var (name=pathway) +│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=3.4K) +│ ║ │ s: Var (name=drug) +│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) +│ ║ │ o: Var (name=trial) +│ ║ └── ExtensionElem (optTrial) +│ ║ Var (name=trial) +│ ║ GroupElem (_anon_having_844c994b98973e2444ca265ea59ce22407401234567) +│ ║ Count (Distinct) +│ ║ Var (name=drug) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) +│ ╚══ ExtensionElem (_anon_having_844c994b98973e2444ca265ea59ce22407401234567) +│ Count (Distinct) +│ Var (name=drug) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?drug a . +?drug ?target . +?target ?pathway . +VALUES ?marker { } +OPTIONAL { +?drug ?trial . +BIND(?trial AS ?optTrial) +} +FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +229.437 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": +229.437 ms/op + + +# Run complete. Total time: 00:26:54 +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md new file mode 100644 index 00000000000..0ae078e574c --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md @@ -0,0 +1,91 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 45.942 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 165.107 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 42.355 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 78.066 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 108.442 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 59.208 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 56.185 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 42.198 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 52.392 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 225.733 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 271478.964 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.062 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 4.785 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.078 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.070 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.089 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 823.448 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.097 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 4.841 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 722.325 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.113 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.944 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 659.246 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 265.678 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 37.541 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 41.109 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 121.823 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.507 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 27591.570 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 923.752 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 66.224 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 133.148 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 179.687 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 222.655 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 264.347 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.116 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 119.420 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 47.834 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.825 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 200.862 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 3.924 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.282 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.320 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.652 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 323.587 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1017.310 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 494.831 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 104.561 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 223.120 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 110.966 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1234.693 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 117.725 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1102.583 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1202.971 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 155028.762 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 31.827 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 72.851 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 7.811 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 146.265 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 138.215 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 17.831 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 84.304 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 45.366 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 252.428 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 233.256 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 176.787 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 38.446 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 80.332 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 3.429 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 319.164 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 3.371 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 9.394 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 84.834 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 22.758 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.457 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.255 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 533.969 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.252 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.514 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 38.640 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 14.590 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 27.651 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.365 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.024 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.455 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 26.660 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 16.266 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 17521.526 ms/op +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/estimate/PageEstimatorPredicateCardinalityRegressionTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/estimate/PageEstimatorPredicateCardinalityRegressionTest.java new file mode 100644 index 00000000000..6abf5776aa2 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/estimate/PageEstimatorPredicateCardinalityRegressionTest.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.estimate; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.QueryLanguage; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.StatementPatternCollector; +import org.eclipse.rdf4j.query.parser.ParsedTupleQuery; +import org.eclipse.rdf4j.query.parser.QueryParserUtil; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.sail.base.SailStore; +import org.eclipse.rdf4j.sail.lmdb.LmdbStore; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.junit.jupiter.api.Test; + +class PageEstimatorPredicateCardinalityRegressionTest { + + private static final int DUMMY_VALUE_COUNT = 300; + private static final int FOLLOWS_TRIPLE_COUNT = 32; + + @Test + void keepsNonZeroCardinalityForMultiBytePredicateIds() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-page-estimator-regression").toFile(); + LmdbStoreConfig config = new LmdbStoreConfig().setPageCardinalityEstimator(true); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, config)); + IRI follows = SimpleValueFactory.getInstance().createIRI("urn:test:predicate:follows"); + try { + loadData(repository, follows); + + long actualCount = followsCount(repository, follows); + assertEquals(FOLLOWS_TRIPLE_COUNT, actualCount, "Regression setup should include follows triples"); + + double followsCardinality = followsCardinality(repository, follows); + assertTrue(followsCardinality > 0, "Expected non-zero follows cardinality with page estimator enabled"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + private static void loadData(SailRepository repository, IRI follows) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + for (int i = 0; i < DUMMY_VALUE_COUNT; i++) { + IRI subject = iri("urn:test:dummy:subject:", i); + IRI predicate = iri("urn:test:dummy:predicate:", i); + IRI object = iri("urn:test:dummy:object:", i); + connection.add(subject, predicate, object); + } + + for (int i = 0; i < FOLLOWS_TRIPLE_COUNT; i++) { + IRI source = iri("urn:test:user:", i); + IRI target = iri("urn:test:user:", (i + 1) % FOLLOWS_TRIPLE_COUNT); + connection.add(source, follows, target); + } + connection.commit(); + } + } + + private static long followsCount(SailRepository repository, IRI follows) { + String query = "SELECT * WHERE { ?s <" + follows.stringValue() + "> ?o . }"; + try (SailRepositoryConnection connection = repository.getConnection()) { + return connection.prepareTupleQuery(query).evaluate().stream().count(); + } + } + + private static double followsCardinality(SailRepository repository, IRI follows) throws Exception { + EvaluationStatistics statistics = extractEvaluationStatistics(repository); + StatementPattern followsPattern = followsStatementPattern(follows); + return statistics.getCardinality(followsPattern); + } + + private static EvaluationStatistics extractEvaluationStatistics(SailRepository repository) throws Exception { + Object sail = repository.getSail(); + Method getSailStoreMethod = sail.getClass().getDeclaredMethod("getSailStore"); + getSailStoreMethod.setAccessible(true); + SailStore sailStore = (SailStore) getSailStoreMethod.invoke(sail); + return sailStore.getEvaluationStatistics(); + } + + private static StatementPattern followsStatementPattern(IRI followsPredicate) { + String query = "SELECT * WHERE { ?s <" + followsPredicate.stringValue() + "> ?o . }"; + ParsedTupleQuery parsed = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, query, null); + List patterns = StatementPatternCollector.process(parsed.getTupleExpr()); + return patterns.get(0); + } + + private static IRI iri(String prefix, int index) { + return SimpleValueFactory.getInstance().createIRI(prefix + index); + } +} diff --git a/join_optimizer/JoinEstimator.java b/join_optimizer/JoinEstimator.java new file mode 100644 index 00000000000..0bfd727491a --- /dev/null +++ b/join_optimizer/JoinEstimator.java @@ -0,0 +1,684 @@ + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.OptionalLong; +import java.util.Set; + +import org.apache.datasketches.common.ResizeFactor; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCombiner; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCompactSketch; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketchIterator; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch; +import org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder; + +/** + * JoinEstimator is the sketch algebra used by the optimizer. + * + *

It assumes that each base statement-pattern synopsis has already been built offline. + * The synopsis must expose:

+ * + *
    + *
  • a degree sketch d_p^x keyed by bindings of x, with summary value = number of + * rows produced by pattern p when x is fixed;
  • + *
  • for binary patterns p(x,y), a neighborhood sketch N_p^{x->y}(x=a) keyed by y + * with summary value = multiplicity f_p(a,y).
  • + *
+ * + *

The code below keeps one double summary per retained key. The main operators are:

+ * + *
    + *
  • dot(A, B) = sum_k A[k] * B[k]
  • + *
  • multiply(A, B) = pointwise product on the same key domain
  • + *
  • push(M_x, p(x,y)) = sketch on y with summaries sum_x M_x[x] * f_p(x,y)
  • + *
+ * + *

Important implementation detail: DataSketches iterators expose retained hash keys, + * not the original keys. The estimator therefore depends on a SketchKeyResolver that can + * map a retained hash back to the original term id used when the synopsis was built.

+ */ +public final class JoinEstimator { + + public static final int DEFAULT_NUM_VALUES = 1; + + private final SynopsisCatalog catalog; + private final SketchKeyResolver keyResolver; + private final int nominalEntries; + private final long seed; + private final ArrayOfDoublesUpdatableSketchBuilder updatableBuilder; + private final ArrayOfDoublesSetOperationBuilder setOperationBuilder; + private final ArrayOfDoublesCombiner multiplyCombiner = (a, b) -> new double[] { a[0] * b[0] }; + + public JoinEstimator( + final SynopsisCatalog catalog, + final SketchKeyResolver keyResolver, + final int nominalEntries, + final long seed) { + + this.catalog = Objects.requireNonNull(catalog, "catalog"); + this.keyResolver = Objects.requireNonNull(keyResolver, "keyResolver"); + this.nominalEntries = nominalEntries; + this.seed = seed; + + this.updatableBuilder = new ArrayOfDoublesUpdatableSketchBuilder() + .setNominalEntries(nominalEntries) + .setNumberOfValues(DEFAULT_NUM_VALUES) + .setSeed(seed) + .setResizeFactor(ResizeFactor.X8) + .setSamplingProbability(1.0f); + + this.setOperationBuilder = new ArrayOfDoublesSetOperationBuilder() + .setNominalEntries(nominalEntries) + .setNumberOfValues(DEFAULT_NUM_VALUES) + .setSeed(seed); + } + + public int nominalEntries() { + return nominalEntries; + } + + public long seed() { + return seed; + } + + public PatternSynopsis synopsisOf(final StatementPattern pattern) { + return catalog.synopsis(pattern); + } + + /** + * Estimates the row count of a single base pattern. + */ + public double estimatePatternRows(final StatementPattern pattern) { + final PatternSynopsis synopsis = synopsisOf(pattern); + if (synopsis.groundRows() != null) { + return synopsis.groundRows(); + } + if (pattern.variables().isEmpty()) { + throw new IllegalStateException("Ground pattern requires groundRows override: " + pattern); + } + final String anchor = pattern.variables().iterator().next(); + return estimateSum(synopsis.degreeSketch(anchor)); + } + + /** + * Degree sketch d_p^x keyed by x. + */ + public ArrayOfDoublesSketch degreeSketch(final StatementPattern pattern, final String variable) { + return synopsisOf(pattern).degreeSketch(variable); + } + + /** + * Message for a singleton leaf pattern rooted at one of its variables. + * For unary and binary patterns this is simply d_p^x. + */ + public Message leafMessage(final StatementPattern pattern, final String rootVariable) { + requireVariableOnPattern(pattern, rootVariable); + return new Message(rootVariable, snapshot(degreeSketch(pattern, rootVariable))); + } + + /** + * Estimates rows produced when a partial plan summarized on {@code sharedVariable} + * is extended with {@code nextPattern}. + */ + public double estimateOutputRows( + final Message partialOnSharedVariable, + final StatementPattern nextPattern, + final String sharedVariable) { + + requireSameVariable(partialOnSharedVariable.variable(), sharedVariable); + return dot(partialOnSharedVariable.sketch(), degreeSketch(nextPattern, sharedVariable)); + } + + /** + * Pointwise product of multiple sketches on the same variable domain. + */ + public Message multiply(final String variable, final List factors) { + if (factors.isEmpty()) { + throw new IllegalArgumentException("Cannot multiply an empty factor list."); + } + ArrayOfDoublesCompactSketch current = null; + for (final Message factor : factors) { + requireSameVariable(variable, factor.variable()); + current = (current == null) + ? factor.sketch() + : intersect(current, factor.sketch(), multiplyCombiner); + } + return new Message(variable, current); + } + + /** + * Convenience overload for multiplying two messages on the same variable. + */ + public Message pointwiseMultiply(final Message left, final Message right) { + requireSameVariable(left.variable(), right.variable()); + return new Message(left.variable(), intersect(left.sketch(), right.sketch(), multiplyCombiner)); + } + + /** + * Dot product between two tuple sketches on the same key space. + * Implemented as an intersection with value multiplication, followed by + * Horvitz-Thompson scaling using theta(result). + */ + public double dot(final ArrayOfDoublesSketch left, final ArrayOfDoublesSketch right) { + return estimateSum(intersect(left, right, multiplyCombiner)); + } + + /** + * Estimated sum of summary[0] over the full key domain represented by the sketch. + */ + public double estimateSum(final ArrayOfDoublesSketch sketch) { + if (sketch == null || sketch.isEmpty()) { + return 0.0d; + } + double retained = 0.0d; + final ArrayOfDoublesSketchIterator it = sketch.iterator(); + while (it.next()) { + retained += firstValue(it.getValues()); + } + return retained / sketch.getTheta(); + } + + /** + * Pushes a message from {@code fromVariable} to {@code toVariable} across a binary pattern. + * + *

For each retained x in the input message, this uses the x-conditioned neighborhood + * synopsis N_p^{x->y}(x) and contributes:

+ * + *
+     *   contribution(y) = M(x) * f_p(x,y) / (theta_input * theta_neighborhood)
+     * 
+ * + *

The double scaling is the Horvitz-Thompson correction for the retained x sample and + * the retained neighborhood sample.

+ */ + public Message push( + final Message input, + final StatementPattern edgePattern, + final String fromVariable, + final String toVariable) { + + requireSameVariable(input.variable(), fromVariable); + + final PatternSynopsis synopsis = synopsisOf(edgePattern); + final ArrayOfDoublesUpdatableSketch output = newMutableSketch(); + final double thetaInput = safeTheta(input.sketch()); + + final ArrayOfDoublesSketchIterator sourceIterator = input.sketch().iterator(); + while (sourceIterator.next()) { + final long retainedFromHash = sourceIterator.getKey(); + final long fromOriginalKey = resolveOriginalKey(retainedFromHash); + final double messageWeight = firstValue(sourceIterator.getValues()); + + final ArrayOfDoublesSketch neighborhood = + synopsis.neighborhood(fromVariable, toVariable, fromOriginalKey); + + if (neighborhood == null || neighborhood.isEmpty()) { + continue; + } + + final double thetaNeighborhood = safeTheta(neighborhood); + final double scale = messageWeight / (thetaInput * thetaNeighborhood); + + final ArrayOfDoublesSketchIterator neighborhoodIterator = neighborhood.iterator(); + while (neighborhoodIterator.next()) { + final long retainedToHash = neighborhoodIterator.getKey(); + final long toOriginalKey = resolveOriginalKey(retainedToHash); + final double edgeMultiplicity = firstValue(neighborhoodIterator.getValues()); + output.update(toOriginalKey, singleton(edgeMultiplicity * scale)); + } + } + + return new Message(toVariable, output.compact()); + } + + /** + * Materializes a mutable sketch with the standard configuration used by this estimator. + */ + public ArrayOfDoublesUpdatableSketch newMutableSketch() { + return updatableBuilder.build(); + } + + /** + * Creates an immutable snapshot. Useful when a caller wants a compact sketch boundary. + */ + public ArrayOfDoublesCompactSketch snapshot(final ArrayOfDoublesSketch sketch) { + if (sketch instanceof ArrayOfDoublesCompactSketch compact) { + return compact; + } + if (sketch instanceof ArrayOfDoublesUpdatableSketch updatable) { + return updatable.compact(); + } + final ArrayOfDoublesUpdatableSketch copy = newMutableSketch(); + final ArrayOfDoublesSketchIterator it = sketch.iterator(); + while (it.next()) { + final long originalKey = resolveOriginalKey(it.getKey()); + copy.update(originalKey, singleton(firstValue(it.getValues()) / safeTheta(sketch))); + } + return copy.compact(); + } + + private ArrayOfDoublesCompactSketch intersect( + final ArrayOfDoublesSketch left, + final ArrayOfDoublesSketch right, + final ArrayOfDoublesCombiner combiner) { + + final ArrayOfDoublesIntersection intersection = setOperationBuilder.buildIntersection(); + intersection.intersect(left, combiner); + intersection.intersect(right, combiner); + return intersection.getResult(); + } + + private long resolveOriginalKey(final long retainedHash) { + return keyResolver.resolve(retainedHash).orElseThrow( + () -> new IllegalStateException( + "No original-key mapping found for retained sketch hash " + retainedHash + + ". Populate SketchKeyResolver when you build the synopses.")); + } + + private static void requireSameVariable(final String actual, final String expected) { + if (!Objects.equals(actual, expected)) { + throw new IllegalArgumentException("Variable mismatch. Expected " + expected + " but got " + actual); + } + } + + private static void requireVariableOnPattern(final StatementPattern pattern, final String variable) { + if (!pattern.variables().contains(variable)) { + throw new IllegalArgumentException("Variable " + variable + " is not on pattern " + pattern); + } + } + + private static double safeTheta(final ArrayOfDoublesSketch sketch) { + final double theta = sketch.getTheta(); + if (theta <= 0.0d) { + throw new IllegalStateException("Invalid theta <= 0 for sketch: " + sketch); + } + return theta; + } + + private static double firstValue(final double[] values) { + if (values == null || values.length == 0) { + throw new IllegalStateException("Expected at least one summary value."); + } + return values[0]; + } + + private static double[] singleton(final double value) { + return new double[] { value }; + } + + // -------------------------------------------------------------------------------------------- + // Catalog / resolver abstractions + // -------------------------------------------------------------------------------------------- + + public interface SynopsisCatalog { + PatternSynopsis synopsis(StatementPattern pattern); + } + + public interface SketchKeyResolver { + OptionalLong resolve(long retainedHash); + } + + public static final class InMemorySynopsisCatalog implements SynopsisCatalog { + private final Map synopses; + + public InMemorySynopsisCatalog(final Map synopses) { + this.synopses = Collections.unmodifiableMap(new LinkedHashMap<>(Objects.requireNonNull(synopses, "synopses"))); + } + + @Override + public PatternSynopsis synopsis(final StatementPattern pattern) { + final PatternSynopsis synopsis = synopses.get(pattern); + if (synopsis == null) { + throw new IllegalArgumentException("No synopsis registered for pattern: " + pattern); + } + return synopsis; + } + } + + public static final class MapBackedSketchKeyResolver implements SketchKeyResolver { + private final Map retainedHashToOriginal = new LinkedHashMap<>(); + + public void register(final long retainedHash, final long originalKey) { + final Long previous = retainedHashToOriginal.putIfAbsent(retainedHash, originalKey); + if (previous != null && previous.longValue() != originalKey) { + throw new IllegalStateException( + "Hash collision in retained-key dictionary: " + retainedHash + + " mapped to both " + previous + " and " + originalKey); + } + } + + @Override + public OptionalLong resolve(final long retainedHash) { + final Long original = retainedHashToOriginal.get(retainedHash); + return original == null ? OptionalLong.empty() : OptionalLong.of(original); + } + } + + // -------------------------------------------------------------------------------------------- + // Base synopsis model + // -------------------------------------------------------------------------------------------- + + /** + * Immutable statement-pattern synopsis. + * + *

degreeByVariable contains d_p^x.

+ *

neighborhoods contains N_p^{from->to}(bindingOfFrom).

+ */ + public static final class PatternSynopsis { + private final StatementPattern pattern; + private final Map degreeByVariable; + private final Map> neighborhoods; + private final Double groundRows; + + public PatternSynopsis( + final StatementPattern pattern, + final Map degreeByVariable, + final Map> neighborhoods, + final Double groundRows) { + + this.pattern = Objects.requireNonNull(pattern, "pattern"); + this.degreeByVariable = copyOneLevel(degreeByVariable); + this.neighborhoods = deepCopy(neighborhoods); + this.groundRows = groundRows; + } + + public StatementPattern pattern() { + return pattern; + } + + public Double groundRows() { + return groundRows; + } + + public ArrayOfDoublesCompactSketch degreeSketch(final String variable) { + final ArrayOfDoublesCompactSketch sketch = degreeByVariable.get(variable); + if (sketch == null) { + throw new IllegalArgumentException("No degree sketch for variable " + variable + " on " + pattern); + } + return sketch; + } + + public ArrayOfDoublesCompactSketch neighborhood( + final String fromVariable, + final String toVariable, + final long fromBinding) { + + final Map byBinding = + neighborhoods.get(new Direction(fromVariable, toVariable)); + + if (byBinding == null) { + return null; + } + return byBinding.get(fromBinding); + } + + public Set supportedVariables() { + return degreeByVariable.keySet(); + } + + private static Map copyOneLevel(final Map input) { + if (input == null) { + return Map.of(); + } + return Collections.unmodifiableMap(new LinkedHashMap<>(input)); + } + + private static Map> deepCopy( + final Map> input) { + + if (input == null) { + return Map.of(); + } + + final Map> outer = new LinkedHashMap<>(); + for (final Map.Entry> e : input.entrySet()) { + outer.put(e.getKey(), Collections.unmodifiableMap(new LinkedHashMap<>(e.getValue()))); + } + return Collections.unmodifiableMap(outer); + } + } + + /** + * Builder used offline while materializing synopses from data. + */ + public static final class PatternSynopsisBuilder { + private final StatementPattern pattern; + private final ArrayOfDoublesUpdatableSketchBuilder builder; + private final Map degreeByVariable = new LinkedHashMap<>(); + private final Map> neighborhoods = new LinkedHashMap<>(); + private Double groundRows; + + public PatternSynopsisBuilder( + final StatementPattern pattern, + final int nominalEntries, + final long seed) { + + this.pattern = Objects.requireNonNull(pattern, "pattern"); + this.builder = new ArrayOfDoublesUpdatableSketchBuilder() + .setNominalEntries(nominalEntries) + .setNumberOfValues(DEFAULT_NUM_VALUES) + .setSeed(seed) + .setResizeFactor(ResizeFactor.X8) + .setSamplingProbability(1.0f); + } + + public PatternSynopsisBuilder setGroundRows(final double rows) { + this.groundRows = rows; + return this; + } + + /** + * Adds one unary match (or one grounded projection row) for a unary pattern. + */ + public PatternSynopsisBuilder addUnaryMatch( + final String variable, + final long bindingKey, + final double multiplicity) { + + ensurePatternContains(variable); + degree(variable).update(bindingKey, singleton(multiplicity)); + return this; + } + + /** + * Adds one binary row (x = leftKey, y = rightKey) with the provided multiplicity. + * This updates both degree directions and both conditioned neighborhoods. + */ + public PatternSynopsisBuilder addBinaryMatch( + final String leftVariable, + final long leftKey, + final String rightVariable, + final long rightKey, + final double multiplicity) { + + ensurePatternContains(leftVariable); + ensurePatternContains(rightVariable); + + degree(leftVariable).update(leftKey, singleton(multiplicity)); + degree(rightVariable).update(rightKey, singleton(multiplicity)); + + neighborhood(leftVariable, rightVariable, leftKey).update(rightKey, singleton(multiplicity)); + neighborhood(rightVariable, leftVariable, rightKey).update(leftKey, singleton(multiplicity)); + return this; + } + + public PatternSynopsis build() { + final Map degreeSnapshots = new LinkedHashMap<>(); + for (final Map.Entry e : degreeByVariable.entrySet()) { + degreeSnapshots.put(e.getKey(), e.getValue().compact()); + } + + final Map> neighborhoodSnapshots = new LinkedHashMap<>(); + for (final Map.Entry> outer : neighborhoods.entrySet()) { + final Map inner = new LinkedHashMap<>(); + for (final Map.Entry innerEntry : outer.getValue().entrySet()) { + inner.put(innerEntry.getKey(), innerEntry.getValue().compact()); + } + neighborhoodSnapshots.put(outer.getKey(), inner); + } + + return new PatternSynopsis(pattern, degreeSnapshots, neighborhoodSnapshots, groundRows); + } + + private ArrayOfDoublesUpdatableSketch degree(final String variable) { + return degreeByVariable.computeIfAbsent(variable, ignored -> builder.build()); + } + + private ArrayOfDoublesUpdatableSketch neighborhood( + final String fromVariable, + final String toVariable, + final long fromBinding) { + + final Direction direction = new Direction(fromVariable, toVariable); + final Map byBinding = + neighborhoods.computeIfAbsent(direction, ignored -> new LinkedHashMap<>()); + + return byBinding.computeIfAbsent(fromBinding, ignored -> builder.build()); + } + + private void ensurePatternContains(final String variable) { + if (!pattern.variables().contains(variable)) { + throw new IllegalArgumentException("Variable " + variable + " is not present on " + pattern); + } + } + } + + // -------------------------------------------------------------------------------------------- + // Query / pattern model + // -------------------------------------------------------------------------------------------- + + public record Message(String variable, ArrayOfDoublesCompactSketch sketch) { + public Message { + Objects.requireNonNull(variable, "variable"); + Objects.requireNonNull(sketch, "sketch"); + } + } + + public record Direction(String fromVariable, String toVariable) { + public Direction { + Objects.requireNonNull(fromVariable, "fromVariable"); + Objects.requireNonNull(toVariable, "toVariable"); + } + } + + public interface Slot { + boolean isVariable(); + String asVariable(); + Long asConstant(); + } + + public record Var(String name) implements Slot { + public Var { + if (name == null || name.isBlank()) { + throw new IllegalArgumentException("Variable name must not be blank."); + } + } + + @Override + public boolean isVariable() { + return true; + } + + @Override + public String asVariable() { + return name; + } + + @Override + public Long asConstant() { + return null; + } + + @Override + public String toString() { + return "?" + name; + } + } + + public record Const(long termId) implements Slot { + @Override + public boolean isVariable() { + return false; + } + + @Override + public String asVariable() { + return null; + } + + @Override + public Long asConstant() { + return termId; + } + + @Override + public String toString() { + return Long.toString(termId); + } + } + + public record StatementPattern(String id, Slot subject, Slot predicate, Slot object) { + public StatementPattern { + Objects.requireNonNull(id, "id"); + Objects.requireNonNull(subject, "subject"); + Objects.requireNonNull(predicate, "predicate"); + Objects.requireNonNull(object, "object"); + } + + public Set variables() { + final LinkedHashSet vars = new LinkedHashSet<>(); + addIfVariable(vars, subject); + addIfVariable(vars, predicate); + addIfVariable(vars, object); + return Collections.unmodifiableSet(vars); + } + + public boolean containsVariable(final String variable) { + return variables().contains(variable); + } + + public int arity() { + return variables().size(); + } + + public boolean isUnary() { + return arity() == 1; + } + + public boolean isBinary() { + return arity() == 2; + } + + public String otherVariable(final String variable) { + if (!isBinary()) { + throw new IllegalStateException("otherVariable() requires a binary pattern: " + this); + } + for (final String v : variables()) { + if (!v.equals(variable)) { + return v; + } + } + throw new IllegalArgumentException("Variable " + variable + " is not on " + this); + } + + public Set sharedVariables(final StatementPattern other) { + final LinkedHashSet shared = new LinkedHashSet<>(variables()); + shared.retainAll(other.variables()); + return Collections.unmodifiableSet(shared); + } + + private static void addIfVariable(final Set output, final Slot slot) { + if (slot.isVariable()) { + output.add(slot.asVariable()); + } + } + } +} diff --git a/join_optimizer/JoinOrderOptimizer.java b/join_optimizer/JoinOrderOptimizer.java new file mode 100644 index 00000000000..d91eae18c10 --- /dev/null +++ b/join_optimizer/JoinOrderOptimizer.java @@ -0,0 +1,441 @@ + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +/** + * Exact left-deep join-order optimizer for connected acyclic statement-pattern queries. + * + *

The optimizer uses JoinEstimator as its cost model. The DP state is a connected subset + * of patterns. For a transition S -> S ∪ {p}, where p shares exactly one variable x with S, + * the step cost is:

+ * + *
+ *   OutRows(S, p) = dot( M_S^x, d_p^x )
+ * 
+ * + *

where M_S^x is the canonical message of subset S on attachment variable x and + * d_p^x is the degree sketch of pattern p on x.

+ */ +public final class JoinOrderOptimizer { + + private final JoinEstimator estimator; + + public JoinOrderOptimizer(final JoinEstimator estimator) { + this.estimator = Objects.requireNonNull(estimator, "estimator"); + } + + /** + * Finds the optimal left-deep order under the sketch-based cost model and returns the + * corresponding left-deep join tree. + */ + public OptimizationResult optimizeDp(final List patterns) { + final PlanningContext ctx = new PlanningContext(patterns); + final long all = ctx.allMask(); + + final Map bestCost = new HashMap<>(); + final Map parent = new HashMap<>(); + final Map> statesBySize = new HashMap<>(); + + for (int i = 0; i < ctx.size(); i++) { + final long mask = bit(i); + final double seedCost = estimator.estimatePatternRows(ctx.pattern(i)); + bestCost.put(mask, seedCost); + statesBySize.computeIfAbsent(1, ignored -> new LinkedHashSet<>()).add(mask); + } + + for (int size = 1; size < ctx.size(); size++) { + final Set states = statesBySize.containsKey(size) + ? statesBySize.get(size) + : Collections.emptySet(); + for (final long mask : states) { + final double prefixCost = bestCost.get(mask); + + final List candidates = ctx.candidates(mask); + for (final int nextIndex : candidates) { + final String shared = ctx.uniqueSharedVariable(mask, nextIndex); + if (shared == null) { + continue; + } + + final JoinEstimator.Message message = message(ctx, mask, shared); + final double stepCost = + estimator.estimateOutputRows(message, ctx.pattern(nextIndex), shared); + + final long nextMask = mask | bit(nextIndex); + final double candidateCost = prefixCost + stepCost; + + if (candidateCost < bestCost.getOrDefault(nextMask, Double.POSITIVE_INFINITY)) { + bestCost.put(nextMask, candidateCost); + parent.put(nextMask, new Transition(mask, nextIndex)); + statesBySize.computeIfAbsent(size + 1, ignored -> new LinkedHashSet<>()).add(nextMask); + } + } + } + } + + if (!bestCost.containsKey(all)) { + throw new IllegalStateException( + "Unable to find a full connected order. This implementation expects a connected, " + + "acyclic query where each extension shares exactly one variable."); + } + + final List order = reconstructOrder(ctx, parent, all); + final PlanNode tree = buildLeftDeepTree(order); + return new OptimizationResult(order, tree, bestCost.get(all), Strategy.DP); + } + + /** + * Cheap fallback: choose the seed with the smallest estimated base rows, then repeatedly add + * the adjacent pattern with the smallest estimated output rows. + */ + public OptimizationResult optimizeGreedy(final List patterns) { + final PlanningContext ctx = new PlanningContext(patterns); + final List order = new ArrayList<>(ctx.size()); + + int seed = -1; + double bestSeedRows = Double.POSITIVE_INFINITY; + for (int i = 0; i < ctx.size(); i++) { + final double rows = estimator.estimatePatternRows(ctx.pattern(i)); + if (rows < bestSeedRows) { + bestSeedRows = rows; + seed = i; + } + } + + long mask = bit(seed); + double totalCost = bestSeedRows; + order.add(ctx.pattern(seed)); + + while (mask != ctx.allMask()) { + int bestNext = -1; + double bestStep = Double.POSITIVE_INFINITY; + + for (final int candidate : ctx.candidates(mask)) { + final String shared = ctx.uniqueSharedVariable(mask, candidate); + if (shared == null) { + continue; + } + final JoinEstimator.Message message = message(ctx, mask, shared); + final double step = estimator.estimateOutputRows(message, ctx.pattern(candidate), shared); + if (step < bestStep) { + bestStep = step; + bestNext = candidate; + } + } + + if (bestNext < 0) { + throw new IllegalStateException( + "Greedy planner got stuck. This implementation expects a connected, " + + "acyclic query where each extension shares exactly one variable."); + } + + mask |= bit(bestNext); + totalCost += bestStep; + order.add(ctx.pattern(bestNext)); + } + + return new OptimizationResult(order, buildLeftDeepTree(order), totalCost, Strategy.GREEDY); + } + + /** + * Canonical message M_S^rootVariable for a connected subset S. + * + *

This is the object that makes the DP valid: the same subset always gets the same message, + * independent of the order in which the subset was constructed.

+ */ + private JoinEstimator.Message message( + final PlanningContext ctx, + final long subsetMask, + final String rootVariable) { + + final MessageKey key = new MessageKey(subsetMask, rootVariable); + final JoinEstimator.Message cached = ctx.messageMemo.get(key); + if (cached != null) { + return cached; + } + + final List factors = new ArrayList<>(); + for (final int patternIndex : ctx.incidentPatterns(rootVariable)) { + if (!contains(subsetMask, patternIndex)) { + continue; + } + + final JoinEstimator.StatementPattern pattern = ctx.pattern(patternIndex); + + if (pattern.arity() == 1) { + factors.add(estimator.leafMessage(pattern, rootVariable)); + continue; + } + + if (pattern.arity() != 2) { + throw new IllegalStateException( + "This implementation supports only unary/binary patterns. Offending pattern: " + + pattern); + } + + final String other = pattern.otherVariable(rootVariable); + final long childMask = ctx.childComponentMask(subsetMask, patternIndex, rootVariable, other); + + if (childMask == 0L) { + factors.add(estimator.leafMessage(pattern, rootVariable)); + } else { + final JoinEstimator.Message childMessage = message(ctx, childMask, other); + factors.add(estimator.push(childMessage, pattern, other, rootVariable)); + } + } + + if (factors.isEmpty()) { + throw new IllegalStateException( + "Subset " + Long.toBinaryString(subsetMask) + + " has no factors incident to root variable " + rootVariable); + } + + final JoinEstimator.Message result = estimator.multiply(rootVariable, factors); + ctx.messageMemo.put(key, result); + return result; + } + + private static List reconstructOrder( + final PlanningContext ctx, + final Map parent, + final long fullMask) { + + final ArrayDeque reversed = new ArrayDeque<>(); + long current = fullMask; + + while (Long.bitCount(current) > 1) { + final Transition step = parent.get(current); + if (step == null) { + throw new IllegalStateException("Broken DP parent chain at mask " + Long.toBinaryString(current)); + } + reversed.addFirst(ctx.pattern(step.addedPatternIndex())); + current = step.previousMask(); + } + + final int seedIndex = Long.numberOfTrailingZeros(current); + reversed.addFirst(ctx.pattern(seedIndex)); + return List.copyOf(reversed); + } + + private static PlanNode buildLeftDeepTree(final List order) { + if (order.isEmpty()) { + throw new IllegalArgumentException("Cannot build a join tree for an empty order."); + } + + PlanNode root = new ScanNode(order.get(0)); + final LinkedHashSet currentVariables = new LinkedHashSet<>(root.outputVariables()); + + for (int i = 1; i < order.size(); i++) { + final JoinEstimator.StatementPattern next = order.get(i); + final LinkedHashSet joinVariables = new LinkedHashSet<>(currentVariables); + joinVariables.retainAll(next.variables()); + + root = new JoinNode(root, new ScanNode(next), Set.copyOf(joinVariables)); + currentVariables.addAll(next.variables()); + } + + return root; + } + + private static boolean contains(final long mask, final int index) { + return (mask & bit(index)) != 0L; + } + + private static long bit(final int index) { + return 1L << index; + } + + // -------------------------------------------------------------------------------------------- + // Result model + // -------------------------------------------------------------------------------------------- + + public enum Strategy { + DP, + GREEDY + } + + public record OptimizationResult( + List orderedPatterns, + PlanNode plan, + double totalCost, + Strategy strategy) { + } + + public interface PlanNode { + Set outputVariables(); + } + + public record ScanNode(JoinEstimator.StatementPattern pattern) implements PlanNode { + @Override + public Set outputVariables() { + return pattern.variables(); + } + } + + public record JoinNode(PlanNode left, PlanNode right, Set joinVariables) implements PlanNode { + @Override + public Set outputVariables() { + final LinkedHashSet vars = new LinkedHashSet<>(left.outputVariables()); + vars.addAll(right.outputVariables()); + return Set.copyOf(vars); + } + } + + private record Transition(long previousMask, int addedPatternIndex) { + } + + private record MessageKey(long subsetMask, String rootVariable) { + } + + // -------------------------------------------------------------------------------------------- + // Query-shape helpers + // -------------------------------------------------------------------------------------------- + + private static final class PlanningContext { + private final List patterns; + private final Map> incidentPatternsByVariable; + private final Map> variablesMemo = new HashMap<>(); + private final Map messageMemo = new HashMap<>(); + + private PlanningContext(final List patterns) { + this.patterns = List.copyOf(Objects.requireNonNull(patterns, "patterns")); + if (patterns.isEmpty()) { + throw new IllegalArgumentException("At least one pattern is required."); + } + if (patterns.size() > 60) { + throw new IllegalArgumentException( + "This demo implementation uses a long bit-mask and supports up to 60 patterns."); + } + this.incidentPatternsByVariable = buildIncidence(patterns); + } + + private int size() { + return patterns.size(); + } + + private JoinEstimator.StatementPattern pattern(final int index) { + return patterns.get(index); + } + + private long allMask() { + return (1L << patterns.size()) - 1L; + } + + private List incidentPatterns(final String variable) { + return incidentPatternsByVariable.getOrDefault(variable, List.of()); + } + + private List candidates(final long mask) { + final List result = new ArrayList<>(); + for (int i = 0; i < patterns.size(); i++) { + if (contains(mask, i)) { + continue; + } + if (mask == 0L) { + result.add(i); + continue; + } + final String shared = uniqueSharedVariable(mask, i); + if (shared != null) { + result.add(i); + } + } + return result; + } + + private String uniqueSharedVariable(final long mask, final int candidateIndex) { + final LinkedHashSet shared = new LinkedHashSet<>(variables(mask)); + shared.retainAll(pattern(candidateIndex).variables()); + return shared.size() == 1 ? shared.iterator().next() : null; + } + + private Set variables(final long mask) { + return variablesMemo.computeIfAbsent(mask, ignored -> { + final LinkedHashSet vars = new LinkedHashSet<>(); + for (int i = 0; i < patterns.size(); i++) { + if (contains(mask, i)) { + vars.addAll(pattern(i).variables()); + } + } + return Set.copyOf(vars); + }); + } + + /** + * Returns the pattern-subset on the far side of patternIndex when the subset is rooted at parentVariable + * and we cross into childVariable. + * + *

Because the query is assumed to be acyclic, removing the binary factor (patternIndex) separates the + * factor graph into two components, and this BFS returns the child component.

+ */ + private long childComponentMask( + final long subsetMask, + final int patternIndex, + final String parentVariable, + final String childVariable) { + + long childMask = 0L; + final ArrayDeque queue = new ArrayDeque<>(); + final LinkedHashSet seenVariables = new LinkedHashSet<>(); + final BitSet seenPatterns = new BitSet(patterns.size()); + + seenVariables.add(childVariable); + queue.add(childVariable); + + while (!queue.isEmpty()) { + final Object node = queue.removeFirst(); + + if (node instanceof String variable) { + for (final int incident : incidentPatterns(variable)) { + if (incident == patternIndex || !contains(subsetMask, incident)) { + continue; + } + if (!seenPatterns.get(incident)) { + seenPatterns.set(incident); + queue.addLast(Integer.valueOf(incident)); + } + } + continue; + } + + final int currentPattern = ((Integer) node).intValue(); + childMask |= bit(currentPattern); + final JoinEstimator.StatementPattern pattern = pattern(currentPattern); + for (final String v : pattern.variables()) { + if (v.equals(parentVariable)) { + continue; + } + if (seenVariables.add(v)) { + queue.addLast(v); + } + } + } + + return childMask; + } + + private static Map> buildIncidence( + final List patterns) { + + final Map> incidence = new HashMap<>(); + for (int i = 0; i < patterns.size(); i++) { + for (final String variable : patterns.get(i).variables()) { + incidence.computeIfAbsent(variable, ignored -> new ArrayList<>()).add(i); + } + } + final Map> frozen = new HashMap<>(); + for (final Map.Entry> e : incidence.entrySet()) { + frozen.put(e.getKey(), List.copyOf(e.getValue())); + } + return Collections.unmodifiableMap(frozen); + } + } +} diff --git a/join_optimizer/README.md b/join_optimizer/README.md new file mode 100644 index 00000000000..28ebeccf5bf --- /dev/null +++ b/join_optimizer/README.md @@ -0,0 +1,30 @@ + +# Sketch-based Join Order Optimizer + +Files: +- `JoinEstimator.java`: DataSketches-backed sketch algebra and synopsis model. +- `JoinOrderOptimizer.java`: exact DP optimizer plus greedy fallback. + +Dependency (current Maven Central release): +```xml + + org.apache.datasketches + datasketches-java + 9.0.0 + +``` + +The source uses the on-heap tuple-sketch APIs from +`org.apache.datasketches.tuple.arrayofdoubles`. + +Core assumption: +- base statement-pattern synopses are materialized offline; +- every retained sketch hash can be mapped back to the original term id by a `SketchKeyResolver`; +- the exact DP is for connected, acyclic, unary/binary statement-pattern queries where each extension shares exactly one variable with the current connected prefix. + +Typical flow: +1. Build `PatternSynopsis` objects offline using `PatternSynopsisBuilder`. +2. Register them in `InMemorySynopsisCatalog`. +3. Provide a `SketchKeyResolver` that resolves retained sketch hashes to original term ids. +4. Create `JoinEstimator`. +5. Run `JoinOrderOptimizer.optimizeDp(...)`. diff --git a/plans/detailed-design.md b/plans/detailed-design.md new file mode 100644 index 00000000000..49ed80e78d0 --- /dev/null +++ b/plans/detailed-design.md @@ -0,0 +1,1037 @@ +# RDF4J LMDB Join Order Optimizer — Detailed Design + +**Document type:** Detailed design +**Target module:** `core/sail/lmdb` +**Audience:** Engineers implementing planner, ordered access, and statistics support + +--- + +## 1. Overview + +This document turns the implementation design into concrete behavior. + +The optimizer is built around one idea: + +> For LMDB, the cost of adding the next statement pattern depends on the actual index prefixes that can be used **after considering which variables are already bound**. + +The design therefore models: + +1. **binding state** per position, +2. **candidate access paths** per statement pattern, +3. **rows scanned per probe**, +4. **rows returned per probe**, +5. **order properties** for merge join, +6. and **plan-state cost accumulation**. + +--- + +## 2. Scope + +### 2.1 In-scope + +- inner join groups made only of `StatementPattern` +- join reordering for LMDB +- LMDB index-aware cost estimation +- ordered retrieval and merge-join enablement +- prefix statistics +- explainable chosen access paths + +### 2.2 Out-of-scope for this version + +- bushy plans +- adaptive re-optimization during execution +- exact skew-aware histograms +- optimizer support for SERVICE, property paths, arbitrary mixed tuple expressions +- automatic creation of new indexes + +--- + +## 3. Query-tree traversal behavior + +`LmdbJoinOrderOptimizer` must preserve the traversal behavior of RDF4J’s current `QueryJoinOptimizer` unless explicitly changed here. + +### 3.1 `LeftJoin` + +Behavior is unchanged: + +1. optimize left side first, +2. extend bound-variable scope with left-side bindings, +3. optimize right side under that extended scope. + +### 3.2 Priority join arguments + +Maintain current behavior for: + +- `BindingSetAssignment` +- extension / `BIND` +- subselect-like arguments that should be evaluated before normal join reordering + +These are **not** part of LMDB DP search. + +### 3.3 Pure statement-pattern groups + +If, after removing priority arguments, the remaining flattened join group consists only of `StatementPattern`, apply LMDB-specific planning. + +### 3.4 Mixed groups + +If any remaining non-priority argument is not a `StatementPattern`, do **not** use LMDB DP for that group. Use generic ordering logic for that group. + +This is the safety boundary for the first implementation. + +--- + +## 4. Binding-state model + +For each statement pattern position: + +- `S` = subject +- `P` = predicate +- `O` = object +- `C` = context + +Define a per-position state: + +```text +CONST = compile-time constant RDF value +BOUND = variable is not constant now, but will be bound by previous join steps +UNBOUND = variable still free when this pattern executes +ABSENT = no context variable exists for the pattern +``` + +### 4.1 Source of `CONST` + +A position is `CONST` if: + +1. `Var.hasValue()` is true, or +2. the variable name is present in incoming query bindings with a concrete value. + +In the second case, the value must be treated as a compile-time constant for planning. + +### 4.2 Source of `BOUND` + +A position is `BOUND` if: + +1. the variable has no compile-time value, and +2. its variable name is already bound by the current partial plan. + +### 4.3 Source of `UNBOUND` + +A position is `UNBOUND` if: + +1. it has no compile-time value, and +2. its variable name is not yet bound by the current partial plan. + +### 4.4 Source of `ABSENT` + +Only applicable to context: + +- if the statement pattern has no context variable, context state is `ABSENT`. + +For index-prefix scoring, `ABSENT` behaves the same as `UNBOUND`. + +--- + +## 5. Statement-pattern term resolution + +For every statement pattern, construct a `ResolvedPatternTerms` object: + +```text +subject: PositionState + optional Value + optional variable name +predicate: PositionState + optional Value + optional variable name +object: PositionState + optional Value + optional variable name +context: PositionState + optional Value + optional variable name +``` + +This object is input to all cost and access-path logic. + +### 5.1 Repeated variables inside one pattern + +If the same variable occurs in multiple positions, the state of each occurrence is derived independently but linked by variable name. + +Examples: + +- `?x :p ?x` + - if `?x` not yet bound: subject = `UNBOUND`, object = `UNBOUND`, plus equality constraint + - if `?x` already bound: subject = `BOUND`, object = `BOUND` + +### 5.2 Invalid constant types + +Use the same defensive behavior as current cardinality code: + +- subject constant must be a `Resource` +- predicate constant must be an `IRI` +- context constant must be a `Resource` + +Invalid inlined values must be treated as unbound/non-indexable for planning. + +--- + +## 6. Index model + +LMDB indexes are configured as field sequences such as: + +- `spoc` +- `posc` +- `sopc` +- `ospc` + +Each sequence defines the lexicographic order of the encoded quad key. + +### 6.1 Descriptor representation + +Represent each index with: + +```text +name = original field sequence string, e.g. "spoc" +fieldSeq = char[] or equivalent, e.g. ['s','p','o','c'] +``` + +### 6.2 Prefix usability + +For a given resolved statement pattern, the usable prefix length of an index is: + +> the number of consecutive leading fields in the index whose positions are in state `CONST` or `BOUND`, stopping at the first `UNBOUND`/`ABSENT`. + +Examples: + +#### Example A +Pattern: `?s :p ?o` +Current bound vars: `{?s}` +Index: `spoc` + +- `s = BOUND` +- `p = CONST` +- `o = UNBOUND` +- `c = ABSENT` + +Usable prefix = `2` (`s,p`) + +#### Example B +Pattern: `?s :p ?o` +Current bound vars: `{}` +Index: `spoc` + +- `s = UNBOUND` +- `p = CONST` +- usable prefix = `0` + +#### Example C +Pattern: `:a ?p :b` +Index: `spoc` + +- `s = CONST` +- `p = UNBOUND` +- `o = CONST` +- usable prefix = `1`, not `2` + +The fixed object does not help because predicate blocks the prefix. + +--- + +## 7. Access-path enumeration + +For each statement pattern under a given bound-variable set: + +1. enumerate every configured LMDB index, +2. compute prefix length, +3. estimate scan rows and output rows, +4. derive optional order property, +5. retain best candidates. + +### 7.1 Candidate retention rule + +Keep all indexes whose prefix length equals the **maximum prefix length** for that pattern and bound-variable set. + +Reason: + +- the optimizer must be aware of alternative orders available at the same prefix quality, +- but it must not keep obviously dominated lower-prefix candidates. + +### 7.2 Exception: no order candidates for prefix length 0 + +If the best prefix length is `0`, the candidate set is reduced to unordered access only. + +Reason: + +- a full-scan order is usually not useful enough to justify merge-join planning, +- and advertising such orders leads to pathological plans. + +### 7.3 Candidate fields + +Each access-path candidate must contain at least: + +```text +indexName +fieldSeq +prefixLen +rowsScannedPerProbe +rowsReturnedPerProbe +probeCost +orderedByVarName (nullable) +requestedStatementOrder (nullable) +usesRangeLookup (boolean) +``` + +### 7.4 Ordered candidate derivation + +For a retained index candidate: + +- if `prefixLen > 0` +- and `prefixLen < 4` +- and the first varying field after the prefix corresponds to an unbound variable, + +then the candidate may expose an order. + +Example: + +Index = `spoc`, prefixLen = 2, first varying field = `o` +If object variable is unbound, `orderedByVarName = objectVarName`. + +If the field after the prefix is already fixed, there is a bug in prefix computation. + +--- + +## 8. Statistics model + +The optimizer needs two classes of numbers: + +1. **exact constant cardinalities** +2. **average prefix fanout** + +### 8.1 Exact constant cardinalities + +Use LMDB’s existing exact or estimated constant-based cardinality logic through `LmdbEvaluationStatistics` and `TripleStore.cardinality(...)`. + +This path is used when all relevant fixed values are compile-time constants. + +### 8.2 Prefix statistics + +For each index, maintain: + +- `rowCount` +- `distinctPrefixCount[1]` +- `distinctPrefixCount[2]` +- `distinctPrefixCount[3]` +- `distinctPrefixCount[4]` + +Derived: + +- `avgRowsPerPrefix[1] = rowCount / distinctPrefixCount[1]` +- `avgRowsPerPrefix[2] = rowCount / distinctPrefixCount[2]` +- etc. + +### 8.3 Why prefix distinct counts are enough + +For runtime-bound prefix probes, the optimizer needs: + +> “If the first `k` fields of this index are bound at execution time, how many rows do I expect per probe?” + +That is exactly `avgRowsPerPrefix[k]`. + +### 8.4 Snapshot format + +Use an immutable in-memory snapshot: + +```text +StatisticsSnapshot + totalRows + builtAtNanos + dirtyCommitsAtBuild + byIndexName -> IndexStatistics +``` + +Where: + +```text +IndexStatistics + indexName + fieldSeq + rowCount + distinctPrefixCount[1..4] + avgRowsPerPrefix[1..4] +``` + +--- + +## 9. Building prefix statistics + +### 9.1 Build strategy + +Compute prefix statistics by scanning each configured index in key order. + +Because keys are already sorted lexicographically by index sequence, distinct prefix counts are easy to count in a single pass. + +### 9.2 One-pass algorithm + +For each index: + +1. open read cursor on explicit DB +2. open read cursor on inferred DB +3. process both and aggregate totals +4. for each record: + - decode ordered quad IDs for this index sequence + - compare prefix lengths 1..4 against previous key + - increment distinct counters when the prefix changes + +### 9.3 Pseudocode + +```text +for each index: + rows = 0 + distinct[1..4] = 0 + prevKey = null + + for each record in explicit DB and inferred DB: + key = decodeIndexOrderedIds(record) + + rows += 1 + + if prevKey == null: + distinct[1] += 1 + distinct[2] += 1 + distinct[3] += 1 + distinct[4] += 1 + else: + if prefixChanged(prevKey, key, 1): distinct[1] += 1 + if prefixChanged(prevKey, key, 2): distinct[2] += 1 + if prefixChanged(prevKey, key, 3): distinct[3] += 1 + if prefixChanged(prevKey, key, 4): distinct[4] += 1 + + prevKey = key +``` + +### 9.4 Complexity + +For `m` configured indexes and `N` statements: + +- build complexity is `O(mN)` +- memory is `O(m)` + +This is acceptable because: + +- LMDB index count is low, +- stats build is infrequent, +- result is cached. + +--- + +## 10. Statistics refresh policy + +### 10.1 Dirtying rule + +Any committed transaction that adds or removes statements increments `dirtyCommitCount`. + +Exact mutation counts are not required for the first implementation. + +### 10.2 Refresh rule + +Refresh snapshot when either condition is true: + +1. no snapshot exists, +2. `dirtyCommitCount >= queryOptimizerStatisticsRefreshCommitThreshold` + +### 10.3 Build timing + +If `queryOptimizerStatisticsBuildOnInit = true`, build at store initialization. + +Otherwise build lazily on first optimizer use. + +### 10.4 Failure behavior + +If stats build fails: + +1. log warning, +2. keep previous snapshot if present, +3. fall back to conservative heuristics, +4. never fail query planning because stats rebuild failed. + +--- + +## 11. Cost model + +The planner needs: + +- **probe scan cost** +- **probe output rows** +- **step cost** +- **plan output rows** + +### 11.1 Definitions + +Let: + +- `outerRows` = estimated rows produced by current partial plan +- `scanRowsPerProbe` = rows LMDB must inspect per probe +- `outRowsPerProbe` = rows returned per probe +- `scanWeight` = cost of scanning one row (constant) +- `emitWeight` = cost of materializing one output row (constant) +- `probeStartup` = constant startup per probe + +Recommended defaults: + +```text +scanWeight = 1.0 +emitWeight = 0.25 +probeStartup = 5.0 +``` + +These weights are internal constants, not public API. + +### 11.2 Scan rows per probe + +#### Case A: prefix length = 0 + +```text +scanRowsPerProbe = totalRows +``` + +#### Case B: prefix length > 0 and every prefix field is compile-time constant + +Use exact cardinality of the prefix-only restriction. + +Example: + +- chosen index `spoc` +- prefixLen = 2 +- subject constant, predicate constant + +Then compute: + +```text +scanRowsPerProbe = cardinality(s = const, p = const, o = *, c = *) +``` + +#### Case C: prefix length > 0 and any prefix field is runtime-bound + +Use average rows for that prefix length from the chosen index: + +```text +scanRowsPerProbe = avgRowsPerPrefix[prefixLen] +``` + +### 11.3 Output rows per probe + +`outRowsPerProbe` models how many rows survive all restrictions. + +#### Fast path: all fixed positions are compile-time constants + +Use exact full-pattern cardinality: + +```text +outRowsPerProbe = cardinality(all compile-time fixed values) +``` + +#### Mixed path: runtime-bound values present + +Start with: + +```text +outRowsPerProbe = scanRowsPerProbe +``` + +Then multiply by selectivity factors for all additional restrictions not already accounted for in the usable prefix. + +##### 11.3.1 Constant non-prefix field + +For a constant field not in the usable prefix: + +```text +selectivity(field = const) = exactCardinality(field = const only) / totalRows +outRowsPerProbe *= selectivity +``` + +Clamp to `[0,1]`. + +##### 11.3.2 Runtime-bound non-prefix field + +For a runtime-bound field not in the usable prefix: + +```text +selectivity(field = bound) = 1 / distinct(field) +``` + +Where `distinct(field)` is derived from any configured index whose first field is that field. + +If no index starts with that field, use fallback: + +```text +selectivity = 1 / max(10, sqrt(totalRows)) +``` + +##### 11.3.3 Repeated-variable equality inside one pattern + +For every additional occurrence of the same variable not already fixed by the prefix, multiply by an equality factor: + +```text +equalitySelectivity ≈ 1 / distinct(fieldOfExtraOccurrence) +``` + +Use the same `distinct(field)` lookup as above. + +If unavailable, reuse the generic fallback. + +### 11.4 Probe cost + +```text +probeCost = probeStartup + (scanRowsPerProbe * scanWeight) + (outRowsPerProbe * emitWeight) +``` + +### 11.5 Step cost in a left-deep plan + +Adding a new statement pattern to an existing partial plan: + +```text +stepCost = outerRows * probeCost +stepRows = outerRows * outRowsPerProbe +``` + +This works because every row from the left side produces one parameterized probe of the right-side statement pattern. + +### 11.6 Cross join penalty + +If the new statement pattern shares no variable with the current partial plan, the same formula already penalizes it because `outerRows` multiplies a non-parameterized scan. + +No extra ad-hoc penalty is required in the LMDB DP model. + +### 11.7 Merge join cost + +If a merge join is possible: + +```text +mergeCost = leftCost + rightScanCost + mergeCpuFactor * (leftRows + rightRows) +``` + +Recommended: + +```text +mergeCpuFactor = 0.2 +``` + +But for plan comparison, the implementation may simplify to: + +```text +mergeStepCost = leftRows + rightRows +``` + +if constants are calibrated consistently. + +### 11.8 Merge join output rows + +Use the same output-row estimate as nested-loop addition: + +```text +mergeStepRows = leftRows * outRowsPerProbe +``` + +because `outRowsPerProbe` is already conditioned on the shared bound variables. + +--- + +## 12. Choosing between nested loop and merge join + +A merge join candidate is valid only if: + +1. merge joins are enabled, +2. current partial plan has an output order on variable `v`, +3. next statement pattern can produce the same order on `v`, +4. `v` is a join variable, +5. the size ratio satisfies: + ```text + max(leftRows, rightRows) / max(1, min(leftRows, rightRows)) <= MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER + ``` +6. ordered access does not require a prefix downgrade. + +If valid, compute both nested-loop and merge costs and keep the cheaper state. + +--- + +## 13. DP plan search + +### 13.1 State shape + +A DP state must contain: + +```text +subsetMask // which statement patterns are included +orderedByVarName // nullable physical property +cost // total estimated cost of the plan +rows // total estimated output rows +boundVarNames // all binding names produced by the subset +planItems // ordered plan representation used to build the final tree +``` + +`orderedByVarName` is part of the state key because the same subset may have different future usefulness depending on whether it preserves a join order. + +### 13.2 Singleton states + +For each statement pattern: + +1. enumerate retained access paths, +2. create: + - one unordered singleton state, + - plus one ordered singleton state per supported order, +3. keep only the cheapest state per `(subsetMask, orderedByVarName)`. + +### 13.3 Transition + +For each existing state and each remaining statement pattern: + +1. derive bound-variable set from the state, +2. enumerate access paths for that pattern under the state’s bindings, +3. compute: + - nested-loop transition + - optional merge-join transition +4. keep best state for resulting `(newSubsetMask, newOrderedByVarName)`. + +### 13.4 Final state + +Pick the cheapest full-subset state. + +If multiple full states have nearly equal cost, tie-break in this order: + +1. lower total cost +2. lower output rows +3. higher average prefix length +4. more merge joins +5. deterministic lexical order of original statement-pattern positions + +### 13.5 DP cutoff + +If pattern count exceeds threshold, switch to greedy. + +--- + +## 14. Greedy fallback + +For statement-pattern groups larger than threshold: + +1. choose the best singleton statement pattern, +2. repeatedly add the cheapest next statement pattern using current bound vars, +3. preserve ordered state when beneficial, +4. consider merge join only when current state already has order. + +This keeps complexity linear-ish for large groups. + +--- + +## 15. Building the final join tree + +### 15.1 Do not mutate while searching + +During DP/greedy search, do **not** mutate the original query model. + +Store lightweight planning metadata only. + +### 15.2 Plan item representation + +Each plan item should record: + +```text +originalStatementPattern +chosenIndexName +chosenOrderVarName (nullable) +joinMethodToPrevious = NONE | NESTED_LOOP | MERGE +mergeJoinVarName (nullable) +``` + +### 15.3 Tree construction + +After best plan is chosen: + +1. clone or reuse optimized statement-pattern nodes in the chosen order, +2. attach metadata: + - set planned `indexName` + - set statement-pattern order if directly needed by execution path +3. build a right-recursive `Join` chain +4. mark joins with: + - `setMergeJoin(true)` + - `setOrder(var)` + where applicable + +### 15.4 Right-recursive shape + +Preserve RDF4J’s current right-recursive join construction to remain compatible with iterative evaluation optimization behavior. + +--- + +## 16. Ordered retrieval in `LmdbSailDataset` + +### 16.1 `getSupportedOrders(...)` + +Given concrete `subj`, `pred`, `obj`, `contexts`: + +1. convert known values to LMDB IDs where possible, +2. treat unknown or multiple-context requests conservatively, +3. compute best prefix length across configured indexes, +4. if best prefix length is `0`, return empty set, +5. for each index with that best prefix length: + - find first varying field after the prefix, + - map field to `StatementOrder`, + - add to result + +If multiple specific contexts are supplied, treat context as not fixed for support calculation. + +### 16.2 `getStatements(StatementOrder, ...)` + +Select the best index satisfying all of: + +1. index has best prefix length for current concrete bindings, +2. first varying field after the prefix matches requested order, +3. requested order is actually supported for this call. + +Then perform the same range or full scan logic as normal statement retrieval, but using that selected index. + +### 16.3 Multi-context ordering + +If multiple specific contexts are requested: + +1. create one per-context ordered iterator, +2. merge them with a heap-based k-way merge using statement comparator for the requested order. + +Do **not** concatenate with `UnionIteration`, because that destroys global order. + +### 16.4 Comparator + +Implement `getComparator()` as a value comparator consistent with LMDB index key order. + +Use LMDB internal value IDs whenever possible. + +--- + +## 17. Value comparator design + +### 17.1 Correctness requirement + +For ordered LMDB scans, the comparator must compare values in the same order used in the underlying LMDB keys. + +### 17.2 Implementation rule + +If both values are LMDB values with valid internal IDs for the current value-store revision: + +```text +compare(left, right) = compareUnsigned(left.getInternalID(), right.getInternalID()) +``` + +Otherwise: + +1. try resolving IDs through the value store without creating new values, +2. if both resolve, compare resolved IDs, +3. otherwise fall back to generic RDF value comparison **outside** the LMDB ordered fast path only. + +### 17.3 Why internal IDs are safe + +LMDB stores encoded value IDs in keys, and the varint encoding preserves numeric and lexicographic order. Therefore comparing value IDs is comparator-consistent with iterator order. + +--- + +## 18. Planned index-name annotation + +Every chosen statement pattern should be annotated with the planner’s chosen index name. + +### 18.1 Purpose + +- explain plans +- regression tests +- troubleshooting +- validating access-path choice + +### 18.2 Runtime overwrite + +If runtime execution reports a different actual index, runtime metadata wins for diagnostics. + +--- + +## 19. Mixed join-group fallback behavior + +If the group contains non-`StatementPattern` arguments after priority removal: + +1. optimize child joins recursively, +2. use the generic RDF4J join-order logic for that group, +3. do not attempt LMDB DP, +4. do not expose LMDB merge-join assumptions for that group. + +This avoids complex mixed-node semantics in v1. + +--- + +## 20. Examples + +### 20.1 Example 1 — runtime-bound variable changes best access path + +Query fragment: + +```sparql +?org :locatedIn :Berlin . +?person :worksFor ?org . +?person :name ?n . +``` + +Configured indexes: + +```text +spoc,posc +``` + +#### Step 1 +Pattern `?org :locatedIn :Berlin` + +- `posc` usable prefix = `2` (`p,o`) +- choose first + +Assume output rows = 100 organizations. + +#### Step 2 +Pattern `?person :worksFor ?org` + +Current bound vars = `{org}` + +- `spoc`: subject unbound => prefix `0` +- `posc`: predicate const + object bound => prefix `2` + +Choose `posc`. + +Now each organization produces a narrow probe, not a full scan. + +#### Step 3 +Pattern `?person :name ?n` + +Current bound vars = `{org, person}` + +- `spoc`: subject bound + predicate const => prefix `2` + +Choose `spoc`. + +Result: good left-deep nested-loop plan. + +### 20.2 Example 2 — order support should not force downgrade + +Pattern: + +```sparql +?x :p ?y +``` + +Current bound vars = `{?x}` + +Indexes: + +```text +spoc,posc +``` + +- `spoc` prefix = `2`, next varying field = `o`, ordered by `?y` +- `posc` prefix = `1`, next varying field = `o` + +Only `spoc` is retained because it has better prefix length. + +Result: order by `?y` is supported from `spoc`; no downgrade. + +### 20.3 Example 3 — full-scan order must not be advertised + +Pattern: + +```sparql +?s ?p ?o +``` + +Indexes: + +```text +spoc,posc +``` + +Best prefix length = `0`. + +Even though the store could physically emit a full scan in `s` or `p` order, the optimizer must return **no supported order** for this planning purpose. + +--- + +## 21. Error handling + +### 21.1 Unknown value IDs + +If a compile-time constant does not exist in the value store, exact cardinality is `0` and the pattern should be strongly preferred because it collapses the join group quickly. + +### 21.2 Statistics unavailable + +If no statistics snapshot exists and build fails: + +- use exact constant cardinality when available, +- otherwise use generic heuristics with conservative scan penalties, +- do not fail the query. + +### 21.3 Ordered access unavailable through wrappers + +If a wrapper dataset does not forward ordered APIs, ordered support is effectively disabled for that query shape. +The optimizer must still produce correct unordered plans. + +--- + +## 22. Complexity summary + +### 22.1 DP search + +For `n <= 8`: + +- subsets: `2^n` +- states per subset: bounded by number of interesting orders + 1 +- practical size is small because order dimension is at most one variable per step + +### 22.2 Greedy search + +Roughly `O(n^2 * i)` where `i` = number of indexes. + +### 22.3 Statistics build + +`O(mN)` where `m` = configured index count. + +--- + +## 23. Verification checklist + +The detailed design is fully implemented only if all statements below are true. + +### Planner + +- [ ] Statement patterns are costed against actual configured LMDB indexes +- [ ] Runtime-bound variables count toward usable prefix length +- [ ] Prefix length `0` never advertises order +- [ ] DP search retains order as a physical property +- [ ] Merge join compares against nested-loop alternative + +### Store/runtime + +- [ ] `LmdbSailDataset.getSupportedOrders(...)` implemented +- [ ] `LmdbSailDataset.getStatements(StatementOrder, ...)` implemented +- [ ] ordered multi-context reads merge globally +- [ ] value comparator is ID-based and order-consistent + +### Statistics + +- [ ] per-index prefix distinct counts built +- [ ] stats cached +- [ ] stats marked dirty on committed write transactions +- [ ] rebuild policy implemented + +### Tests + +- [ ] join order changes with index set +- [ ] join order changes with binding order +- [ ] merge join only appears when valid +- [ ] explain plan shows chosen access path +- [ ] ordered retrieval works across multiple contexts + +--- + +## 24. Summary of design decisions + +1. **LMDB-specific planner, not generic-core rewrite** +2. **Pure statement-pattern groups only** for LMDB DP in v1 +3. **Runtime-bound variables count as prefix-fixed** +4. **Prefix distinct counts** are the required statistics +5. **Order is exposed only at best prefix quality and only if prefixLen > 0** +6. **Left-deep DP up to 8 patterns**, greedy above +7. **Ordered multi-context reads require k-way merge** +8. **Comparator must use LMDB internal IDs** + +These are the implementation-critical decisions. Everything else is supporting detail. \ No newline at end of file diff --git a/plans/engineering-design-doc.md b/plans/engineering-design-doc.md new file mode 100644 index 00000000000..74abdf3f5c6 --- /dev/null +++ b/plans/engineering-design-doc.md @@ -0,0 +1,743 @@ +# RDF4J LMDB Join Order Optimizer — Engineering Design Document + +**Document type:** Engineering design document +**Audience:** Maintainers, performance engineers, release owners, tech leads +**Project:** LMDB-specific SPARQL join planning in RDF4J + +--- + +## 1. Executive summary + +The RDF4J LMDB store already knows how to choose a good index **once a statement lookup is executed**, but the default join optimizer still behaves largely as if storage were generic. + +That mismatch causes real problems: + +- the optimizer can pick the wrong first pattern, +- it can ignore the configured LMDB index set, +- it cannot properly value runtime-bound variables as indexable probes, +- and it cannot exploit ordered access because LMDB’s ordered APIs are currently stubbed. + +This project addresses that gap by introducing an **LMDB-local physical planner** and the minimum runtime support needed to use it. + +The resulting design: + +- limits code churn outside LMDB, +- preserves current behavior for non-LMDB stores, +- is feature-flagged, +- supports staged rollout, +- and provides strong testability and observability. + +--- + +## 2. Why this work matters + +### 2.1 User-visible impact + +Bad join order is one of the most expensive planner mistakes in RDF systems because a small logical reordering can change execution from: + +- a few thousand narrow prefix probes + +to + +- repeated full or near-full scans. + +When this happens in LMDB, the store is blamed even though the underlying runtime index selection is often fine. The real issue is that planning did not expose the right bound values to the runtime access path. + +### 2.2 Engineering value + +This project improves more than raw performance. + +It also gives the team: + +- a clearer separation between logical and physical planning, +- explainable access-path decisions, +- reproducible plan behavior under different index configurations, +- and a foundation for later work such as adaptive planning or index advising. + +--- + +## 3. Problem framing + +### 3.1 Current asymmetry + +Current LMDB behavior has three distinct layers: + +1. **storage layer** + index-aware at runtime + +2. **statistics layer** + partly LMDB-aware, but only for compile-time constants + +3. **join optimizer** + generic and largely store-agnostic + +The join optimizer is the weak link. + +### 3.2 Failure modes we are explicitly targeting + +1. A statement pattern is selective only **after** a previous join binds one of its variables. +2. The generic optimizer treats that pattern as weak because the value is not a compile-time constant. +3. LMDB actually has an index that would make the parameterized probe cheap. +4. The optimizer starts elsewhere and creates a huge intermediate result. + +Other failure modes: + +- merge join is impossible to exploit because ordered access is not implemented, +- configured custom index sets do not materially influence join order, +- explain output does not show enough planner intent. + +--- + +## 4. Constraints + +### 4.1 Technical constraints + +1. The implementation must fit into RDF4J’s existing evaluation-strategy and optimizer-pipeline architecture. +2. The LMDB store already has established internal classes (`LmdbStore`, `LmdbSailStore`, `TripleStore`, `LmdbEvaluationStatistics`) and the design should reuse them. +3. Public API expansion should be minimal. +4. Correctness is non-negotiable. +5. Planner failure must not make queries fail. + +### 4.2 Organizational constraints + +1. The change should be reviewable by a normal-sized team. +2. It should be mergeable without a broad generic-optimizer redesign. +3. It should support rollback if performance regressions appear in edge workloads. + +### 4.3 Performance constraints + +1. Planner overhead must remain modest. +2. Statistics rebuild must not dominate every query. +3. Ordered access must not regress non-ordered cases. + +--- + +## 5. Alternatives considered + +### Alternative A — do nothing + +#### Description + +Keep generic join ordering and rely on runtime `TripleStore.getBestIndex(...)`. + +#### Pros + +- zero implementation cost +- zero rollout risk + +#### Cons + +- core problem remains unsolved +- runtime index selection arrives too late to fix bad join order +- known LMDB workload regressions remain possible + +#### Decision + +Rejected. + +--- + +### Alternative B — patch generic `QueryJoinOptimizer` for all stores + +#### Description + +Teach RDF4J’s generic optimizer about index sets, binding-sensitive access paths, and order-aware planning. + +#### Pros + +- one optimizer for all stores +- no store-local duplication + +#### Cons + +- far larger blast radius +- generic abstractions are not yet rich enough +- likely requires cross-store API design before implementation +- risk of destabilizing non-LMDB stores + +#### Decision + +Rejected for this project. + +This may be a future architectural direction, but it is the wrong first move. + +--- + +### Alternative C — subclass generic `QueryJoinOptimizer` + +#### Description + +Create `LmdbJoinOrderOptimizer extends QueryJoinOptimizer` and override a few hooks. + +#### Pros + +- less code duplication in theory + +#### Cons + +- current generic optimizer stores critical planning state in private inner classes +- required behavior changes are deeper than a few hooks +- subclassing would be fragile across upstream changes +- hard to combine DP search, order-state tracking, and LMDB-only access-path logic cleanly + +#### Decision + +Rejected. + +We will **copy and adapt** the relevant logic into an LMDB-local optimizer. + +--- + +### Alternative D — LMDB-local planner via custom strategy factory and pipeline + +#### Description + +Add a store-specific evaluation-strategy factory and optimizer pipeline that replaces only the join-ordering stage for LMDB. + +#### Pros + +- contained code change +- exploits existing factory/pipeline extension points +- preserves other stores +- easy to feature-flag +- easy to roll back + +#### Cons + +- some duplication of generic optimizer logic +- requires maintaining LMDB-local planner code + +#### Decision + +Chosen. + +This is the correct implementation boundary. + +--- + +### Alternative E — exact per-value multi-dimensional statistics + +#### Description + +Maintain full histograms or exact distinct/frequency maps for all useful prefixes and value combinations. + +#### Pros + +- more accurate selectivity estimates +- better skew handling + +#### Cons + +- high storage complexity +- expensive updates +- difficult delete semantics +- large implementation scope +- unnecessary for first delivery + +#### Decision + +Rejected for v1. + +--- + +### Alternative F — prefix distinct-count statistics only + +#### Description + +Maintain per-index row counts and distinct prefix counts for prefix lengths 1..4. + +#### Pros + +- simple +- directly useful for parameterized-prefix fanout +- one pass per index to build +- low memory footprint + +#### Cons + +- average-based, not skew-aware +- approximate for some non-prefix filters + +#### Decision + +Chosen. + +This is the best complexity-to-value trade-off for v1. + +--- + +### Alternative G — bushy join enumeration + +#### Description + +Search arbitrary join trees. + +#### Pros + +- potentially better for some disconnected or symmetric workloads + +#### Cons + +- much larger search space +- less aligned with parameterized nested-loop execution +- more complex physical-property tracking +- more code and more regression risk + +#### Decision + +Rejected for v1. + +Use left-deep DP for small groups and greedy for larger groups. + +--- + +## 6. Why the chosen design is the right one + +The chosen design is appropriate because it matches the actual performance bottleneck. + +The LMDB store does **not** need a brand-new storage engine or a generic statistics framework first. +It needs the planner to stop throwing away physically meaningful information that is already present: + +- configured indexes, +- prefix scoring, +- and the fact that earlier joins bind later probes. + +By keeping the solution LMDB-local, the team can ship meaningful value sooner and evaluate it in production-like workloads before deciding whether a generic RDF4J abstraction should later emerge from it. + +--- + +## 7. Architecture decision summary + +### ADR-1 — Planner lives in LMDB module + +**Decision:** `LmdbJoinOrderOptimizer` resides in `core/sail/lmdb`. +**Reason:** access to `TripleStore` and internal stats without widening generic APIs. + +### ADR-2 — Strategy factory owns pipeline selection + +**Decision:** default LMDB strategy factory is replaced. +**Reason:** cleanest insertion point, minimal disruption. + +### ADR-3 — Prefix statistics are cached snapshots + +**Decision:** use in-memory cached snapshots with dirty-commit rebuild policy. +**Reason:** avoids write-path complexity and makes planner behavior deterministic. + +### ADR-4 — Ordered access is implemented in LMDB dataset + +**Decision:** finish the `SailDataset` ordered APIs for LMDB. +**Reason:** without this, order-aware planning is incomplete. + +### ADR-5 — Mixed groups fall back + +**Decision:** LMDB DP only for pure `StatementPattern` join groups in v1. +**Reason:** strict safety boundary. + +--- + +## 8. Rollout strategy + +### 8.1 Feature flags + +The implementation must ship behind config flags in `LmdbStoreConfig`. + +Required flags: + +- optimizer enabled +- merge join enabled +- prefix statistics enabled +- build stats on init +- refresh threshold +- DP threshold + +### 8.2 Rollout phases + +#### Phase 0 — dark launch in tests/benchmarks + +- code merged +- feature enabled only in targeted test configurations +- broad benchmark coverage collected + +#### Phase 1 — opt-in production evaluation + +- feature available but not necessarily default in every downstream deployment +- compare explain plans and benchmark traces +- collect regressions + +#### Phase 2 — default on for LMDB + +- feature enabled by default +- documented rollback path remains + +#### Phase 3 — tuning and cleanup + +- tune weights/thresholds if necessary +- decide whether public config surface should be expanded or reduced + +### 8.3 Rollback path + +Rollback must be one config change: + +```text +queryOptimizerEnabled = false +``` + +When disabled, LMDB should use standard optimizer pipeline behavior. + +--- + +## 9. Compatibility and migration + +### 9.1 Backward compatibility + +This project is backward compatible in the following sense: + +- query results remain unchanged, +- existing LMDB indexes remain valid, +- existing repositories do not need reindexing, +- user-provided custom evaluation strategy factories still win. + +### 9.2 Behavioral changes + +Expected changes: + +- different join orders for some queries, +- new explain-plan metadata, +- ordered statement-access methods implemented, +- possible appearance of merge joins in execution plans. + +### 9.3 Migration cost + +No data migration is required. + +Statistics snapshot is ephemeral and rebuildable. + +--- + +## 10. Operational considerations + +### 10.1 Startup behavior + +If `queryOptimizerStatisticsBuildOnInit = false`, startup cost remains almost unchanged. + +If true, expect a one-time scan over configured indexes. + +### 10.2 Warm-up behavior + +The first optimized query after startup may trigger stats build if lazy build is enabled. + +This is acceptable because it is deterministic and measurable. + +### 10.3 Write-heavy workloads + +Statistics are refreshed by dirty-commit threshold, not after every commit. +This is intentional. The planner can tolerate stale-but-reasonable stats better than the write path can tolerate rebuilds on every mutation. + +### 10.4 Read-heavy workloads + +This is the primary target scenario and should benefit most. + +--- + +## 11. Observability and diagnostics + +### 11.1 Required logs + +At debug level, log: + +1. stats snapshot build start/end and duration +2. number of indexes scanned +3. join group size and whether LMDB DP or generic fallback was used +4. candidate access paths for each chosen step +5. final ordered plan +6. merge-join acceptance/rejection reason + +### 11.2 Explain-plan expectations + +A useful explain plan should expose: + +- statement-pattern order in the final join sequence +- chosen index per statement pattern +- whether the join is merge or nested loop +- estimated rows and/or cost if available + +### 11.3 Benchmark telemetry + +Benchmarks should capture: + +- planning time +- execution time +- result counts +- chosen index sequence +- number of merge joins +- number of full-scan patterns + +--- + +## 12. Risk register + +### Risk 1 — planner regressions for mixed or unusual queries + +**Cause:** new planner scope too broad or insufficient fallback. +**Mitigation:** restrict LMDB DP to pure `StatementPattern` groups in v1. + +### Risk 2 — ordered access implementation incomplete due to wrapper datasets + +**Cause:** an intermediate dataset wrapper fails to delegate order methods. +**Mitigation:** audit all LMDB-used wrappers and add delegation tests. + +### Risk 3 — comparator mismatch causes invalid merge join + +**Cause:** ordered iterator sort order and comparator not aligned. +**Mitigation:** compare by LMDB internal IDs only for LMDB ordered path; verify with dedicated tests. + +### Risk 4 — stats build too expensive on large repositories + +**Cause:** full index scans at refresh time. +**Mitigation:** lazy build, dirty threshold, config flag, preserve previous snapshot on rebuild failure. + +### Risk 5 — stale stats cause suboptimal plans in write-heavy workloads + +**Cause:** refresh policy intentionally coarse. +**Mitigation:** configurable threshold, safe fallback, benchmark with write/read mix. + +### Risk 6 — code duplication with generic optimizer drifts over time + +**Cause:** LMDB planner copies generic traversal logic. +**Mitigation:** keep copied surface small, document divergence points, periodically diff against generic optimizer. + +### Risk 7 — full-scan ordered paths accidentally reintroduced + +**Cause:** order-support logic too permissive. +**Mitigation:** explicit invariant: never advertise order when best prefix length is zero. + +--- + +## 13. Benchmark program + +### 13.1 Benchmark goals + +The benchmark program must answer: + +1. Did planning improve query execution time? +2. Is planning overhead acceptable? +3. Are chosen plans stable and explainable? +4. Did any workload regress? + +### 13.2 Dataset mix + +Use at least: + +- synthetic star dataset +- synthetic chain/path dataset +- mixed schema/instance data +- context-heavy multi-graph dataset +- one real-ish workload dataset if available internally + +### 13.3 Query mix + +Use at least: + +1. highly selective anchor + fanout +2. same query with different bound entry points +3. predicate-heavy lookups +4. object-heavy lookups +5. join on subject +6. join on object +7. cases where merge join should help +8. cases where merge join should be rejected + +### 13.4 Index-set matrix + +Benchmark each query mix under: + +- default LMDB indexes +- one subject-oriented custom index set +- one object-oriented custom index set +- one richer index set with alternative same-prefix order choices + +### 13.5 Metrics + +Mandatory metrics: + +- planning latency +- execution latency +- total rows produced +- chosen join order +- chosen indexes +- merge-join count +- full-scan count + +--- + +## 14. Review strategy + +### 14.1 Code review slices + +Split review into small, comprehensible PRs if possible: + +1. strategy factory + pipeline wiring +2. stats manager + triple-store snapshot build +3. ordered dataset support + comparator + ordered union +4. LMDB optimizer core +5. tests and benchmarks + +### 14.2 Reviewer mix + +At minimum involve: + +- one LMDB store maintainer +- one query-evaluation/optimizer maintainer +- one performance/benchmark reviewer + +### 14.3 Review questions + +Reviewers should explicitly ask: + +1. Can this ever change results? +2. Does ordered support ever lie? +3. Can this produce a worse-than-before full scan when a good prefix exists? +4. Is the fallback path clear and reliable? +5. Is there any write-path penalty hidden in the design? + +--- + +## 15. Release criteria + +The feature is release-ready only if all of the following are true. + +### Correctness + +- all existing LMDB query tests pass +- new optimizer tests pass +- merge-join correctness tests pass +- multi-context ordered iteration tests pass + +### Stability + +- fallback path is exercised in tests +- feature flags work +- no deadlocks or rebuild races in stats manager + +### Performance + +- representative workloads improve or stay flat +- no catastrophic regressions remain unexplained +- planner overhead remains acceptable + +### Diagnostics + +- explain plan shows enough information to debug regressions +- logs reveal whether LMDB planner or generic fallback was used + +--- + +## 16. Documentation requirements + +Before release, publish at least: + +1. feature overview +2. config options +3. explanation of index-sensitive join planning +4. note that ordered APIs are now implemented for LMDB +5. troubleshooting guidance: + - how to disable feature + - how to enable debug logging + - how to compare plans under different index sets + +--- + +## 17. Long-term follow-up items + +These are explicitly **not required** for this delivery, but the design should not block them. + +### 17.1 Adaptive runtime re-optimization + +If a probe fanout is dramatically different from estimate, future work could replan remaining joins. + +### 17.2 Persistent stats snapshot + +If first-query stats rebuild is too expensive on huge stores, persist snapshot to disk. + +### 17.3 Skew-aware stats + +Heavy hitters or sampled histograms could improve estimates for extreme skew. + +### 17.4 Generic abstraction extraction + +If similar logic later appears in NativeStore or other backends, a generic physical-planner abstraction may be worth extracting. + +### 17.5 Index advisor + +Once access-path telemetry exists, an offline advisor could recommend missing indexes. + +--- + +## 18. Decision log + +| Decision | Status | +|---|---| +| Keep implementation local to LMDB | Accepted | +| Use custom strategy factory and pipeline | Accepted | +| Copy/adapt generic join traversal instead of subclassing | Accepted | +| Use prefix distinct-count snapshots | Accepted | +| Enable ordered access in `LmdbSailDataset` | Accepted | +| Restrict LMDB DP to pure statement-pattern groups in v1 | Accepted | +| Use left-deep DP up to threshold, greedy above | Accepted | +| Require feature flag rollback path | Accepted | + +--- + +## 19. Concrete acceptance criteria + +This project is successful when all of the following can be demonstrated. + +### Criterion A — index-sensitive planning + +Given the same query and data but different configured LMDB indexes, the optimizer produces different physically appropriate join orders. + +### Criterion B — binding-sensitive planning + +Given the same join group but a different earlier binding sequence, the optimizer chooses a different next statement pattern when prefix probes become available. + +### Criterion C — order-aware planning + +When two inputs can produce the same useful order at best prefix quality, merge join may appear. +When they cannot, it does not. + +### Criterion D — safe fallback + +Mixed join groups continue to work and use generic behavior. + +### Criterion E — operational safety + +A config change can disable the feature entirely and restore old behavior. + +--- + +## 20. Recommended implementation policy + +1. **Ship correctness and observability first.** +2. **Tune constants only after benchmark evidence.** +3. **Do not broaden planner scope until ordered runtime support is proven stable.** +4. **Preserve deterministic decisions and explicit tie-break rules.** +5. **Keep rollback easy.** + +--- + +## 21. Final engineering recommendation + +Proceed with the LMDB-local planner. + +It is the smallest change that actually fixes the right problem: + +- the join optimizer currently does not know what LMDB can really do, +- and the storage layer already contains enough information to make materially better choices. + +The engineering risk is manageable because the design is: + +- bounded, +- feature-flagged, +- fallback-friendly, +- benchmarkable, +- and incrementally reviewable. \ No newline at end of file diff --git a/plans/implementation-design.md b/plans/implementation-design.md new file mode 100644 index 00000000000..846f8069dee --- /dev/null +++ b/plans/implementation-design.md @@ -0,0 +1,496 @@ +# RDF4J LMDB Join Order Optimizer — Implementation Design + +**Document type:** Implementation design +**Target module:** `core/sail/lmdb` +**Target codebase:** Eclipse RDF4J LMDB store +**Status:** Ready for implementation +**Audience:** RDF4J maintainers and engineers implementing the LMDB-specific optimizer + +--- + +## 1. Purpose + +This document defines the implementation design for an **LMDB-specific SPARQL join order optimizer** in RDF4J. + +The optimizer must make join-order decisions using: + +1. the **actual LMDB index set** configured for the store, +2. the **variables that are already bound** at each point in the join plan, +3. the difference between **compile-time constants** and **runtime-bound values**, and +4. whether an access path can also provide a **useful output order** for a merge join. + +The design is intentionally scoped to the RDF4J LMDB store and does **not** modify RDF4J’s generic optimizer behavior for other stores. + +--- + +## 2. Problem statement + +Today, LMDB already makes an index-aware decision at **statement retrieval time**, but not at **join-order planning time**. + +### Current behavior summary + +- `TripleStore` already selects the best runtime index using `getBestIndex(...)`. +- `TripleIndex.getPatternScore(...)` already measures usable **leading bound prefix length**. +- `LmdbEvaluationStatistics` estimates statement cardinality from **compile-time constants only**. +- The default optimizer pipeline still uses the generic `QueryJoinOptimizer`, which: + - tracks which variables are bound, + - but does **not** cost specific LMDB access paths, + - does **not** reason about configured LMDB indexes, + - and does **not** account for runtime-bound variables as indexable prefix bindings. +- `LmdbSailStore.LmdbSailDataset` does **not** currently implement: + - `getStatements(StatementOrder, ...)` + - `getSupportedOrders(...)` + - `getComparator()` + +### Consequence + +The query planner can choose an order that is logically plausible but physically poor for LMDB. +That creates avoidable full scans, poor nested-loop probe patterns, and missed opportunities for order-preserving access and merge join. + +--- + +## 3. Goals + +### 3.1 Functional goals + +The implementation **shall**: + +1. Replace the generic join ordering logic for LMDB with an LMDB-aware optimizer. +2. Plan statement-pattern joins using the **configured LMDB indexes**. +3. Distinguish: + - compile-time constants, + - runtime-bound variables, + - unbound variables. +4. Choose access paths using **leading-prefix usability** over the real LMDB index set. +5. Estimate both: + - **rows scanned per probe**, and + - **rows returned per probe**. +6. Prefer plans that avoid repeated high-cost scans. +7. Expose statement orders that LMDB can actually produce without pathological downgrade. +8. Enable merge join when: + - both sides can produce the same useful order, + - the order does not require a harmful access-path downgrade, + - and the size ratio is reasonable. +9. Fall back safely to existing behavior when the LMDB-specific path is unavailable or unsupported. + +### 3.2 Engineering goals + +The implementation should: + +1. Minimize changes outside `core/sail/lmdb`. +2. Preserve RDF4J’s existing optimizer pipeline structure. +3. Preserve correctness first; performance improvements must never change query results. +4. Be testable at: + - unit level, + - integration level, + - explain/plan level, + - benchmark level. + +--- + +## 4. Non-goals + +This project does **not** include: + +1. a generic optimizer rewrite for all RDF4J stores, +2. adaptive runtime re-optimization mid-query, +3. an automatic index advisor that creates or drops indexes, +4. bushy join enumeration for the first implementation, +5. broad optimizer changes for property paths, SERVICE, or non-statement tuple expressions, +6. exact selectivity modeling for every skew pattern. + +Those may be added later, but they are not required for this delivery. + +--- + +## 5. Design principles + +### 5.1 Physical planning, not logical-only planning + +Join order must be chosen as a function of: + +- current bound variables, +- candidate access path, +- expected probe cost, +- expected output rows, +- and available order. + +The planner must optimize **`(current subplan, next statement pattern, access path)`**, not just statement-pattern order. + +### 5.2 Runtime-bound variables are physically meaningful + +If a variable becomes bound by an earlier join, then LMDB can often use it as a prefix key at execution time even though the value is not known at compile time. + +This is the central planning distinction: + +- `CONST` = value known at optimization time +- `BOUND` = value unknown now, but guaranteed to be bound when this statement pattern executes +- `UNBOUND` = value not yet bound + +### 5.3 Prefix quality dominates index usability + +For an LMDB index with field sequence like `spoc`, the best access paths are those that can bind the longest consecutive prefix from the start of the index. +A later fixed field does not compensate for an earlier unbound field. + +### 5.4 Order is secondary to prefix quality + +An access path that provides a merge-join-friendly order is useful **only if** it does not destroy prefix quality. +The optimizer must not choose an ordered full scan over a good prefix range scan. + +### 5.5 Fallback over fragility + +If a join group is outside the intended scope, the implementation must degrade to RDF4J’s current behavior instead of producing a partially correct but unstable plan. + +--- + +## 6. Target architecture + +```mermaid +flowchart TD + A[SPARQL TupleExpr] --> B[LmdbEvaluationStrategyFactory] + B --> C[LmdbQueryOptimizerPipeline] + C --> D[LmdbJoinOrderOptimizer] + + D --> E[LmdbOptimizerStatisticsManager] + D --> F[TripleStore index catalog] + D --> G[LmdbEvaluationStatistics exact constant cardinality] + + D --> H[Chosen join order + access-path metadata] + H --> I[Evaluation / execution] + + I --> J[LmdbSailDataset.getStatements(order,...)] + J --> K[TripleStore ordered or unordered iterator] + K --> L[IndexReportingIterator / actual index name] +``` + +### Core components + +1. **`LmdbEvaluationStrategyFactory`** + LMDB-specific factory that injects an LMDB-specific optimizer pipeline by default. + +2. **`LmdbQueryOptimizerPipeline`** + Same optimizer sequence as the standard pipeline, except generic `QueryJoinOptimizer` is replaced with `LmdbJoinOrderOptimizer`. + +3. **`LmdbJoinOrderOptimizer`** + Main planner for LMDB BGP join groups. + - Left-deep dynamic programming for small pure statement-pattern groups. + - Greedy fallback for larger groups. + - Generic fallback for mixed groups. + +4. **`LmdbOptimizerStatisticsManager`** + Maintains cached prefix statistics for configured indexes. + +5. **`TripleStore` additions** + Expose index descriptors, ordered access, and statistics snapshot building. + +6. **`LmdbSailDataset` order support** + Implements ordered access, supported-order reporting, and a value comparator aligned to LMDB key order. + +--- + +## 7. Current-state audit and required deltas + +| Area | Current state | Required change | +|---|---|---| +| Strategy factory | `LmdbStore` defaults to `StrictEvaluationStrategyFactory` | Default to `LmdbEvaluationStrategyFactory` unless user supplied a custom factory | +| Join optimizer | Generic `QueryJoinOptimizer` only | Add `LmdbJoinOrderOptimizer` and wire it into LMDB pipeline | +| Cardinality | `LmdbEvaluationStatistics` sees constants only | Keep exact constant estimation, add prefix statistics for runtime-bound modeling | +| Index awareness | Runtime only (`TripleStore.getBestIndex`) | Expose index metadata to the planner | +| Ordered scans | LMDB dataset stubs return unsupported/null | Implement order support and comparator | +| Multi-context ordered reads | Existing code unions per-context iterators unsorted | Add k-way merge for ordered multi-context iteration | +| Plan observability | Runtime actual index already visible | Also annotate planned access path / desired order | + +--- + +## 8. Chosen design + +### 8.1 Strategy and pipeline wiring + +#### Decision + +Implement a **store-specific factory and pipeline** instead of changing RDF4J’s generic optimizer. + +#### Why + +- Minimal blast radius. +- LMDB-specific logic can use LMDB internals without generic abstractions. +- Easier to preserve behavior for other stores. +- Easier to back out behind a feature flag. + +#### Implementation + +- Add `LmdbEvaluationStrategyFactory extends StrictEvaluationStrategyFactory`. +- Override `createEvaluationStrategy(...)`. +- Create the strategy exactly as today, then call: + - `strategy.setOptimizerPipeline(new LmdbQueryOptimizerPipeline(strategy, tripleSource, evaluationStatistics));` +- In `LmdbStore.getEvaluationStrategyFactory()`, instantiate `LmdbEvaluationStrategyFactory` instead of generic `StrictEvaluationStrategyFactory` when no custom factory was configured. + +--- + +## 9. Join-group planning model + +### 9.1 Scope of LMDB-specific planning + +LMDB-specific join planning applies to **flattened inner join groups** when all non-priority join arguments are `StatementPattern`. + +The optimizer will preserve RDF4J’s current handling for: + +- `LeftJoin` +- extensions / `BIND` +- subselects +- other non-statement tuple expressions + +If a join group contains mixed tuple-expression kinds, LMDB-specific planning is disabled for that group and the current generic behavior is used. + +### 9.2 Binding state model + +For every statement-pattern position `(s,p,o,c)` under a partial plan, classify the position as: + +- **CONST**: compile-time known RDF value +- **BOUND**: variable value not known now, but guaranteed to be bound by the time the pattern executes +- **UNBOUND**: not yet bound +- **ABSENT**: no context variable exists in this pattern + +This state is evaluated **per candidate subplan**. + +### 9.3 Access-path model + +For each configured LMDB index: + +1. Map pattern positions into index field order. +2. Compute usable prefix length: + - count leading fields whose state is `CONST` or `BOUND` + - stop at first `UNBOUND` +3. Estimate: + - `rowsScannedPerProbe` + - `rowsReturnedPerProbe` + - optional `orderedBy` variable +4. Keep the best candidates for planning. + +### 9.4 Plan search model + +- **DP threshold:** `8` statement patterns +- **For n <= 8:** left-deep dynamic programming +- **For n > 8:** greedy growth seeded by best singleton pattern +- **Fallback:** generic behavior if group is mixed or if statistics are unavailable and cannot be built + +This is chosen because RDF4J’s execution model already strongly favors left-deep plans for parameterized index nested loops, while keeping the search space manageable. + +--- + +## 10. Ordered access and merge join + +### 10.1 Order support rule + +LMDB may expose an order only when: + +1. the chosen index has **best available prefix length** for the current binding signature, +2. that prefix length is **greater than zero**, +3. the first varying field after the prefix corresponds to an unbound variable, +4. the dataset wrapper can actually produce globally sorted output. + +This rule prevents the optimizer from advertising useless orders based on full scans. + +### 10.2 Runtime ordered access + +Implement in `LmdbSailDataset`: + +- `getStatements(StatementOrder, ...)` +- `getSupportedOrders(...)` +- `getComparator()` + +When multiple specific contexts are requested, the implementation must: + +- create one ordered iterator per context, +- then merge them with a comparator-consistent k-way merge, +- rather than using the current unsorted `UnionIteration`. + +### 10.3 Comparator + +Use a comparator based on LMDB internal value IDs. + +Rationale: + +- LMDB index keys are ordered by encoded value IDs. +- LMDB’s varint encoding preserves lexicographic and numeric order. +- Therefore comparison by internal ID is consistent with iterator order. + +Fallback to generic value comparison is allowed only outside the ordered-LMDB fast path. + +--- + +## 11. Statistics design + +### 11.1 What statistics are required + +For every configured index, maintain: + +- total rows, +- distinct count for prefix length 1, +- distinct count for prefix length 2, +- distinct count for prefix length 3, +- distinct count for prefix length 4, +- derived average rows per prefix: + - `avgRows(prefixLen) = totalRows / distinct(prefixLen)` + +These are sufficient for the first implementation. + +### 11.2 Why this is enough for v1 + +For runtime-bound prefix probes, the optimizer needs **average fanout**, not exact per-value counts. + +This is exactly what prefix distinct counts provide. + +### 11.3 Statistics lifecycle + +- Build lazily on first optimizer use, or eagerly if configured. +- Cache in memory. +- Mark stale after any committed transaction that changes statements. +- Rebuild on next optimization once stale commit count passes threshold. + +This avoids write-path complexity while keeping estimates current enough. + +--- + +## 12. Explainability and observability + +The implementation must expose enough information for debugging and regression detection. + +### Planned metadata + +Each planned statement pattern should carry: + +- chosen index name (planned), +- estimated rows scanned, +- estimated rows returned, +- whether the access path was chosen for order, +- whether the surrounding join is nested loop or merge join. + +### Runtime metadata + +LMDB already reports the actual index used via the iterator path. +Runtime metadata should continue to overwrite or confirm planned hints. + +### Logging + +Add debug logging for: + +- chosen join order, +- bound variable set per step, +- candidate access paths considered, +- rejected merge-join candidates, +- statistics rebuild events. + +--- + +## 13. Configuration + +Add the following to `LmdbStoreConfig`: + +| Property | Type | Default | Purpose | +|---|---:|---:|---| +| `queryOptimizerEnabled` | boolean | `true` | master feature flag | +| `queryOptimizerDynamicProgrammingThreshold` | int | `8` | DP vs greedy cutoff | +| `queryOptimizerMergeJoinEnabled` | boolean | `true` | allow merge-join planning | +| `queryOptimizerStatisticsEnabled` | boolean | `true` | enable prefix stats | +| `queryOptimizerStatisticsBuildOnInit` | boolean | `false` | eager stats build | +| `queryOptimizerStatisticsRefreshCommitThreshold` | int | `100` | stale-to-rebuild threshold | + +If RDF config serialization is part of your deployment, also extend LMDB config schema/factory to read and write these values. + +--- + +## 14. Compatibility + +### Preserved behavior + +- Results must remain identical. +- Existing LMDB index configuration remains valid. +- Existing custom evaluation strategy factory configuration still wins if explicitly set. + +### Changed behavior + +- Default LMDB query planning becomes index-aware. +- Ordered statement retrieval is now implemented. +- Explain/plan output includes LMDB-specific access-path details. + +--- + +## 15. Risks and mitigations + +| Risk | Impact | Mitigation | +|---|---|---| +| Statistics build is expensive on huge stores | slower first optimized query | lazy build + rebuild threshold + config | +| Ordered access through wrapper datasets is not forwarded | merge join never triggers | audit every `SailDataset` wrapper used by LMDB and delegate order methods | +| Comparator mismatches iterator order | incorrect merge join | compare by LMDB internal IDs only for ordered LMDB path | +| Mixed join groups regress | planner instability | generic fallback for mixed groups | +| Overeager order advertisement | poor plans | advertise orders only when best prefix length > 0 and no harmful downgrade | +| Stale stats after many writes | suboptimal plans | dirty commit threshold + rebuild | + +--- + +## 16. Deliverables + +The implementation is complete only when all of the following exist: + +1. `LmdbEvaluationStrategyFactory` +2. `LmdbQueryOptimizerPipeline` +3. `LmdbJoinOrderOptimizer` +4. `LmdbOptimizerStatisticsManager` +5. `TripleStore` index-descriptor and ordered-access support +6. `LmdbSailDataset` ordered retrieval, supported orders, comparator +7. unit tests +8. integration tests +9. explain-plan tests +10. performance benchmarks +11. rollback / feature-flag path + +--- + +## 17. Acceptance summary + +This design is accepted when: + +1. LMDB chooses different join orders based on configured indexes and bound-variable state. +2. Plans differ appropriately for different index sets. +3. Runtime ordered access works. +4. Merge join appears only when it is both supported and beneficial. +5. Mixed groups remain correct and stable. +6. Benchmarks show improvement on representative LMDB workloads. + +--- + +## 18. Implementation snapshot + +### Mandatory code changes + +- `LmdbStore` +- `LmdbStoreConnection` +- `LmdbSailStore` +- `LmdbEvaluationStatistics` +- `TripleStore` +- `LmdbStoreConfig` +- new optimizer/statistics classes in `org.eclipse.rdf4j.sail.lmdb` + +### Mandatory new tests + +- prefix statistics build +- access path enumeration +- join order change under different index sets +- runtime ordered scans +- merge join on LMDB +- fallback for mixed groups +- multi-context ordered iteration + +--- + +## 19. Final recommendation + +Implement this as an **LMDB-local physical planner** that reuses RDF4J’s existing pipeline architecture but replaces only the join-ordering stage for pure statement-pattern join groups. + +That gives the team: + +- a contained code change, +- correct physical planning for LMDB, +- order-aware execution support, +- and a safe fallback path when a query is outside the intended scope. \ No newline at end of file diff --git a/plans/low-level-design-LLD.md b/plans/low-level-design-LLD.md new file mode 100644 index 00000000000..114e68cb393 --- /dev/null +++ b/plans/low-level-design-LLD.md @@ -0,0 +1,1573 @@ +# RDF4J LMDB Join Order Optimizer — Low-Level Design (LLD) + +**Document type:** Low-level design +**Target module:** `core/sail/lmdb` +**Audience:** Engineers implementing and reviewing code +**Implementation mode:** file-by-file, class-by-class + +--- + +## 1. Goal of this LLD + +This LLD specifies the concrete code structure required to implement an LMDB-specific join order optimizer in RDF4J. + +It answers: + +- which files to add, +- which existing files to change, +- which methods to add or override, +- what each method must do, +- how data flows between planner and runtime execution. + +--- + +## 2. Package layout + +All new optimizer classes should live in: + +```text +org.eclipse.rdf4j.sail.lmdb +``` + +### Why same package? + +`TripleStore` and `LmdbEvaluationStatistics` are package-private/internal and the optimizer must access their internals directly without expanding public API more than necessary. + +--- + +## 3. New files + +Add the following files. + +### 3.1 `LmdbEvaluationStrategyFactory.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +public class LmdbEvaluationStrategyFactory extends StrictEvaluationStrategyFactory { + public LmdbEvaluationStrategyFactory(); + public LmdbEvaluationStrategyFactory(FederatedServiceResolver resolver); + + @Override + public EvaluationStrategy createEvaluationStrategy( + Dataset dataset, + TripleSource tripleSource, + EvaluationStatistics evaluationStatistics); +} +``` + +### 3.2 `LmdbQueryOptimizerPipeline.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +public class LmdbQueryOptimizerPipeline implements QueryOptimizerPipeline { + public LmdbQueryOptimizerPipeline( + EvaluationStrategy strategy, + TripleSource tripleSource, + EvaluationStatistics evaluationStatistics); + + @Override + public Iterable getOptimizers(); +} +``` + +### 3.3 `LmdbJoinOrderOptimizer.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +public final class LmdbJoinOrderOptimizer implements QueryOptimizer { + public LmdbJoinOrderOptimizer( + LmdbEvaluationStatistics lmdbStatistics, + boolean trackResultSize, + TripleSource tripleSource, + LmdbStoreConfig config); + + @Override + public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings); +} +``` + +Use nested static records/classes for: + +- `ResolvedPatternTerms` +- `ResolvedTerm` +- `AccessPath` +- `PlanItem` +- `PlanState` +- `IndexStatsRef` + +### 3.4 `LmdbOptimizerStatisticsManager.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +final class LmdbOptimizerStatisticsManager { + + static final class StatisticsSnapshot { ... } + + static final class IndexStatistics { ... } + + LmdbOptimizerStatisticsManager(TripleStore tripleStore, LmdbStoreConfig config); + + StatisticsSnapshot getSnapshot(); + + void maybeRefresh(); + + void forceRefresh(); + + void markDirtyCommit(); +} +``` + +### 3.5 `LmdbOrderedValueComparator.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +final class LmdbOrderedValueComparator implements Comparator { + LmdbOrderedValueComparator(ValueStore valueStore); + + @Override + public int compare(Value left, Value right); +} +``` + +### 3.6 `LmdbOrderedStatementUnionIteration.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +final class LmdbOrderedStatementUnionIteration + extends LookAheadIteration + implements IndexReportingIterator { + LmdbOrderedStatementUnionIteration( + List> sources, + Comparator statementComparator, + String indexNameHint); + + @Override + protected Statement getNextElement(); + + @Override + protected void handleClose(); + + @Override + public String getIndexName(); +} +``` + +### 3.7 `LmdbIndexDescriptor.java` + +```java +package org.eclipse.rdf4j.sail.lmdb; + +record LmdbIndexDescriptor(String name, char[] fieldSeq) { } +``` + +--- + +## 4. Existing files to change + +### 4.1 `LmdbStore.java` + +#### Changes + +1. Default evaluation strategy factory becomes `LmdbEvaluationStrategyFactory`. +2. Add dirty-statistics hook. + +#### Code changes + +Add: + +```java +void markOptimizerStatisticsDirty() { + if (backingStore != null) { + backingStore.getOptimizerStatisticsManager().markDirtyCommit(); + } +} +``` + +Modify `getEvaluationStrategyFactory()`: + +```java +public synchronized EvaluationStrategyFactory getEvaluationStrategyFactory() { + if (evalStratFactory == null) { + evalStratFactory = new LmdbEvaluationStrategyFactory(getFederatedServiceResolver()); + } + evalStratFactory.setQuerySolutionCacheThreshold(getIterationCacheSyncThreshold()); + evalStratFactory.setTrackResultSize(isTrackResultSize()); + evalStratFactory.setCollectionFactory(getCollectionFactory()); + return evalStratFactory; +} +``` + +### 4.2 `LmdbStoreConnection.java` + +#### Changes + +Mark optimizer stats dirty after successful commit when statements changed. + +#### Code changes + +In `commitInternal()`: + +```java +@Override +protected void commitInternal() throws SailException { + boolean statementsChanged = sailChangedEvent.statementsAdded() || sailChangedEvent.statementsRemoved(); + try { + super.commitInternal(); + } finally { + if (txnLock != null && txnLock.isActive()) { + txnLock.release(); + } + } + + if (statementsChanged) { + lmdbStore.markOptimizerStatisticsDirty(); + } + + lmdbStore.notifySailChanged(sailChangedEvent); + sailChangedEvent = new DefaultSailChangedEvent(lmdbStore); +} +``` + +No change on rollback. + +### 4.3 `LmdbSailStore.java` + +#### Changes + +1. Create/store `LmdbOptimizerStatisticsManager` +2. Return `LmdbEvaluationStatistics` with stats manager +3. Add ordered statement iterator support +4. Implement dataset order APIs + +#### New field + +```java +private final LmdbOptimizerStatisticsManager optimizerStatisticsManager; +private final Comparator orderedValueComparator; +``` + +#### Constructor changes + +After `tripleStore` initialization: + +```java +this.optimizerStatisticsManager = new LmdbOptimizerStatisticsManager(tripleStore, config); +this.orderedValueComparator = new LmdbOrderedValueComparator(valueStore); +``` + +#### Getter + +```java +LmdbOptimizerStatisticsManager getOptimizerStatisticsManager() { + return optimizerStatisticsManager; +} +``` + +#### Evaluation statistics + +Change: + +```java +return new LmdbEvaluationStatistics(valueStore, tripleStore, optimizerStatisticsManager); +``` + +#### Overload `createStatementIterator` + +Existing method remains and delegates: + +```java +CloseableIteration createStatementIterator( + Txn txn, + Resource subj, + IRI pred, + Value obj, + boolean explicit, + Resource... contexts) throws IOException { + return createStatementIterator(txn, subj, pred, obj, explicit, null, contexts); +} +``` + +Add overload: + +```java +CloseableIteration createStatementIterator( + Txn txn, + Resource subj, + IRI pred, + Value obj, + boolean explicit, + StatementOrder statementOrder, + Resource... contexts) throws IOException +``` + +#### Overload algorithm + +1. Resolve subject/predicate/object IDs exactly as existing method. +2. Build `contextIDList` exactly as existing method. +3. If `statementOrder == null`: + - preserve current behavior. +4. Else: + - if `contextIDList.size() == 1` + - call `tripleStore.getTriplesOrdered(...)` + - else + - for each context ID, create ordered iterator using `getTriplesOrdered(...)` + - wrap in `LmdbOrderedStatementUnionIteration` + - use `statementOrder.getComparator(orderedValueComparator)` as statement comparator + +#### `LmdbSailDataset` methods + +Replace stubs with: + +```java +@Override +public CloseableIteration getStatements( + StatementOrder statementOrder, + Resource subj, + IRI pred, + Value obj, + Resource... contexts) throws SailException { + try { + return createStatementIterator(txn, subj, pred, obj, explicit, statementOrder, contexts); + } catch (IOException e) { + throw new SailException("Unable to get ordered statements", e); + } +} + +@Override +public Set getSupportedOrders(Resource subj, IRI pred, Value obj, Resource... contexts) { + try { + long subjID = resolveIdOrUnknown(subj); + long predID = resolveIdOrUnknown(pred); + long objID = resolveIdOrUnknown(obj); + + long contextIDForSupport; + if (contexts == null || contexts.length != 1) { + contextIDForSupport = LmdbValue.UNKNOWN_ID; + } else { + contextIDForSupport = contexts[0] == null ? 0L : resolveIdOrUnknown(contexts[0]); + } + + return tripleStore.getSupportedOrders(subjID, predID, objID, contextIDForSupport); + } catch (IOException e) { + logger.warn("Unable to determine supported orders", e); + return Set.of(); + } +} + +@Override +public Comparator getComparator() { + return orderedValueComparator; +} +``` + +Add helper: + +```java +private long resolveIdOrUnknown(Value value) throws IOException { ... } +``` + +### 4.4 `LmdbEvaluationStatistics.java` + +#### Changes + +Add stats-manager and accessors for optimizer. + +#### New fields + +```java +private final LmdbOptimizerStatisticsManager optimizerStatisticsManager; +``` + +#### Constructor + +```java +public LmdbEvaluationStatistics( + ValueStore valueStore, + TripleStore tripleStore, + LmdbOptimizerStatisticsManager optimizerStatisticsManager) { + this.valueStore = valueStore; + this.tripleStore = tripleStore; + this.optimizerStatisticsManager = optimizerStatisticsManager; +} +``` + +#### Add package-private accessors + +```java +ValueStore getValueStore() { + return valueStore; +} + +TripleStore getTripleStore() { + return tripleStore; +} + +LmdbOptimizerStatisticsManager getOptimizerStatisticsManager() { + return optimizerStatisticsManager; +} + +double cardinality(Resource subj, IRI pred, Value obj, Resource context) throws IOException { + ... +} + +long getValueId(Value value) throws IOException { + if (value == null) { + return LmdbValue.UNKNOWN_ID; + } + return valueStore.getId(value); +} +``` + +Do **not** change semantic behavior of existing `getCardinality(StatementPattern)` override except to call package-private `cardinality(...)`. + +### 4.5 `TripleStore.java` + +#### Changes + +1. Expose immutable index descriptors +2. Implement order-aware index selection +3. Expose supported orders +4. Add ordered-triples access method +5. Add statistics snapshot builder + +#### Add helper record/class + +Inside or next to `TripleStore`: + +```java +static final class IndexSelection { + final TripleIndex index; + final String indexName; + final int prefixLen; + final boolean rangeSearch; + final StatementOrder order; // nullable +} +``` + +#### Add descriptor getter + +```java +List getIndexDescriptors() { + ArrayList list = new ArrayList<>(indexes.size()); + for (TripleIndex index : indexes) { + list.add(new LmdbIndexDescriptor(new String(index.getFieldSeq()), index.getFieldSeq().clone())); + } + return List.copyOf(list); +} +``` + +#### Add support-order method + +```java +Set getSupportedOrders(long subj, long pred, long obj, long context) { + int bestPrefix = 0; + for (TripleIndex index : indexes) { + bestPrefix = Math.max(bestPrefix, index.getPatternScore(subj, pred, obj, context)); + } + + if (bestPrefix == 0 || bestPrefix >= 4) { + return Set.of(); + } + + EnumSet result = EnumSet.noneOf(StatementOrder.class); + for (TripleIndex index : indexes) { + if (index.getPatternScore(subj, pred, obj, context) != bestPrefix) { + continue; + } + char nextField = index.getFieldSeq()[bestPrefix]; + switch (nextField) { + case 's' -> result.add(StatementOrder.S); + case 'p' -> result.add(StatementOrder.P); + case 'o' -> result.add(StatementOrder.O); + case 'c' -> result.add(StatementOrder.C); + default -> throw new IllegalStateException("Unexpected field: " + nextField); + } + } + return result; +} +``` + +#### Add ordered index selection + +```java +IndexSelection selectBestIndex(long subj, long pred, long obj, long context) { ... } + +IndexSelection selectBestIndexForOrder( + long subj, long pred, long obj, long context, StatementOrder requestedOrder) { ... } +``` + +`selectBestIndexForOrder(...)` algorithm: + +1. compute `bestPrefix` across all indexes +2. if `bestPrefix == 0`, return `null` +3. retain indexes with `prefixLen == bestPrefix` +4. keep those whose first varying field after prefix matches requested order +5. choose first retained index in configured order +6. return `IndexSelection` + +#### Add ordered triples method + +```java +RecordIterator getTriplesOrdered( + Txn txn, + StatementOrder statementOrder, + long subj, + long pred, + long obj, + long context, + boolean explicit) throws IOException +``` + +Implementation: + +1. call `selectBestIndexForOrder(...)` +2. if selection is null: + - fall back to `getTriples(...)` or throw `IllegalArgumentException` + - recommended: fall back to `getTriples(...)` and log debug +3. use `getTriplesUsingIndex(...)` with selected index and selected range-search mode + +#### Add stats snapshot builder + +```java +LmdbOptimizerStatisticsManager.StatisticsSnapshot buildOptimizerStatisticsSnapshot() throws IOException +``` + +Implementation: + +1. iterate `indexes` +2. scan explicit and inferred DBs +3. compute rows + prefix distinct counts +4. populate immutable snapshot + +#### Add scan helper + +```java +private LmdbOptimizerStatisticsManager.IndexStatistics buildIndexStatistics(TripleIndex index) throws IOException +``` + +#### Prefix-change helper + +```java +private static boolean prefixChanged(long[] prev, long[] current, int prefixLen) { ... } +``` + +### 4.6 `config/LmdbStoreConfig.java` + +#### Add fields + +```java +private boolean queryOptimizerEnabled = true; +private int queryOptimizerDynamicProgrammingThreshold = 8; +private boolean queryOptimizerMergeJoinEnabled = true; +private boolean queryOptimizerStatisticsEnabled = true; +private boolean queryOptimizerStatisticsBuildOnInit = false; +private int queryOptimizerStatisticsRefreshCommitThreshold = 100; +``` + +#### Add getters/setters + +```java +public boolean getQueryOptimizerEnabled(); +public void setQueryOptimizerEnabled(boolean value); + +public int getQueryOptimizerDynamicProgrammingThreshold(); +public void setQueryOptimizerDynamicProgrammingThreshold(int value); + +public boolean getQueryOptimizerMergeJoinEnabled(); +public void setQueryOptimizerMergeJoinEnabled(boolean value); + +public boolean getQueryOptimizerStatisticsEnabled(); +public void setQueryOptimizerStatisticsEnabled(boolean value); + +public boolean getQueryOptimizerStatisticsBuildOnInit(); +public void setQueryOptimizerStatisticsBuildOnInit(boolean value); + +public int getQueryOptimizerStatisticsRefreshCommitThreshold(); +public void setQueryOptimizerStatisticsRefreshCommitThreshold(int value); +``` + +### 4.7 RDF config schema/factory files (if repository-config serialization is required) + +Update: + +- `config/LmdbStoreSchema.java` +- `config/LmdbStoreFactory.java` +- any config export/parser classes used by RDF4J LMDB config + +Add IRIs: + +```text +lmdb:queryOptimizerEnabled +lmdb:queryOptimizerDynamicProgrammingThreshold +lmdb:queryOptimizerMergeJoinEnabled +lmdb:queryOptimizerStatisticsEnabled +lmdb:queryOptimizerStatisticsBuildOnInit +lmdb:queryOptimizerStatisticsRefreshCommitThreshold +``` + +### 4.8 Audit any LMDB-used `SailDataset` wrappers + +Any wrapper between query evaluation and `LmdbSailDataset` must forward: + +- `getStatements(StatementOrder, ...)` +- `getSupportedOrders(...)` +- `getComparator()` + +If an existing wrapper drops these, add delegation. + +--- + +## 5. `LmdbEvaluationStrategyFactory` implementation + +### 5.1 Behavior + +If LMDB optimizer feature flag is enabled and `evaluationStatistics instanceof LmdbEvaluationStatistics`, install `LmdbQueryOptimizerPipeline`. +Otherwise install standard pipeline. + +### 5.2 Method body + +```java +@Override +public EvaluationStrategy createEvaluationStrategy( + Dataset dataset, + TripleSource tripleSource, + EvaluationStatistics evaluationStatistics) { + + StrictEvaluationStrategy strategy = new StrictEvaluationStrategy( + tripleSource, + dataset, + getFederatedServiceResolver(), + getQuerySolutionCacheThreshold(), + evaluationStatistics, + isTrackResultSize()); + + if (evaluationStatistics instanceof LmdbEvaluationStatistics lmdbStats + && lmdbStats.getOptimizerStatisticsManager() != null) { + strategy.setOptimizerPipeline( + new LmdbQueryOptimizerPipeline(strategy, tripleSource, lmdbStats)); + } else { + strategy.setOptimizerPipeline( + new StandardQueryOptimizerPipeline(strategy, tripleSource, evaluationStatistics)); + } + + strategy.setCollectionFactory(collectionFactorySupplier); + return strategy; +} +``` + +--- + +## 6. `LmdbQueryOptimizerPipeline` implementation + +### 6.1 Required optimizer order + +Preserve the same optimizer order as `StandardQueryOptimizerPipeline` and replace only the join optimizer. + +```java +List optimizers = List.of( + StandardQueryOptimizerPipeline.BINDING_ASSIGNER, + StandardQueryOptimizerPipeline.BINDING_SET_ASSIGNMENT_INLINER, + new ConstantOptimizer(strategy), + new RegexAsStringFunctionOptimizer(tripleSource.getValueFactory()), + StandardQueryOptimizerPipeline.COMPARE_OPTIMIZER, + StandardQueryOptimizerPipeline.CONJUNCTIVE_CONSTRAINT_SPLITTER, + StandardQueryOptimizerPipeline.DISJUNCTIVE_CONSTRAINT_OPTIMIZER, + StandardQueryOptimizerPipeline.SAME_TERM_FILTER_OPTIMIZER, + StandardQueryOptimizerPipeline.UNION_SCOPE_CHANGE_OPTIMIZER, + StandardQueryOptimizerPipeline.QUERY_MODEL_NORMALIZER, + StandardQueryOptimizerPipeline.PROJECTION_REMOVAL_OPTIMIZER, + new LmdbJoinOrderOptimizer(lmdbStats, strategy.isTrackResultSize(), tripleSource, config), + StandardQueryOptimizerPipeline.ITERATIVE_EVALUATION_OPTIMIZER, + StandardQueryOptimizerPipeline.FILTER_OPTIMIZER, + StandardQueryOptimizerPipeline.ORDER_LIMIT_OPTIMIZER +); +``` + +If `evaluationStatistics` is not LMDB-specific, fall back to standard pipeline. + +--- + +## 7. `LmdbJoinOrderOptimizer` implementation + +### 7.1 Internal nested types + +Use nested static types inside `LmdbJoinOrderOptimizer`. + +#### `enum PositionState` + +```java +enum PositionState { + CONST, + BOUND, + UNBOUND, + ABSENT +} +``` + +#### `record ResolvedTerm` + +```java +record ResolvedTerm( + char field, + PositionState state, + Value value, + String varName) { +} +``` + +#### `record ResolvedPatternTerms` + +```java +record ResolvedPatternTerms( + StatementPattern statementPattern, + ResolvedTerm s, + ResolvedTerm p, + ResolvedTerm o, + ResolvedTerm c) { + + ResolvedTerm forField(char field) { ... } +} +``` + +#### `record AccessPath` + +```java +record AccessPath( + String indexName, + char[] fieldSeq, + int prefixLen, + double scanRowsPerProbe, + double outRowsPerProbe, + double probeCost, + String orderedByVarName, + StatementOrder requestedOrder) { +} +``` + +#### `record PlanItem` + +```java +record PlanItem( + StatementPattern statementPattern, + String chosenIndexName, + String chosenOrderVarName, + JoinMethod joinMethodToPrevious, + String mergeJoinVarName) { +} +``` + +#### `enum JoinMethod` + +```java +enum JoinMethod { + NONE, + NESTED_LOOP, + MERGE +} +``` + +#### `record PlanStateKey` + +```java +record PlanStateKey(int subsetMask, String orderedByVarName) { } +``` + +#### `record PlanState` + +```java +record PlanState( + int subsetMask, + String orderedByVarName, + double cost, + double rows, + Set boundVarNames, + List items) { +} +``` + +### 7.2 Main constructor + +```java +public LmdbJoinOrderOptimizer( + LmdbEvaluationStatistics lmdbStatistics, + boolean trackResultSize, + TripleSource tripleSource, + LmdbStoreConfig config) { + ... +} +``` + +Store: + +- `lmdbStatistics` +- `genericStatistics = lmdbStatistics` +- `tripleSource` +- `trackResultSize` +- `dpThreshold` +- `mergeJoinEnabled` + +### 7.3 `optimize(...)` + +Implementation: + +1. `tupleExpr.visit(new JoinVisitor(bindings));` + +### 7.4 `JoinVisitor` + +Use a visitor similar in structure to the existing `QueryJoinOptimizer`, but do **not** subclass the generic optimizer. Copy the relevant logic and modify join planning. + +Maintain field: + +```java +private Set boundVars = new HashSet<>(); +private final BindingSet initialBindings; +``` + +### 7.5 `meet(LeftJoin)` + +Same behavior as generic optimizer. + +### 7.6 `meet(StatementPattern)` + +Set result size estimate using `lmdbStatistics.getCardinality(node)`. + +### 7.7 `meet(Join)` + +Algorithm: + +1. capture `origBoundVars` +2. flatten join args +3. separate priority args: + - extensions / BIND + - subselects +4. optimize priority args in current behavior +5. inspect remaining args +6. if all remaining args are `StatementPattern` + - plan via `planPureStatementPatterns(...)` +7. else + - use copied generic greedy ordering logic +8. rebuild join tree +9. restore `boundVars` + +### 7.8 `planPureStatementPatterns(...)` + +Signature: + +```java +private TupleExpr planPureStatementPatterns( + List patterns, + Set outerBoundVars, + BindingSet initialBindings) +``` + +Algorithm: + +1. if `patterns.size() <= dpThreshold` + - `PlanState best = planDp(...)` +2. else + - `PlanState best = planGreedy(...)` +3. build final join tree from `best` +4. return tree + +### 7.9 `resolvePatternTerms(...)` + +Signature: + +```java +private ResolvedPatternTerms resolvePatternTerms( + StatementPattern sp, + Set boundVarNames, + BindingSet initialBindings) +``` + +Rules: + +- if `var.hasValue()` => `CONST` +- else if `initialBindings.hasBinding(var.getName())` => `CONST` +- else if `boundVarNames.contains(var.getName())` => `BOUND` +- else => `UNBOUND` +- if `contextVar == null` => `ABSENT` + +### 7.10 `enumerateAccessPaths(...)` + +Signature: + +```java +private List enumerateAccessPaths( + StatementPattern sp, + Set boundVarNames, + BindingSet initialBindings) +``` + +Algorithm: + +1. resolve terms +2. loop over `lmdbStatistics.getTripleStore().getIndexDescriptors()` +3. compute prefix length per index +4. find `bestPrefix` +5. if `bestPrefix == 0` + - create one unordered access path only, based on the best default index and no order property +6. else + - retain only indexes with prefix == `bestPrefix` + - create one candidate per retained index +7. deduplicate by `(indexName, orderedByVarName)` + +### 7.11 `computePrefixLen(...)` + +```java +private int computePrefixLen(ResolvedPatternTerms terms, char[] fieldSeq) { ... } +``` + +Implementation: + +```java +int prefix = 0; +for (char field : fieldSeq) { + PositionState s = terms.forField(field).state(); + if (s == PositionState.CONST || s == PositionState.BOUND) { + prefix++; + } else { + break; + } +} +return prefix; +``` + +### 7.12 `computeOrderedByVar(...)` + +```java +private String computeOrderedByVar(ResolvedPatternTerms terms, char[] fieldSeq, int prefixLen) +``` + +Rules: + +- if `prefixLen <= 0 || prefixLen >= 4` => `null` +- `char nextField = fieldSeq[prefixLen]` +- if `terms.forField(nextField).state() == PositionState.UNBOUND` => its var name +- else => `null` + +### 7.13 `estimateScanRowsPerProbe(...)` + +```java +private double estimateScanRowsPerProbe( + ResolvedPatternTerms terms, + AccessPathSeed seed) +``` + +Use: + +- `totalRows` if prefix `0` +- exact prefix cardinality if all prefix fields are `CONST` +- stats snapshot average rows if any prefix field is `BOUND` + +### 7.14 `estimateOutRowsPerProbe(...)` + +```java +private double estimateOutRowsPerProbe( + ResolvedPatternTerms terms, + AccessPathSeed seed, + double scanRowsPerProbe, + StatisticsSnapshot snapshot) +``` + +Use exact full cardinality when all fixed fields are compile-time constants; otherwise apply selectivity factors. + +### 7.15 `estimateProbeCost(...)` + +```java +private double estimateProbeCost(double scanRowsPerProbe, double outRowsPerProbe) +``` + +Formula: + +```java +return 5.0 + scanRowsPerProbe + (0.25 * outRowsPerProbe); +``` + +### 7.16 `planDp(...)` + +Signature: + +```java +private PlanState planDp( + List patterns, + Set outerBoundVars, + BindingSet initialBindings) +``` + +Implementation outline: + +1. assign bit position to each statement pattern +2. create singleton states +3. dynamic-program across subset sizes +4. store best state by `(subsetMask, orderedByVarName)` +5. return best full-subset state + +### 7.17 `createSingletonStates(...)` + +For each pattern: + +- enumerate access paths +- for each path: + - `rows = path.outRowsPerProbe()` + - `cost = path.probeCost()` + - `boundVarNames = outerBoundVars + pattern.getBindingNames()` + - `orderedByVarName = path.orderedByVarName()` + - `items = List.of(new PlanItem(...))` + +Also keep an unordered singleton state even if ordered states exist. + +### 7.18 `transition(...)` + +Signature: + +```java +private Stream transition( + PlanState state, + StatementPattern next, + int nextBit, + BindingSet initialBindings) +``` + +Generate: + +- nested-loop state +- optional merge state + +#### Nested loop + +```java +newCost = state.cost() + (state.rows() * accessPath.probeCost()) +newRows = state.rows() * accessPath.outRowsPerProbe() +newOrderedBy = null +``` + +#### Merge join + +Allowed only if: + +- `state.orderedByVarName() != null` +- `state.orderedByVarName().equals(accessPath.orderedByVarName())` +- shared binding names contain that var +- merge join feature enabled +- cardinality ratio acceptable + +Then: + +```java +newCost = state.cost() + state.rows() + accessPath.outRowsPerProbe() +newRows = state.rows() * accessPath.outRowsPerProbe() +newOrderedBy = state.orderedByVarName() +``` + +### 7.19 `planGreedy(...)` + +Signature: + +```java +private PlanState planGreedy( + List patterns, + Set outerBoundVars, + BindingSet initialBindings) +``` + +Algorithm: + +1. choose cheapest singleton state +2. while remaining patterns exist: + - evaluate all transitions from current state + - pick cheapest +3. return final state + +### 7.20 `buildJoinTree(...)` + +Signature: + +```java +private TupleExpr buildJoinTree(PlanState state) +``` + +Algorithm: + +1. clone statement patterns in chosen order +2. apply statement metadata: + - `sp.setIndexName(chosenIndexName)` + - if `chosenOrderVarName != null`, and direct statement ordering is required for runtime, call `sp.setOrder(var)` +3. build right-recursive joins +4. if `joinMethodToPrevious == MERGE` + - `join.setMergeJoin(true)` + - `join.setOrder(varFor(mergeJoinVarName))` + +### 7.21 Var resolution helper + +```java +private Var varForName(StatementPattern sp, String varName) +``` + +Returns the actual `Var` instance from `sp` matching the name. + +--- + +## 8. `LmdbOptimizerStatisticsManager` implementation + +### 8.1 Fields + +```java +private final TripleStore tripleStore; +private final LmdbStoreConfig config; +private final ReentrantLock rebuildLock = new ReentrantLock(); +private final AtomicLong dirtyCommitCount = new AtomicLong(); +private volatile StatisticsSnapshot snapshot; +``` + +### 8.2 `getSnapshot()` + +```java +StatisticsSnapshot getSnapshot() { + maybeRefresh(); + return snapshot; +} +``` + +### 8.3 `maybeRefresh()` + +```java +void maybeRefresh() { + if (!config.getQueryOptimizerStatisticsEnabled()) { + return; + } + + StatisticsSnapshot current = snapshot; + if (current == null + || dirtyCommitCount.get() >= config.getQueryOptimizerStatisticsRefreshCommitThreshold()) { + forceRefresh(); + } +} +``` + +### 8.4 `forceRefresh()` + +```java +void forceRefresh() { + if (!rebuildLock.tryLock()) { + return; + } + try { + snapshot = tripleStore.buildOptimizerStatisticsSnapshot(); + dirtyCommitCount.set(0); + } catch (IOException e) { + // log and keep previous snapshot + } finally { + rebuildLock.unlock(); + } +} +``` + +### 8.5 `markDirtyCommit()` + +```java +void markDirtyCommit() { + dirtyCommitCount.incrementAndGet(); +} +``` + +--- + +## 9. `LmdbOrderedValueComparator` implementation + +### 9.1 Fields + +```java +private final ValueStore valueStore; +private final Comparator fallback = new ValueComparator(); +``` + +### 9.2 `compare(...)` + +Implementation: + +```java +@Override +public int compare(Value left, Value right) { + if (left == right) { + return 0; + } + + long leftId = resolveId(left); + long rightId = resolveId(right); + + if (leftId != LmdbValue.UNKNOWN_ID && rightId != LmdbValue.UNKNOWN_ID) { + return Long.compareUnsigned(leftId, rightId); + } + + return fallback.compare(left, right); +} +``` + +### 9.3 `resolveId(...)` + +```java +private long resolveId(Value value) { + if (value instanceof LmdbValue lv) { + long id = lv.getInternalID(); + if (id != LmdbValue.UNKNOWN_ID) { + return id; + } + try { + lv.init(); + return lv.getInternalID(); + } catch (Exception ignore) { + // fall through + } + } + + try { + return valueStore.getId(value); + } catch (IOException e) { + return LmdbValue.UNKNOWN_ID; + } +} +``` + +--- + +## 10. `LmdbOrderedStatementUnionIteration` implementation + +### 10.1 Purpose + +Globally merge multiple already-sorted ordered iterators into a single sorted iterator. + +### 10.2 Data structures + +```java +private static final class Head { + final CloseableIteration source; + final Statement statement; +} +``` + +Use: + +```java +private final PriorityQueue queue; +private final List> allSources; +private final String indexNameHint; +``` + +### 10.3 Constructor + +1. prime every source iterator +2. insert first statement of each non-empty source into the queue +3. comparator = compare `Head.statement` using provided statement comparator + +### 10.4 `getNextElement()` + +1. poll smallest head +2. emit its statement +3. advance same source +4. if source has next, push replacement head + +### 10.5 `getIndexName()` + +Return: + +- exact index name if all inputs used same index +- otherwise `ordered-merge()` + +--- + +## 11. `TripleStore` statistics-scan details + +### 11.1 Record decoding + +For stats scanning, decode keys in index order directly into a `long[4]`. + +Use existing varint decoding helpers; do not allocate per row. + +### 11.2 Single-pass distinct counting + +Maintain: + +```java +long[] prev = new long[4]; +boolean first = true; +long rows = 0; +long[] distinct = new long[5]; // ignore 0 +``` + +For each key: + +```java +rows++; +if (first) { + distinct[1]++; distinct[2]++; distinct[3]++; distinct[4]++; + copy current -> prev; + first = false; +} else { + if (prefixChanged(prev, current, 1)) distinct[1]++; + if (prefixChanged(prev, current, 2)) distinct[2]++; + if (prefixChanged(prev, current, 3)) distinct[3]++; + if (prefixChanged(prev, current, 4)) distinct[4]++; + copy current -> prev; +} +``` + +### 11.3 Prefix changed function + +```java +private static boolean prefixChanged(long[] prev, long[] current, int prefixLen) { + for (int i = 0; i < prefixLen; i++) { + if (prev[i] != current[i]) { + return true; + } + } + return false; +} +``` + +--- + +## 12. Ordered access path selection in `TripleStore` + +### 12.1 Requested-order matching + +Map requested `StatementOrder` to expected first varying field: + +- `S` -> `'s'` +- `P` -> `'p'` +- `O` -> `'o'` +- `C` -> `'c'` + +### 12.2 Selection algorithm + +```text +bestPrefix = max(patternScore(index)) + +if bestPrefix == 0: + return null + +for index in configured order: + if patternScore(index) != bestPrefix: + continue + if index.fieldSeq[bestPrefix] == requestedField: + return index +return null +``` + +Configured-order iteration preserves deterministic tie-breaking. + +--- + +## 13. Build-order of implementation tasks + +Implement in this exact order. + +### Phase 1 — Plumbing + +1. add config fields +2. add `LmdbEvaluationStrategyFactory` +3. add `LmdbQueryOptimizerPipeline` +4. wire `LmdbStore` to use the factory + +### Phase 2 — Statistics + +5. add `LmdbOptimizerStatisticsManager` +6. add `TripleStore.buildOptimizerStatisticsSnapshot()` +7. add dirty-marking from `LmdbStoreConnection` + +### Phase 3 — Ordered runtime support + +8. implement `TripleStore.getSupportedOrders(...)` +9. implement `TripleStore.getTriplesOrdered(...)` +10. add `LmdbOrderedValueComparator` +11. add `LmdbOrderedStatementUnionIteration` +12. implement `LmdbSailDataset` ordered methods + +### Phase 4 — Planner + +13. implement `LmdbJoinOrderOptimizer` with: + - generic traversal + - pure statement-pattern DP/greedy planning + - mixed-group fallback +14. integrate planner into pipeline + +### Phase 5 — Tests and polish + +15. explain/plan metadata +16. debug logging +17. full regression and benchmark suite + +--- + +## 14. Test classes to add + +### 14.1 Unit tests + +#### `LmdbOptimizerStatisticsManagerTest` + +- builds snapshot for default indexes +- counts prefix distinct values correctly +- refreshes after dirty threshold + +#### `TripleStoreOrderSupportTest` + +- reports supported orders correctly for: + - `spoc` + - `posc` + - mixed configured index sets +- returns empty set for prefix length `0` + +#### `LmdbOrderedValueComparatorTest` + +- internal-ID ordering works +- equal IDs compare equal +- unknown IDs fall back safely + +#### `LmdbJoinOrderOptimizerAccessPathTest` + +- runtime-bound vars contribute to prefix length +- lower-prefix ordered path is rejected +- prefix length `0` suppresses ordered candidates + +### 14.2 Integration tests + +#### `LmdbJoinOrderOptimizerIntegrationTest` + +Use real LMDB store and assert: + +- different index sets yield different join orders +- same query with different leading selective pattern yields different plan +- bound-variable-sensitive planning occurs + +#### `LmdbMergeJoinIntegrationTest` + +- ordered scan support is visible to execution +- merge join selected only on valid conditions + +#### `LmdbOrderedMultiContextIterationTest` + +- multiple specific contexts remain globally ordered + +#### `LmdbMixedJoinFallbackTest` + +- mixed join group uses generic fallback and stays correct + +### 14.3 Explain-plan / metadata tests + +#### `LmdbPlanMetadataTest` + +- statement patterns carry chosen index name +- merge-join flag and order variable present where expected + +--- + +## 15. Benchmarks to add + +### 15.1 Query-shape set + +Benchmark at least: + +1. subject-star +2. object-star +3. predicate-object chain +4. path / snowflake +5. cross-join-avoidance case +6. context-heavy case + +### 15.2 Index configurations + +Run at least: + +- `spoc,posc` +- `spoc,sopc,posc` +- `spoc,posc,opsc` +- workload-specific custom configuration + +### 15.3 Success criteria + +- LMDB-specific optimizer must not regress correctness +- median planning time increase acceptable +- execution-time improvement on targeted workloads visible +- no catastrophic full-scan plans where good prefix probes exist + +--- + +## 16. Logging points + +Add debug logs at: + +1. stats snapshot build start/end +2. dirty-count refresh trigger +3. join group entering LMDB DP +4. join group falling back to generic planning +5. access paths enumerated for each statement pattern +6. final chosen plan for each join group +7. ordered-scan fallback when requested order cannot be satisfied + +--- + +## 17. Thread safety + +### 17.1 Stats manager + +- `snapshot` is volatile +- rebuild guarded by `ReentrantLock` +- dirty count is atomic + +### 17.2 Planner + +Planner is request-scoped. +No shared mutable planner state beyond immutable config/statistics snapshot references. + +### 17.3 Comparator + +`LmdbOrderedValueComparator` is stateless apart from store reference and is thread-safe if `ValueStore.getId(...)` is thread-safe for reads in the current LMDB store design. + +--- + +## 18. Edge cases to cover explicitly + +1. unknown compile-time constant value ID => cardinality `0` +2. context var absent +3. multiple specific contexts +4. null context +5. repeated variable in one statement pattern +6. merge-join candidate with huge cardinality imbalance +7. no stats snapshot available +8. stats snapshot stale but rebuild skipped due to lock contention +9. user-provided custom evaluation strategy factory +10. feature flags disabled + +--- + +## 19. Definition of done for the code + +The code is done only if: + +- [ ] LMDB uses `LmdbEvaluationStrategyFactory` by default +- [ ] LMDB-specific pipeline is installed +- [ ] `LmdbJoinOrderOptimizer` plans pure statement-pattern groups +- [ ] `TripleStore` exposes index descriptors and order support +- [ ] `LmdbSailDataset` implements ordered retrieval +- [ ] prefix statistics are built and refreshed +- [ ] tests in sections 14 and 15 pass +- [ ] explain metadata is present +- [ ] feature flag can disable the new planner cleanly + +--- + +## 20. Final coding guidance + +1. **Copy and adapt** generic join-optimizer logic; do not try to subclass it deeply. +2. **Keep optimizer LMDB-local**. +3. **Do not advertise order for prefix length 0**. +4. **Do not concatenate ordered per-context iterators**; always merge them. +5. **Use internal value IDs for comparator consistency**. +6. **Never let stats failure fail a query**. +7. **Keep deterministic tie-breaking** everywhere. \ No newline at end of file diff --git a/plans/robust-synopsis-lazy-spill-execplan.md b/plans/robust-synopsis-lazy-spill-execplan.md new file mode 100644 index 00000000000..93bca8ac9c2 --- /dev/null +++ b/plans/robust-synopsis-lazy-spill-execplan.md @@ -0,0 +1,106 @@ +# Reduce robust synopsis spill, rebuild, and memory pressure cost + +This ExecPlan is a living document. The sections `Progress`, `Surprises & Discoveries`, `Decision Log`, and `Outcomes & Retrospective` must be kept up to date as work proceeds. + +This document must be maintained in accordance with [PLANS.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/PLANS.md). + +## Purpose / Big Picture + +After this change, the robust synopsis used by the join estimator should stop paying the full heap cost of all binary pattern synopses at load time. Persisted `RJMS` snapshots should load only resolver and unary data eagerly, then load each binary synopsis on demand. When memory pressure rises, the estimator should be able to unload those lazily loaded binary synopses before escalating to a full robust-synopsis spill or full estimator unload. Rebuild should also stop doing duplicate per-statement work for the base estimator and robust synopsis builder. + +## Progress + +- [x] (2026-04-10 11:04 CEST) Captured hotspot evidence and mapped the spill, merge, rebuild, and memory-accounting call sites. +- [x] (2026-04-10 11:04 CEST) Added `RJMS` v2 sketch payload support and builder-side batch registration primitives in `StoreSynopsis`. +- [x] (2026-04-10 12:10 CEST) Replaced eager binary synopsis loading with disk-backed lazy indexing in `StoreSynopsis.readFrom`; kept `readFullyFrom` for temporary spill outputs. +- [x] (2026-04-10 12:10 CEST) Connected `StoreSynopsis` binary load/unload callbacks to `SketchBasedJoinEstimator` memory tracking and pressure recovery. +- [x] (2026-04-10 12:10 CEST) Batched `rebuildOnceSlow()` through `IngestEvent[]` plus `StoreSynopsis.Builder.addStatements(...)`; added the single-segment spill fast path. +- [x] (2026-04-10 12:10 CEST) Extended persistence and robust-snapshot tests for lazy load/unload, v1/v2 compatibility, and spill equivalence. +- [ ] (2026-04-10 12:10 CEST) Finish a full downstream LMDB benchmark-style verification run; the targeted `ThemeQueryBenchmarkJoinEstimationTest` attempt was stopped after several minutes without reaching a suite summary. + +## Surprises & Discoveries + +- Observation: the spill hotspot is not only top-level sort work; rebuild also duplicates fingerprinting and robust-builder ingestion work. + Evidence: `SketchBasedJoinEstimator.rebuildOnceSlow()` currently calls `ingest(...)` and then separately recomputes `valueFingerprint(str(...))` for `StoreSynopsis.Builder`. + +- Observation: merge correctness only depends on top-level key ordering, not neighborhood entry ordering. + Evidence: `StoreSynopsisSnapshotSupport.mergeBinaryEntries(...)` merges by `BinaryPatternKey`, while neighborhood maps are unioned via hash-map lookups. + +- Observation: non-persistent rebuild spill cannot return a lazy disk-backed synopsis because the temporary spill directory is deleted on close. + Evidence: `RobustSynopsisSpillBuffer.close()` always deletes the spill directory. + +- Observation: slot-local persisted refs were not enough; dirty ownership also had to become slot-local. + Evidence: during rebuild-into-`A`, the old published `B` slot still carried stale dirty bits after a successful persist, so budget eviction rewrote the canonical sidecar even though the rebuilt `A` slot was spilling to a temp sidecar. + +## Decision Log + +- Decision: use `RJMS` v2 native DataSketches payloads for new writes while keeping v1 read support. + Rationale: this removes per-entry rewrite cost and allows whole-sketch union during merge without changing public API. + Date/Author: 2026-04-10 / Codex + +- Decision: make `StoreSynopsis.readFrom(Path)` lazy for binary synopses and add `StoreSynopsis.readFullyFrom(Path)` for temporary spill outputs. + Rationale: persistent snapshots can remain disk-backed; temporary merged snapshots cannot because their files are deleted after the rebuild finishes. + Date/Author: 2026-04-10 / Codex + +- Decision: unload all loaded robust binary synopses as the first robust-memory shedding step instead of implementing partial LRU in this pass. + Rationale: this keeps the first implementation small, deterministic, and sufficient to release large binary payloads before escalating to full spill. + Date/Author: 2026-04-10 / Codex + +## Outcomes & Retrospective + +Implemented in `core/sail/base`: persisted robust synopses now stay disk-backed by default, binary synopses load on demand, estimator pressure can unload loaded binary synopses before escalating to whole-synopsis spill, rebuild reuses batched `IngestEvent` work for both estimator and robust synopsis ingestion, and canonical sketch-slot persistence no longer gets corrupted by stale dirty state from the inactive buffer slot. Focused verification is green in `core/sail/base`; an additional LMDB benchmark-style class was started but not allowed to run to completion. + +## Context and Orientation + +The robust join synopsis lives in `core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/sketchoptimizer/StoreSynopsis.java`. It persists to `RJMS` files and is used by `PatternSynopsisAdapter` during robust join planning. `StoreSynopsisSnapshotSupport.java` merges sorted spill segments during rebuild. `SketchBasedJoinEstimator.java` owns memory accounting, rebuild, persistence, and spill/unload policy. Persistence regression tests live in `core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java`. Benchmark-oriented persistence tests live in `core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/ThemeQueryBenchmarkJoinEstimationTest.java`. + +In this repository, a “binary synopsis” means the robust synopsis for a two-variable statement-pattern shape. Each binary synopsis contains two degree sketches plus two neighborhood maps. Those binary synopses dominate robust heap cost and should be disk-backed when possible. + +## Plan of Work + +First, rework `StoreSynopsis` so the immutable synopsis can be backed by an `RJMS` file. The eager parts remain the resolver map and unary sketches. The binary section becomes an index of keys to payload offsets and lengths, plus a small cache of loaded `BinaryPatternSynopsis` objects. Add hooks so the owning estimator can be notified before load and after load or unload. Keep `writeTo(...)` correct for both eager and lazy synopses, with a fast whole-file copy when a lazy snapshot is already backed by the same on-disk version. + +Second, update `StoreSynopsisSnapshotSupport` to read both v1 and v2 segment payloads and to merge them by unioning whole sketches. Keep top-level key sorting only. Do not reintroduce nested neighborhood-map sorting. + +Third, rework `SketchBasedJoinEstimator.rebuildOnceSlow()` to batch statements through existing `IngestEvent` machinery and reuse the same precomputed `hs/hp/ho/hc` values for robust-builder ingestion. Connect robust binary load/unload to estimator memory accounting and pressure recovery. Add the single-segment spill fast path in `RobustSynopsisSpillBuffer.complete()`. + +Finally, extend tests to prove lazy robust loading, memory-tracking updates, unload-under-pressure behavior, v1-read/v2-write compatibility, and direct-build versus merged-spill equivalence. + +## Concrete Steps + +Work from repository root `/Users/havardottestad/Documents/Programming/rdf4j-stf`. + +1. Edit `StoreSynopsis.java` and `StoreSynopsisSnapshotSupport.java`. +2. Edit `SketchBasedJoinEstimator.java` to connect lazy robust loading, pressure shedding, and rebuild batching. +3. Add or extend tests in `core/sail/base` and `core/sail/lmdb`. +4. Run focused verification with the repo’s Maven workflow, then broaden to the affected module tests. + +Expected verification commands after implementation: + + python3 .codex/skills/mvnf/scripts/mvnf.py StoreSynopsisSnapshotCompatibilityTest + python3 .codex/skills/mvnf/scripts/mvnf.py SketchBasedJoinEstimatorPersistenceTest + python3 .codex/skills/mvnf/scripts/mvnf.py ThemeQueryBenchmarkJoinEstimationTest + +## Validation and Acceptance + +Acceptance is met when a persisted estimator can load a robust synopsis without materializing every binary synopsis, robust planner access can lazily materialize a needed binary synopsis, memory tracking reflects that load and later unload, pressure handling can release loaded robust binary synopses before falling back to full robust spill, and rebuild still publishes a correct robust synopsis even when spill segmentation is forced. Tests must cover both eager temporary loads and persistent lazy loads, and merged v2 snapshots must produce the same robust answers as direct builds. + +## Idempotence and Recovery + +The code changes are additive and retryable. If a lazy-load attempt fails, the estimator should invalidate the robust synopsis and fall back to the existing rebuild path rather than leaving partially initialized cache state behind. Temporary spill directories remain disposable and can be recreated on the next rebuild. + +## Artifacts and Notes + +Initial hotspot evidence: + + Comparator.lambda$comparingInt... ~9.6% + HashMap.getNode ~4.3% + ByteArrayOutputStream.ensureCapacity ~2.6% + StoreSynopsis.writeSketch(...) ~1.1% + HeapArrayOfDoublesCompactSketch. ~0.94% + +## Interfaces and Dependencies + +`StoreSynopsis` should expose an internal callback attachment point for binary-cache lifecycle notifications. `SketchBasedJoinEstimator` remains the owner of `MemoryCategory.ROBUST_SYNOPSIS` tracking and should call into `StoreSynopsis` only through that internal hook and an unload method. No new third-party dependencies are required; continue using Apache DataSketches for tuple sketch serialization and union. + +Change note: created this ExecPlan because the task expanded from a local spill optimization into a cross-module refactor spanning snapshot format, lazy loading, and memory-pressure behavior. diff --git a/plans/technical-design-spec.md b/plans/technical-design-spec.md new file mode 100644 index 00000000000..525052da8b5 --- /dev/null +++ b/plans/technical-design-spec.md @@ -0,0 +1,885 @@ +# RDF4J LMDB Join Order Optimizer — Technical Design Specification + +**Document type:** Technical design specification +**Audience:** Implementers, reviewers, QA, performance test owners +**Normative language:** SHALL, SHOULD, MAY + +--- + +## 1. Purpose + +This specification defines the normative behavior of the RDF4J LMDB-specific join order optimizer, its supporting statistics, and the ordered-access runtime support needed for execution. + +Anything marked SHALL is required for conformance to this spec. + +--- + +## 2. Definitions + +### 2.1 Terms + +- **BGP**: basic graph pattern represented as a join group of `StatementPattern` +- **access path**: a combination of an LMDB index, usable prefix, and optional output order +- **usable prefix**: consecutive leading index fields that are fixed by `CONST` or `BOUND` +- **ordered candidate**: access path that can return bindings ordered by one unbound variable +- **partial plan**: a left-deep plan built from a subset of statement patterns +- **prefix statistics**: per-index row counts and distinct prefix counts +- **ordered runtime path**: `SailDataset.getStatements(StatementOrder, ...)` path + +### 2.2 Position names + +- `S` = subject +- `P` = predicate +- `O` = object +- `C` = context + +--- + +## 3. Conformance scope + +An implementation conforms to this specification if it satisfies all mandatory requirements in: + +- section 4 (functional requirements) +- section 5 (planner behavior) +- section 6 (statistics) +- section 7 (runtime ordered access) +- section 8 (configuration) +- section 9 (error handling) +- section 10 (test requirements) + +--- + +## 4. Functional requirements + +### FR-001 — LMDB-specific pipeline + +The LMDB store SHALL use an LMDB-specific optimizer pipeline by default when no custom evaluation strategy factory was explicitly supplied. + +### FR-002 — Generic fallback preservation + +If a custom evaluation strategy factory was explicitly provided in `LmdbStoreConfig`, LMDB SHALL preserve that configuration and SHALL NOT replace it automatically. + +### FR-003 — Pure statement-pattern scope + +The LMDB-specific join enumerator SHALL apply only to flattened inner join groups whose non-priority members are all `StatementPattern`. + +### FR-004 — Mixed-group fallback + +If a join group contains any non-priority member that is not a `StatementPattern`, the implementation SHALL use generic join-order behavior for that group. + +### FR-005 — Bound-variable awareness + +The LMDB-specific planner SHALL distinguish between: +- compile-time constants, +- runtime-bound variables, +- unbound variables. + +### FR-006 — Index-set awareness + +The planner SHALL enumerate candidate access paths from the actual configured LMDB index set. + +### FR-007 — Prefix-based access-path selection + +The planner SHALL use leading-prefix usability as the primary index-quality measure. + +### FR-008 — Scan-vs-output distinction + +The planner SHALL estimate both: +- rows scanned per probe, +- rows returned per probe. + +### FR-009 — Ordered access support + +The runtime LMDB dataset SHALL implement: +- `getStatements(StatementOrder, ...)` +- `getSupportedOrders(...)` +- `getComparator()` + +### FR-010 — Merge-join correctness + +The planner SHALL enable merge join only when both inputs can produce the same valid order and the runtime comparator is consistent with iterator order. + +### FR-011 — Safe failure + +Planner-statistics failures SHALL degrade plan quality conservatively but SHALL NOT fail query execution. + +### FR-012 — Explainability + +The planner SHALL expose the chosen index name per planned statement pattern. + +--- + +## 5. Planner specification + +## 5.1 Query traversal + +### PR-001 + +The optimizer SHALL traverse the query model and optimize join nodes recursively. + +### PR-002 + +For `LeftJoin`, the optimizer SHALL: +1. optimize the left argument first, +2. extend the bound-variable set with the left argument’s bindings, +3. optimize the right argument under that extended bound-variable set. + +### PR-003 + +The optimizer SHALL preserve current priority treatment for: +- `BindingSetAssignment` +- extension / `BIND` +- subselect-like join arguments + +These SHALL NOT be fed into the LMDB-specific statement-pattern DP search. + +--- + +## 5.2 Binding-state rules + +### PR-010 — CONST classification + +A statement-pattern position SHALL be classified as `CONST` if: +1. its `Var` already has a compile-time value, or +2. its variable name exists in incoming query bindings with a concrete value. + +### PR-011 — BOUND classification + +A statement-pattern position SHALL be classified as `BOUND` if: +1. it is not `CONST`, and +2. its variable name is already bound by earlier steps in the current partial plan. + +### PR-012 — UNBOUND classification + +A statement-pattern position SHALL be classified as `UNBOUND` if: +1. it is not `CONST`, and +2. it is not `BOUND`. + +### PR-013 — ABSENT classification + +If the statement pattern has no context variable, context SHALL be classified as `ABSENT`. + +### PR-014 — Invalid constant types + +If a subject constant is not a `Resource`, predicate constant is not an `IRI`, or context constant is not a `Resource`, the implementation SHALL treat that position as not indexable for planning purposes. + +--- + +## 5.3 Index enumeration rules + +### PR-020 — Candidate index source + +The planner SHALL enumerate candidate indexes from the configured LMDB triple indexes only. + +### PR-021 — Usable prefix length + +For an index field sequence `f1 f2 f3 f4`, usable prefix length SHALL equal the number of consecutive leading fields in `{CONST, BOUND}` state, stopping at the first `UNBOUND` or `ABSENT`. + +### PR-022 — Best-prefix retention + +The planner SHALL retain candidate indexes whose usable prefix length equals the maximum usable prefix length for the statement pattern under the current bound-variable set. + +### PR-023 — Lower-prefix rejection + +The planner SHALL reject candidate indexes whose usable prefix length is strictly less than the best available prefix length for that statement pattern and bound-variable set. + +### PR-024 — Prefix-zero order suppression + +If the best usable prefix length is zero, the planner SHALL NOT advertise any order property for that statement pattern. + +### PR-025 — Deterministic tie-breaking + +When multiple candidate indexes have equal usable prefix length and equivalent cost, the planner SHALL tie-break using configured LMDB index order. + +--- + +## 5.4 Ordered-candidate rules + +### PR-030 — Ordered candidate eligibility + +A candidate access path MAY expose an order property only if: +1. its prefix length is greater than zero, +2. its prefix length is less than four, +3. the first varying field after the usable prefix corresponds to an unbound variable. + +### PR-031 — Ordered variable derivation + +The ordered variable SHALL be the variable bound to the first varying field after the usable prefix. + +### PR-032 — Ordered candidate deduplication + +If multiple retained indexes produce the same ordered variable and materially identical probe costs, the planner SHOULD keep only the cheapest one. + +### PR-033 — No ordered downgrade + +The planner SHALL NOT choose an ordered access path that requires a prefix downgrade relative to the best available prefix length. + +--- + +## 5.5 Statistics usage rules + +### PR-040 — Constant-only exact cardinality + +If all fixed positions relevant to a cardinality estimate are compile-time constants, the planner SHALL use `LmdbEvaluationStatistics` / `TripleStore.cardinality(...)` for exact or existing-estimator cardinality. + +### PR-041 — Runtime-bound prefix fanout + +If a usable prefix contains any runtime-bound position, the planner SHALL use average rows per prefix from prefix statistics for `rowsScannedPerProbe`. + +### PR-042 — Prefix-zero scan estimate + +If usable prefix length is zero, `rowsScannedPerProbe` SHALL equal total row count from the current stats snapshot, or a conservative equivalent if stats are unavailable. + +### PR-043 — Output rows exact fast path + +If all fixed positions in a statement pattern are compile-time constants, `rowsReturnedPerProbe` SHALL use exact full-pattern cardinality. + +### PR-044 — Output rows mixed path + +If runtime-bound values are involved, `rowsReturnedPerProbe` SHALL be estimated from: +1. `rowsScannedPerProbe`, then +2. selectivity factors for additional non-prefix fixed fields. + +### PR-045 — Constant non-prefix selectivity + +A constant non-prefix field SHOULD use: +```text +exactCardinality(field = const only) / totalRows +``` +clamped to `[0,1]`. + +### PR-046 — Runtime-bound non-prefix selectivity + +A runtime-bound non-prefix field SHOULD use: +```text +1 / distinct(field) +``` +where `distinct(field)` is derived from an index whose first field is that field. + +### PR-047 — Distinct-field fallback + +If no index begins with the field needed for `distinct(field)`, the planner SHALL use a conservative fallback: +```text +1 / max(10, sqrt(totalRows)) +``` +or a stricter equivalent. + +### PR-048 — Repeated-variable intra-pattern equality + +If the same variable appears multiple times in one statement pattern and not all occurrences are fixed by the usable prefix, the planner SHOULD apply an additional equality selectivity factor. + +If omitted in v1, the omission SHALL be documented and covered by tests proving correctness is unaffected. + +--- + +## 5.6 Cost formulas + +### PR-050 — Probe cost formula + +The implementation SHALL compute probe cost using a formula equivalent in shape to: + +```text +probeCost = probeStartup + scanRowsPerProbe * scanWeight + rowsReturnedPerProbe * emitWeight +``` + +The exact constants MAY be internal and configurable only in code. + +### PR-051 — Nested-loop step cost + +For a left-deep addition of statement pattern `p` to partial plan `L`: + +```text +stepCost = rows(L) * probeCost(p | bindings(L)) +stepRows = rows(L) * rowsReturnedPerProbe(p | bindings(L)) +``` + +### PR-052 — Cross-join penalty semantics + +If `p` shares no binding variable with `L`, the implementation SHALL still use the same nested-loop formula. +The multiplicative effect of `rows(L)` on a non-parameterized scan SHALL serve as the cross-join penalty. + +### PR-053 — Ordered-state as physical property + +The planner SHALL treat output order as a physical property of the partial plan state key. + +--- + +## 5.7 Plan search rules + +### PR-060 — Left-deep search + +The LMDB-specific planner SHALL search only left-deep plan shapes in v1. + +### PR-061 — DP threshold + +For pure statement-pattern join groups of size `<= queryOptimizerDynamicProgrammingThreshold`, the planner SHALL use dynamic programming over subsets. + +### PR-062 — Greedy fallback above threshold + +For larger pure statement-pattern join groups, the planner SHALL use greedy growth from the cheapest singleton plan. + +### PR-063 — Singleton state creation + +The planner SHALL create: +- one unordered singleton state, +- and zero or more ordered singleton states + +for each statement pattern. + +### PR-064 — State key + +A DP state key SHALL include: +- subset membership, +- ordered variable name or null. + +### PR-065 — Transition generation + +For each state transition, the planner SHALL consider: +- nested-loop addition, +- optional merge-join addition + +when merge eligibility rules are satisfied. + +### PR-066 — Deterministic final choice + +If multiple full-plan states have equal cost within floating-point tolerance, the implementation SHALL use deterministic tie-breaking. + +--- + +## 5.8 Merge-join rules + +### PR-070 — Merge-join eligibility + +A merge join MAY be generated only if all conditions hold: + +1. merge join feature flag enabled +2. current partial plan has ordered property on variable `v` +3. next statement pattern can produce ordered property on same `v` +4. `v` is a shared join variable +5. cardinality ratio is acceptable +6. ordered access does not require prefix downgrade +7. runtime ordered access is available + +### PR-071 — Cardinality-ratio guard + +The acceptable cardinality ratio SHALL use the same conceptual guard as RDF4J’s current merge-join heuristic, defaulting to a multiplier of `10` unless configured otherwise in code. + +### PR-072 — Merge output rows + +Merge-join output rows SHALL use the same output-row estimate as the nested-loop alternative over the same binding assumptions. + +### PR-073 — Merge plan annotation + +A merge join in the final plan SHALL set: +- `join.setMergeJoin(true)` +- `join.setOrder(var)` + +--- + +## 5.9 Plan materialization rules + +### PR-080 — Search/model separation + +The planner SHALL NOT mutate the original query model while evaluating candidate states. + +### PR-081 — Final tree shape + +After the best plan is chosen, the planner SHALL build a right-recursive `Join` tree. + +### PR-082 — Planned index annotation + +Each chosen statement pattern in the final plan SHALL have the planned index name recorded via `setIndexName(...)` or equivalent metadata hook. + +### PR-083 — Statement-pattern order annotation + +If runtime ordered retrieval requires statement-pattern-local order metadata in addition to `Join.order`, the final plan construction SHALL set that metadata on the relevant statement patterns. + +### PR-084 — Existing result-size estimates + +The planner SHOULD continue to populate result-size estimates on statement patterns and joins where existing RDF4J infrastructure expects them. + +--- + +## 6. Statistics specification + +## 6.1 Snapshot contents + +### ST-001 + +The optimizer statistics snapshot SHALL contain: +- total row count, +- one entry per configured LMDB index. + +### ST-002 + +Each per-index stats entry SHALL contain: +- index name +- field sequence +- total row count +- distinct prefix count for lengths 1, 2, 3, 4 +- derived average rows per prefix for lengths 1, 2, 3, 4 + +### ST-003 + +All snapshot data used by the planner SHALL be immutable after publication. + +--- + +## 6.2 Snapshot build algorithm + +### ST-010 + +The implementation SHALL compute per-index prefix distinct counts by scanning the index in key order. + +### ST-011 + +Distinct prefix count for length `k` SHALL increment when the first `k` decoded fields differ from the previous key. + +### ST-012 + +Stats build SHOULD aggregate explicit and inferred statement DBs into one snapshot unless query-evaluation scope-specific stats are explicitly implemented. + +### ST-013 + +Temporary decode buffers SHALL be reused; the implementation SHOULD avoid per-row allocation. + +--- + +## 6.3 Snapshot lifecycle + +### ST-020 + +A stats snapshot SHALL be built: +- eagerly at initialization if configured, +- otherwise lazily on first optimizer use. + +### ST-021 + +Any committed transaction that changes statements SHALL mark the stats snapshot dirty. + +### ST-022 + +Dirtying MAY be tracked by commit count rather than exact mutation count. + +### ST-023 + +The stats manager SHALL rebuild the snapshot when dirty count reaches configured threshold. + +### ST-024 + +If rebuild fails, the implementation SHALL keep the previous snapshot if available. + +### ST-025 + +Stats rebuild failure SHALL NOT fail query execution. + +--- + +## 7. Runtime ordered-access specification + +## 7.1 Dataset-level order support + +### RT-001 + +`LmdbSailDataset.getSupportedOrders(...)` SHALL return the set of statement orders producible at best prefix quality for the concrete bindings supplied to the call. + +### RT-002 + +If best prefix length is zero, `getSupportedOrders(...)` SHALL return an empty set. + +### RT-003 + +`LmdbSailDataset.getComparator()` SHALL return a comparator consistent with LMDB ordered-iterator output. + +### RT-004 + +`LmdbSailDataset.getStatements(StatementOrder, ...)` SHALL produce statements in that order when the order is supported. + +--- + +## 7.2 TripleStore order support + +### RT-010 + +`TripleStore` SHALL expose the configured index descriptors to the LMDB planner. + +### RT-011 + +`TripleStore` SHALL expose a method to determine supported orders from concrete bindings. + +### RT-012 + +`TripleStore` SHALL expose an ordered-access method that chooses the best index matching: +- best prefix length, +- requested order as first varying field after prefix. + +### RT-013 + +If no best-prefix index supports the requested order, the implementation SHALL NOT silently claim the order is supported. + +It MAY: +- fall back to unordered access with debug logging, or +- reject the ordered request internally. + +--- + +## 7.3 Multi-context ordered iteration + +### RT-020 + +If multiple specific contexts are requested for an ordered call, the implementation SHALL merge per-context ordered iterators using a global k-way merge. + +### RT-021 + +The implementation SHALL NOT concatenate ordered per-context iterators using plain union/append semantics. + +### RT-022 + +The merge comparator SHALL be derived from: +```text +statementOrder.getComparator(valueComparator) +``` +where `valueComparator` is LMDB-order-consistent. + +--- + +## 7.4 Comparator rules + +### RT-030 + +For the LMDB ordered fast path, value comparison SHALL prefer LMDB internal value IDs. + +### RT-031 + +If both values have valid LMDB internal IDs, comparison SHALL use unsigned numeric ordering of those IDs or an equivalent total order consistent with LMDB key order. + +### RT-032 + +If one or both IDs are unavailable, the implementation MAY fall back to a generic RDF value comparator only outside the guaranteed LMDB ordered path. + +### RT-033 + +The implementation SHALL have tests proving comparator consistency with iterator order. + +--- + +## 8. Configuration specification + +## 8.1 Required configuration fields + +### CFG-001 + +`LmdbStoreConfig` SHALL expose: + +- `queryOptimizerEnabled` +- `queryOptimizerDynamicProgrammingThreshold` +- `queryOptimizerMergeJoinEnabled` +- `queryOptimizerStatisticsEnabled` +- `queryOptimizerStatisticsBuildOnInit` +- `queryOptimizerStatisticsRefreshCommitThreshold` + +### CFG-002 + +Default values SHALL be: + +```text +queryOptimizerEnabled = true +queryOptimizerDynamicProgrammingThreshold = 8 +queryOptimizerMergeJoinEnabled = true +queryOptimizerStatisticsEnabled = true +queryOptimizerStatisticsBuildOnInit = false +queryOptimizerStatisticsRefreshCommitThreshold = 100 +``` + +### CFG-003 + +If RDF config serialization is supported for LMDB store configuration, these fields SHALL also be serializable/deserializable through LMDB config schema/factory classes. + +--- + +## 9. Error-handling specification + +### ERR-001 — Unknown compile-time constant + +If a compile-time constant cannot be resolved to an LMDB value ID, exact cardinality SHALL be treated as zero. + +### ERR-002 — Stats unavailable + +If no stats snapshot exists and building one fails, the planner SHALL fall back to conservative heuristic estimates. + +### ERR-003 — Comparator resolution failure + +If internal IDs cannot be resolved for values on the non-guaranteed path, generic fallback comparison MAY be used, but merge-join correctness MUST remain preserved. + +### ERR-004 — Unsupported ordered request + +If ordered retrieval is requested but not actually satisfiable at runtime, the implementation SHALL fall back safely and SHALL NOT claim the order was produced. + +### ERR-005 — Mixed-group unsupported optimization + +Mixed join groups outside the LMDB-specific scope SHALL use generic behavior. + +### ERR-006 — Lock contention during stats rebuild + +If another thread is already rebuilding stats, the current thread MAY continue using the previous snapshot. + +--- + +## 10. Test specification + +## 10.1 Mandatory unit tests + +### TEST-001 + +Prefix statistics build SHALL be tested against a small deterministic dataset where distinct prefix counts are known exactly. + +### TEST-002 + +Access-path prefix calculation SHALL be tested for: +- constants +- runtime-bound variables +- non-prefix constants +- absent context + +### TEST-003 + +Supported-order reporting SHALL be tested for: +- best prefix > 0 +- best prefix = 0 +- multiple same-prefix indexes +- requested multiple contexts + +### TEST-004 + +LMDB ordered comparator SHALL be tested against known LMDB value IDs. + +--- + +## 10.2 Mandatory integration tests + +### TEST-010 + +The same query under different index sets SHALL produce different chosen statement orders when physically appropriate. + +### TEST-011 + +The same query under different earlier bound-variable states SHALL produce different next-pattern choices when parameterized probes become available. + +### TEST-012 + +Merge join SHALL appear only when: +- same order available on both sides, +- prefix quality not downgraded, +- size ratio acceptable. + +### TEST-013 + +When multiple contexts are requested, ordered result streams SHALL remain globally ordered. + +### TEST-014 + +Mixed join groups SHALL remain correct and shall use generic fallback. + +--- + +## 10.3 Mandatory metadata tests + +### TEST-020 + +Chosen statement patterns SHALL carry planned index names. + +### TEST-021 + +Final merge joins SHALL be annotated with `mergeJoin=true` and the correct order variable. + +### TEST-022 + +Runtime actual index reporting SHALL remain available. + +--- + +## 10.4 Mandatory benchmark tests + +### TEST-030 + +Benchmark suite SHALL include: +- star joins +- path joins +- object-heavy joins +- context-heavy joins +- cross-join-avoidance cases + +### TEST-031 + +Benchmarks SHALL compare at least two LMDB index configurations. + +### TEST-032 + +Benchmarks SHALL capture: +- planning time +- execution time +- result count +- chosen plan/index sequence + +--- + +## 11. Non-functional requirements + +### NFR-001 — Correctness first + +The implementation SHALL preserve query results. + +### NFR-002 — Determinism + +For a fixed query, dataset, bindings, and index configuration, the planner SHALL make deterministic choices. + +### NFR-003 — Isolation + +The feature SHALL not change planning behavior for non-LMDB stores. + +### NFR-004 — Observability + +The implementation SHALL provide enough metadata and logging to diagnose planner regressions. + +### NFR-005 — Rollback + +The feature SHALL be disableable by configuration. + +### NFR-006 — Modest planner overhead + +The planner SHOULD keep optimization overhead reasonable for typical BGP sizes. + +### NFR-007 — No write-path regression by design + +Statistics maintenance SHALL avoid expensive exact update work on every write in v1. + +--- + +## 12. Invariants + +### INV-001 + +No supported order SHALL be advertised when best usable prefix length is zero. + +### INV-002 + +A merge join SHALL never be emitted without a comparator-consistent ordered runtime path. + +### INV-003 + +The planner SHALL never depend on stats freshness for correctness. + +### INV-004 + +If ordered access through wrappers is unavailable, the planner SHALL still generate a valid unordered plan. + +### INV-005 + +Configured LMDB index order SHALL define deterministic tie-breaking among equal-cost equal-prefix candidates. + +--- + +## 13. Reference algorithms + +## 13.1 Prefix length + +```text +prefixLen = 0 +for field in index.fieldSeq: + if state(field) in {CONST, BOUND}: + prefixLen++ + else: + break +``` + +## 13.2 Ordered variable + +```text +if prefixLen == 0 or prefixLen == 4: + no order +else: + nextField = index.fieldSeq[prefixLen] + if state(nextField) == UNBOUND: + orderedVar = variable(nextField) + else: + no order +``` + +## 13.3 DP transition + +```text +for each state: + for each remaining pattern: + for each access path: + nestedLoopTransition(...) + if mergeEligible(...): + mergeTransition(...) + keep best by (subset, orderedVar) +``` + +--- + +## 14. Out-of-scope clarifications + +The following are explicitly non-required for conformance to v1 of this spec: + +1. bushy join enumeration +2. exact skew-aware histograms +3. adaptive runtime re-planning +4. automatic index recommendation or creation +5. optimizer-local handling for arbitrary non-`StatementPattern` nodes beyond safe fallback + +--- + +## 15. Implementation conformance checklist + +An implementation is conformant when every statement below is true. + +### Planner wiring + +- [ ] FR-001 satisfied +- [ ] FR-002 satisfied + +### Planner behavior + +- [ ] PR-010 to PR-084 satisfied + +### Statistics + +- [ ] ST-001 to ST-025 satisfied + +### Runtime ordered access + +- [ ] RT-001 to RT-033 satisfied + +### Config + +- [ ] CFG-001 to CFG-003 satisfied + +### Error handling + +- [ ] ERR-001 to ERR-006 satisfied + +### Tests + +- [ ] TEST-001 to TEST-032 satisfied + +### Non-functional + +- [ ] NFR-001 to NFR-007 satisfied + +### Invariants + +- [ ] INV-001 to INV-005 satisfied + +--- + +## 16. Final normative statement + +The LMDB join optimizer is considered complete only when it behaves as a **physical planner** that is: + +- aware of the actual configured LMDB indexes, +- aware of which variables are already bound, +- aware of when ordered access is truly available, +- safe under stale or missing statistics, +- and correct under all fallback conditions. \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194212560-ca924392.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194212560-ca924392.json new file mode 100644 index 00000000000..ae7f2f44166 --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194212560-ca924392.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-03-19T19:42:12.560179Z", + "queryId" : "lmdb-electrical_grid-q1", + "queryString" : "PREFIX grid: \nSELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n { ?entity a grid:Substation ; grid:name ?name . }\n UNION\n { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . }\n FILTER(?name = ?target || ?name = \"Substation 3\")\n OPTIONAL { ?entity grid:feeds ?substation2 . }\n}", + "unoptimizedFingerprint" : "1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4", + "metadata" : { + "store" : "lmdb", + "theme" : "ELECTRICAL_GRID", + "querySource" : "theme-index", + "queryIndex" : "1", + "queryName" : "Grid: substations or generators by name", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "bc457604fb2ff08ef8f095b878810ee4af8e96e55e3362a5c1097cfcc0ab94ba", + "queryString.normalizedWhitespaceSha256" : "fa8d1b182bc594eba88897a1fb2c6f52aeefe97708eeeb66cdf4ac015759fab3", + "optimizerInput.unoptimizedStructureRawSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "1af130c53987ef1967370efcdb15639fea274f6e", + "gitBranch" : "HEAD", + "javaVersion" : "25.0.1", + "queryString.charCount" : "398", + "queryString.lineCount" : "9", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "50", + "optimizerInput.unoptimizedJoinNodeCount" : "5", + "optimizerInput.unoptimizedFilterNodeCount" : "1", + "optimizerInput.unoptimizedStatementPatternCount" : "6", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=5", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4868c87682a8a4f12599e04ed28fb808b9df37819a2c4cd4333795a9e5cb8a28", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "79dbc5f8930415215fbadf8585ef8fc4d552e77a37388bb2f50c22f6dfd71795", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "60", + "optimizerOutput.optimizedJoinNodeCount" : "6", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "6", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=5", + "optimizerOutput.optimizedStructureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "60", + "executionPlan.executedJoinNodeCount" : "6", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "6", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=5", + "executionPlan.executedStructureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "executionPlan.executedModeledWorkUnits" : "348376.25", + "executionPlan.executedModeledInputRowsSum" : "224762", + "executionPlan.executedModeledOutputRowsSum" : "187315", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "149840", + "executionPlan.executedModeledJoinOutputRowsSum" : "93648", + "executionPlan.executedModeledFilterInputRowsSum" : "37456", + "executionPlan.executedModeledFilterOutputRowsSum" : "8", + "executionPlan.executedModeledFilterPassRatio" : "0.000214", + "executionPlan.executedModeledFilterRejectRatio" : "0.999786", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=5;filter=37456;group=8;join=93644;projection=1;scan=93644;union=4;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=5;filter=8;group=1;join=93648;projection=1;scan=93644;union=8;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=243468;LeftJoinIterator=20", + "executionPlan.executedModeledWorkVector" : "workUnits=348376.25|barrierCount=4|joinInputRowsSum=149840|joinOutputRowsSum=93648|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=243468;LeftJoinIterator=20|categories=distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "b60e6317b5f2a201891aa338a5910d635bf3115cb4911c75252eee6aebffaf89", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "804fe74ed7c7dee7ccad073e4c197ef257fa662fb48629bd48cdf8a517b0efdb", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:243468;StatementPattern[UNKNOWN]:93644;Filter[UNKNOWN]:11236.8;LeftJoin[LeftJoinIterator]:20;Group ()[UNKNOWN]:5.6;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.8;Union[UNKNOWN]:0.8;Extension[UNKNOWN]:0.2", + "executionPlan.executedEstimateActualComparableNodeCount" : "8", + "executionPlan.executedHasNextCallCountSum" : "149869", + "executionPlan.executedHasNextTrueCountSum" : "93665", + "executionPlan.executedHasNextTimeNanosSum" : "1272990232", + "executionPlan.executedNextCallCountSum" : "93664", + "executionPlan.executedNextTimeNanosSum" : "14705198", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "112392", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "56220", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "187288", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "3.331341", + "executionPlan.executedJoinTelemetryNodeCount" : "6", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.666382", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "18732", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "9370", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "31214.666667", + "executionPlan.executedSourceRowsScannedSum" : "18728", + "executionPlan.executedSourceRowsMatchedSum" : "4", + "executionPlan.executedSourceRowsFilteredSum" : "18724", + "executionPlan.executedSourceFilterOutRatio" : "0.999786", + "executionPlan.executedHasNextPerNextRatio" : "1.60007", + "executionPlan.executedHasNextTruePerNextRatio" : "1.000011", + "executionPlan.executedEstimateActualQErrorP95" : "9343.5", + "executionPlan.executedEstimateActualQErrorMax" : "9343.5", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "0", + "executionPlan.executedJoinEstimateActualQErrorP95" : "0", + "executionPlan.executedJoinEstimateActualQErrorMax" : "0", + "featureFlags.sha256" : "ff6473784c7c8551be8344bb7316483cd5bb6e4e45d998232c934e985e179b58", + "planDeterminism.inputFingerprintSha256" : "30fade34fcfb6bf791a292c45565ff8b4e098ec395b5b8999462af07a13ec062", + "planDeterminism.environmentFingerprintSha256" : "15cff99872bd393e74b41e0c057023d3af13056c8ee8c477fcc9e01f206e689a", + "execution.runs" : "56", + "execution.resultCount" : "1", + "execution.totalMillis" : "39217", + "execution.averageMillis" : "700", + "execution.minMillis" : "58", + "execution.maxMillis" : "27663", + "execution.stdDevMillis" : "3676", + "execution.coefficientOfVariationPct" : "525.0047", + "execution.sampleMillis" : "80,77,61,63,61,131,58,60,58,60,178,59,60,61,61,59,163,59,59,58,60,194,60,58,59,59,61,174,59,61,60,59,201,62,60,61,60,61,178,60,60,58,59,59,1233,59,64,63,58,1339,60,59,62,1367,3694,27663", + "execution.verificationStatus" : "soft-limit-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "true", + "execution.maxRunsReached" : "false" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "ELECTRICAL_GRID", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "2", + "cli.executionRepeatMaxRuns" : "128", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "1", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "10485760", + "lmdbConfig.tripleDbSize" : "10485760", + "lmdbData.fullyLoadedSizeBytes" : "2178763819", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (=)\n │ ║ │ ║ Var (name=name)\n │ ║ │ ║ Var (name=target)\n │ ║ │ ╚══ Compare (=)\n │ ║ │ Var (name=name)\n │ ║ │ ValueConstant (value=\"Substation 3\")\n │ ║ └── LeftJoin\n │ ║ ╠══ Join [left]\n │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) [left]\n │ ║ ║ └── Union (new scope) [right]\n │ ║ ║ ╠══ Join (new scope)\n │ ║ ║ ║ ├── StatementPattern [left]\n │ ║ ║ ║ │ s: Var (name=entity)\n │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n │ ║ ║ ║ └── StatementPattern [right]\n │ ║ ║ ║ s: Var (name=entity)\n │ ║ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ ║ ║ o: Var (name=name)\n │ ║ ║ ╚══ Join (new scope)\n │ ║ ║ ├── Join [left]\n │ ║ ║ │ ╠══ StatementPattern [left]\n │ ║ ║ │ ║ s: Var (name=entity)\n │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n │ ║ ║ │ ╚══ StatementPattern [right]\n │ ║ ║ │ s: Var (name=entity)\n │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ ║ │ o: Var (name=substation)\n │ ║ ║ └── StatementPattern [right]\n │ ║ ║ s: Var (name=substation)\n │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ ║ o: Var (name=name)\n │ ║ ╚══ StatementPattern [right]\n │ ║ s: Var (name=entity)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ o: Var (name=substation2)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=entity)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\"\n }, {\n \"type\" : \"Union\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation2)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n LeftJoin\n Join\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])\n Union (new scope)\n Join (new scope)\n StatementPattern\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Join (new scope)\n Join\n StatementPattern\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n LeftJoin\\n Join\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\\n Union (new scope)\\n Join (new scope)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Join (new scope)\\n Join\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAZ0YXJnZXR4c3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAJ3BAAAAAJzcgArb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuaW1wbC5MaXN0QmluZGluZ1NldNelYuv0tawhAgADTAAMYmluZGluZ05hbWVzcQB+AA5MABRiaW5kaW5nTmFtZXNTZXRDYWNoZXEAfgARTAAGdmFsdWVzcQB+AA54cgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuQWJzdHJhY3RCaW5kaW5nU2V02//Sk443PUACAAB4cHNxAH4AIwAAAAF3BAAAAAFxAH4AInhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABhMAAhsYW5ndWFnZXEAfgAYeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZTVFJJTkdzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGEwACW5hbWVzcGFjZXEAfgAYTAALc3RyaW5nVmFsdWVxAH4AGHhwdy/i7scYACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMABnN0cmluZ3h0AAxTdWJzdGF0aW9uIDFwc3EAfgAlc3EAfgAjAAAAAXcEAAAAAXEAfgAieHBzcQB+ACl1cQB+ACwAAAABc3EAfgAucQB+ADVxAH4AOHQADFN1YnN0YXRpb24gMnB4c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5pb25nn7ojrEgEyAIAAHhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABtxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBBcQB+AAhwc3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABhMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBCcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAGZW50aXR5dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF9hYzlmMDNkM191cmlwcHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhcnFTVBdTsbLvAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AGEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEZxAH4ACAEAAAAAAXEAfgBOc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AChodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9TdWJzdGF0aW9uc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ARnEAfgAIAQAAAAABcQB+AE1zcQB+AFIAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHEAfgA0dAAQREVGQVVMVF9DT05URVhUU3BzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBGcQB+AAgAAAAAAABxAH4ATHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIc3EAfgBHdXEAfgBKAAAAA3EAfgBMdAATX2NvbnN0Xzk2NjEyMjhhX3VyaXQABG5hbWVwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBhcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAEAAAAAAXEAfgBgc3EAfgBSAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AXXEAfgAIAAAAAAAAcQB+AExwcAAAc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQXEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHBzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBocQB+AAhzcQB+AEd1cQB+AEoAAAADdAAGZW50aXR5dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF83MmYzM2ExNF91cmlwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGlxAH4ACAEAAAAAAXEAfgBuc3EAfgBSAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9HZW5lcmF0b3JzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBpcQB+AAgBAAAAAAFxAH4AbXNxAH4AUgAAAAD/////cQB+AFhxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBpcQB+AAgAAAAAAABxAH4AbHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaHEAfgAIc3EAfgBHdXEAfgBKAAAAA3EAfgBsdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQACnN1YnN0YXRpb25wcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgB5cHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAEAAAAAAXEAfgB4c3EAfgBSAAAAAP////90ACNodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9mZWVkc3EAfgBacHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgBscHAAAHNxAH4AQwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHNxAH4AR3VxAH4ASgAAAAN0AApzdWJzdGF0aW9udAATX2NvbnN0Xzk2NjEyMjhhX3VyaXQABG5hbWVwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgCEcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCDc3EAfgBSAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAAAAAAAAcQB+AIJwcAAAAABzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAZcQB+AAhzcQB+AEd1cQB+AEoAAAADdAAGZW50aXR5dAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4Aj3BzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgBAAAAAAFxAH4AjnNxAH4AUgAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4AjXBwcHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAgAAAAAAAB0AARuYW1lcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJpxAH4ACAAAAAAAAHQABnRhcmdldHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgA0dAACRVFzcQB+AJgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCicQB+AAgAAAAAAAB0AARuYW1lcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AFB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCicQB+AAhzcQB+AC5xAH4ANXEAfgA4dAAMU3Vic3RhdGlvbiAzcHEAfgCgc3EAfgAfdwwAAAAQP0AAAAAAAAB4c3EAfgAjAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAYTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCtcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgAAAAAAAB0AAZlbnRpdHlwAXhzcQB+ACMAAAABdwQAAAABc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9uRWxlbfVEWvAL0OgoAgACTAAEZXhwcnEAfgAUTAAEbmFtZXEAfgAYeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgCvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AuHEAfgAIAAAAAAAAcQB+ALRwAXEAfgCueAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AvHEAfgAIAXEAfgCucHNxAH4AtgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AMRxAH4ACHEAfgDDAXNxAH4AugAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMRxAH4ACHVxAH4AvQAAAAFzcQB+AL8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDGcQB+AAgBcQB+AK5wcQB+AMJzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AIwAAAAF3BAAAAAFxAH4AyHhxAH4AzXBxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMNxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM5xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDQcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0XEAfgAIcQB+ACFxAH4AJHNxAH4AQAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANFxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDTcQB+AAhwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1HEAfgAIcQB+AElwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACAEAAAAAAXEAfgBOcQB+AFRzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDVcQB+AAgBAAAAAAFxAH4ATXEAfgBXcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIAAAAAAAAcQB+AExwcHNxAH4AQwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANRxAH4ACHEAfgBecHBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAABxAH4AYXBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgBAAAAAAFxAH4AYHEAfgBkcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2XEAfgAIAAAAAAAAcQB+AExwcAAAc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A03EAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHBzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDecQB+AAhxAH4AanBwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A33EAfgAIAQAAAAABcQB+AG5xAH4AcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN9xAH4ACAEAAAAAAXEAfgBtcQB+AHNxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDfcQB+AAgAAAAAAABxAH4AbHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3nEAfgAIcQB+AHZwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AONxAH4ACAAAAAAAAHEAfgB5cHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AONxAH4ACAEAAAAAAXEAfgB4cQB+AHxxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDjcQB+AAgAAAAAAABxAH4AbHBwAABzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDdcQB+AAhxAH4AgHBwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A53EAfgAIAAAAAAAAcQB+AIRwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A53EAfgAIAQAAAAABcQB+AINxAH4Ah3EAfgBacHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOdxAH4ACAAAAAAAAHEAfgCCcHAAAAAAc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0HEAfgAIcQB+AItwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOtxAH4ACAAAAAAAAHEAfgCPcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOtxAH4ACAEAAAAAAXEAfgCOcQB+AJJxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDrcQB+AAgAAAAAAABxAH4AjXBwcHNxAH4AlQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHNxAH4AmAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APBxAH4ACAAAAAAAAHEAfgCccHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APBxAH4ACAAAAAAAAHEAfgCecHEAfgCgc3EAfgCYAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A73EAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIAAAAAAAAcQB+AKRwc3EAfgClAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcQB+AKdxAH4AoHNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AIwAAAAF3BAAAAAFzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDOcQB+AAhxAH4ArnNxAH4ArwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APpxAH4ACAAAAAAAAHEAfgC0cAF4c3EAfgAjAAAAAXcEAAAAAXEAfgDCeHEAfgAIc3EAfgCvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AwnEAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIAAAAAAAAcQB+ALRwAXEAfgCuc3EAfgApcQB+AL5w\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "50", + "maxDepth" : "11", + "leafNodeCount" : "26", + "maxBranchingFactor" : "3", + "joinNodeCount" : "5", + "filterNodeCount" : "1", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=5", + "structureSignatureRawSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "structureSignatureNormalizedSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "joinAlgorithmSignatureSha256" : "8d7bb3a1872ff0d530d2320db68a80f70b9792cdca4b647a2e03898bca6b01ed", + "actualResultSizesSignatureSha256" : "f63c0ae9df411a8f7bf2e97abd7843872802c90157e87aeb483cd312b667c2a6", + "estimatesSignatureSha256" : "8d137d8f96ae30c5238e20f13a19a11e7604c3b7472b21d54b1cdaf49d86b708", + "joinAlgorithmMultisetSignatureSha256" : "1d723ee45825989627b25b9dd3d3b01332e9c2ee4a048455130077a375bf7ed2", + "actualResultSizesMultisetSignatureSha256" : "f77d718d1d695e4d6e5d8170c1ccfac2a62e1ec2b25082eb47002c128f4c9d17", + "estimatesMultisetSignatureSha256" : "4868c87682a8a4f12599e04ed28fb808b9df37819a2c4cd4333795a9e5cb8a28", + "statementPatternEstimatesMultisetSignatureSha256" : "79dbc5f8930415215fbadf8585ef8fc4d552e77a37388bb2f50c22f6dfd71795", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=3;filter=1;group=2;join=5;projection=3;scan=6;union=1;unknown=27", + "modeledOperatorCountByCategorySignatureSha256" : "bb3efa2801f0aea525a5aa32d627533fac784487eddf6c22013bb9281292af95", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "b201987da7c5d6e01f705604edadde975bb808230af044d3cc792bd8dbc6de37", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "b201987da7c5d6e01f705604edadde975bb808230af044d3cc792bd8dbc6de37", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=3;filter=1;group=2;join=5;projection=3;scan=6;union=1;unknown=27|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "4b538bf5508ab362a31faff82ac24bdff826cc25469c3d5a7d099b230b548b32", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "ccbedbeb561258548f98da9c82b199734ce99c129289b451472d3f0a36655c3f", + "operatorWorkTopContributors" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0;Compare (=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0;GroupElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "5", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "51", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ LeftJoin\n │ ║ ├── Union [left]\n │ ║ │ ╠══ Filter\n │ ║ │ ║ ├── Or\n │ ║ │ ║ │ ╠══ Compare (=)\n │ ║ │ ║ │ ║ Var (name=name)\n │ ║ │ ║ │ ║ Var (name=target)\n │ ║ │ ║ │ ╚══ Compare (=)\n │ ║ │ ║ │ Var (name=name)\n │ ║ │ ║ │ ValueConstant (value=\"Substation 3\")\n │ ║ │ ║ └── Join (JoinIterator)\n │ ║ │ ║ ╠══ Join (JoinIterator) [left]\n │ ║ │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left]\n │ ║ │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ ║ s: Var (name=entity)\n │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n │ ║ │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ s: Var (name=entity)\n │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ │ ║ o: Var (name=name)\n │ ║ │ ╚══ Filter\n │ ║ │ ├── Or\n │ ║ │ │ ╠══ Compare (=)\n │ ║ │ │ ║ Var (name=name)\n │ ║ │ │ ║ Var (name=target)\n │ ║ │ │ ╚══ Compare (=)\n │ ║ │ │ Var (name=name)\n │ ║ │ │ ValueConstant (value=\"Substation 3\")\n │ ║ │ └── Join (JoinIterator)\n │ ║ │ ╠══ Join (JoinIterator) [left]\n │ ║ │ ║ ├── Join (JoinIterator) [left]\n │ ║ │ ║ │ ╠══ BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left]\n │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ │ s: Var (name=entity)\n │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right]\n │ ║ │ ║ s: Var (name=entity)\n │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ │ ║ o: Var (name=substation)\n │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right]\n │ ║ │ s: Var (name=substation)\n │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ │ o: Var (name=name)\n │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right]\n │ ║ s: Var (name=entity)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ o: Var (name=substation2)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=entity)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Union\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 28107.0,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.316672415E8,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.66824711351707,\n \"resultSizeEstimate\" : 37374.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 37374.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation2)\"\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n LeftJoin\n Union\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator)\n Join (JoinIterator)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator)\n Join (JoinIterator)\n Join (JoinIterator)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern (resultSizeEstimate=37.4K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n LeftJoin\\n Union\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator)\\n Join (JoinIterator)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator)\\n Join (JoinIterator)\\n Join (JoinIterator)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern (resultSizeEstimate=37.4K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"3da4971af014bdd18bf5c7baaa501fcba49e8a128be67f9ad61553d0d56f0001\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb250ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYWx1ZUV4cHI7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VHVwbGVPcGVyYXRvcj6Y3mRodHOMAgADTAANYWxnb3JpdGhtTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAB2xlZnRBcmdxAH4AAkwACHJpZ2h0QXJncQB+AAJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAhwc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5pb25nn7ojrEgEyAIAAHhxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABdxAH4ACHBzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnEAfgAUeHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcQB+AB5zcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAFAGAAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////8/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AH3EAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAAGdGFyZ2V0eHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACYAAAABdwQAAAABdAAGdGFyZ2V0eHBzcgAaamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3TZpDy+zYgG0gIAAVsAAWF0ABNbTGphdmEvbGFuZy9PYmplY3Q7eHB1cgAgW0xvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5WYWx1ZTvQ6xK0h0h51gIAAHhwAAAAAXNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AFkwACGxhbmd1YWdlcQB+ABZ4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABlNUUklOR3NyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkludGVybmVkSVJJAllGAIULdQcDAARJAAhoYXNoQ29kZUwACWxvY2FsTmFtZXEAfgAWTAAJbmFtZXNwYWNlcQB+ABZMAAtzdHJpbmdWYWx1ZXEAfgAWeHB3L+LuxxgAIWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIwAGc3RyaW5neHQADFN1YnN0YXRpb24gMXBzcQB+AChzcQB+ACYAAAABdwQAAAABcQB+ACx4cHNxAH4ALXVxAH4AMAAAAAFzcQB+ADJxAH4AOXEAfgA8dAAMU3Vic3RhdGlvbiAycHhzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AFkwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABQNtywAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QMJKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAZlbnRpdHl0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0X2FjOWYwM2QzX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFycVNUF1Oxsu8CAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAWTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AR3EAfgAIAQAAAAABcQB+AE9zcgAmb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVJUkmaRSpDk2ZGbgIAAkkADGxvY2FsTmFtZUlkeEwACWlyaVN0cmluZ3EAfgAWeHIAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RJUklsPw86B5HwlgIAAUkADmNhY2hlZEhhc2hDb2RleHAAAAAAAAAAHnQAKGh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL1N1YnN0YXRpb25zcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBHcQB+AAgBAAAAAAFxAH4ATnNxAH4AUwAAAAD/////dAAvaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGV+cgA2b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlAAAAAAAAAAASAAB4cQB+ADh0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEdxAH4ACAAAAAAAAHEAfgBNcHAAAHNxAH4ARAAAAAAAAAABQFgyykH3pdL///////////////////////////////8A////////////////////////////////////////////////////////////////QMJKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4ASHVxAH4ASwAAAANxAH4ATXQAE19jb25zdF85NjYxMjI4YV91cml0AARuYW1lcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBecQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBecQB+AAgBAAAAAAFxAH4AYXNxAH4AUwAAAAAAAAAedAAiaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvbmFtZXEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF5xAH4ACAAAAAAAAHEAfgBNcHAAAHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AGkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBqcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBtcQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBtcQB+AAgAAAAAAABxAH4AJXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgA4dAACRVFzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBqcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgAAAAAAABxAH4AYnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBReHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIc3EAfgAycQB+ADlxAH4APHQADFN1YnN0YXRpb24gM3BxAH4AcXNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHlxAH4ACHEAfgAec3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AenEAfgAIcQB+AB5zcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB7cQB+AAhxAH4AHnNxAH4AIAAAAAAAAAABQBgAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////P/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHxxAH4ACHNxAH4AI3cMAAAAED9AAAAAAAABcQB+ACV4cQB+ACdzcQB+AEQAAAAAAAAAAUGfZFSmAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0DCSgAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB8cQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE10ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzcyZjMzYTE0X3VyaXBwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAQAAAAABcQB+AINzcQB+AFMAAAAAAAAAHnQAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL0dlbmVyYXRvcnNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCCc3EAfgBTAAAAAP////9xAH4AWXEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgBNcHAAAHNxAH4ARAAAAAAAAAABQFgqxI+KjPH///////////////////////////////8A////////////////////////////////////////////////////////////////QOI/wAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHtxAH4ACHNxAH4ASHVxAH4ASwAAAANxAH4ATXQAE19jb25zdF8zNTU0MjY3Nl91cml0AApzdWJzdGF0aW9ucHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4AjnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgBAAAAAAFxAH4AjXNxAH4AUwAAAAAAAAAedAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4ATXBwAABzcQB+AEQAAAAAAAAAAUBYMspB96XS////////////////////////////////AP///////////////////////////////////////////////////////////////0DCSgAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB6cQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AI50ABNfY29uc3RfOTY2MTIyOGFfdXJpcQB+AGJwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAAAAAAAAHEAfgBicHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAEAAAAAAXEAfgCXc3EAfgBTAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlHEAfgAIAAAAAAAAcQB+AI5wcAAAc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AeXEAfgAIc3EAfgBrAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnXEAfgAIc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnnEAfgAIAAAAAAAAcQB+AGJwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnnEAfgAIAAAAAAAAcQB+ACVwcQB+AHFzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCdcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAgAAAAAAABxAH4AYnBzcQB+AHUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAhxAH4Ad3EAfgBxc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9A4j/AAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AF3EAfgAIc3EAfgBIdXEAfgBLAAAAA3EAfgBNdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4AqHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgBAAAAAAFxAH4Ap3NxAH4AUwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4ATXBwcHNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgAjdwwAAAAQP0AAAAAAAAB4c3EAfgAmAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAWTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCzcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC4cQB+AAgAAAAAAABxAH4ATXABeHNxAH4AJgAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABZ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAPcQB+AAhzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC8cQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC9cQB+AAgAAAAAAABxAH4ATXABcQB+ALR4AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgAWTAAPcHJvamVjdGlvbkFsaWFzcQB+ABZMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDBcQB+AAgBcQB+ALRwc3EAfgC7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ACQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4AyXEAfgAIcQB+AMgBc3EAfgC/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyXEAfgAIdXEAfgDCAAAAAXNxAH4AxAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMtxAH4ACAFxAH4AtHBxAH4Ax3NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAOeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgAmAAAAAXcEAAAAAXEAfgDNeHEAfgDScHEAfgAIc3EAfgAQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyHEAfgAIc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A03EAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1HEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACHBzcQB+ACAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDWcQB+AAhzcQB+AK53DAAAAAI/QAAAAAAAAXEAfgAseHEAfgAnc3EAfgAYAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANlxAH4ACHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDacQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE1xAH4ATnEAfgBPcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDbcQB+AAgBAAAAAAFxAH4AT3EAfgBVc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A23EAfgAIAQAAAAABcQB+AE5xAH4AWHEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANtxAH4ACAAAAAAAAHEAfgBNcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDacQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE1xAH4AYXQABG5hbWVwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACAAAAAAAAHEAfgDkcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACAEAAAAAAXEAfgBhcQB+AGVxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDhcQB+AAgAAAAAAABxAH4ATXBwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOlxAH4ACHNxAH4ASHVxAH4ASwAAAAN0AAZlbnRpdHlxAH4AgnEAfgCDcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAgBAAAAAAFxAH4Ag3EAfgCFc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6nEAfgAIAQAAAAABcQB+AIJxAH4AiHEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOpxAH4ACAAAAAAAAHEAfgDtcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AO1xAH4AjXEAfgCOcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDxcQB+AAgAAAAAAABxAH4AjnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDxcQB+AAgBAAAAAAFxAH4AjXEAfgCRcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8XEAfgAIAAAAAAAAcQB+AO1wcAAAc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBIdXEAfgBLAAAAA3QACnN1YnN0YXRpb25xAH4Al3QABG5hbWVwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APdxAH4ACAAAAAAAAHEAfgD7cHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APdxAH4ACAEAAAAAAXEAfgCXcQB+AJpxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAgAAAAAAABxAH4A+nBwAAAAAHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACHNxAH4ASHVxAH4ASwAAAAN0AAZlbnRpdHlxAH4Ap3EAfgCocHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4AqHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4Ap3EAfgCrcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AQJwcHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEGcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAgAAAAAAABxAH4AJXBxAH4AcXNxAH4AawAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQpxAH4ACAAAAAAAAHQABG5hbWVwc3EAfgB1AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCnEAfgAIcQB+AHdxAH4AcXNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AJgAAAAF3BAAAAAFzcQB+ALEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDTcQB+AAhxAH4AtHNxAH4AtQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARFxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARJxAH4ACAAAAAAAAHQABmVudGl0eXABeHNxAH4AJgAAAAF3BAAAAAFxAH4Ax3hxAH4ACHNxAH4AtQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMdxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARZxAH4ACAAAAAAAAHEAfgEUcAFxAH4AtHNxAH4ALXEAfgDDcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n UNION\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?substation .\n ?substation ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n OPTIONAL {\n ?entity ?substation2 .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "60", + "maxDepth" : "11", + "leafNodeCount" : "31", + "maxBranchingFactor" : "3", + "joinNodeCount" : "6", + "filterNodeCount" : "2", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=5", + "structureSignatureRawSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "structureSignatureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "joinAlgorithmSignatureSha256" : "8beb62c935cc91321d54c06aabd3d1a657662ae74b182879ebe463415138dd48", + "actualResultSizesSignatureSha256" : "ed9ccf0161c31186a4edc2a3fb0180f2b8687224c5499e6c7d0c3949194d8dc9", + "estimatesSignatureSha256" : "de94d234d648505b39e9f70f029c702e4096787a0ba1be0c79bf52a016398369", + "joinAlgorithmMultisetSignatureSha256" : "7aa55a4a82ea0dbb7670691ec3cc9e667429892a9767ecf8693ac79ab2cea297", + "actualResultSizesMultisetSignatureSha256" : "21737f9327c195a3c4566f76fc2a023bd727cbdaeb5486aa5e395ae79bb260f1", + "estimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "statementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "112204.4", + "modeledInputRowsSum" : "224410", + "modeledOutputRowsSum" : "112206", + "modeledJoinInputRowsSum" : "112206", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.4;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "modeledOperatorCountByCategorySignatureSha256" : "9abdb299b9d9e22d035c5cbd57e3cb3a1092d1fc7daecbc2f7403f401450034d", + "modeledInputRowsByCategory" : "distinct=0;extension=2;filter=0;group=0;join=112204;projection=0;scan=112204;union=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "87fc031b820af562cc9eac49fc86ca761f4bbca5e2cbb6de7afa0c8315163730", + "modeledOutputRowsByCategory" : "distinct=0;extension=2;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "8d8032700fda5a6aa204e485bf2af72a89aa6cefb898635a0a1011efbc6aab81", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "JoinIterator=0;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "f14303cf51645ddf2a677b9c40fc44a5eba760e5156242ea41b22fdc1680a8c2", + "modeledWorkVector" : "workUnits=112204.4|barrierCount=4|joinInputRowsSum=112206|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=0;UNKNOWN=0|categories=distinct=0;extension=0.4;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ec9620e746599deffcf48abf21b5ba0fcbda579a88e1759eda5942d54d5d933d", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=2|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=5|workUnits=0|inputRows=74830|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=37374|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=112204|inputRows=112204|outputRows=112204|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "220a2ab7eed74452c5a528263bf809e1e596ccbc0eee404a88e28ea2eb897c96", + "operatorWorkTopContributors" : "StatementPattern[UNKNOWN]:112204;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.4;Compare (=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "131695650.75543677233721", + "costEstimateMax" : "131667241.5", + "resultSizeEstimateSum" : "112206", + "resultSizeEstimateMax" : "37374", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "6", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "61", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=220.3M, nextCallCountActual=1, nextTimeNanosActual=27.5K, outputRowsActual=1, firstRowTimeNanosActual=220.3M, openCountActual=1, lastRowTimeNanosActual=220.5M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.2M, avgNextNanosActual=27.6K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=220.3M, nextCallCountActual=1, nextTimeNanosActual=10.4K, outputRowsActual=1, firstRowTimeNanosActual=220.3M, openCountActual=1, lastRowTimeNanosActual=220.5M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.2M, avgNextNanosActual=10.5K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=220.2M, nextCallCountActual=1, nextTimeNanosActual=1.2K, aggregateEvalCountActual=8, outputRowsActual=1, firstRowTimeNanosActual=220.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=220.4M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.1M, avgNextNanosActual=1.3K)\n │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=216.7M, nextCallCountActual=8, nextTimeNanosActual=8.2K, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, outputRowsActual=8, firstRowTimeNanosActual=2.8M, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=218.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=21.7M, avgNextNanosActual=1.0K, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4)\n │ ║ ├── Union (resultSizeActual=8, inputRowsActual=8, outputRowsActual=8, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left]\n │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=114.4M, nextCallCountActual=4, nextTimeNanosActual=1.4K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, outputRowsActual=4, firstRowTimeNanosActual=2.8M, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=115.3M, closeCountActual=1, exprEvalTimeNanosActual=31.1M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=22.9M, avgNextNanosActual=354, filterRejectRateActual=1.00)\n │ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=25.3M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=20.0M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ ║ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ║ Var (name=target) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ValueConstant (value=\"Substation 3\") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0)\n │ ║ │ ║ └── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K)\n │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=18.7K, inputRowsActual=18.7K, outputRowsActual=18.7K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=18.7K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left]\n │ ║ │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=31.4K, nextCallCountActual=2, nextTimeNanosActual=5.2K, outputRowsActual=2, firstRowTimeNanosActual=301.6K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=115.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=10.5K, avgNextNanosActual=2.6K) [left]\n │ ║ │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=3.9M, nextCallCountActual=18.7K, nextTimeNanosActual=6.2M, outputRowsActual=18.7K, firstRowTimeNanosActual=13.0K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=45.9M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=213, avgNextNanosActual=334) [right]\n │ ║ │ ║ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=23.3M, nextCallCountActual=18.7K, nextTimeNanosActual=3.3M, outputRowsActual=18.7K, firstRowTimeNanosActual=625, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=2.1K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=624, avgNextNanosActual=179) [right]\n │ ║ │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, inputRowsActual=18.7K, outputRowsActual=4, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0)\n │ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=17.3M, hasNextFalseCountActual=0)\n │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=13.9M, hasNextFalseCountActual=0)\n │ ║ │ │ ║ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ │ ║ Var (name=target) (hasNextFalseCountActual=0)\n │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0)\n │ ║ │ │ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ │ ValueConstant (value=\"Substation 3\") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0)\n │ ║ │ └── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K)\n │ ║ │ ╠══ Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K) [left]\n │ ║ │ ║ ├── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=18.7K, inputRowsActual=18.7K, outputRowsActual=18.7K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=18.7K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left]\n │ ║ │ ║ │ ╠══ BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=35.0K, nextCallCountActual=2, nextTimeNanosActual=11.1K, outputRowsActual=2, firstRowTimeNanosActual=115.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=217.2M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=11.7K, avgNextNanosActual=5.6K) [left]\n │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=2.1M, nextCallCountActual=18.7K, nextTimeNanosActual=1.8M, outputRowsActual=18.7K, firstRowTimeNanosActual=12.4K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=44.3M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=99) [right]\n │ ║ │ ║ │ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=21.0M, nextCallCountActual=18.7K, nextTimeNanosActual=1.6M, outputRowsActual=18.7K, firstRowTimeNanosActual=916, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=3.2K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=563, avgNextNanosActual=88) [right]\n │ ║ │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=substation) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=9.9M, nextCallCountActual=18.7K, nextTimeNanosActual=1.4M, outputRowsActual=18.7K, firstRowTimeNanosActual=500, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=1.5K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=265, avgNextNanosActual=80) [right]\n │ ║ │ s: Var (name=substation) (hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=name) (hasNextFalseCountActual=0)\n │ ║ └── StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=29.6K, nextCallCountActual=4, nextTimeNanosActual=748, outputRowsActual=4, firstRowTimeNanosActual=1.0K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=13.6K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=9.3K, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=2.5K, avgNextNanosActual=187) [right]\n │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0)\n │ ║ o: Var (name=substation2) (hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=entity) (hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=entity) (hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 220316792,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 27584,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 220342375,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 220512208,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 220300667,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 10459,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 220347458,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 220509833,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 220274625,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 1250,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 8,\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 220345292,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 220487667,\n \"maxGroupSizeActual\" : 8,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 10\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 8.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 216752582,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 8208,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 4,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 8,\n \"firstRowTimeNanosActual\" : 2873333,\n \"leftRowsWithMatchActual\" : 4,\n \"openCountActual\" : 1,\n \"emptyRightProbeCountActual\" : 4,\n \"lastRowTimeNanosActual\" : 218060583,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Union\",\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 5,\n \"hasNextTrueCountActual\" : 4,\n \"hasNextTimeNanosActual\" : 114436250,\n \"nextCallCountActual\" : 4,\n \"nextTimeNanosActual\" : 1416,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18728,\n \"sourceRowsMatchedActual\" : 4,\n \"sourceRowsFilteredActual\" : 18724,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 4,\n \"firstRowTimeNanosActual\" : 2813666,\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 4,\n \"lastRowTimeNanosActual\" : 115328416,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3.1117323E7\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 4,\n \"shortCircuitCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2.5254415E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18726,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1.998651E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=target)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18726,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2243386.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1679292.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 31417,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 5292,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 2,\n \"firstRowTimeNanosActual\" : 301625,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 115028750,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 28107.0,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 18730,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 3982426,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 6260616,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 13083,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 45916500,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 23358683,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 3358142,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 625,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 2166,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 4,\n \"shortCircuitCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1.7280063E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18726,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1.3887353E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=target)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18726,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1249092.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2542.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 35000,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 11167,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 2,\n \"firstRowTimeNanosActual\" : 115044917,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 217203542,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.316672415E8,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 18730,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 2113077,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 1849209,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 12417,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 44345042,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.66824711351707,\n \"resultSizeEstimate\" : 37374.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 21099505,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 1650410,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 916,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 3291,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=substation)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 9941706,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 1489406,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 500,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 1583,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 37374.0,\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 12,\n \"hasNextTrueCountActual\" : 4,\n \"hasNextTimeNanosActual\" : 29627,\n \"nextCallCountActual\" : 4,\n \"nextTimeNanosActual\" : 748,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 4,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 4,\n \"firstRowTimeNanosActual\" : 1041,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 13625,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=substation2)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n LeftJoin (LeftJoinIterator) (resultSizeActual=8.00)\n Union (resultSizeActual=8.00)\n Filter (resultSizeActual=4.00)\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Filter (resultSizeActual=4.00)\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4.00)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=8.00)\\n Union (resultSizeActual=8.00)\\n Filter (resultSizeActual=4.00)\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Filter (resultSizeActual=4.00)\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4.00)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"c7f27b5b21ef43dc34305fb666d4af1e42c0b6bbdadb89f78a048680c555fb14\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAANIcizAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAB6OwAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAA0iVVN0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAADSSlH3hwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAADSHEeAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAa8AAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAADSIoZ3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAADSS/0HhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAADSGFewAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAKNsAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAADSI8QnEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAADSS2iXhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAADSEfwQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAABOIAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQCAAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAhxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAADSIzzHQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAANJF/zdAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAKAAAAAAzrYcYAAAAAAAAACQAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAAAACAQAAAAAAAAAAi/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAr1/V0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHNxAH4ADAAAAAAAAAAEcQB+ABJxAH4ADnQAGmVtcHR5UmlnaHRQcm9iZUNvdW50QWN0dWFscQB+ADhxAH4AE3NxAH4ADAAAAAAM/1cncQB+ABFxAH4ADnQAGW1heFJpZ2h0Um93c1BlckxlZnRBY3R1YWxxAH4ADnhxAH4AJHEAfgAIdAAQTGVmdEpvaW5JdGVyYXRvcnNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuaW9uZ5+6I6xIBMgCAAB4cQB+ADIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAACL/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA0cQB+AAhwc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRmlsdGVyMHu9pSkqq/UCAAFMAAljb25kaXRpb25xAH4AMXhxAH4AAQAAAAAAAAABv/AAAAAAAAAAAAAAAAAABQAAAAAG0iiaAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFiAAAAAAAAAAEv/AAAAAAAAAAAAAAAAAASSQAAAAAAAAABAAAAAAAAEko//////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAF0ABdleHByRXZhbFRpbWVOYW5vc0FjdHVhbHNxAH4AJ0F9rQCwAAAAeHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAACXEAfgALcQB+ADhxAH4AD3NxAH4ADAAAAAAAKu7idAATZXhwckV2YWxDb3VudEFjdHVhbHNxAH4ADAAAAAAAAEkodAAUZXhwckZhbHNlQ291bnRBY3R1YWxzcQB+AAwAAAAAAABJJHQAGXByZWRpY2F0ZUVycm9yQ291bnRBY3R1YWxzcQB+AAwAAAAAAAAAAHEAfgAScQB+AA50ABNleHByVHJ1ZUNvdW50QWN0dWFscQB+ADhxAH4AE3NxAH4ADAAAAAAG38WgcQB+ABFxAH4ADnhxAH4APnEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAEkoAAAAAAAASSj/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQHEAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAgAAAAAAAEkoAAAAAAAAAAL/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AT3EAfgAIcQB+AFBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ACNMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAFAGAAAAAAAAAAAAAAAAAADAAAAAAAAerkAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABSsAAAAAAAAAAI/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAAAAAnEAfgAPc3EAfgAMAAAAAAAEmjlxAH4AEXEAfgAOcQB+ABJxAH4ADnQAFmJpbmRpbmdzUHJvdmlkZWRBY3R1YWxxAH4AVnEAfgATc3EAfgAMAAAAAAbbMw54cQB+AFFxAH4ACHNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAAAXQABnRhcmdldHhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAncEAAAAAnNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4AHUwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ACNMAAZ2YWx1ZXNxAH4AHXhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgBdAAAAAXcEAAAAAXQABnRhcmdldHhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ADNMAAhsYW5ndWFnZXEAfgAzeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZTVFJJTkdzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AM0wACW5hbWVzcGFjZXEAfgAzTAALc3RyaW5nVmFsdWVxAH4AM3hwdy/i7scYACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMABnN0cmluZ3h0AAxTdWJzdGF0aW9uIDFwc3EAfgBfc3EAfgBdAAAAAXcEAAAAAXEAfgBjeHBzcQB+AGR1cQB+AGcAAAABc3EAfgBpcQB+AHBxAH4Ac3QADFN1YnN0YXRpb24gMnB4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgAjTAAKY29udGV4dFZhcnEAfgAXTAAJaW5kZXhOYW1lcQB+ADNMAAlvYmplY3RWYXJxAH4AF0wADHByZWRpY2F0ZVZhcnEAfgAXTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+ABdMAAd2YXJMaXN0cQB+AB14cQB+AAMAAAAAAAAAAUDbcsAAAAAAAAAAAAAASSoAAAAAADzEWgAAAAAAAEkoAAAAAAAAAAACAAAAAAAASSgAAAAAAAAAAgAAAAAAAEkoAAAAAABfh4gAAAAAAABJKEDCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAAzG3QAFmluZGV4TG9va3VwQ291bnRBY3R1YWxxAH4AVnEAfgARcQB+AFZxAH4AEnEAfgBWcQB+ABNzcQB+AAwAAAAAAryhVHhxAH4AUXEAfgAIc3IAP29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTbWFsbFN0cmluZ1NldHm8SKeF/XlAAgABWwAGdmFsdWVzdAATW0xqYXZhL2xhbmcvU3RyaW5nO3hwdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAA3QABmVudGl0eXQAE19jb25zdF9mNWU1NTg1YV91cml0ABNfY29uc3RfYWM5ZjAzZDNfdXJpcHBzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYXJxU1QXU7Gy7wIABVoACWFub255bW91c0kADmNhY2hlZEhhc2hDb2RlWgAIY29uc3RhbnRMAARuYW1lcQB+ADNMAAV2YWx1ZXQAH0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9WYWx1ZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB+cQB+AAgBAAAAAAFxAH4Ai3NyACZvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUlSSZpFKkOTZkZuAgACSQAMbG9jYWxOYW1lSWR4TAAJaXJpU3RyaW5ncQB+ADN4cgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdElSSWw/DzoHkfCWAgABSQAOY2FjaGVkSGFzaENvZGV4cAAAAAD/////dAAoaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvU3Vic3RhdGlvbnNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH5xAH4ACAEAAAAAAXEAfgCKc3EAfgCPAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhxAH4Ab3QAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfnEAfgAIAAAAAAAAcQB+AIlwcAAAc3EAfgB7AAAAAAAAAAFAWDLKQfel0gAAAAAAAJJQAAAAAAFkbNsAAAAAAABJKAAAAAAAAABJKAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAMz2+AAAAAAAASShAwkoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAABJKHEAfgAPc3EAfgAMAAAAAAAAAnFxAH4AgnNxAH4ADAAAAAAAAEkocQB+ABFzcQB+AAwAAAAAAABJKHEAfgASc3EAfgAMAAAAAAAASShxAH4AE3NxAH4ADAAAAAAAAAh2eHEAfgBPcQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIl0ABNfY29uc3RfOTY2MTIyOGFfdXJpdAAEbmFtZXBwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AKVwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAQAAAAABcQB+AKRzcQB+AI8AAAAA/////3QAImh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL25hbWVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAgAAAAAAABxAH4AiXBwAABzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAxTAAIcmlnaHRBcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AQnNxAH4AJ0F4FaDwAAAAeHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABHQAF3Nob3J0Q2lyY3VpdENvdW50QWN0dWFscQB+AFZxAH4ARnNxAH4ADAAAAAAAAEkocQB+AEhzcQB+AAwAAAAAAABJJHEAfgBMcQB+ADh4cQB+AEBxAH4ACHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHEAfgCsAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBCc3EAfgAnQXMPhOAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+AEZzcQB+AAwAAAAAAABJKHEAfgBIc3EAfgAMAAAAAAAASSZxAH4ATHEAfgBWeHEAfgCtcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4ApXBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4AXHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBvdAACRVFzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBQR2dAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4ARnNxAH4ADAAAAAAAAEkmcQB+AEhzcQB+AAwAAAAAAABJJHEAfgBMcQB+AFZ4cQB+AK1xAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgClcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AI14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBOZ+8AAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4ARnEAfgAOcQB+AExxAH4ADnhxAH4AwXEAfgAIc3EAfgBpcQB+AHBxAH4Ac3QADFN1YnN0YXRpb24gM3BxAH4Av3NxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A/////////////////////////////////////////////////////wAAAAAAAAAEv/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AD5xAH4ACHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAABJKAAAAAAAAEko/////////////////////wAAAAAAAEkov/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHEAfgBQc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAEkoAAAAAAAASSj/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0HEAfgAIcQB+AFBzcQB+AE4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAACAAAAAAAASSgAAAAAAAAAAv////////////////////8AAAAAAABJKL/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDRcQB+AAhxAH4AUHNxAH4AUgAAAAAAAAABQBgAAAAAAAAAAAAAAAAAAwAAAAAAAIi4AAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAArnwAAAAAAAAACP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AFZxAH4AD3NxAH4ADAAAAAAG23I1cQB+ABFxAH4ADnEAfgAScQB+AA5xAH4AWHEAfgBWcQB+ABNzcQB+AAwAAAAADPJDVnhxAH4A0nEAfgAIc3EAfgBadwwAAAAQP0AAAAAAAAFxAH4AXHhxAH4AXnNxAH4AewAAAAAAAAABQZ9kVKYAAAAAAAAAAABJKgAAAAAAID41AAAAAAAASSgAAAAAAAAAAAIAAAAAAABJKAAAAAAAAAACAAAAAAAASSgAAAAAABw3eQAAAAAAAEkoQMJKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAASShxAH4AD3NxAH4ADAAAAAAAADCBcQB+AIJxAH4AVnEAfgARcQB+AFZxAH4AEnEAfgBWcQB+ABNzcQB+AAwAAAAAAqSm0nhxAH4A0nEAfgAIc3EAfgCEdXEAfgCHAAAAA3EAfgCJdAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF83MmYzM2ExNF91cmlwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANhxAH4ACAEAAAAAAXEAfgDgc3EAfgCPAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9HZW5lcmF0b3JzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDYcQB+AAgBAAAAAAFxAH4A33NxAH4AjwAAAAD/////cQB+AJVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDYcQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AHsAAAAAAAAAAUBYKsSPiozxAAAAAAAAklAAAAAAAUHz8QAAAAAAAEkoAAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAAEkoAAAAAAAZLuoAAAAAAABJKEDiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAADlHEAfgCCc3EAfgAMAAAAAAAASShxAH4AEXNxAH4ADAAAAAAAAEkocQB+ABJzcQB+AAwAAAAAAABJKHEAfgATc3EAfgAMAAAAAAAADNt4cQB+ANFxAH4ACHNxAH4AhHVxAH4AhwAAAANxAH4AiXQAE19jb25zdF8zNTU0MjY3Nl91cml0AApzdWJzdGF0aW9ucHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4A8nBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgBAAAAAAFxAH4A8XNxAH4AjwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AHsAAAAAAAAAAUBYMspB96XSAAAAAAAAklAAAAAAAJeyygAAAAAAAEkoAAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAAEkoAAAAAAAWuf4AAAAAAABJKEDCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAAB9HEAfgCCc3EAfgAMAAAAAAAASShxAH4AEXNxAH4ADAAAAAAAAEkocQB+ABJzcQB+AAwAAAAAAABJKHEAfgATc3EAfgAMAAAAAAAABi94cQB+ANBxAH4ACHNxAH4AhHVxAH4AhwAAAANxAH4A8nQAE19jb25zdF85NjYxMjI4YV91cmlxAH4ApXBwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIAAAAAAAAcQB+AKVwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIAQAAAAABcQB+AQJzcQB+AI8AAAAA/////3QAImh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL25hbWVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD4cQB+AAgAAAAAAABxAH4A8nBwAABzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBcHrD8AAAAHhzcQB+AAk/QAAAAAAABncIAAAACAAAAARxAH4AsXEAfgBWcQB+AEZzcQB+AAwAAAAAAABJKHEAfgBIc3EAfgAMAAAAAAAASSRxAH4ATHEAfgA4eHEAfgDPcQB+AAhzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBanzvIAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4ARnNxAH4ADAAAAAAAAEkocQB+AEhzcQB+AAwAAAAAAABJJnEAfgBMcQB+AFZ4cQB+AQhxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ5xAH4ACAAAAAAAAHEAfgClcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ5xAH4ACAAAAAAAAHEAfgBccHEAfgC/c3EAfgC0AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBCc3EAfgAnQTMPRAAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+AEZzcQB+AAwAAAAAAABJJnEAfgBIc3EAfgAMAAAAAAAASSRxAH4ATHEAfgBWeHEAfgEIcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEWcQB+AAgAAAAAAABxAH4ApXBzcQB+AMgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdAo9wAAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4ARnEAfgAOcQB+AExxAH4ADnhxAH4BFnEAfgAIcQB+AM1xAH4Av3NxAH4AewAAAAAAAAABv/AAAAAAAAAAAAAAAAAADAAAAAAAAHO7AAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAC7AAAAAAAAAAEQOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ADhxAH4AD3NxAH4ADAAAAAAAAAQRcQB+AIJxAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAAA1OXhxAH4ANHEAfgAIc3EAfgCEdXEAfgCHAAAAA3EAfgCJdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgAAAAAAABxAH4BKHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgBAAAAAAFxAH4BJ3NxAH4AjwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgAAAAAAABxAH4AiXBwcHNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgBadwwAAAAQP0AAAAAAAAB4c3EAfgBdAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAzTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAkcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ADF4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEzcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE4cQB+AAgAAAAAAABxAH4AiXABeHNxAH4AXQAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+ADN4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAecQB+AAhzcQB+ATUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE8cQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE9cQB+AAgAAAAAAABxAH4AiXABcQB+ATR4AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AB14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAYcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgAzTAAPcHJvamVjdGlvbkFsaWFzcQB+ADNMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFBcQB+AAgBcQB+ATRwc3EAfgE7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4BSXEAfgAIcQB+AUgBc3EAfgE/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BSXEAfgAIdXEAfgFCAAAAAXNxAH4BRAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUtxAH4ACAFxAH4BNHBxAH4BR3NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAdeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgBdAAAAAXcEAAAAAXEAfgFNeHEAfgFScHEAfgAIc3EAfgAiAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BSHEAfgAIc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BU3EAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BVHEAfgAIcHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVVxAH4ACHBzcQB+AFIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFWcQB+AAhzcQB+AS53DAAAAAI/QAAAAAAAAXEAfgBjeHEAfgBec3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BVnEAfgAIcHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVlxAH4ACHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFacQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIlxAH4AinEAfgCLcHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFbcQB+AAgBAAAAAAFxAH4Ai3EAfgCRc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAQAAAAABcQB+AIpxAH4AlHEAfgCXcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVtxAH4ACAAAAAAAAHEAfgCJcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFacQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIlxAH4ApHQABG5hbWVwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWFxAH4ACAAAAAAAAHEAfgFkcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWFxAH4ACAEAAAAAAXEAfgCkcQB+AKhxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFhcQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AE4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAhwc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaHEAfgAIcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AhHVxAH4AhwAAAAN0AAZlbnRpdHlxAH4A33EAfgDgcHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAgBAAAAAAFxAH4A4HEAfgDic3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BanEAfgAIAQAAAAABcQB+AN9xAH4A5XEAfgCXcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACAAAAAAAAHEAfgFtcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFpcQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AW1xAH4A8XEAfgDycHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFxcQB+AAgAAAAAAABxAH4A8nBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFxcQB+AAgBAAAAAAFxAH4A8XEAfgD1cQB+AJdwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcXEAfgAIAAAAAAAAcQB+AW1wcAAAc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaHEAfgAIc3EAfgCEdXEAfgCHAAAAA3QACnN1YnN0YXRpb25xAH4BAnQABG5hbWVwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXdxAH4ACAAAAAAAAHEAfgF7cHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXdxAH4ACAEAAAAAAXEAfgECcQB+AQVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF3cQB+AAgAAAAAAABxAH4BenBwAAAAAHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVVxAH4ACHNxAH4AhHVxAH4AhwAAAAN0AAZlbnRpdHlxAH4BJ3EAfgEocHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF/cQB+AAgAAAAAAABxAH4BKHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF/cQB+AAgBAAAAAAFxAH4BJ3EAfgErcQB+AJdwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bf3EAfgAIAAAAAAAAcQB+AYJwcHBzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFUcQB+AAhzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGGcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGHcQB+AAgAAAAAAABxAH4ApXBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGHcQB+AAgAAAAAAABxAH4AXHBxAH4Av3NxAH4AtAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYZxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHQABG5hbWVwc3EAfgDIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BinEAfgAIcQB+AM1xAH4Av3NyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AXQAAAAF3BAAAAAFzcQB+ATEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFTcQB+AAhxAH4BNHNxAH4BNQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZFxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZJxAH4ACAAAAAAAAHQABmVudGl0eXABeHNxAH4AXQAAAAF3BAAAAAFxAH4BR3hxAH4ACHNxAH4BNQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUdxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZZxAH4ACAAAAAAAAHEAfgGUcAFxAH4BNHNxAH4AZHEAfgFDcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n UNION\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?substation .\n ?substation ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n OPTIONAL {\n ?entity ?substation2 .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "60", + "maxDepth" : "11", + "leafNodeCount" : "31", + "maxBranchingFactor" : "3", + "joinNodeCount" : "6", + "filterNodeCount" : "2", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=5", + "structureSignatureRawSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "structureSignatureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "joinAlgorithmSignatureSha256" : "d7805f2b211a4d90729d28a1350b217a020e021f305b6d4ed22a7e594899dec2", + "actualResultSizesSignatureSha256" : "f068ca3103c7ce4422fa0ff914c9545d8ed1cdc3cc1ab9ddb3f6badca098aa95", + "estimatesSignatureSha256" : "de94d234d648505b39e9f70f029c702e4096787a0ba1be0c79bf52a016398369", + "joinAlgorithmMultisetSignatureSha256" : "b7d553917c4cbdee9a9d9758de458e01ffdff11e8748ba292d718d5c510d0677", + "actualResultSizesMultisetSignatureSha256" : "237072035b7f6dabcddad0f96909d68041481b6e9783833cda1003eb145e329d", + "estimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "statementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "348376.25", + "modeledInputRowsSum" : "224762", + "modeledOutputRowsSum" : "187315", + "modeledJoinInputRowsSum" : "149840", + "modeledJoinOutputRowsSum" : "93648", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "modeledOperatorCountByCategorySignatureSha256" : "9abdb299b9d9e22d035c5cbd57e3cb3a1092d1fc7daecbc2f7403f401450034d", + "modeledInputRowsByCategory" : "distinct=0;extension=5;filter=37456;group=8;join=93644;projection=1;scan=93644;union=4;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "d3fe53ad8fe2db059f57f43f5da61e5d954ed47f636ff048cb47058b8df5aeab", + "modeledOutputRowsByCategory" : "distinct=0;extension=5;filter=8;group=1;join=93648;projection=1;scan=93644;union=8;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "353fe25ede0036fc8c3bcad9e949fbeedd0c2e3650775d56331569361c551dc7", + "modeledFilterInputRowsSum" : "37456", + "modeledFilterOutputRowsSum" : "8", + "modeledFilterPassRatio" : "0.000214", + "modeledFilterRejectRatio" : "0.999786", + "modeledJoinWorkByAlgorithm" : "JoinIterator=243468;LeftJoinIterator=20", + "modeledJoinWorkByAlgorithmSignatureSha256" : "c8bb86d42e851628990f4abfc5af3df6891f6a2acc98fdefd5a84c20619bf61b", + "modeledWorkVector" : "workUnits=348376.25|barrierCount=4|joinInputRowsSum=149840|joinOutputRowsSum=93648|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=243468;LeftJoinIterator=20|categories=distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "modeledWorkVectorSignatureSha256" : "b60e6317b5f2a201891aa338a5910d635bf3115cb4911c75252eee6aebffaf89", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=2|workUnits=0.8|inputRows=4|outputRows=4|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=11236.8|inputRows=37456|outputRows=8|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=5.6|inputRows=8|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=5|workUnits=243468|inputRows=93640|outputRows=93640|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=20|inputRows=4|outputRows=8|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=93644|inputRows=93644|outputRows=93644|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0.8|inputRows=4|outputRows=8|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "804fe74ed7c7dee7ccad073e4c197ef257fa662fb48629bd48cdf8a517b0efdb", + "operatorWorkTopContributors" : "Join[JoinIterator]:243468;StatementPattern[UNKNOWN]:93644;Filter[UNKNOWN]:11236.8;LeftJoin[LeftJoinIterator]:20;Group ()[UNKNOWN]:5.6;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.8;Union[UNKNOWN]:0.8;Extension[UNKNOWN]:0.2", + "estimateActualComparableNodeCount" : "8", + "estimateActualAbsErrorSum" : "93474", + "estimateActualRelativeErrorMean" : "1168.311952691158", + "estimateActualQErrorP50" : "2", + "estimateActualQErrorP95" : "9343.5", + "estimateActualQErrorMax" : "9343.5", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "131695650.75543677233721", + "costEstimateMax" : "131667241.5", + "resultSizeEstimateSum" : "112206", + "resultSizeEstimateMax" : "37374", + "resultSizeActualSum" : "187315", + "resultSizeActualMax" : "18728", + "modeledHasNextCallCountSum" : "149869", + "modeledHasNextTrueCountSum" : "93665", + "modeledHasNextTimeNanosSum" : "1272990232", + "modeledNextCallCountSum" : "93664", + "modeledNextTimeNanosSum" : "14705198", + "modeledJoinRightIteratorCreateCountSum" : "112392", + "modeledJoinLeftBindingSetConsumedCountSum" : "56220", + "modeledJoinRightBindingSetConsumedCountSum" : "187288", + "modeledJoinTelemetryNodeCount" : "6", + "modeledJoinRightBindingsPerLeftRatio" : "3.331341", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.666382", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "18732", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "9370", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "31214.666667", + "modeledSourceRowsScannedSum" : "18728", + "modeledSourceRowsMatchedSum" : "4", + "modeledSourceRowsFilteredSum" : "18724", + "modeledSourceFilterOutRatio" : "0.999786", + "modeledIteratorTelemetryNodeCount" : "61", + "modeledHasNextTimeMillisSum" : "1272.990232", + "modeledNextTimeMillisSum" : "14.705198", + "modeledHasNextPerNextRatio" : "1.60007", + "modeledHasNextTruePerNextRatio" : "1.000011" + } + } + } +} \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194956735-5da3178f.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194956735-5da3178f.json new file mode 100644 index 00000000000..d164de0cad7 --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-194956735-5da3178f.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-03-19T19:49:56.735051Z", + "queryId" : "lmdb-electrical_grid-q1", + "queryString" : "PREFIX grid: \nSELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n { ?entity a grid:Substation ; grid:name ?name . }\n UNION\n { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . }\n FILTER(?name = ?target || ?name = \"Substation 3\")\n OPTIONAL { ?entity grid:feeds ?substation2 . }\n}", + "unoptimizedFingerprint" : "1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4", + "metadata" : { + "store" : "lmdb", + "theme" : "ELECTRICAL_GRID", + "querySource" : "theme-index", + "queryIndex" : "1", + "queryName" : "Grid: substations or generators by name", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "bc457604fb2ff08ef8f095b878810ee4af8e96e55e3362a5c1097cfcc0ab94ba", + "queryString.normalizedWhitespaceSha256" : "fa8d1b182bc594eba88897a1fb2c6f52aeefe97708eeeb66cdf4ac015759fab3", + "optimizerInput.unoptimizedStructureRawSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "b09b92f0f68d331385357e61e1037a0345f54c12", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "25.0.1", + "queryString.charCount" : "398", + "queryString.lineCount" : "9", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "50", + "optimizerInput.unoptimizedJoinNodeCount" : "5", + "optimizerInput.unoptimizedFilterNodeCount" : "1", + "optimizerInput.unoptimizedStatementPatternCount" : "6", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=5", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4868c87682a8a4f12599e04ed28fb808b9df37819a2c4cd4333795a9e5cb8a28", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "79dbc5f8930415215fbadf8585ef8fc4d552e77a37388bb2f50c22f6dfd71795", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "60", + "optimizerOutput.optimizedJoinNodeCount" : "6", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "6", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=5", + "optimizerOutput.optimizedStructureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "60", + "executionPlan.executedJoinNodeCount" : "6", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "6", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=5", + "executionPlan.executedStructureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "executionPlan.executedModeledWorkUnits" : "348376.25", + "executionPlan.executedModeledInputRowsSum" : "224762", + "executionPlan.executedModeledOutputRowsSum" : "187315", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "149840", + "executionPlan.executedModeledJoinOutputRowsSum" : "93648", + "executionPlan.executedModeledFilterInputRowsSum" : "37456", + "executionPlan.executedModeledFilterOutputRowsSum" : "8", + "executionPlan.executedModeledFilterPassRatio" : "0.000214", + "executionPlan.executedModeledFilterRejectRatio" : "0.999786", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=5;filter=37456;group=8;join=93644;projection=1;scan=93644;union=4;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=5;filter=8;group=1;join=93648;projection=1;scan=93644;union=8;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=243468;LeftJoinIterator=20", + "executionPlan.executedModeledWorkVector" : "workUnits=348376.25|barrierCount=4|joinInputRowsSum=149840|joinOutputRowsSum=93648|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=243468;LeftJoinIterator=20|categories=distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "b60e6317b5f2a201891aa338a5910d635bf3115cb4911c75252eee6aebffaf89", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "804fe74ed7c7dee7ccad073e4c197ef257fa662fb48629bd48cdf8a517b0efdb", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:243468;StatementPattern[UNKNOWN]:93644;Filter[UNKNOWN]:11236.8;LeftJoin[LeftJoinIterator]:20;Group ()[UNKNOWN]:5.6;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.8;Union[UNKNOWN]:0.8;Extension[UNKNOWN]:0.2", + "executionPlan.executedEstimateActualComparableNodeCount" : "8", + "executionPlan.executedHasNextCallCountSum" : "149869", + "executionPlan.executedHasNextTrueCountSum" : "93665", + "executionPlan.executedHasNextTimeNanosSum" : "1226595369", + "executionPlan.executedNextCallCountSum" : "93664", + "executionPlan.executedNextTimeNanosSum" : "13781970", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "112392", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "56220", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "187288", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "3.331341", + "executionPlan.executedJoinTelemetryNodeCount" : "6", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.666382", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "18732", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "9370", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "31214.666667", + "executionPlan.executedSourceRowsScannedSum" : "18728", + "executionPlan.executedSourceRowsMatchedSum" : "4", + "executionPlan.executedSourceRowsFilteredSum" : "18724", + "executionPlan.executedSourceFilterOutRatio" : "0.999786", + "executionPlan.executedHasNextPerNextRatio" : "1.60007", + "executionPlan.executedHasNextTruePerNextRatio" : "1.000011", + "executionPlan.executedEstimateActualQErrorP95" : "9343.5", + "executionPlan.executedEstimateActualQErrorMax" : "9343.5", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "0", + "executionPlan.executedJoinEstimateActualQErrorP95" : "0", + "executionPlan.executedJoinEstimateActualQErrorMax" : "0", + "featureFlags.sha256" : "63534f81b9ba142b1ac109f348330ed4846582014fb25992084c98e3b6b51932", + "planDeterminism.inputFingerprintSha256" : "70b653d6e72fdfcd2a91a53bc7207f8c40bfd9c2adeae2196e8e0ef49dbea68d", + "planDeterminism.environmentFingerprintSha256" : "c47afaf012ce008f48f2c4a0d115db030fdddf11219e6461b39ae872b1c71609", + "execution.runs" : "128", + "execution.resultCount" : "1", + "execution.totalMillis" : "17125", + "execution.averageMillis" : "133", + "execution.minMillis" : "56", + "execution.maxMillis" : "4062", + "execution.stdDevMillis" : "394", + "execution.coefficientOfVariationPct" : "295.1298", + "execution.sampleMillis" : "70,81,63,63,63,132,62,62,60,69,183,61,64,62,62,171,62,62,62,60,61,196,61,61,61,62,60,180,60,61,62,61,1067,61,62,64,61,61,143,59,61,59,63,63,182,62,63,63,60,1406,61,58,59,62,60,4062,58,60,60,56,60,59,60,58,60,56,57,57,60,60,56,60,59,64,59,59,59,63,63,101,60,61,60,59,154,61,61,60,59,169,61,61,59,60,64,190,60,61,59,59,59,178,60,58,60,60,201,60,58,59,60,58,172,62,61,62,63,62,210,61,61,59,59,60,1327,62,61,61", + "execution.verificationStatus" : "max-runs-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "false", + "execution.maxRunsReached" : "true" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "ELECTRICAL_GRID", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "2", + "cli.executionRepeatMaxRuns" : "128", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "1", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "10485760", + "lmdbConfig.tripleDbSize" : "10485760", + "lmdbData.fullyLoadedSizeBytes" : "2144635685", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (=)\n │ ║ │ ║ Var (name=name)\n │ ║ │ ║ Var (name=target)\n │ ║ │ ╚══ Compare (=)\n │ ║ │ Var (name=name)\n │ ║ │ ValueConstant (value=\"Substation 3\")\n │ ║ └── LeftJoin\n │ ║ ╠══ Join [left]\n │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) [left]\n │ ║ ║ └── Union (new scope) [right]\n │ ║ ║ ╠══ Join (new scope)\n │ ║ ║ ║ ├── StatementPattern [left]\n │ ║ ║ ║ │ s: Var (name=entity)\n │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n │ ║ ║ ║ └── StatementPattern [right]\n │ ║ ║ ║ s: Var (name=entity)\n │ ║ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ ║ ║ o: Var (name=name)\n │ ║ ║ ╚══ Join (new scope)\n │ ║ ║ ├── Join [left]\n │ ║ ║ │ ╠══ StatementPattern [left]\n │ ║ ║ │ ║ s: Var (name=entity)\n │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n │ ║ ║ │ ╚══ StatementPattern [right]\n │ ║ ║ │ s: Var (name=entity)\n │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ ║ │ o: Var (name=substation)\n │ ║ ║ └── StatementPattern [right]\n │ ║ ║ s: Var (name=substation)\n │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ ║ o: Var (name=name)\n │ ║ ╚══ StatementPattern [right]\n │ ║ s: Var (name=entity)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ o: Var (name=substation2)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=entity)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\"\n }, {\n \"type\" : \"Union\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation2)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n LeftJoin\n Join\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])\n Union (new scope)\n Join (new scope)\n StatementPattern\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Join (new scope)\n Join\n StatementPattern\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n LeftJoin\\n Join\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\\n Union (new scope)\\n Join (new scope)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Join (new scope)\\n Join\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAZ0YXJnZXR4c3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAJ3BAAAAAJzcgArb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuaW1wbC5MaXN0QmluZGluZ1NldNelYuv0tawhAgADTAAMYmluZGluZ05hbWVzcQB+AA5MABRiaW5kaW5nTmFtZXNTZXRDYWNoZXEAfgARTAAGdmFsdWVzcQB+AA54cgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuQWJzdHJhY3RCaW5kaW5nU2V02//Sk443PUACAAB4cHNxAH4AIwAAAAF3BAAAAAFxAH4AInhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABhMAAhsYW5ndWFnZXEAfgAYeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZTVFJJTkdzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGEwACW5hbWVzcGFjZXEAfgAYTAALc3RyaW5nVmFsdWVxAH4AGHhwdy/i7scYACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMABnN0cmluZ3h0AAxTdWJzdGF0aW9uIDFwc3EAfgAlc3EAfgAjAAAAAXcEAAAAAXEAfgAieHBzcQB+ACl1cQB+ACwAAAABc3EAfgAucQB+ADVxAH4AOHQADFN1YnN0YXRpb24gMnB4c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5pb25nn7ojrEgEyAIAAHhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABtxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBBcQB+AAhwc3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABhMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBCcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAGZW50aXR5dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF9hYzlmMDNkM191cmlwcHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhcnFTVBdTsbLvAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AGEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEZxAH4ACAEAAAAAAXEAfgBOc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AChodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9TdWJzdGF0aW9uc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ARnEAfgAIAQAAAAABcQB+AE1zcQB+AFIAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHEAfgA0dAAQREVGQVVMVF9DT05URVhUU3BzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBGcQB+AAgAAAAAAABxAH4ATHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIc3EAfgBHdXEAfgBKAAAAA3EAfgBMdAATX2NvbnN0Xzk2NjEyMjhhX3VyaXQABG5hbWVwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBhcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAEAAAAAAXEAfgBgc3EAfgBSAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AXXEAfgAIAAAAAAAAcQB+AExwcAAAc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQXEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHBzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBocQB+AAhzcQB+AEd1cQB+AEoAAAADdAAGZW50aXR5dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF83MmYzM2ExNF91cmlwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGlxAH4ACAEAAAAAAXEAfgBuc3EAfgBSAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9HZW5lcmF0b3JzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBpcQB+AAgBAAAAAAFxAH4AbXNxAH4AUgAAAAD/////cQB+AFhxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBpcQB+AAgAAAAAAABxAH4AbHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaHEAfgAIc3EAfgBHdXEAfgBKAAAAA3EAfgBsdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQACnN1YnN0YXRpb25wcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgB5cHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAEAAAAAAXEAfgB4c3EAfgBSAAAAAP////90ACNodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9mZWVkc3EAfgBacHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgBscHAAAHNxAH4AQwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHNxAH4AR3VxAH4ASgAAAAN0AApzdWJzdGF0aW9udAATX2NvbnN0Xzk2NjEyMjhhX3VyaXQABG5hbWVwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgCEcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCDc3EAfgBSAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAAAAAAAAcQB+AIJwcAAAAABzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAZcQB+AAhzcQB+AEd1cQB+AEoAAAADdAAGZW50aXR5dAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4Aj3BzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgBAAAAAAFxAH4AjnNxAH4AUgAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4AjXBwcHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAgAAAAAAAB0AARuYW1lcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJpxAH4ACAAAAAAAAHQABnRhcmdldHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgA0dAACRVFzcQB+AJgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCicQB+AAgAAAAAAAB0AARuYW1lcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AFB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCicQB+AAhzcQB+AC5xAH4ANXEAfgA4dAAMU3Vic3RhdGlvbiAzcHEAfgCgc3EAfgAfdwwAAAAQP0AAAAAAAAB4c3EAfgAjAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAYTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCtcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgAAAAAAAB0AAZlbnRpdHlwAXhzcQB+ACMAAAABdwQAAAABc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9uRWxlbfVEWvAL0OgoAgACTAAEZXhwcnEAfgAUTAAEbmFtZXEAfgAYeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgCvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AuHEAfgAIAAAAAAAAcQB+ALRwAXEAfgCueAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AvHEAfgAIAXEAfgCucHNxAH4AtgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AMRxAH4ACHEAfgDDAXNxAH4AugAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMRxAH4ACHVxAH4AvQAAAAFzcQB+AL8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDGcQB+AAgBcQB+AK5wcQB+AMJzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AIwAAAAF3BAAAAAFxAH4AyHhxAH4AzXBxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMNxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM5xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDQcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0XEAfgAIcQB+ACFxAH4AJHNxAH4AQAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANFxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDTcQB+AAhwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1HEAfgAIcQB+AElwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACAEAAAAAAXEAfgBOcQB+AFRzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDVcQB+AAgBAAAAAAFxAH4ATXEAfgBXcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIAAAAAAAAcQB+AExwcHNxAH4AQwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANRxAH4ACHEAfgBecHBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAABxAH4AYXBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgBAAAAAAFxAH4AYHEAfgBkcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2XEAfgAIAAAAAAAAcQB+AExwcAAAc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A03EAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHBzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDecQB+AAhxAH4AanBwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A33EAfgAIAQAAAAABcQB+AG5xAH4AcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN9xAH4ACAEAAAAAAXEAfgBtcQB+AHNxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDfcQB+AAgAAAAAAABxAH4AbHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3nEAfgAIcQB+AHZwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AONxAH4ACAAAAAAAAHEAfgB5cHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AONxAH4ACAEAAAAAAXEAfgB4cQB+AHxxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDjcQB+AAgAAAAAAABxAH4AbHBwAABzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDdcQB+AAhxAH4AgHBwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A53EAfgAIAAAAAAAAcQB+AIRwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A53EAfgAIAQAAAAABcQB+AINxAH4Ah3EAfgBacHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOdxAH4ACAAAAAAAAHEAfgCCcHAAAAAAc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0HEAfgAIcQB+AItwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOtxAH4ACAAAAAAAAHEAfgCPcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOtxAH4ACAEAAAAAAXEAfgCOcQB+AJJxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDrcQB+AAgAAAAAAABxAH4AjXBwcHNxAH4AlQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHNxAH4AmAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APBxAH4ACAAAAAAAAHEAfgCccHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APBxAH4ACAAAAAAAAHEAfgCecHEAfgCgc3EAfgCYAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A73EAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIAAAAAAAAcQB+AKRwc3EAfgClAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcQB+AKdxAH4AoHNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AIwAAAAF3BAAAAAFzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDOcQB+AAhxAH4ArnNxAH4ArwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APpxAH4ACAAAAAAAAHEAfgC0cAF4c3EAfgAjAAAAAXcEAAAAAXEAfgDCeHEAfgAIc3EAfgCvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AwnEAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIAAAAAAAAcQB+ALRwAXEAfgCuc3EAfgApcQB+AL5w\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "50", + "maxDepth" : "11", + "leafNodeCount" : "26", + "maxBranchingFactor" : "3", + "joinNodeCount" : "5", + "filterNodeCount" : "1", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=5", + "structureSignatureRawSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "structureSignatureNormalizedSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "joinAlgorithmSignatureSha256" : "8d7bb3a1872ff0d530d2320db68a80f70b9792cdca4b647a2e03898bca6b01ed", + "actualResultSizesSignatureSha256" : "f63c0ae9df411a8f7bf2e97abd7843872802c90157e87aeb483cd312b667c2a6", + "estimatesSignatureSha256" : "8d137d8f96ae30c5238e20f13a19a11e7604c3b7472b21d54b1cdaf49d86b708", + "joinAlgorithmMultisetSignatureSha256" : "1d723ee45825989627b25b9dd3d3b01332e9c2ee4a048455130077a375bf7ed2", + "actualResultSizesMultisetSignatureSha256" : "f77d718d1d695e4d6e5d8170c1ccfac2a62e1ec2b25082eb47002c128f4c9d17", + "estimatesMultisetSignatureSha256" : "4868c87682a8a4f12599e04ed28fb808b9df37819a2c4cd4333795a9e5cb8a28", + "statementPatternEstimatesMultisetSignatureSha256" : "79dbc5f8930415215fbadf8585ef8fc4d552e77a37388bb2f50c22f6dfd71795", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=3;filter=1;group=2;join=5;projection=3;scan=6;union=1;unknown=27", + "modeledOperatorCountByCategorySignatureSha256" : "bb3efa2801f0aea525a5aa32d627533fac784487eddf6c22013bb9281292af95", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "b201987da7c5d6e01f705604edadde975bb808230af044d3cc792bd8dbc6de37", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "b201987da7c5d6e01f705604edadde975bb808230af044d3cc792bd8dbc6de37", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=3;filter=1;group=2;join=5;projection=3;scan=6;union=1;unknown=27|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "4b538bf5508ab362a31faff82ac24bdff826cc25469c3d5a7d099b230b548b32", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "ccbedbeb561258548f98da9c82b199734ce99c129289b451472d3f0a36655c3f", + "operatorWorkTopContributors" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0;Compare (=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0;GroupElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "5", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "51", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ LeftJoin\n │ ║ ├── Union [left]\n │ ║ │ ╠══ Filter\n │ ║ │ ║ ├── Or\n │ ║ │ ║ │ ╠══ Compare (=)\n │ ║ │ ║ │ ║ Var (name=name)\n │ ║ │ ║ │ ║ Var (name=target)\n │ ║ │ ║ │ ╚══ Compare (=)\n │ ║ │ ║ │ Var (name=name)\n │ ║ │ ║ │ ValueConstant (value=\"Substation 3\")\n │ ║ │ ║ └── Join (JoinIterator)\n │ ║ │ ║ ╠══ Join (JoinIterator) [left]\n │ ║ │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left]\n │ ║ │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ ║ s: Var (name=entity)\n │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n │ ║ │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ s: Var (name=entity)\n │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ │ ║ o: Var (name=name)\n │ ║ │ ╚══ Filter\n │ ║ │ ├── Or\n │ ║ │ │ ╠══ Compare (=)\n │ ║ │ │ ║ Var (name=name)\n │ ║ │ │ ║ Var (name=target)\n │ ║ │ │ ╚══ Compare (=)\n │ ║ │ │ Var (name=name)\n │ ║ │ │ ValueConstant (value=\"Substation 3\")\n │ ║ │ └── Join (JoinIterator)\n │ ║ │ ╠══ Join (JoinIterator) [left]\n │ ║ │ ║ ├── Join (JoinIterator) [left]\n │ ║ │ ║ │ ╠══ BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left]\n │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ │ s: Var (name=entity)\n │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right]\n │ ║ │ ║ s: Var (name=entity)\n │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ │ ║ o: Var (name=substation)\n │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right]\n │ ║ │ s: Var (name=substation)\n │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ │ o: Var (name=name)\n │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right]\n │ ║ s: Var (name=entity)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ o: Var (name=substation2)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=entity)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Union\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 28107.0,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.316672415E8,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.66824711351707,\n \"resultSizeEstimate\" : 37374.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 37374.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation2)\"\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n LeftJoin\n Union\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator)\n Join (JoinIterator)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator)\n Join (JoinIterator)\n Join (JoinIterator)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern (resultSizeEstimate=37.4K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n LeftJoin\\n Union\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator)\\n Join (JoinIterator)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator)\\n Join (JoinIterator)\\n Join (JoinIterator)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern (resultSizeEstimate=37.4K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"3da4971af014bdd18bf5c7baaa501fcba49e8a128be67f9ad61553d0d56f0001\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb250ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYWx1ZUV4cHI7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VHVwbGVPcGVyYXRvcj6Y3mRodHOMAgADTAANYWxnb3JpdGhtTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAB2xlZnRBcmdxAH4AAkwACHJpZ2h0QXJncQB+AAJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAhwc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5pb25nn7ojrEgEyAIAAHhxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABdxAH4ACHBzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnEAfgAUeHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcQB+AB5zcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAFAGAAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////8/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AH3EAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAAGdGFyZ2V0eHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACYAAAABdwQAAAABdAAGdGFyZ2V0eHBzcgAaamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3TZpDy+zYgG0gIAAVsAAWF0ABNbTGphdmEvbGFuZy9PYmplY3Q7eHB1cgAgW0xvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5WYWx1ZTvQ6xK0h0h51gIAAHhwAAAAAXNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AFkwACGxhbmd1YWdlcQB+ABZ4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABlNUUklOR3NyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkludGVybmVkSVJJAllGAIULdQcDAARJAAhoYXNoQ29kZUwACWxvY2FsTmFtZXEAfgAWTAAJbmFtZXNwYWNlcQB+ABZMAAtzdHJpbmdWYWx1ZXEAfgAWeHB3L+LuxxgAIWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIwAGc3RyaW5neHQADFN1YnN0YXRpb24gMXBzcQB+AChzcQB+ACYAAAABdwQAAAABcQB+ACx4cHNxAH4ALXVxAH4AMAAAAAFzcQB+ADJxAH4AOXEAfgA8dAAMU3Vic3RhdGlvbiAycHhzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AFkwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABQNtywAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QMJKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAZlbnRpdHl0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0X2FjOWYwM2QzX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFycVNUF1Oxsu8CAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAWTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AR3EAfgAIAQAAAAABcQB+AE9zcgAmb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVJUkmaRSpDk2ZGbgIAAkkADGxvY2FsTmFtZUlkeEwACWlyaVN0cmluZ3EAfgAWeHIAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RJUklsPw86B5HwlgIAAUkADmNhY2hlZEhhc2hDb2RleHAAAAAAAAAAHnQAKGh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL1N1YnN0YXRpb25zcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBHcQB+AAgBAAAAAAFxAH4ATnNxAH4AUwAAAAD/////dAAvaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGV+cgA2b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlAAAAAAAAAAASAAB4cQB+ADh0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEdxAH4ACAAAAAAAAHEAfgBNcHAAAHNxAH4ARAAAAAAAAAABQFgyykH3pdL///////////////////////////////8A////////////////////////////////////////////////////////////////QMJKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4ASHVxAH4ASwAAAANxAH4ATXQAE19jb25zdF85NjYxMjI4YV91cml0AARuYW1lcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBecQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBecQB+AAgBAAAAAAFxAH4AYXNxAH4AUwAAAAAAAAAedAAiaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvbmFtZXEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF5xAH4ACAAAAAAAAHEAfgBNcHAAAHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AGkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBqcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBtcQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBtcQB+AAgAAAAAAABxAH4AJXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgA4dAACRVFzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBqcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgAAAAAAABxAH4AYnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBReHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIc3EAfgAycQB+ADlxAH4APHQADFN1YnN0YXRpb24gM3BxAH4AcXNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHlxAH4ACHEAfgAec3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AenEAfgAIcQB+AB5zcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB7cQB+AAhxAH4AHnNxAH4AIAAAAAAAAAABQBgAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////P/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHxxAH4ACHNxAH4AI3cMAAAAED9AAAAAAAABcQB+ACV4cQB+ACdzcQB+AEQAAAAAAAAAAUGfZFSmAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0DCSgAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB8cQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE10ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzcyZjMzYTE0X3VyaXBwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAQAAAAABcQB+AINzcQB+AFMAAAAAAAAAHnQAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL0dlbmVyYXRvcnNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCCc3EAfgBTAAAAAP////9xAH4AWXEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgBNcHAAAHNxAH4ARAAAAAAAAAABQFgqxI+KjPH///////////////////////////////8A////////////////////////////////////////////////////////////////QOI/wAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHtxAH4ACHNxAH4ASHVxAH4ASwAAAANxAH4ATXQAE19jb25zdF8zNTU0MjY3Nl91cml0AApzdWJzdGF0aW9ucHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4AjnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgBAAAAAAFxAH4AjXNxAH4AUwAAAAAAAAAedAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4ATXBwAABzcQB+AEQAAAAAAAAAAUBYMspB96XS////////////////////////////////AP///////////////////////////////////////////////////////////////0DCSgAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB6cQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AI50ABNfY29uc3RfOTY2MTIyOGFfdXJpcQB+AGJwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAAAAAAAAHEAfgBicHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAEAAAAAAXEAfgCXc3EAfgBTAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlHEAfgAIAAAAAAAAcQB+AI5wcAAAc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AeXEAfgAIc3EAfgBrAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnXEAfgAIc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnnEAfgAIAAAAAAAAcQB+AGJwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnnEAfgAIAAAAAAAAcQB+ACVwcQB+AHFzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCdcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAgAAAAAAABxAH4AYnBzcQB+AHUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAhxAH4Ad3EAfgBxc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9A4j/AAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AF3EAfgAIc3EAfgBIdXEAfgBLAAAAA3EAfgBNdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4AqHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgBAAAAAAFxAH4Ap3NxAH4AUwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4ATXBwcHNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgAjdwwAAAAQP0AAAAAAAAB4c3EAfgAmAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAWTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCzcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC4cQB+AAgAAAAAAABxAH4ATXABeHNxAH4AJgAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABZ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAPcQB+AAhzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC8cQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC9cQB+AAgAAAAAAABxAH4ATXABcQB+ALR4AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgAWTAAPcHJvamVjdGlvbkFsaWFzcQB+ABZMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDBcQB+AAgBcQB+ALRwc3EAfgC7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ACQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4AyXEAfgAIcQB+AMgBc3EAfgC/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyXEAfgAIdXEAfgDCAAAAAXNxAH4AxAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMtxAH4ACAFxAH4AtHBxAH4Ax3NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAOeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgAmAAAAAXcEAAAAAXEAfgDNeHEAfgDScHEAfgAIc3EAfgAQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyHEAfgAIc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A03EAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1HEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACHBzcQB+ACAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDWcQB+AAhzcQB+AK53DAAAAAI/QAAAAAAAAXEAfgAseHEAfgAnc3EAfgAYAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANlxAH4ACHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDacQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE1xAH4ATnEAfgBPcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDbcQB+AAgBAAAAAAFxAH4AT3EAfgBVc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A23EAfgAIAQAAAAABcQB+AE5xAH4AWHEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANtxAH4ACAAAAAAAAHEAfgBNcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDacQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE1xAH4AYXQABG5hbWVwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACAAAAAAAAHEAfgDkcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACAEAAAAAAXEAfgBhcQB+AGVxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDhcQB+AAgAAAAAAABxAH4ATXBwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOlxAH4ACHNxAH4ASHVxAH4ASwAAAAN0AAZlbnRpdHlxAH4AgnEAfgCDcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAgBAAAAAAFxAH4Ag3EAfgCFc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6nEAfgAIAQAAAAABcQB+AIJxAH4AiHEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOpxAH4ACAAAAAAAAHEAfgDtcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AO1xAH4AjXEAfgCOcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDxcQB+AAgAAAAAAABxAH4AjnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDxcQB+AAgBAAAAAAFxAH4AjXEAfgCRcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8XEAfgAIAAAAAAAAcQB+AO1wcAAAc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBIdXEAfgBLAAAAA3QACnN1YnN0YXRpb25xAH4Al3QABG5hbWVwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APdxAH4ACAAAAAAAAHEAfgD7cHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APdxAH4ACAEAAAAAAXEAfgCXcQB+AJpxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAgAAAAAAABxAH4A+nBwAAAAAHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACHNxAH4ASHVxAH4ASwAAAAN0AAZlbnRpdHlxAH4Ap3EAfgCocHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4AqHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4Ap3EAfgCrcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AQJwcHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEGcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAgAAAAAAABxAH4AJXBxAH4AcXNxAH4AawAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQpxAH4ACAAAAAAAAHQABG5hbWVwc3EAfgB1AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCnEAfgAIcQB+AHdxAH4AcXNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AJgAAAAF3BAAAAAFzcQB+ALEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDTcQB+AAhxAH4AtHNxAH4AtQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARFxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARJxAH4ACAAAAAAAAHQABmVudGl0eXABeHNxAH4AJgAAAAF3BAAAAAFxAH4Ax3hxAH4ACHNxAH4AtQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMdxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARZxAH4ACAAAAAAAAHEAfgEUcAFxAH4AtHNxAH4ALXEAfgDDcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n UNION\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?substation .\n ?substation ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n OPTIONAL {\n ?entity ?substation2 .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "60", + "maxDepth" : "11", + "leafNodeCount" : "31", + "maxBranchingFactor" : "3", + "joinNodeCount" : "6", + "filterNodeCount" : "2", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=5", + "structureSignatureRawSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "structureSignatureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "joinAlgorithmSignatureSha256" : "8beb62c935cc91321d54c06aabd3d1a657662ae74b182879ebe463415138dd48", + "actualResultSizesSignatureSha256" : "ed9ccf0161c31186a4edc2a3fb0180f2b8687224c5499e6c7d0c3949194d8dc9", + "estimatesSignatureSha256" : "de94d234d648505b39e9f70f029c702e4096787a0ba1be0c79bf52a016398369", + "joinAlgorithmMultisetSignatureSha256" : "7aa55a4a82ea0dbb7670691ec3cc9e667429892a9767ecf8693ac79ab2cea297", + "actualResultSizesMultisetSignatureSha256" : "21737f9327c195a3c4566f76fc2a023bd727cbdaeb5486aa5e395ae79bb260f1", + "estimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "statementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "112204.4", + "modeledInputRowsSum" : "224410", + "modeledOutputRowsSum" : "112206", + "modeledJoinInputRowsSum" : "112206", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.4;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "modeledOperatorCountByCategorySignatureSha256" : "9abdb299b9d9e22d035c5cbd57e3cb3a1092d1fc7daecbc2f7403f401450034d", + "modeledInputRowsByCategory" : "distinct=0;extension=2;filter=0;group=0;join=112204;projection=0;scan=112204;union=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "87fc031b820af562cc9eac49fc86ca761f4bbca5e2cbb6de7afa0c8315163730", + "modeledOutputRowsByCategory" : "distinct=0;extension=2;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "8d8032700fda5a6aa204e485bf2af72a89aa6cefb898635a0a1011efbc6aab81", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "JoinIterator=0;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "f14303cf51645ddf2a677b9c40fc44a5eba760e5156242ea41b22fdc1680a8c2", + "modeledWorkVector" : "workUnits=112204.4|barrierCount=4|joinInputRowsSum=112206|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=0;UNKNOWN=0|categories=distinct=0;extension=0.4;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ec9620e746599deffcf48abf21b5ba0fcbda579a88e1759eda5942d54d5d933d", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=2|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=5|workUnits=0|inputRows=74830|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=37374|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=112204|inputRows=112204|outputRows=112204|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "220a2ab7eed74452c5a528263bf809e1e596ccbc0eee404a88e28ea2eb897c96", + "operatorWorkTopContributors" : "StatementPattern[UNKNOWN]:112204;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.4;Compare (=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "131695650.75543677233721", + "costEstimateMax" : "131667241.5", + "resultSizeEstimateSum" : "112206", + "resultSizeEstimateMax" : "37374", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "6", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "61", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=210.7M, nextCallCountActual=1, nextTimeNanosActual=61.4K, outputRowsActual=1, firstRowTimeNanosActual=210.8M, openCountActual=1, lastRowTimeNanosActual=211.1M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=105.4M, avgNextNanosActual=61.4K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=210.7M, nextCallCountActual=1, nextTimeNanosActual=20.5K, outputRowsActual=1, firstRowTimeNanosActual=210.8M, openCountActual=1, lastRowTimeNanosActual=211.1M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=105.4M, avgNextNanosActual=20.5K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=210.7M, nextCallCountActual=1, nextTimeNanosActual=4.7K, aggregateEvalCountActual=8, outputRowsActual=1, firstRowTimeNanosActual=210.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=211.0M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=105.4M, avgNextNanosActual=4.8K)\n │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=207.4M, nextCallCountActual=8, nextTimeNanosActual=8.9K, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, outputRowsActual=8, firstRowTimeNanosActual=2.6M, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=208.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=20.7M, avgNextNanosActual=1.1K, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4)\n │ ║ ├── Union (resultSizeActual=8, inputRowsActual=8, outputRowsActual=8, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left]\n │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=110.5M, nextCallCountActual=4, nextTimeNanosActual=1.2K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, outputRowsActual=4, firstRowTimeNanosActual=2.5M, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=111.4M, closeCountActual=1, exprEvalTimeNanosActual=27.1M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=22.1M, avgNextNanosActual=323, filterRejectRateActual=1.00)\n │ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=21.8M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=16.6M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ ║ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ║ Var (name=target) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ValueConstant (value=\"Substation 3\") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0)\n │ ║ │ ║ └── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K)\n │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=18.7K, inputRowsActual=18.7K, outputRowsActual=18.7K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=18.7K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left]\n │ ║ │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=26.2K, nextCallCountActual=2, nextTimeNanosActual=5.0K, outputRowsActual=2, firstRowTimeNanosActual=310.1K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=111.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=8.7K, avgNextNanosActual=2.5K) [left]\n │ ║ │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=4.5M, nextCallCountActual=18.7K, nextTimeNanosActual=5.9M, outputRowsActual=18.7K, firstRowTimeNanosActual=12.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=43.3M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=243, avgNextNanosActual=319) [right]\n │ ║ │ ║ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=23.0M, nextCallCountActual=18.7K, nextTimeNanosActual=3.2M, outputRowsActual=18.7K, firstRowTimeNanosActual=708, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=2.1K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=616, avgNextNanosActual=172) [right]\n │ ║ │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, inputRowsActual=18.7K, outputRowsActual=4, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0)\n │ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=16.1M, hasNextFalseCountActual=0)\n │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=12.0M, hasNextFalseCountActual=0)\n │ ║ │ │ ║ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ │ ║ Var (name=target) (hasNextFalseCountActual=0)\n │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0)\n │ ║ │ │ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ │ ValueConstant (value=\"Substation 3\") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0)\n │ ║ │ └── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K)\n │ ║ │ ╠══ Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K) [left]\n │ ║ │ ║ ├── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=18.7K, inputRowsActual=18.7K, outputRowsActual=18.7K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=18.7K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left]\n │ ║ │ ║ │ ╠══ BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=57.1K, nextCallCountActual=2, nextTimeNanosActual=7.4K, outputRowsActual=2, firstRowTimeNanosActual=111.1M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=207.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=19.1K, avgNextNanosActual=3.7K) [left]\n │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=2.2M, nextCallCountActual=18.7K, nextTimeNanosActual=1.5M, outputRowsActual=18.7K, firstRowTimeNanosActual=28.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=40.8M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=118, avgNextNanosActual=83) [right]\n │ ║ │ ║ │ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=23.5M, nextCallCountActual=18.7K, nextTimeNanosActual=1.3M, outputRowsActual=18.7K, firstRowTimeNanosActual=1.2K, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=3.2K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=628, avgNextNanosActual=73) [right]\n │ ║ │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=substation) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=12.0M, nextCallCountActual=18.7K, nextTimeNanosActual=1.4M, outputRowsActual=18.7K, firstRowTimeNanosActual=458, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=1.4K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=323, avgNextNanosActual=79) [right]\n │ ║ │ s: Var (name=substation) (hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=name) (hasNextFalseCountActual=0)\n │ ║ └── StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=36.2K, nextCallCountActual=4, nextTimeNanosActual=708, outputRowsActual=4, firstRowTimeNanosActual=1.7K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=11.6K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=9.3K, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=3.0K, avgNextNanosActual=177) [right]\n │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0)\n │ ║ o: Var (name=substation2) (hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=entity) (hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=entity) (hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 210775333,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 61417,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 210849541,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 211145083,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 210756917,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 20542,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 210845458,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 211117917,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 210725501,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 4750,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 8,\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 210837958,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 211090250,\n \"maxGroupSizeActual\" : 8,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 10\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 8.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 207411583,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 8917,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 4,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 8,\n \"firstRowTimeNanosActual\" : 2671250,\n \"leftRowsWithMatchActual\" : 4,\n \"openCountActual\" : 1,\n \"emptyRightProbeCountActual\" : 4,\n \"lastRowTimeNanosActual\" : 208783417,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Union\",\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 5,\n \"hasNextTrueCountActual\" : 4,\n \"hasNextTimeNanosActual\" : 110587126,\n \"nextCallCountActual\" : 4,\n \"nextTimeNanosActual\" : 1291,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18728,\n \"sourceRowsMatchedActual\" : 4,\n \"sourceRowsFilteredActual\" : 18724,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 4,\n \"firstRowTimeNanosActual\" : 2592417,\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 4,\n \"lastRowTimeNanosActual\" : 111467208,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2.7106437E7\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 4,\n \"shortCircuitCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2.1839813E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18726,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1.6597698E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=target)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18726,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2016424.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1500916.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 26249,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 5083,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 2,\n \"firstRowTimeNanosActual\" : 310167,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 111173250,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 28107.0,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 18730,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 4546762,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 5974397,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 12667,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 43398958,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 23089074,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 3217258,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 708,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 2125,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 4,\n \"shortCircuitCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1.6070062E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18726,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1.1988312E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=target)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18726,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1436194.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2375.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 57167,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 7417,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 2,\n \"firstRowTimeNanosActual\" : 111173042,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 207820708,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.316672415E8,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 18730,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 2218102,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 1557119,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 28667,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 40817417,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.66824711351707,\n \"resultSizeEstimate\" : 37374.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 23506552,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 1369279,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 1250,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 3291,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=substation)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 12082295,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 1485375,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 458,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 1458,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 37374.0,\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 12,\n \"hasNextTrueCountActual\" : 4,\n \"hasNextTimeNanosActual\" : 36209,\n \"nextCallCountActual\" : 4,\n \"nextTimeNanosActual\" : 708,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 4,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 4,\n \"firstRowTimeNanosActual\" : 1791,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 11666,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=substation2)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n LeftJoin (LeftJoinIterator) (resultSizeActual=8.00)\n Union (resultSizeActual=8.00)\n Filter (resultSizeActual=4.00)\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Filter (resultSizeActual=4.00)\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4.00)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=8.00)\\n Union (resultSizeActual=8.00)\\n Filter (resultSizeActual=4.00)\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Filter (resultSizeActual=4.00)\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4.00)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"c7f27b5b21ef43dc34305fb666d4af1e42c0b6bbdadb89f78a048680c555fb14\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAMkDGzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAELQQAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAAyRfeZ0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAADJV7tXhwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAADJAtJQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA7+kAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAADJFPBXEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAADJXRe3hxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAADI/lNQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAUD4AAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAADJE/EnEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAADJVnXXhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAADI9qfQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEo4AAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQCAAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAhxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAADJEhxnQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAMlPtKdAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAKAAAAAAxc2X8AAAAAAAAACQAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAAAACLVAAAAAAAAAAi/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAowpJ0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHNxAH4ADAAAAAAAAAAEcQB+ABJxAH4ADnQAGmVtcHR5UmlnaHRQcm9iZUNvdW50QWN0dWFscQB+ADhxAH4AE3NxAH4ADAAAAAAMccg5cQB+ABFxAH4ADnQAGW1heFJpZ2h0Um93c1BlckxlZnRBY3R1YWxxAH4ADnhxAH4AJHEAfgAIdAAQTGVmdEpvaW5JdGVyYXRvcnNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuaW9uZ5+6I6xIBMgCAAB4cQB+ADIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAACL/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA0cQB+AAhwc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRmlsdGVyMHu9pSkqq/UCAAFMAAljb25kaXRpb25xAH4AMXhxAH4AAQAAAAAAAAABv/AAAAAAAAAAAAAAAAAABQAAAAAGl2z2AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFCwAAAAAAAAAEv/AAAAAAAAAAAAAAAAAASSQAAAAAAAAABAAAAAAAAEko//////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAF0ABdleHByRXZhbFRpbWVOYW5vc0FjdHVhbHNxAH4AJ0F52chQAAAAeHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAACXEAfgALcQB+ADhxAH4AD3NxAH4ADAAAAAAAJ46hdAATZXhwckV2YWxDb3VudEFjdHVhbHNxAH4ADAAAAAAAAEkodAAUZXhwckZhbHNlQ291bnRBY3R1YWxzcQB+AAwAAAAAAABJJHQAGXByZWRpY2F0ZUVycm9yQ291bnRBY3R1YWxzcQB+AAwAAAAAAAAAAHEAfgAScQB+AA50ABNleHByVHJ1ZUNvdW50QWN0dWFscQB+ADhxAH4AE3NxAH4ADAAAAAAGpNrIcQB+ABFxAH4ADnhxAH4APnEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAEkoAAAAAAAASSj/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQHEAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAgAAAAAAAEkoAAAAAAAAAAL/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AT3EAfgAIcQB+AFBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ACNMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAFAGAAAAAAAAAAAAAAAAAADAAAAAAAAZokAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABPbAAAAAAAAAAI/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAAAAAnEAfgAPc3EAfgAMAAAAAAAEu5dxAH4AEXEAfgAOcQB+ABJxAH4ADnQAFmJpbmRpbmdzUHJvdmlkZWRBY3R1YWxxAH4AVnEAfgATc3EAfgAMAAAAAAagXoJ4cQB+AFFxAH4ACHNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAAAXQABnRhcmdldHhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAncEAAAAAnNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4AHUwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ACNMAAZ2YWx1ZXNxAH4AHXhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgBdAAAAAXcEAAAAAXQABnRhcmdldHhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ADNMAAhsYW5ndWFnZXEAfgAzeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZTVFJJTkdzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AM0wACW5hbWVzcGFjZXEAfgAzTAALc3RyaW5nVmFsdWVxAH4AM3hwdy/i7scYACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMABnN0cmluZ3h0AAxTdWJzdGF0aW9uIDFwc3EAfgBfc3EAfgBdAAAAAXcEAAAAAXEAfgBjeHBzcQB+AGR1cQB+AGcAAAABc3EAfgBpcQB+AHBxAH4Ac3QADFN1YnN0YXRpb24gMnB4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgAjTAAKY29udGV4dFZhcnEAfgAXTAAJaW5kZXhOYW1lcQB+ADNMAAlvYmplY3RWYXJxAH4AF0wADHByZWRpY2F0ZVZhcnEAfgAXTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+ABdMAAd2YXJMaXN0cQB+AB14cQB+AAMAAAAAAAAAAUDbcsAAAAAAAAAAAAAASSoAAAAAAEVgygAAAAAAAEkoAAAAAAAAAAACAAAAAAAASSgAAAAAAAAAAgAAAAAAAEkoAAAAAABbKX0AAAAAAABJKEDCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAAxe3QAFmluZGV4TG9va3VwQ291bnRBY3R1YWxxAH4AVnEAfgARcQB+AFZxAH4AEnEAfgBWcQB+ABNzcQB+AAwAAAAAApY3LnhxAH4AUXEAfgAIc3IAP29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTbWFsbFN0cmluZ1NldHm8SKeF/XlAAgABWwAGdmFsdWVzdAATW0xqYXZhL2xhbmcvU3RyaW5nO3hwdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAA3QABmVudGl0eXQAE19jb25zdF9mNWU1NTg1YV91cml0ABNfY29uc3RfYWM5ZjAzZDNfdXJpcHBzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYXJxU1QXU7Gy7wIABVoACWFub255bW91c0kADmNhY2hlZEhhc2hDb2RlWgAIY29uc3RhbnRMAARuYW1lcQB+ADNMAAV2YWx1ZXQAH0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9WYWx1ZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB+cQB+AAgBAAAAAAFxAH4Ai3NyACZvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUlSSZpFKkOTZkZuAgACSQAMbG9jYWxOYW1lSWR4TAAJaXJpU3RyaW5ncQB+ADN4cgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdElSSWw/DzoHkfCWAgABSQAOY2FjaGVkSGFzaENvZGV4cAAAAAD/////dAAoaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvU3Vic3RhdGlvbnNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH5xAH4ACAEAAAAAAXEAfgCKc3EAfgCPAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhxAH4Ab3QAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfnEAfgAIAAAAAAAAcQB+AIlwcAAAc3EAfgB7AAAAAAAAAAFAWDLKQfel0gAAAAAAAJJQAAAAAAFgT7IAAAAAAABJKAAAAAAAAABJKAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAMRdqAAAAAAAASShAwkoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAABJKHEAfgAPc3EAfgAMAAAAAAAAAsRxAH4AgnNxAH4ADAAAAAAAAEkocQB+ABFzcQB+AAwAAAAAAABJKHEAfgASc3EAfgAMAAAAAAAASShxAH4AE3NxAH4ADAAAAAAAAAhNeHEAfgBPcQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIl0ABNfY29uc3RfOTY2MTIyOGFfdXJpdAAEbmFtZXBwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AKVwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAQAAAAABcQB+AKRzcQB+AI8AAAAA/////3QAImh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL25hbWVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAgAAAAAAABxAH4AiXBwAABzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAxTAAIcmlnaHRBcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AQnNxAH4AJ0F00/xQAAAAeHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABHQAF3Nob3J0Q2lyY3VpdENvdW50QWN0dWFscQB+AFZxAH4ARnNxAH4ADAAAAAAAAEkocQB+AEhzcQB+AAwAAAAAAABJJHEAfgBMcQB+ADh4cQB+AEBxAH4ACHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHEAfgCsAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBCc3EAfgAnQW+oWEAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+AEZzcQB+AAwAAAAAAABJKHEAfgBIc3EAfgAMAAAAAAAASSZxAH4ATHEAfgBWeHEAfgCtcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4ApXBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4AXHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBvdAACRVFzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBPsSoAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4ARnNxAH4ADAAAAAAAAEkmcQB+AEhzcQB+AAwAAAAAAABJJHEAfgBMcQB+AFZ4cQB+AK1xAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgClcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AI14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBNub0AAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4ARnEAfgAOcQB+AExxAH4ADnhxAH4AwXEAfgAIc3EAfgBpcQB+AHBxAH4Ac3QADFN1YnN0YXRpb24gM3BxAH4Av3NxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A/////////////////////////////////////////////////////wAAAAAAAAAEv/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AD5xAH4ACHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAABJKAAAAAAAAEko/////////////////////wAAAAAAAEkov/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHEAfgBQc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAEkoAAAAAAAASSj/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0HEAfgAIcQB+AFBzcQB+AE4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAACAAAAAAAASSgAAAAAAAAAAv////////////////////8AAAAAAABJKL/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDRcQB+AAhxAH4AUHNxAH4AUgAAAAAAAAABQBgAAAAAAAAAAAAAAAAAAwAAAAAAAN9PAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAc+QAAAAAAAAACP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AFZxAH4AD3NxAH4ADAAAAAAGoF2ycQB+ABFxAH4ADnEAfgAScQB+AA5xAH4AWHEAfgBWcQB+ABNzcQB+AAwAAAAADGMXpHhxAH4A0nEAfgAIc3EAfgBadwwAAAAQP0AAAAAAAAFxAH4AXHhxAH4AXnNxAH4AewAAAAAAAAABQZ9kVKYAAAAAAAAAAABJKgAAAAAAIdh2AAAAAAAASSgAAAAAAAAAAAIAAAAAAABJKAAAAAAAAAACAAAAAAAASSgAAAAAABfCfwAAAAAAAEkoQMJKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAASShxAH4AD3NxAH4ADAAAAAAAAG/7cQB+AIJxAH4AVnEAfgARcQB+AFZxAH4AEnEAfgBWcQB+ABNzcQB+AAwAAAAAAm7TCXhxAH4A0nEAfgAIc3EAfgCEdXEAfgCHAAAAA3EAfgCJdAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF83MmYzM2ExNF91cmlwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANhxAH4ACAEAAAAAAXEAfgDgc3EAfgCPAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9HZW5lcmF0b3JzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDYcQB+AAgBAAAAAAFxAH4A33NxAH4AjwAAAAD/////cQB+AJVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDYcQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AHsAAAAAAAAAAUBYKsSPiozxAAAAAAAAklAAAAAAAWaueAAAAAAAAEkoAAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAAEkoAAAAAAAU5L8AAAAAAABJKEDiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAAE4nEAfgCCc3EAfgAMAAAAAAAASShxAH4AEXNxAH4ADAAAAAAAAEkocQB+ABJzcQB+AAwAAAAAAABJKHEAfgATc3EAfgAMAAAAAAAADNt4cQB+ANFxAH4ACHNxAH4AhHVxAH4AhwAAAANxAH4AiXQAE19jb25zdF8zNTU0MjY3Nl91cml0AApzdWJzdGF0aW9ucHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4A8nBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgBAAAAAAFxAH4A8XNxAH4AjwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AHsAAAAAAAAAAUBYMspB96XSAAAAAAAAklAAAAAAALhcdwAAAAAAAEkoAAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAAEkoAAAAAAAWqj8AAAAAAABJKEDCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAABynEAfgCCc3EAfgAMAAAAAAAASShxAH4AEXNxAH4ADAAAAAAAAEkocQB+ABJzcQB+AAwAAAAAAABJKHEAfgATc3EAfgAMAAAAAAAABbJ4cQB+ANBxAH4ACHNxAH4AhHVxAH4AhwAAAANxAH4A8nQAE19jb25zdF85NjYxMjI4YV91cmlxAH4ApXBwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIAAAAAAAAcQB+AKVwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIAQAAAAABcQB+AQJzcQB+AI8AAAAA/////3QAImh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL25hbWVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD4cQB+AAgAAAAAAABxAH4A8nBwAABzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBbqa1wAAAAHhzcQB+AAk/QAAAAAAABncIAAAACAAAAARxAH4AsXEAfgBWcQB+AEZzcQB+AAwAAAAAAABJKHEAfgBIc3EAfgAMAAAAAAAASSRxAH4ATHEAfgA4eHEAfgDPcQB+AAhzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBZt2rAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4ARnNxAH4ADAAAAAAAAEkocQB+AEhzcQB+AAwAAAAAAABJJnEAfgBMcQB+AFZ4cQB+AQhxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ5xAH4ACAAAAAAAAHEAfgClcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ5xAH4ACAAAAAAAAHEAfgBccHEAfgC/c3EAfgC0AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBCc3EAfgAnQTXqIgAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+AEZzcQB+AAwAAAAAAABJJnEAfgBIc3EAfgAMAAAAAAAASSRxAH4ATHEAfgBWeHEAfgEIcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEWcQB+AAgAAAAAAABxAH4ApXBzcQB+AMgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdAoo4AAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4ARnEAfgAOcQB+AExxAH4ADnhxAH4BFnEAfgAIcQB+AM1xAH4Av3NxAH4AewAAAAAAAAABv/AAAAAAAAAAAAAAAAAADAAAAAAAAI1xAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAAAAACxAAAAAAAAAAEQOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ADhxAH4AD3NxAH4ADAAAAAAAAAb/cQB+AIJxAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAAAtknhxAH4ANHEAfgAIc3EAfgCEdXEAfgCHAAAAA3EAfgCJdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgAAAAAAABxAH4BKHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgBAAAAAAFxAH4BJ3NxAH4AjwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgAAAAAAABxAH4AiXBwcHNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgBadwwAAAAQP0AAAAAAAAB4c3EAfgBdAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAzTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAkcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ADF4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEzcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE4cQB+AAgAAAAAAABxAH4AiXABeHNxAH4AXQAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+ADN4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAecQB+AAhzcQB+ATUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE8cQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE9cQB+AAgAAAAAAABxAH4AiXABcQB+ATR4AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AB14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAYcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgAzTAAPcHJvamVjdGlvbkFsaWFzcQB+ADNMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFBcQB+AAgBcQB+ATRwc3EAfgE7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4BSXEAfgAIcQB+AUgBc3EAfgE/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BSXEAfgAIdXEAfgFCAAAAAXNxAH4BRAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUtxAH4ACAFxAH4BNHBxAH4BR3NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAdeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgBdAAAAAXcEAAAAAXEAfgFNeHEAfgFScHEAfgAIc3EAfgAiAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BSHEAfgAIc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BU3EAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BVHEAfgAIcHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVVxAH4ACHBzcQB+AFIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFWcQB+AAhzcQB+AS53DAAAAAI/QAAAAAAAAXEAfgBjeHEAfgBec3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BVnEAfgAIcHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVlxAH4ACHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFacQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIlxAH4AinEAfgCLcHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFbcQB+AAgBAAAAAAFxAH4Ai3EAfgCRc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAQAAAAABcQB+AIpxAH4AlHEAfgCXcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVtxAH4ACAAAAAAAAHEAfgCJcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFacQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIlxAH4ApHQABG5hbWVwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWFxAH4ACAAAAAAAAHEAfgFkcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWFxAH4ACAEAAAAAAXEAfgCkcQB+AKhxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFhcQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AE4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAhwc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaHEAfgAIcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AhHVxAH4AhwAAAAN0AAZlbnRpdHlxAH4A33EAfgDgcHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAgBAAAAAAFxAH4A4HEAfgDic3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BanEAfgAIAQAAAAABcQB+AN9xAH4A5XEAfgCXcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACAAAAAAAAHEAfgFtcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFpcQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AW1xAH4A8XEAfgDycHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFxcQB+AAgAAAAAAABxAH4A8nBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFxcQB+AAgBAAAAAAFxAH4A8XEAfgD1cQB+AJdwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcXEAfgAIAAAAAAAAcQB+AW1wcAAAc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaHEAfgAIc3EAfgCEdXEAfgCHAAAAA3QACnN1YnN0YXRpb25xAH4BAnQABG5hbWVwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXdxAH4ACAAAAAAAAHEAfgF7cHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXdxAH4ACAEAAAAAAXEAfgECcQB+AQVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF3cQB+AAgAAAAAAABxAH4BenBwAAAAAHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVVxAH4ACHNxAH4AhHVxAH4AhwAAAAN0AAZlbnRpdHlxAH4BJ3EAfgEocHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF/cQB+AAgAAAAAAABxAH4BKHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF/cQB+AAgBAAAAAAFxAH4BJ3EAfgErcQB+AJdwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bf3EAfgAIAAAAAAAAcQB+AYJwcHBzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFUcQB+AAhzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGGcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGHcQB+AAgAAAAAAABxAH4ApXBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGHcQB+AAgAAAAAAABxAH4AXHBxAH4Av3NxAH4AtAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYZxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHQABG5hbWVwc3EAfgDIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BinEAfgAIcQB+AM1xAH4Av3NyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AXQAAAAF3BAAAAAFzcQB+ATEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFTcQB+AAhxAH4BNHNxAH4BNQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZFxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZJxAH4ACAAAAAAAAHQABmVudGl0eXABeHNxAH4AXQAAAAF3BAAAAAFxAH4BR3hxAH4ACHNxAH4BNQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUdxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZZxAH4ACAAAAAAAAHEAfgGUcAFxAH4BNHNxAH4AZHEAfgFDcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n UNION\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?substation .\n ?substation ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n OPTIONAL {\n ?entity ?substation2 .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "60", + "maxDepth" : "11", + "leafNodeCount" : "31", + "maxBranchingFactor" : "3", + "joinNodeCount" : "6", + "filterNodeCount" : "2", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=5", + "structureSignatureRawSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "structureSignatureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "joinAlgorithmSignatureSha256" : "d7805f2b211a4d90729d28a1350b217a020e021f305b6d4ed22a7e594899dec2", + "actualResultSizesSignatureSha256" : "f068ca3103c7ce4422fa0ff914c9545d8ed1cdc3cc1ab9ddb3f6badca098aa95", + "estimatesSignatureSha256" : "de94d234d648505b39e9f70f029c702e4096787a0ba1be0c79bf52a016398369", + "joinAlgorithmMultisetSignatureSha256" : "b7d553917c4cbdee9a9d9758de458e01ffdff11e8748ba292d718d5c510d0677", + "actualResultSizesMultisetSignatureSha256" : "237072035b7f6dabcddad0f96909d68041481b6e9783833cda1003eb145e329d", + "estimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "statementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "348376.25", + "modeledInputRowsSum" : "224762", + "modeledOutputRowsSum" : "187315", + "modeledJoinInputRowsSum" : "149840", + "modeledJoinOutputRowsSum" : "93648", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "modeledOperatorCountByCategorySignatureSha256" : "9abdb299b9d9e22d035c5cbd57e3cb3a1092d1fc7daecbc2f7403f401450034d", + "modeledInputRowsByCategory" : "distinct=0;extension=5;filter=37456;group=8;join=93644;projection=1;scan=93644;union=4;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "d3fe53ad8fe2db059f57f43f5da61e5d954ed47f636ff048cb47058b8df5aeab", + "modeledOutputRowsByCategory" : "distinct=0;extension=5;filter=8;group=1;join=93648;projection=1;scan=93644;union=8;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "353fe25ede0036fc8c3bcad9e949fbeedd0c2e3650775d56331569361c551dc7", + "modeledFilterInputRowsSum" : "37456", + "modeledFilterOutputRowsSum" : "8", + "modeledFilterPassRatio" : "0.000214", + "modeledFilterRejectRatio" : "0.999786", + "modeledJoinWorkByAlgorithm" : "JoinIterator=243468;LeftJoinIterator=20", + "modeledJoinWorkByAlgorithmSignatureSha256" : "c8bb86d42e851628990f4abfc5af3df6891f6a2acc98fdefd5a84c20619bf61b", + "modeledWorkVector" : "workUnits=348376.25|barrierCount=4|joinInputRowsSum=149840|joinOutputRowsSum=93648|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=243468;LeftJoinIterator=20|categories=distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "modeledWorkVectorSignatureSha256" : "b60e6317b5f2a201891aa338a5910d635bf3115cb4911c75252eee6aebffaf89", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=2|workUnits=0.8|inputRows=4|outputRows=4|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=11236.8|inputRows=37456|outputRows=8|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=5.6|inputRows=8|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=5|workUnits=243468|inputRows=93640|outputRows=93640|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=20|inputRows=4|outputRows=8|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=93644|inputRows=93644|outputRows=93644|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0.8|inputRows=4|outputRows=8|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "804fe74ed7c7dee7ccad073e4c197ef257fa662fb48629bd48cdf8a517b0efdb", + "operatorWorkTopContributors" : "Join[JoinIterator]:243468;StatementPattern[UNKNOWN]:93644;Filter[UNKNOWN]:11236.8;LeftJoin[LeftJoinIterator]:20;Group ()[UNKNOWN]:5.6;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.8;Union[UNKNOWN]:0.8;Extension[UNKNOWN]:0.2", + "estimateActualComparableNodeCount" : "8", + "estimateActualAbsErrorSum" : "93474", + "estimateActualRelativeErrorMean" : "1168.311952691158", + "estimateActualQErrorP50" : "2", + "estimateActualQErrorP95" : "9343.5", + "estimateActualQErrorMax" : "9343.5", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "131695650.75543677233721", + "costEstimateMax" : "131667241.5", + "resultSizeEstimateSum" : "112206", + "resultSizeEstimateMax" : "37374", + "resultSizeActualSum" : "187315", + "resultSizeActualMax" : "18728", + "modeledHasNextCallCountSum" : "149869", + "modeledHasNextTrueCountSum" : "93665", + "modeledHasNextTimeNanosSum" : "1226595369", + "modeledNextCallCountSum" : "93664", + "modeledNextTimeNanosSum" : "13781970", + "modeledJoinRightIteratorCreateCountSum" : "112392", + "modeledJoinLeftBindingSetConsumedCountSum" : "56220", + "modeledJoinRightBindingSetConsumedCountSum" : "187288", + "modeledJoinTelemetryNodeCount" : "6", + "modeledJoinRightBindingsPerLeftRatio" : "3.331341", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.666382", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "18732", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "9370", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "31214.666667", + "modeledSourceRowsScannedSum" : "18728", + "modeledSourceRowsMatchedSum" : "4", + "modeledSourceRowsFilteredSum" : "18724", + "modeledSourceFilterOutRatio" : "0.999786", + "modeledIteratorTelemetryNodeCount" : "61", + "modeledHasNextTimeMillisSum" : "1226.595369", + "modeledNextTimeMillisSum" : "13.78197", + "modeledHasNextPerNextRatio" : "1.60007", + "modeledHasNextTruePerNextRatio" : "1.000011" + } + } + } +} \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-203302005-65b32434.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-203302005-65b32434.json new file mode 100644 index 00000000000..09c68c57f87 --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-electrical_grid-q1-1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4-20260319-203302005-65b32434.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-03-19T20:33:02.005419Z", + "queryId" : "lmdb-electrical_grid-q1", + "queryString" : "PREFIX grid: \nSELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n { ?entity a grid:Substation ; grid:name ?name . }\n UNION\n { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . }\n FILTER(?name = ?target || ?name = \"Substation 3\")\n OPTIONAL { ?entity grid:feeds ?substation2 . }\n}", + "unoptimizedFingerprint" : "1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4", + "metadata" : { + "store" : "lmdb", + "theme" : "ELECTRICAL_GRID", + "querySource" : "theme-index", + "queryIndex" : "1", + "queryName" : "Grid: substations or generators by name", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "bc457604fb2ff08ef8f095b878810ee4af8e96e55e3362a5c1097cfcc0ab94ba", + "queryString.normalizedWhitespaceSha256" : "fa8d1b182bc594eba88897a1fb2c6f52aeefe97708eeeb66cdf4ac015759fab3", + "optimizerInput.unoptimizedStructureRawSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "b09b92f0f68d331385357e61e1037a0345f54c12", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "25.0.1", + "queryString.charCount" : "398", + "queryString.lineCount" : "9", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "50", + "optimizerInput.unoptimizedJoinNodeCount" : "5", + "optimizerInput.unoptimizedFilterNodeCount" : "1", + "optimizerInput.unoptimizedStatementPatternCount" : "6", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=5", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4868c87682a8a4f12599e04ed28fb808b9df37819a2c4cd4333795a9e5cb8a28", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "79dbc5f8930415215fbadf8585ef8fc4d552e77a37388bb2f50c22f6dfd71795", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "60", + "optimizerOutput.optimizedJoinNodeCount" : "6", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "6", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=5", + "optimizerOutput.optimizedStructureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "60", + "executionPlan.executedJoinNodeCount" : "6", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "6", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=5", + "executionPlan.executedStructureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "executionPlan.executedModeledWorkUnits" : "348376.25", + "executionPlan.executedModeledInputRowsSum" : "224762", + "executionPlan.executedModeledOutputRowsSum" : "187315", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "149840", + "executionPlan.executedModeledJoinOutputRowsSum" : "93648", + "executionPlan.executedModeledFilterInputRowsSum" : "37456", + "executionPlan.executedModeledFilterOutputRowsSum" : "8", + "executionPlan.executedModeledFilterPassRatio" : "0.000214", + "executionPlan.executedModeledFilterRejectRatio" : "0.999786", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=5;filter=37456;group=8;join=93644;projection=1;scan=93644;union=4;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=5;filter=8;group=1;join=93648;projection=1;scan=93644;union=8;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=243468;LeftJoinIterator=20", + "executionPlan.executedModeledWorkVector" : "workUnits=348376.25|barrierCount=4|joinInputRowsSum=149840|joinOutputRowsSum=93648|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=243468;LeftJoinIterator=20|categories=distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "b60e6317b5f2a201891aa338a5910d635bf3115cb4911c75252eee6aebffaf89", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "804fe74ed7c7dee7ccad073e4c197ef257fa662fb48629bd48cdf8a517b0efdb", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:243468;StatementPattern[UNKNOWN]:93644;Filter[UNKNOWN]:11236.8;LeftJoin[LeftJoinIterator]:20;Group ()[UNKNOWN]:5.6;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.8;Union[UNKNOWN]:0.8;Extension[UNKNOWN]:0.2", + "executionPlan.executedEstimateActualComparableNodeCount" : "8", + "executionPlan.executedHasNextCallCountSum" : "149869", + "executionPlan.executedHasNextTrueCountSum" : "93665", + "executionPlan.executedHasNextTimeNanosSum" : "1906682523", + "executionPlan.executedNextCallCountSum" : "93664", + "executionPlan.executedNextTimeNanosSum" : "24430731", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "112392", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "56220", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "187288", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "3.331341", + "executionPlan.executedJoinTelemetryNodeCount" : "6", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.666382", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "18732", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "9370", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "31214.666667", + "executionPlan.executedSourceRowsScannedSum" : "18728", + "executionPlan.executedSourceRowsMatchedSum" : "4", + "executionPlan.executedSourceRowsFilteredSum" : "18724", + "executionPlan.executedSourceFilterOutRatio" : "0.999786", + "executionPlan.executedHasNextPerNextRatio" : "1.60007", + "executionPlan.executedHasNextTruePerNextRatio" : "1.000011", + "executionPlan.executedEstimateActualQErrorP95" : "9343.5", + "executionPlan.executedEstimateActualQErrorMax" : "9343.5", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "0", + "executionPlan.executedJoinEstimateActualQErrorP95" : "0", + "executionPlan.executedJoinEstimateActualQErrorMax" : "0", + "featureFlags.sha256" : "23b76dbabb86642b3cd17986dc7b5c5b2c75e012f5079b0df881a31c3e4960d4", + "planDeterminism.inputFingerprintSha256" : "4a7f50eff776ac551c2eb7a8cd90c901515b2ce16fc6376761b33e464e8fa19c", + "planDeterminism.environmentFingerprintSha256" : "19a497b12e436d1687592b741e642cdf171895c07de920df2d80e23e2f08434d", + "execution.runs" : "58", + "execution.resultCount" : "1", + "execution.totalMillis" : "58664", + "execution.averageMillis" : "1011", + "execution.minMillis" : "55", + "execution.maxMillis" : "47317", + "execution.stdDevMillis" : "6151", + "execution.coefficientOfVariationPct" : "608.2003", + "execution.sampleMillis" : "77,57,58,57,133,60,59,61,59,83,201,58,57,57,60,60,188,62,60,58,58,205,57,58,59,57,57,174,60,57,60,59,56,211,57,57,57,56,57,194,57,56,56,58,1308,56,57,56,58,57,1599,61,55,55,1527,57,2875,47317", + "execution.verificationStatus" : "soft-limit-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb;95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3|c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c|f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "true", + "execution.maxRunsReached" : "false" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "ELECTRICAL_GRID", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "2", + "cli.executionRepeatMaxRuns" : "128", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "1", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2612147064", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (=)\n │ ║ │ ║ Var (name=name)\n │ ║ │ ║ Var (name=target)\n │ ║ │ ╚══ Compare (=)\n │ ║ │ Var (name=name)\n │ ║ │ ValueConstant (value=\"Substation 3\")\n │ ║ └── LeftJoin\n │ ║ ╠══ Join [left]\n │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) [left]\n │ ║ ║ └── Union (new scope) [right]\n │ ║ ║ ╠══ Join (new scope)\n │ ║ ║ ║ ├── StatementPattern [left]\n │ ║ ║ ║ │ s: Var (name=entity)\n │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n │ ║ ║ ║ └── StatementPattern [right]\n │ ║ ║ ║ s: Var (name=entity)\n │ ║ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ ║ ║ o: Var (name=name)\n │ ║ ║ ╚══ Join (new scope)\n │ ║ ║ ├── Join [left]\n │ ║ ║ │ ╠══ StatementPattern [left]\n │ ║ ║ │ ║ s: Var (name=entity)\n │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n │ ║ ║ │ ╚══ StatementPattern [right]\n │ ║ ║ │ s: Var (name=entity)\n │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ ║ │ o: Var (name=substation)\n │ ║ ║ └── StatementPattern [right]\n │ ║ ║ s: Var (name=substation)\n │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ ║ o: Var (name=name)\n │ ║ ╚══ StatementPattern [right]\n │ ║ s: Var (name=entity)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ o: Var (name=substation2)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=entity)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\"\n }, {\n \"type\" : \"Union\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"newScope\" : true,\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation2)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n LeftJoin\n Join\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])\n Union (new scope)\n Join (new scope)\n StatementPattern\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Join (new scope)\n Join\n StatementPattern\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n LeftJoin\\n Join\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\\n Union (new scope)\\n Join (new scope)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Join (new scope)\\n Join\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"1f2d956ec3d9141c52dad66a35978f292b33adbfbcab4a5d03dbc2c220e346c4\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAZ0YXJnZXR4c3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAJ3BAAAAAJzcgArb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuaW1wbC5MaXN0QmluZGluZ1NldNelYuv0tawhAgADTAAMYmluZGluZ05hbWVzcQB+AA5MABRiaW5kaW5nTmFtZXNTZXRDYWNoZXEAfgARTAAGdmFsdWVzcQB+AA54cgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuQWJzdHJhY3RCaW5kaW5nU2V02//Sk443PUACAAB4cHNxAH4AIwAAAAF3BAAAAAFxAH4AInhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABhMAAhsYW5ndWFnZXEAfgAYeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZTVFJJTkdzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGEwACW5hbWVzcGFjZXEAfgAYTAALc3RyaW5nVmFsdWVxAH4AGHhwdy/i7scYACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMABnN0cmluZ3h0AAxTdWJzdGF0aW9uIDFwc3EAfgAlc3EAfgAjAAAAAXcEAAAAAXEAfgAieHBzcQB+ACl1cQB+ACwAAAABc3EAfgAucQB+ADVxAH4AOHQADFN1YnN0YXRpb24gMnB4c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5pb25nn7ojrEgEyAIAAHhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABtxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBBcQB+AAhwc3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABhMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBCcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAGZW50aXR5dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF9hYzlmMDNkM191cmlwcHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhcnFTVBdTsbLvAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AGEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEZxAH4ACAEAAAAAAXEAfgBOc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AChodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9TdWJzdGF0aW9uc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ARnEAfgAIAQAAAAABcQB+AE1zcQB+AFIAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHEAfgA0dAAQREVGQVVMVF9DT05URVhUU3BzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBGcQB+AAgAAAAAAABxAH4ATHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIc3EAfgBHdXEAfgBKAAAAA3EAfgBMdAATX2NvbnN0Xzk2NjEyMjhhX3VyaXQABG5hbWVwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBhcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAEAAAAAAXEAfgBgc3EAfgBSAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AXXEAfgAIAAAAAAAAcQB+AExwcAAAc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQXEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHBzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBocQB+AAhzcQB+AEd1cQB+AEoAAAADdAAGZW50aXR5dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF83MmYzM2ExNF91cmlwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGlxAH4ACAEAAAAAAXEAfgBuc3EAfgBSAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9HZW5lcmF0b3JzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBpcQB+AAgBAAAAAAFxAH4AbXNxAH4AUgAAAAD/////cQB+AFhxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBpcQB+AAgAAAAAAABxAH4AbHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaHEAfgAIc3EAfgBHdXEAfgBKAAAAA3EAfgBsdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQACnN1YnN0YXRpb25wcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgB5cHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAEAAAAAAXEAfgB4c3EAfgBSAAAAAP////90ACNodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9mZWVkc3EAfgBacHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgBscHAAAHNxAH4AQwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHNxAH4AR3VxAH4ASgAAAAN0AApzdWJzdGF0aW9udAATX2NvbnN0Xzk2NjEyMjhhX3VyaXQABG5hbWVwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgCEcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCDc3EAfgBSAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAAAAAAAAcQB+AIJwcAAAAABzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAZcQB+AAhzcQB+AEd1cQB+AEoAAAADdAAGZW50aXR5dAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4Aj3BzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgBAAAAAAFxAH4AjnNxAH4AUgAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4AjXBwcHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAgAAAAAAAB0AARuYW1lcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJpxAH4ACAAAAAAAAHQABnRhcmdldHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgA0dAACRVFzcQB+AJgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCicQB+AAgAAAAAAAB0AARuYW1lcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AFB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCicQB+AAhzcQB+AC5xAH4ANXEAfgA4dAAMU3Vic3RhdGlvbiAzcHEAfgCgc3EAfgAfdwwAAAAQP0AAAAAAAAB4c3EAfgAjAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAYTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCtcQB+AAhzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgAAAAAAAB0AAZlbnRpdHlwAXhzcQB+ACMAAAABdwQAAAABc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9uRWxlbfVEWvAL0OgoAgACTAAEZXhwcnEAfgAUTAAEbmFtZXEAfgAYeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgCvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AuHEAfgAIAAAAAAAAcQB+ALRwAXEAfgCueAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AvHEAfgAIAXEAfgCucHNxAH4AtgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AMRxAH4ACHEAfgDDAXNxAH4AugAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMRxAH4ACHVxAH4AvQAAAAFzcQB+AL8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDGcQB+AAgBcQB+AK5wcQB+AMJzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AIwAAAAF3BAAAAAFxAH4AyHhxAH4AzXBxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMNxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM5xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDQcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0XEAfgAIcQB+ACFxAH4AJHNxAH4AQAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANFxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDTcQB+AAhwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1HEAfgAIcQB+AElwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACAEAAAAAAXEAfgBOcQB+AFRzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDVcQB+AAgBAAAAAAFxAH4ATXEAfgBXcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIAAAAAAAAcQB+AExwcHNxAH4AQwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANRxAH4ACHEAfgBecHBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAABxAH4AYXBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgBAAAAAAFxAH4AYHEAfgBkcQB+AFpwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2XEAfgAIAAAAAAAAcQB+AExwcAAAc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A03EAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHBzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDecQB+AAhxAH4AanBwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A33EAfgAIAQAAAAABcQB+AG5xAH4AcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN9xAH4ACAEAAAAAAXEAfgBtcQB+AHNxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDfcQB+AAgAAAAAAABxAH4AbHBwc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3nEAfgAIcQB+AHZwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AONxAH4ACAAAAAAAAHEAfgB5cHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AONxAH4ACAEAAAAAAXEAfgB4cQB+AHxxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDjcQB+AAgAAAAAAABxAH4AbHBwAABzcQB+AEMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDdcQB+AAhxAH4AgHBwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A53EAfgAIAAAAAAAAcQB+AIRwc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A53EAfgAIAQAAAAABcQB+AINxAH4Ah3EAfgBacHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOdxAH4ACAAAAAAAAHEAfgCCcHAAAAAAc3EAfgBDAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0HEAfgAIcQB+AItwcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOtxAH4ACAAAAAAAAHEAfgCPcHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOtxAH4ACAEAAAAAAXEAfgCOcQB+AJJxAH4AWnBzcQB+AE8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDrcQB+AAgAAAAAAABxAH4AjXBwcHNxAH4AlQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHNxAH4AmAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APBxAH4ACAAAAAAAAHEAfgCccHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APBxAH4ACAAAAAAAAHEAfgCecHEAfgCgc3EAfgCYAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A73EAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIAAAAAAAAcQB+AKRwc3EAfgClAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcQB+AKdxAH4AoHNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AIwAAAAF3BAAAAAFzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDOcQB+AAhxAH4ArnNxAH4ArwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHNxAH4ATwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APpxAH4ACAAAAAAAAHEAfgC0cAF4c3EAfgAjAAAAAXcEAAAAAXEAfgDCeHEAfgAIc3EAfgCvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AwnEAfgAIc3EAfgBPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIAAAAAAAAcQB+ALRwAXEAfgCuc3EAfgApcQB+AL5w\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "50", + "maxDepth" : "11", + "leafNodeCount" : "26", + "maxBranchingFactor" : "3", + "joinNodeCount" : "5", + "filterNodeCount" : "1", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=5", + "structureSignatureRawSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "structureSignatureNormalizedSha256" : "b51005f99950384f18b4acffeb20079b62221cde874eca7272643726dcd948ce", + "joinAlgorithmSignatureSha256" : "8d7bb3a1872ff0d530d2320db68a80f70b9792cdca4b647a2e03898bca6b01ed", + "actualResultSizesSignatureSha256" : "f63c0ae9df411a8f7bf2e97abd7843872802c90157e87aeb483cd312b667c2a6", + "estimatesSignatureSha256" : "8d137d8f96ae30c5238e20f13a19a11e7604c3b7472b21d54b1cdaf49d86b708", + "joinAlgorithmMultisetSignatureSha256" : "1d723ee45825989627b25b9dd3d3b01332e9c2ee4a048455130077a375bf7ed2", + "actualResultSizesMultisetSignatureSha256" : "f77d718d1d695e4d6e5d8170c1ccfac2a62e1ec2b25082eb47002c128f4c9d17", + "estimatesMultisetSignatureSha256" : "4868c87682a8a4f12599e04ed28fb808b9df37819a2c4cd4333795a9e5cb8a28", + "statementPatternEstimatesMultisetSignatureSha256" : "79dbc5f8930415215fbadf8585ef8fc4d552e77a37388bb2f50c22f6dfd71795", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=3;filter=1;group=2;join=5;projection=3;scan=6;union=1;unknown=27", + "modeledOperatorCountByCategorySignatureSha256" : "bb3efa2801f0aea525a5aa32d627533fac784487eddf6c22013bb9281292af95", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "b201987da7c5d6e01f705604edadde975bb808230af044d3cc792bd8dbc6de37", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "b201987da7c5d6e01f705604edadde975bb808230af044d3cc792bd8dbc6de37", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=3;filter=1;group=2;join=5;projection=3;scan=6;union=1;unknown=27|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;union=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "4b538bf5508ab362a31faff82ac24bdff826cc25469c3d5a7d099b230b548b32", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "ccbedbeb561258548f98da9c82b199734ce99c129289b451472d3f0a36655c3f", + "operatorWorkTopContributors" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0;Compare (=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0;GroupElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "5", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "51", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ LeftJoin\n │ ║ ├── Union [left]\n │ ║ │ ╠══ Filter\n │ ║ │ ║ ├── Or\n │ ║ │ ║ │ ╠══ Compare (=)\n │ ║ │ ║ │ ║ Var (name=name)\n │ ║ │ ║ │ ║ Var (name=target)\n │ ║ │ ║ │ ╚══ Compare (=)\n │ ║ │ ║ │ Var (name=name)\n │ ║ │ ║ │ ValueConstant (value=\"Substation 3\")\n │ ║ │ ║ └── Join (JoinIterator)\n │ ║ │ ║ ╠══ Join (JoinIterator) [left]\n │ ║ │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left]\n │ ║ │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ ║ s: Var (name=entity)\n │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n │ ║ │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ s: Var (name=entity)\n │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ │ ║ o: Var (name=name)\n │ ║ │ ╚══ Filter\n │ ║ │ ├── Or\n │ ║ │ │ ╠══ Compare (=)\n │ ║ │ │ ║ Var (name=name)\n │ ║ │ │ ║ Var (name=target)\n │ ║ │ │ ╚══ Compare (=)\n │ ║ │ │ Var (name=name)\n │ ║ │ │ ValueConstant (value=\"Substation 3\")\n │ ║ │ └── Join (JoinIterator)\n │ ║ │ ╠══ Join (JoinIterator) [left]\n │ ║ │ ║ ├── Join (JoinIterator) [left]\n │ ║ │ ║ │ ╠══ BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left]\n │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [right]\n │ ║ │ ║ │ s: Var (name=entity)\n │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right]\n │ ║ │ ║ s: Var (name=entity)\n │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ │ ║ o: Var (name=substation)\n │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right]\n │ ║ │ s: Var (name=substation)\n │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n │ ║ │ o: Var (name=name)\n │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right]\n │ ║ s: Var (name=entity)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n │ ║ o: Var (name=substation2)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=entity)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Union\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 28107.0,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"Var (name=target)\"\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.316672415E8,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.66824711351707,\n \"resultSizeEstimate\" : 37374.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\"\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=name)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 37374.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\"\n }, {\n \"type\" : \"Var (name=substation2)\"\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n LeftJoin\n Union\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator)\n Join (JoinIterator)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Filter\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator)\n Join (JoinIterator)\n Join (JoinIterator)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern (resultSizeEstimate=37.4K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n LeftJoin\\n Union\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator)\\n Join (JoinIterator)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Filter\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator)\\n Join (JoinIterator)\\n Join (JoinIterator)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K)\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern (resultSizeEstimate=37.4K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"3da4971af014bdd18bf5c7baaa501fcba49e8a128be67f9ad61553d0d56f0001\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb250ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYWx1ZUV4cHI7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VHVwbGVPcGVyYXRvcj6Y3mRodHOMAgADTAANYWxnb3JpdGhtTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAB2xlZnRBcmdxAH4AAkwACHJpZ2h0QXJncQB+AAJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAhwc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5pb25nn7ojrEgEyAIAAHhxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABdxAH4ACHBzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnEAfgAUeHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcQB+AB5zcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAFAGAAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////8/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AH3EAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAAGdGFyZ2V0eHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACYAAAABdwQAAAABdAAGdGFyZ2V0eHBzcgAaamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3TZpDy+zYgG0gIAAVsAAWF0ABNbTGphdmEvbGFuZy9PYmplY3Q7eHB1cgAgW0xvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5WYWx1ZTvQ6xK0h0h51gIAAHhwAAAAAXNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AFkwACGxhbmd1YWdlcQB+ABZ4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABlNUUklOR3NyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkludGVybmVkSVJJAllGAIULdQcDAARJAAhoYXNoQ29kZUwACWxvY2FsTmFtZXEAfgAWTAAJbmFtZXNwYWNlcQB+ABZMAAtzdHJpbmdWYWx1ZXEAfgAWeHB3L+LuxxgAIWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIwAGc3RyaW5neHQADFN1YnN0YXRpb24gMXBzcQB+AChzcQB+ACYAAAABdwQAAAABcQB+ACx4cHNxAH4ALXVxAH4AMAAAAAFzcQB+ADJxAH4AOXEAfgA8dAAMU3Vic3RhdGlvbiAycHhzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AFkwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABQNtywAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QMJKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAZlbnRpdHl0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0X2FjOWYwM2QzX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFycVNUF1Oxsu8CAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAWTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AR3EAfgAIAQAAAAABcQB+AE9zcgAmb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVJUkmaRSpDk2ZGbgIAAkkADGxvY2FsTmFtZUlkeEwACWlyaVN0cmluZ3EAfgAWeHIAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RJUklsPw86B5HwlgIAAUkADmNhY2hlZEhhc2hDb2RleHAAAAAAAAAAHnQAKGh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL1N1YnN0YXRpb25zcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBHcQB+AAgBAAAAAAFxAH4ATnNxAH4AUwAAAAD/////dAAvaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGV+cgA2b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlAAAAAAAAAAASAAB4cQB+ADh0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEdxAH4ACAAAAAAAAHEAfgBNcHAAAHNxAH4ARAAAAAAAAAABQFgyykH3pdL///////////////////////////////8A////////////////////////////////////////////////////////////////QMJKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4ASHVxAH4ASwAAAANxAH4ATXQAE19jb25zdF85NjYxMjI4YV91cml0AARuYW1lcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBecQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBecQB+AAgBAAAAAAFxAH4AYXNxAH4AUwAAAAAAAAAedAAiaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvbmFtZXEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF5xAH4ACAAAAAAAAHEAfgBNcHAAAHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AGkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBqcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBtcQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBtcQB+AAgAAAAAAABxAH4AJXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgA4dAACRVFzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBqcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgAAAAAAABxAH4AYnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBReHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIc3EAfgAycQB+ADlxAH4APHQADFN1YnN0YXRpb24gM3BxAH4AcXNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHlxAH4ACHEAfgAec3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AenEAfgAIcQB+AB5zcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB7cQB+AAhxAH4AHnNxAH4AIAAAAAAAAAABQBgAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////P/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHxxAH4ACHNxAH4AI3cMAAAAED9AAAAAAAABcQB+ACV4cQB+ACdzcQB+AEQAAAAAAAAAAUGfZFSmAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0DCSgAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB8cQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE10ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzcyZjMzYTE0X3VyaXBwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAQAAAAABcQB+AINzcQB+AFMAAAAAAAAAHnQAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL0dlbmVyYXRvcnNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCCc3EAfgBTAAAAAP////9xAH4AWXEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgBNcHAAAHNxAH4ARAAAAAAAAAABQFgqxI+KjPH///////////////////////////////8A////////////////////////////////////////////////////////////////QOI/wAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHtxAH4ACHNxAH4ASHVxAH4ASwAAAANxAH4ATXQAE19jb25zdF8zNTU0MjY3Nl91cml0AApzdWJzdGF0aW9ucHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4AjnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgBAAAAAAFxAH4AjXNxAH4AUwAAAAAAAAAedAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCKcQB+AAgAAAAAAABxAH4ATXBwAABzcQB+AEQAAAAAAAAAAUBYMspB96XS////////////////////////////////AP///////////////////////////////////////////////////////////////0DCSgAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB6cQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AI50ABNfY29uc3RfOTY2MTIyOGFfdXJpcQB+AGJwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAAAAAAAAHEAfgBicHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAEAAAAAAXEAfgCXc3EAfgBTAAAAAP////90ACJodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9uYW1lcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlHEAfgAIAAAAAAAAcQB+AI5wcAAAc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AeXEAfgAIc3EAfgBrAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnXEAfgAIc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnnEAfgAIAAAAAAAAcQB+AGJwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnnEAfgAIAAAAAAAAcQB+ACVwcQB+AHFzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCdcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAgAAAAAAABxAH4AYnBzcQB+AHUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAhxAH4Ad3EAfgBxc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9A4j/AAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AF3EAfgAIc3EAfgBIdXEAfgBLAAAAA3EAfgBNdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4AqHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgBAAAAAAFxAH4Ap3NxAH4AUwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4ATXBwcHNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgAjdwwAAAAQP0AAAAAAAAB4c3EAfgAmAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAWTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCzcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC4cQB+AAgAAAAAAABxAH4ATXABeHNxAH4AJgAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABZ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAPcQB+AAhzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC8cQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC9cQB+AAgAAAAAAABxAH4ATXABcQB+ALR4AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgAWTAAPcHJvamVjdGlvbkFsaWFzcQB+ABZMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDBcQB+AAgBcQB+ALRwc3EAfgC7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ACQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4AyXEAfgAIcQB+AMgBc3EAfgC/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyXEAfgAIdXEAfgDCAAAAAXNxAH4AxAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMtxAH4ACAFxAH4AtHBxAH4Ax3NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAOeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgAmAAAAAXcEAAAAAXEAfgDNeHEAfgDScHEAfgAIc3EAfgAQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyHEAfgAIc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A03EAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1HEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACHBzcQB+ACAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDWcQB+AAhzcQB+AK53DAAAAAI/QAAAAAAAAXEAfgAseHEAfgAnc3EAfgAYAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANlxAH4ACHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDacQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE1xAH4ATnEAfgBPcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDbcQB+AAgBAAAAAAFxAH4AT3EAfgBVc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A23EAfgAIAQAAAAABcQB+AE5xAH4AWHEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANtxAH4ACAAAAAAAAHEAfgBNcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDacQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AE1xAH4AYXQABG5hbWVwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACAAAAAAAAHEAfgDkcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACAEAAAAAAXEAfgBhcQB+AGVxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDhcQB+AAgAAAAAAABxAH4ATXBwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOlxAH4ACHNxAH4ASHVxAH4ASwAAAAN0AAZlbnRpdHlxAH4AgnEAfgCDcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAgBAAAAAAFxAH4Ag3EAfgCFc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6nEAfgAIAQAAAAABcQB+AIJxAH4AiHEAfgBbcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOpxAH4ACAAAAAAAAHEAfgDtcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+AEh1cQB+AEsAAAADcQB+AO1xAH4AjXEAfgCOcHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDxcQB+AAgAAAAAAABxAH4AjnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDxcQB+AAgBAAAAAAFxAH4AjXEAfgCRcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8XEAfgAIAAAAAAAAcQB+AO1wcAAAc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBIdXEAfgBLAAAAA3QACnN1YnN0YXRpb25xAH4Al3QABG5hbWVwcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APdxAH4ACAAAAAAAAHEAfgD7cHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APdxAH4ACAEAAAAAAXEAfgCXcQB+AJpxAH4AW3BzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAgAAAAAAABxAH4A+nBwAAAAAHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANVxAH4ACHNxAH4ASHVxAH4ASwAAAAN0AAZlbnRpdHlxAH4Ap3EAfgCocHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4AqHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4Ap3EAfgCrcQB+AFtwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AQJwcHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AGsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEGcQB+AAhzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAgAAAAAAABxAH4AYnBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAgAAAAAAABxAH4AJXBxAH4AcXNxAH4AawAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQpxAH4ACAAAAAAAAHQABG5hbWVwc3EAfgB1AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCnEAfgAIcQB+AHdxAH4AcXNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AJgAAAAF3BAAAAAFzcQB+ALEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDTcQB+AAhxAH4AtHNxAH4AtQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARFxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARJxAH4ACAAAAAAAAHQABmVudGl0eXABeHNxAH4AJgAAAAF3BAAAAAFxAH4Ax3hxAH4ACHNxAH4AtQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMdxAH4ACHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARZxAH4ACAAAAAAAAHEAfgEUcAFxAH4AtHNxAH4ALXEAfgDDcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n UNION\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?substation .\n ?substation ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n OPTIONAL {\n ?entity ?substation2 .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "60", + "maxDepth" : "11", + "leafNodeCount" : "31", + "maxBranchingFactor" : "3", + "joinNodeCount" : "6", + "filterNodeCount" : "2", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=5", + "structureSignatureRawSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "structureSignatureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "joinAlgorithmSignatureSha256" : "8beb62c935cc91321d54c06aabd3d1a657662ae74b182879ebe463415138dd48", + "actualResultSizesSignatureSha256" : "ed9ccf0161c31186a4edc2a3fb0180f2b8687224c5499e6c7d0c3949194d8dc9", + "estimatesSignatureSha256" : "de94d234d648505b39e9f70f029c702e4096787a0ba1be0c79bf52a016398369", + "joinAlgorithmMultisetSignatureSha256" : "7aa55a4a82ea0dbb7670691ec3cc9e667429892a9767ecf8693ac79ab2cea297", + "actualResultSizesMultisetSignatureSha256" : "21737f9327c195a3c4566f76fc2a023bd727cbdaeb5486aa5e395ae79bb260f1", + "estimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "statementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "112204.4", + "modeledInputRowsSum" : "224410", + "modeledOutputRowsSum" : "112206", + "modeledJoinInputRowsSum" : "112206", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.4;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "modeledOperatorCountByCategorySignatureSha256" : "9abdb299b9d9e22d035c5cbd57e3cb3a1092d1fc7daecbc2f7403f401450034d", + "modeledInputRowsByCategory" : "distinct=0;extension=2;filter=0;group=0;join=112204;projection=0;scan=112204;union=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "87fc031b820af562cc9eac49fc86ca761f4bbca5e2cbb6de7afa0c8315163730", + "modeledOutputRowsByCategory" : "distinct=0;extension=2;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "8d8032700fda5a6aa204e485bf2af72a89aa6cefb898635a0a1011efbc6aab81", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "JoinIterator=0;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "f14303cf51645ddf2a677b9c40fc44a5eba760e5156242ea41b22fdc1680a8c2", + "modeledWorkVector" : "workUnits=112204.4|barrierCount=4|joinInputRowsSum=112206|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=0;UNKNOWN=0|categories=distinct=0;extension=0.4;filter=0;group=0;join=0;projection=0;scan=112204;union=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ec9620e746599deffcf48abf21b5ba0fcbda579a88e1759eda5942d54d5d933d", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=2|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=5|workUnits=0|inputRows=74830|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=37374|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=112204|inputRows=112204|outputRows=112204|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "220a2ab7eed74452c5a528263bf809e1e596ccbc0eee404a88e28ea2eb897c96", + "operatorWorkTopContributors" : "StatementPattern[UNKNOWN]:112204;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.4;Compare (=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "131695650.75543677233721", + "costEstimateMax" : "131667241.5", + "resultSizeEstimateSum" : "112206", + "resultSizeEstimateMax" : "37374", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "6", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "61", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=333.4M, nextCallCountActual=1, nextTimeNanosActual=166.0K, outputRowsActual=1, firstRowTimeNanosActual=333.6M, openCountActual=1, lastRowTimeNanosActual=333.7M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=166.7M, avgNextNanosActual=166.0K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=333.4M, nextCallCountActual=1, nextTimeNanosActual=132.0K, outputRowsActual=1, firstRowTimeNanosActual=333.6M, openCountActual=1, lastRowTimeNanosActual=333.7M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=166.7M, avgNextNanosActual=132.1K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=333.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, aggregateEvalCountActual=8, outputRowsActual=1, firstRowTimeNanosActual=333.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=333.7M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=166.7M, avgNextNanosActual=1.2K)\n │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=329.0M, nextCallCountActual=8, nextTimeNanosActual=10.0K, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, outputRowsActual=8, firstRowTimeNanosActual=2.7M, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=330.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=32.9M, avgNextNanosActual=1.3K, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4)\n │ ║ ├── Union (resultSizeActual=8, inputRowsActual=8, outputRowsActual=8, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left]\n │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=165.0M, nextCallCountActual=4, nextTimeNanosActual=2.2K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, outputRowsActual=4, firstRowTimeNanosActual=2.6M, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=166.0M, closeCountActual=1, exprEvalTimeNanosActual=44.2M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=33.0M, avgNextNanosActual=552, filterRejectRateActual=1.00)\n │ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=33.6M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=26.4M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ ║ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ║ Var (name=target) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.9M, hasNextFalseCountActual=0)\n │ ║ │ ║ │ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ ValueConstant (value=\"Substation 3\") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0)\n │ ║ │ ║ └── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K)\n │ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=18.7K, inputRowsActual=18.7K, outputRowsActual=18.7K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=18.7K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left]\n │ ║ │ ║ ║ ├── BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=37.5K, nextCallCountActual=2, nextTimeNanosActual=5.7K, outputRowsActual=2, firstRowTimeNanosActual=293.3K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=165.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=12.5K, avgNextNanosActual=2.9K) [left]\n │ ║ │ ║ ║ └── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=5.8M, nextCallCountActual=18.7K, nextTimeNanosActual=8.8M, outputRowsActual=18.7K, firstRowTimeNanosActual=53.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=65.5M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=311, avgNextNanosActual=473) [right]\n │ ║ │ ║ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=28.6M, nextCallCountActual=18.7K, nextTimeNanosActual=5.0M, outputRowsActual=18.7K, firstRowTimeNanosActual=1.3K, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=3.5K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=766, avgNextNanosActual=268) [right]\n │ ║ │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, inputRowsActual=18.7K, outputRowsActual=4, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0)\n │ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=38.8M, hasNextFalseCountActual=0)\n │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=34.7M, hasNextFalseCountActual=0)\n │ ║ │ │ ║ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ │ ║ Var (name=target) (hasNextFalseCountActual=0)\n │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0)\n │ ║ │ │ Var (name=name) (hasNextFalseCountActual=0)\n │ ║ │ │ ValueConstant (value=\"Substation 3\") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=3.0K, hasNextFalseCountActual=0)\n │ ║ │ └── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K)\n │ ║ │ ╠══ Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=18.7K, joinRightBindingsConsumedActual=18.7K, inputRowsActual=37.4K, outputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=18.7K) [left]\n │ ║ │ ║ ├── Join (JoinIterator) (resultSizeActual=18.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=18.7K, inputRowsActual=18.7K, outputRowsActual=18.7K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=18.7K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left]\n │ ║ │ ║ │ ╠══ BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=19.5K, nextCallCountActual=2, nextTimeNanosActual=10.0K, outputRowsActual=2, firstRowTimeNanosActual=165.8M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=329.6M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=6.5K, avgNextNanosActual=5.0K) [left]\n │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=6.3M, nextCallCountActual=18.7K, nextTimeNanosActual=3.8M, outputRowsActual=18.7K, firstRowTimeNanosActual=26.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=53.6M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=340, avgNextNanosActual=208) [right]\n │ ║ │ ║ │ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=18.1M, nextCallCountActual=18.7K, nextTimeNanosActual=2.3M, outputRowsActual=18.7K, firstRowTimeNanosActual=792, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=3.3K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=484, avgNextNanosActual=128) [right]\n │ ║ │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=substation) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K, hasNextCallCountActual=37.4K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=19.7M, nextCallCountActual=18.7K, nextTimeNanosActual=3.7M, outputRowsActual=18.7K, firstRowTimeNanosActual=541, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=1.7K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=2.00, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=528, avgNextNanosActual=201) [right]\n │ ║ │ s: Var (name=substation) (hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=name) (hasNextFalseCountActual=0)\n │ ║ └── StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=40.8K, nextCallCountActual=4, nextTimeNanosActual=915, outputRowsActual=4, firstRowTimeNanosActual=875, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=18.5K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=9.3K, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=3.4K, avgNextNanosActual=229) [right]\n │ ║ s: Var (name=entity) (hasNextFalseCountActual=0)\n │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0)\n │ ║ o: Var (name=substation2) (hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=entity) (hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=entity) (hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 333437209,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 166042,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 333620209,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 333767834,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 333431916,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 132084,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 333625208,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 333771875,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 333407000,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 1208,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 8,\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 333496459,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 333761584,\n \"maxGroupSizeActual\" : 8,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 10\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 8.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 329093792,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 10083,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 4,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 8,\n \"firstRowTimeNanosActual\" : 2783417,\n \"leftRowsWithMatchActual\" : 4,\n \"openCountActual\" : 1,\n \"emptyRightProbeCountActual\" : 4,\n \"lastRowTimeNanosActual\" : 330830709,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Union\",\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 5,\n \"hasNextTrueCountActual\" : 4,\n \"hasNextTimeNanosActual\" : 165053125,\n \"nextCallCountActual\" : 4,\n \"nextTimeNanosActual\" : 2208,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18728,\n \"sourceRowsMatchedActual\" : 4,\n \"sourceRowsFilteredActual\" : 18724,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 4,\n \"firstRowTimeNanosActual\" : 2689250,\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 4,\n \"lastRowTimeNanosActual\" : 166044666,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 4.4174404E7\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 4,\n \"shortCircuitCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3.3628639E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18726,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2.642777E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=target)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18726,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2937145.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2048959.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 37500,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 5750,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 2,\n \"firstRowTimeNanosActual\" : 293375,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 165802875,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 28107.0,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 18730,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 5819174,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 8864505,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 53625,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 65589542,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 28676075,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 5012345,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 1375,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 3542,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 4,\n \"shortCircuitCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3.8815005E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18728,\n \"exprFalseCountActual\" : 18726,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3.4690901E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=target)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Compare (=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18726,\n \"exprFalseCountActual\" : 18724,\n \"exprTrueCountActual\" : 2\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1564514.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"Substation 3\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3000.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]])\",\n \"costEstimate\" : 6.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 19541,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 10000,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 2,\n \"firstRowTimeNanosActual\" : 165801208,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 329624541,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.316672415E8,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 18730,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 6358929,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 3890053,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 26625,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 53622416,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.66824711351707,\n \"resultSizeEstimate\" : 37374.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 18110094,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 2397036,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 792,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 3375,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=substation)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 96.79359482941007,\n \"resultSizeEstimate\" : 9364.0,\n \"resultSizeActual\" : 18728,\n \"hasNextCallCountActual\" : 37456,\n \"hasNextTrueCountActual\" : 18728,\n \"hasNextTimeNanosActual\" : 19759003,\n \"nextCallCountActual\" : 18728,\n \"nextTimeNanosActual\" : 3765877,\n \"joinRightIteratorsCreatedActual\" : 18728,\n \"joinLeftBindingsConsumedActual\" : 18728,\n \"joinRightBindingsConsumedActual\" : 18728,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 18728,\n \"firstRowTimeNanosActual\" : 541,\n \"indexLookupCountActual\" : 18728,\n \"openCountActual\" : 18728,\n \"lastRowTimeNanosActual\" : 1708,\n \"closeCountActual\" : 18728,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=substation)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=name)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 37374.0,\n \"resultSizeActual\" : 4,\n \"hasNextCallCountActual\" : 12,\n \"hasNextTrueCountActual\" : 4,\n \"hasNextTimeNanosActual\" : 40874,\n \"nextCallCountActual\" : 4,\n \"nextTimeNanosActual\" : 915,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 4,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 4,\n \"firstRowTimeNanosActual\" : 875,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 18583,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=substation2)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=entity)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n LeftJoin (LeftJoinIterator) (resultSizeActual=8.00)\n Union (resultSizeActual=8.00)\n Filter (resultSizeActual=4.00)\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n Filter (resultSizeActual=4.00)\n Or\n Compare (=)\n Var (name=name)\n Var (name=target)\n Compare (=)\n Var (name=name)\n ValueConstant (value=\"Substation 3\")\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n Join (JoinIterator) (resultSizeActual=18.7K)\n BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation)\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\n Var (name=substation)\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\n Var (name=name)\n StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4.00)\n Var (name=entity)\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\n Var (name=substation2)\n GroupElem (count)\n Count (Distinct)\n Var (name=entity)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=entity)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=8.00)\\n Union (resultSizeActual=8.00)\\n Filter (resultSizeActual=4.00)\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n Filter (resultSizeActual=4.00)\\n Or\\n Compare (=)\\n Var (name=name)\\n Var (name=target)\\n Compare (=)\\n Var (name=name)\\n ValueConstant (value=\\\"Substation 3\\\")\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n Join (JoinIterator) (resultSizeActual=18.7K)\\n BindingSetAssignment ([[target=\\\"Substation 1\\\"], [target=\\\"Substation 2\\\"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)\\n StatementPattern (costEstimate=97, resultSizeEstimate=37.4K, resultSizeActual=18.7K)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation)\\n StatementPattern (costEstimate=97, resultSizeEstimate=9.4K, resultSizeActual=18.7K)\\n Var (name=substation)\\n Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)\\n Var (name=name)\\n StatementPattern (resultSizeEstimate=37.4K, resultSizeActual=4.00)\\n Var (name=entity)\\n Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)\\n Var (name=substation2)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=entity)\\n\",\n \"fingerprintSha256\" : \"c7f27b5b21ef43dc34305fb666d4af1e42c0b6bbdadb89f78a048680c555fb14\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAT391TAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAKiUQAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAABPi08t0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAAE+TPxHhwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAE9/ZGQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAACiJoAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAE+Kj8XEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAE+TkmnhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAE9/EbAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAACA/QAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAE+K3eHEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAE+T0Y3hxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAE99jGAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAABLgAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQCAAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAhxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAE+DAi3QAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAT5MwwdAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAKAAAAABOdkqAAAAAAAAAACQAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAAAACdjAAAAAAAAAAi/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAqeLl0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHNxAH4ADAAAAAAAAAAEcQB+ABJxAH4ADnQAGmVtcHR5UmlnaHRQcm9iZUNvdW50QWN0dWFscQB+ADhxAH4AE3NxAH4ADAAAAAATuBN1cQB+ABFxAH4ADnQAGW1heFJpZ2h0Um93c1BlckxlZnRBY3R1YWxxAH4ADnhxAH4AJHEAfgAIdAAQTGVmdEpvaW5JdGVyYXRvcnNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuaW9uZ5+6I6xIBMgCAAB4cQB+ADIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAACL/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA0cQB+AAhwc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRmlsdGVyMHu9pSkqq/UCAAFMAAljb25kaXRpb25xAH4AMXhxAH4AAQAAAAAAAAABv/AAAAAAAAAAAAAAAAAABQAAAAAJ1oLFAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAIoAAAAAAAAAAEv/AAAAAAAAAAAAAAAAAASSQAAAAAAAAABAAAAAAAAEko//////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAF0ABdleHByRXZhbFRpbWVOYW5vc0FjdHVhbHNxAH4AJ0GFEGIgAAAAeHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAACXEAfgALcQB+ADhxAH4AD3NxAH4ADAAAAAAAKQjidAATZXhwckV2YWxDb3VudEFjdHVhbHNxAH4ADAAAAAAAAEkodAAUZXhwckZhbHNlQ291bnRBY3R1YWxzcQB+AAwAAAAAAABJJHQAGXByZWRpY2F0ZUVycm9yQ291bnRBY3R1YWxzcQB+AAwAAAAAAAAAAHEAfgAScQB+AA50ABNleHByVHJ1ZUNvdW50QWN0dWFscQB+ADhxAH4AE3NxAH4ADAAAAAAJ5aP6cQB+ABFxAH4ADnhxAH4APnEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAEkoAAAAAAAASSj/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQHEAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAgAAAAAAAEkoAAAAAAAAAAL/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AT3EAfgAIcQB+AFBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ACNMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAFAGAAAAAAAAAAAAAAAAAADAAAAAAAAknwAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABZ2AAAAAAAAAAI/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAAAAAnEAfgAPc3EAfgAMAAAAAAAEef9xAH4AEXEAfgAOcQB+ABJxAH4ADnQAFmJpbmRpbmdzUHJvdmlkZWRBY3R1YWxxAH4AVnEAfgATc3EAfgAMAAAAAAnh83t4cQB+AFFxAH4ACHNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAAAXQABnRhcmdldHhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAncEAAAAAnNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4AHUwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ACNMAAZ2YWx1ZXNxAH4AHXhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgBdAAAAAXcEAAAAAXQABnRhcmdldHhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ADNMAAhsYW5ndWFnZXEAfgAzeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZTVFJJTkdzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AM0wACW5hbWVzcGFjZXEAfgAzTAALc3RyaW5nVmFsdWVxAH4AM3hwdy/i7scYACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMABnN0cmluZ3h0AAxTdWJzdGF0aW9uIDFwc3EAfgBfc3EAfgBdAAAAAXcEAAAAAXEAfgBjeHBzcQB+AGR1cQB+AGcAAAABc3EAfgBpcQB+AHBxAH4Ac3QADFN1YnN0YXRpb24gMnB4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgAjTAAKY29udGV4dFZhcnEAfgAXTAAJaW5kZXhOYW1lcQB+ADNMAAlvYmplY3RWYXJxAH4AF0wADHByZWRpY2F0ZVZhcnEAfgAXTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+ABdMAAd2YXJMaXN0cQB+AB14cQB+AAMAAAAAAAAAAUDbcsAAAAAAAAAAAAAASSoAAAAAAFjLJgAAAAAAAEkoAAAAAAAAAAACAAAAAAAASSgAAAAAAAAAAgAAAAAAAEkoAAAAAACHQvkAAAAAAABJKEDCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAADReXQAFmluZGV4TG9va3VwQ291bnRBY3R1YWxxAH4AVnEAfgARcQB+AFZxAH4AEnEAfgBWcQB+ABNzcQB+AAwAAAAAA+jRJnhxAH4AUXEAfgAIc3IAP29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTbWFsbFN0cmluZ1NldHm8SKeF/XlAAgABWwAGdmFsdWVzdAATW0xqYXZhL2xhbmcvU3RyaW5nO3hwdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAA3QABmVudGl0eXQAE19jb25zdF9mNWU1NTg1YV91cml0ABNfY29uc3RfYWM5ZjAzZDNfdXJpcHBzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYXJxU1QXU7Gy7wIABVoACWFub255bW91c0kADmNhY2hlZEhhc2hDb2RlWgAIY29uc3RhbnRMAARuYW1lcQB+ADNMAAV2YWx1ZXQAH0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9WYWx1ZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB+cQB+AAgBAAAAAAFxAH4Ai3NyACZvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUlSSZpFKkOTZkZuAgACSQAMbG9jYWxOYW1lSWR4TAAJaXJpU3RyaW5ncQB+ADN4cgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdElSSWw/DzoHkfCWAgABSQAOY2FjaGVkSGFzaENvZGV4cAAAAAD/////dAAoaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvU3Vic3RhdGlvbnNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH5xAH4ACAEAAAAAAXEAfgCKc3EAfgCPAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhxAH4Ab3QAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfnEAfgAIAAAAAAAAcQB+AIlwcAAAc3EAfgB7AAAAAAAAAAFAWDLKQfel0gAAAAAAAJJQAAAAAAG1j+sAAAAAAABJKAAAAAAAAABJKAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAATHt5AAAAAAAASShAwkoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAABJKHEAfgAPc3EAfgAMAAAAAAAABV9xAH4AgnNxAH4ADAAAAAAAAEkocQB+ABFzcQB+AAwAAAAAAABJKHEAfgASc3EAfgAMAAAAAAAASShxAH4AE3NxAH4ADAAAAAAAAA3WeHEAfgBPcQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIl0ABNfY29uc3RfOTY2MTIyOGFfdXJpdAAEbmFtZXBwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AKVwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAQAAAAABcQB+AKRzcQB+AI8AAAAA/////3QAImh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL25hbWVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAgAAAAAAABxAH4AiXBwAABzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAxTAAIcmlnaHRBcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AQnNxAH4AJ0GACQ74AAAAeHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABHQAF3Nob3J0Q2lyY3VpdENvdW50QWN0dWFscQB+AFZxAH4ARnNxAH4ADAAAAAAAAEkocQB+AEhzcQB+AAwAAAAAAABJJHEAfgBMcQB+ADh4cQB+AEBxAH4ACHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHEAfgCsAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBCc3EAfgAnQXk0F6AAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+AEZzcQB+AAwAAAAAAABJKHEAfgBIc3EAfgAMAAAAAAAASSZxAH4ATHEAfgBWeHEAfgCtcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4ApXBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4AXHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBvdAACRVFzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBRmicgAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4ARnNxAH4ADAAAAAAAAEkmcQB+AEhzcQB+AAwAAAAAAABJJHEAfgBMcQB+AFZ4cQB+AK1xAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgClcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AI14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBP0O/AAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4ARnEAfgAOcQB+AExxAH4ADnhxAH4AwXEAfgAIc3EAfgBpcQB+AHBxAH4Ac3QADFN1YnN0YXRpb24gM3BxAH4Av3NxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A/////////////////////////////////////////////////////wAAAAAAAAAEv/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AD5xAH4ACHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAABJKAAAAAAAAEko/////////////////////wAAAAAAAEkov/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM9xAH4ACHEAfgBQc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAEkoAAAAAAAASSj/////////////////////AAAAAAAASSi/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0HEAfgAIcQB+AFBzcQB+AE4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAACAAAAAAAASSgAAAAAAAAAAv////////////////////8AAAAAAABJKL/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDRcQB+AAhxAH4AUHNxAH4AUgAAAAAAAAABQBgAAAAAAAAAAAAAAAAAAwAAAAAAAExVAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAnEAAAAAAAAAACP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AFZxAH4AD3NxAH4ADAAAAAAJ4ez4cQB+ABFxAH4ADnEAfgAScQB+AA5xAH4AWHEAfgBWcQB+ABNzcQB+AAwAAAAAE6Wr3XhxAH4A0nEAfgAIc3EAfgBadwwAAAAQP0AAAAAAAAFxAH4AXHhxAH4AXnNxAH4AewAAAAAAAAABQZ9kVKYAAAAAAAAAAABJKgAAAAAAYQeRAAAAAAAASSgAAAAAAAAAAAIAAAAAAABJKAAAAAAAAAACAAAAAAAASSgAAAAAADtbhQAAAAAAAEkoQMJKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAASShxAH4AD3NxAH4ADAAAAAAAAGgBcQB+AIJxAH4AVnEAfgARcQB+AFZxAH4AEnEAfgBWcQB+ABNzcQB+AAwAAAAAAzI2kHhxAH4A0nEAfgAIc3EAfgCEdXEAfgCHAAAAA3EAfgCJdAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF83MmYzM2ExNF91cmlwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANhxAH4ACAEAAAAAAXEAfgDgc3EAfgCPAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvZ3JpZC9HZW5lcmF0b3JzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDYcQB+AAgBAAAAAAFxAH4A33NxAH4AjwAAAAD/////cQB+AJVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDYcQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AHsAAAAAAAAAAUBYKsSPiozxAAAAAAAAklAAAAAAARRWjgAAAAAAAEkoAAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAAEkoAAAAAAAkk2wAAAAAAABJKEDiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAADGHEAfgCCc3EAfgAMAAAAAAAASShxAH4AEXNxAH4ADAAAAAAAAEkocQB+ABJzcQB+AAwAAAAAAABJKHEAfgATc3EAfgAMAAAAAAAADS94cQB+ANFxAH4ACHNxAH4AhHVxAH4AhwAAAANxAH4AiXQAE19jb25zdF8zNTU0MjY3Nl91cml0AApzdWJzdGF0aW9ucHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4A8nBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgBAAAAAAFxAH4A8XNxAH4AjwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AHsAAAAAAAAAAUBYMspB96XSAAAAAAAAklAAAAAAAS1/mwAAAAAAAEkoAAAAAAAAAEkoAAAAAAAASSgAAAAAAABJKAAAAAAAAEkoAAAAAAA5dnUAAAAAAABJKEDCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAEkocQB+AA9zcQB+AAwAAAAAAAACHXEAfgCCc3EAfgAMAAAAAAAASShxAH4AEXNxAH4ADAAAAAAAAEkocQB+ABJzcQB+AAwAAAAAAABJKHEAfgATc3EAfgAMAAAAAAAABqx4cQB+ANBxAH4ACHNxAH4AhHVxAH4AhwAAAANxAH4A8nQAE19jb25zdF85NjYxMjI4YV91cmlxAH4ApXBwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIAAAAAAAAcQB+AKVwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIAQAAAAABcQB+AQJzcQB+AI8AAAAA/////3QAImh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9ncmlkL25hbWVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD4cQB+AAgAAAAAAABxAH4A8nBwAABzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBgoIo6AAAAHhzcQB+AAk/QAAAAAAABncIAAAACAAAAARxAH4AsXEAfgBWcQB+AEZzcQB+AAwAAAAAAABJKHEAfgBIc3EAfgAMAAAAAAAASSRxAH4ATHEAfgA4eHEAfgDPcQB+AAhzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdBgIq6qAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4ARnNxAH4ADAAAAAAAAEkocQB+AEhzcQB+AAwAAAAAAABJJnEAfgBMcQB+AFZ4cQB+AQhxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ5xAH4ACAAAAAAAAHEAfgClcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ5xAH4ACAAAAAAAAHEAfgBccHEAfgC/c3EAfgC0AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBCc3EAfgAnQTffYgAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+AEZzcQB+AAwAAAAAAABJJnEAfgBIc3EAfgAMAAAAAAAASSRxAH4ATHEAfgBWeHEAfgEIcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEWcQB+AAgAAAAAAABxAH4ApXBzcQB+AMgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEJzcQB+ACdAp3AAAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4ARnEAfgAOcQB+AExxAH4ADnhxAH4BFnEAfgAIcQB+AM1xAH4Av3NxAH4AewAAAAAAAAABv/AAAAAAAAAAAAAAAAAADAAAAAAAAJ+qAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAAAAADkwAAAAAAAAAEQOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ADhxAH4AD3NxAH4ADAAAAAAAAANrcQB+AIJxAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAABIl3hxAH4ANHEAfgAIc3EAfgCEdXEAfgCHAAAAA3EAfgCJdAATX2NvbnN0XzM1NTQyNjc2X3VyaXQAC3N1YnN0YXRpb24ycHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgAAAAAAABxAH4BKHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgBAAAAAAFxAH4BJ3NxAH4AjwAAAAD/////dAAjaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL2dyaWQvZmVlZHNxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEhcQB+AAgAAAAAAABxAH4AiXBwcHNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgBadwwAAAAQP0AAAAAAAAB4c3EAfgBdAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAzTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAkcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ADF4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEzcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE4cQB+AAgAAAAAAABxAH4AiXABeHNxAH4AXQAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+ADN4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAecQB+AAhzcQB+ATUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE8cQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE9cQB+AAgAAAAAAABxAH4AiXABcQB+ATR4AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AB14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAYcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgAzTAAPcHJvamVjdGlvbkFsaWFzcQB+ADNMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFBcQB+AAgBcQB+ATRwc3EAfgE7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4BSXEAfgAIcQB+AUgBc3EAfgE/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BSXEAfgAIdXEAfgFCAAAAAXNxAH4BRAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUtxAH4ACAFxAH4BNHBxAH4BR3NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAdeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgBdAAAAAXcEAAAAAXEAfgFNeHEAfgFScHEAfgAIc3EAfgAiAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BSHEAfgAIc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BU3EAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BVHEAfgAIcHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVVxAH4ACHBzcQB+AFIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFWcQB+AAhzcQB+AS53DAAAAAI/QAAAAAAAAXEAfgBjeHEAfgBec3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wH///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BVnEAfgAIcHNxAH4ATgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8B////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVlxAH4ACHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFacQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIlxAH4AinEAfgCLcHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFbcQB+AAgBAAAAAAFxAH4Ai3EAfgCRc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAQAAAAABcQB+AIpxAH4AlHEAfgCXcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVtxAH4ACAAAAAAAAHEAfgCJcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFacQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AIlxAH4ApHQABG5hbWVwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWFxAH4ACAAAAAAAAHEAfgFkcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWFxAH4ACAEAAAAAAXEAfgCkcQB+AKhxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFhcQB+AAgAAAAAAABxAH4AiXBwAABzcQB+AE4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////Af///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAhwc3EAfgBOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaHEAfgAIcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AhHVxAH4AhwAAAAN0AAZlbnRpdHlxAH4A33EAfgDgcHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAgBAAAAAAFxAH4A4HEAfgDic3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BanEAfgAIAQAAAAABcQB+AN9xAH4A5XEAfgCXcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACAAAAAAAAHEAfgFtcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFpcQB+AAhzcQB+AIR1cQB+AIcAAAADcQB+AW1xAH4A8XEAfgDycHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFxcQB+AAgAAAAAAABxAH4A8nBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFxcQB+AAgBAAAAAAFxAH4A8XEAfgD1cQB+AJdwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcXEAfgAIAAAAAAAAcQB+AW1wcAAAc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaHEAfgAIc3EAfgCEdXEAfgCHAAAAA3QACnN1YnN0YXRpb25xAH4BAnQABG5hbWVwcHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXdxAH4ACAAAAAAAAHEAfgF7cHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXdxAH4ACAEAAAAAAXEAfgECcQB+AQVxAH4Al3BzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF3cQB+AAgAAAAAAABxAH4BenBwAAAAAHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVVxAH4ACHNxAH4AhHVxAH4AhwAAAAN0AAZlbnRpdHlxAH4BJ3EAfgEocHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF/cQB+AAgAAAAAAABxAH4BKHBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF/cQB+AAgBAAAAAAFxAH4BJ3EAfgErcQB+AJdwc3EAfgCMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bf3EAfgAIAAAAAAAAcQB+AYJwcHBzcQB+AKsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFUcQB+AAhzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGGcQB+AAhzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGHcQB+AAgAAAAAAABxAH4ApXBzcQB+AIwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGHcQB+AAgAAAAAAABxAH4AXHBxAH4Av3NxAH4AtAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYZxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHQABG5hbWVwc3EAfgDIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BinEAfgAIcQB+AM1xAH4Av3NyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AXQAAAAF3BAAAAAFzcQB+ATEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFTcQB+AAhxAH4BNHNxAH4BNQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZFxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZJxAH4ACAAAAAAAAHQABmVudGl0eXABeHNxAH4AXQAAAAF3BAAAAAFxAH4BR3hxAH4ACHNxAH4BNQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUdxAH4ACHNxAH4AjAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZZxAH4ACAAAAAAAAHEAfgGUcAFxAH4BNHNxAH4AZHEAfgFDcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n UNION\n {\n VALUES ?target { \"Substation 1\" \"Substation 2\" }\n ?entity a .\n ?entity ?substation .\n ?substation ?name .\n FILTER ((?name = ?target) || (?name = \"Substation 3\"))\n }\n OPTIONAL {\n ?entity ?substation2 .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "60", + "maxDepth" : "11", + "leafNodeCount" : "31", + "maxBranchingFactor" : "3", + "joinNodeCount" : "6", + "filterNodeCount" : "2", + "statementPatternCount" : "6", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=5", + "structureSignatureRawSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "structureSignatureNormalizedSha256" : "95a9e4c67ba1b60a32e8e714aff95dd2fe4dc5a2a1337f3912d30ef6657102c3", + "joinAlgorithmSignatureSha256" : "d7805f2b211a4d90729d28a1350b217a020e021f305b6d4ed22a7e594899dec2", + "actualResultSizesSignatureSha256" : "f068ca3103c7ce4422fa0ff914c9545d8ed1cdc3cc1ab9ddb3f6badca098aa95", + "estimatesSignatureSha256" : "de94d234d648505b39e9f70f029c702e4096787a0ba1be0c79bf52a016398369", + "joinAlgorithmMultisetSignatureSha256" : "b7d553917c4cbdee9a9d9758de458e01ffdff11e8748ba292d718d5c510d0677", + "actualResultSizesMultisetSignatureSha256" : "237072035b7f6dabcddad0f96909d68041481b6e9783833cda1003eb145e329d", + "estimatesMultisetSignatureSha256" : "c7718a03acc52d42213b5ff795e9e0d6d620924047ea64fed4b19463b4747e5c", + "statementPatternEstimatesMultisetSignatureSha256" : "f894569ac9245813a08eaca60d14c9c7ef35f38d90b93d910c846cee8ad459cb", + "statementPatternEstimateTokenCount" : "6", + "modeledWorkUnits" : "348376.25", + "modeledInputRowsSum" : "224762", + "modeledOutputRowsSum" : "187315", + "modeledJoinInputRowsSum" : "149840", + "modeledJoinOutputRowsSum" : "93648", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34", + "modeledOperatorCountByCategorySignatureSha256" : "9abdb299b9d9e22d035c5cbd57e3cb3a1092d1fc7daecbc2f7403f401450034d", + "modeledInputRowsByCategory" : "distinct=0;extension=5;filter=37456;group=8;join=93644;projection=1;scan=93644;union=4;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "d3fe53ad8fe2db059f57f43f5da61e5d954ed47f636ff048cb47058b8df5aeab", + "modeledOutputRowsByCategory" : "distinct=0;extension=5;filter=8;group=1;join=93648;projection=1;scan=93644;union=8;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "353fe25ede0036fc8c3bcad9e949fbeedd0c2e3650775d56331569361c551dc7", + "modeledFilterInputRowsSum" : "37456", + "modeledFilterOutputRowsSum" : "8", + "modeledFilterPassRatio" : "0.000214", + "modeledFilterRejectRatio" : "0.999786", + "modeledJoinWorkByAlgorithm" : "JoinIterator=243468;LeftJoinIterator=20", + "modeledJoinWorkByAlgorithmSignatureSha256" : "c8bb86d42e851628990f4abfc5af3df6891f6a2acc98fdefd5a84c20619bf61b", + "modeledWorkVector" : "workUnits=348376.25|barrierCount=4|joinInputRowsSum=149840|joinOutputRowsSum=93648|operatorCountByCategory=distinct=2;extension=4;filter=2;group=2;join=6;projection=3;scan=6;union=1;unknown=34|joinWorkByAlgorithm=JoinIterator=243468;LeftJoinIterator=20|categories=distinct=0;extension=1;filter=11236.8;group=5.6;join=243488;projection=0.05;scan=93644;union=0.8;unknown=0", + "modeledWorkVectorSignatureSha256" : "b60e6317b5f2a201891aa338a5910d635bf3115cb4911c75252eee6aebffaf89", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]|nodes=2|workUnits=0.8|inputRows=4|outputRows=4|selfTimeActual=0|totalTimeActual=0;Compare (=)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=11236.8|inputRows=37456|outputRows=8|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=5.6|inputRows=8|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=5|workUnits=243468|inputRows=93640|outputRows=93640|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=20|inputRows=4|outputRows=8|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=6|workUnits=93644|inputRows=93644|outputRows=93644|selfTimeActual=0|totalTimeActual=0;Union[UNKNOWN]|nodes=1|workUnits=0.8|inputRows=4|outputRows=8|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"Substation 3\")[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=entity)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=name)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=substation2)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=target)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "804fe74ed7c7dee7ccad073e4c197ef257fa662fb48629bd48cdf8a517b0efdb", + "operatorWorkTopContributors" : "Join[JoinIterator]:243468;StatementPattern[UNKNOWN]:93644;Filter[UNKNOWN]:11236.8;LeftJoin[LeftJoinIterator]:20;Group ()[UNKNOWN]:5.6;BindingSetAssignment ([[target=\"Substation 1\"], [target=\"Substation 2\"]])[UNKNOWN]:0.8;Union[UNKNOWN]:0.8;Extension[UNKNOWN]:0.2", + "estimateActualComparableNodeCount" : "8", + "estimateActualAbsErrorSum" : "93474", + "estimateActualRelativeErrorMean" : "1168.311952691158", + "estimateActualQErrorP50" : "2", + "estimateActualQErrorP95" : "9343.5", + "estimateActualQErrorMax" : "9343.5", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "131695650.75543677233721", + "costEstimateMax" : "131667241.5", + "resultSizeEstimateSum" : "112206", + "resultSizeEstimateMax" : "37374", + "resultSizeActualSum" : "187315", + "resultSizeActualMax" : "18728", + "modeledHasNextCallCountSum" : "149869", + "modeledHasNextTrueCountSum" : "93665", + "modeledHasNextTimeNanosSum" : "1906682523", + "modeledNextCallCountSum" : "93664", + "modeledNextTimeNanosSum" : "24430731", + "modeledJoinRightIteratorCreateCountSum" : "112392", + "modeledJoinLeftBindingSetConsumedCountSum" : "56220", + "modeledJoinRightBindingSetConsumedCountSum" : "187288", + "modeledJoinTelemetryNodeCount" : "6", + "modeledJoinRightBindingsPerLeftRatio" : "3.331341", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.666382", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "18732", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "9370", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "31214.666667", + "modeledSourceRowsScannedSum" : "18728", + "modeledSourceRowsMatchedSum" : "4", + "modeledSourceRowsFilteredSum" : "18724", + "modeledSourceFilterOutRatio" : "0.999786", + "modeledIteratorTelemetryNodeCount" : "61", + "modeledHasNextTimeMillisSum" : "1906.682523", + "modeledNextTimeMillisSum" : "24.430731", + "modeledHasNextPerNextRatio" : "1.60007", + "modeledHasNextTruePerNextRatio" : "1.000011" + } + } + } +} \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-medical_records-q0-ce7bba07b1eb935287481f2eec1a65d579f16066e91f92e194ae7463d96834d1-20260319-230410732-c1655408.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-medical_records-q0-ce7bba07b1eb935287481f2eec1a65d579f16066e91f92e194ae7463d96834d1-20260319-230410732-c1655408.json new file mode 100644 index 00000000000..4d9ae49eec4 --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-medical_records-q0-ce7bba07b1eb935287481f2eec1a65d579f16066e91f92e194ae7463d96834d1-20260319-230410732-c1655408.json @@ -0,0 +1,340 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-03-19T23:04:10.732403Z", + "queryId" : "lmdb-medical_records-q0", + "queryString" : "PREFIX med: \nPREFIX xsd: \nSELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE {\n ?patient a med:Patient .\n OPTIONAL {\n ?patient med:hasEncounter ?enc .\n ?enc med:recordedOn ?date .\n BIND(?date AS ?optDate)\n }\n FILTER(?optDate >= \"2024-06-01\"^^xsd:date)\n OPTIONAL { ?patient med:hasMedication ?med . }\n}", + "unoptimizedFingerprint" : "ce7bba07b1eb935287481f2eec1a65d579f16066e91f92e194ae7463d96834d1", + "metadata" : { + "store" : "lmdb", + "theme" : "MEDICAL_RECORDS", + "querySource" : "theme-index", + "queryIndex" : "0", + "queryName" : "Medical: recent encounters after June", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "aaccd9b7903b858d85f84c6271d7e764a00858e2e5cbe54cefbe1ba60e7f078f", + "queryString.normalizedWhitespaceSha256" : "416a8d3e21ff9d18c6b1c68af5424888611b1fdc998a8a1ac105963f709159ef", + "optimizerInput.unoptimizedStructureRawSha256" : "55a222e084c2badb833bb0f45d827a2af494487b8df7cd15993539f374cd00ab", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "55a222e084c2badb833bb0f45d827a2af494487b8df7cd15993539f374cd00ab", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "e458f6b4fe09f7b7adf37d6507cd7f1c674f4ce9", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "25.0.1" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "MEDICAL_RECORDS", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "2", + "cli.executionRepeatMaxRuns" : "128", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "0", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2637669074", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (>=)\n │ ║ │ Var (name=optDate)\n │ ║ │ ValueConstant (value=\"2024-06-01\"^^)\n │ ║ └── LeftJoin\n │ ║ ╠══ LeftJoin [left]\n │ ║ ║ ├── StatementPattern [left]\n │ ║ ║ │ s: Var (name=patient)\n │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\n │ ║ ║ └── Extension [right]\n │ ║ ║ ╠══ Join\n │ ║ ║ ║ ├── StatementPattern [left]\n │ ║ ║ ║ │ s: Var (name=patient)\n │ ║ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\n │ ║ ║ ║ │ o: Var (name=enc)\n │ ║ ║ ║ └── StatementPattern [right]\n │ ║ ║ ║ s: Var (name=enc)\n │ ║ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\n │ ║ ║ ║ o: Var (name=date)\n │ ║ ║ ╚══ ExtensionElem (optDate)\n │ ║ ║ Var (name=date)\n │ ║ ╚══ StatementPattern [right]\n │ ║ s: Var (name=patient)\n │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\n │ ║ o: Var (name=med)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=patient)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=patient)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (>=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optDate)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"2024-06-01\\\"^^)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n }, {\n \"type\" : \"Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\"\n }, {\n \"type\" : \"Var (name=enc)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=enc)\"\n }, {\n \"type\" : \"Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\"\n }, {\n \"type\" : \"Var (name=date)\"\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (optDate)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=date)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n }, {\n \"type\" : \"Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\"\n }, {\n \"type\" : \"Var (name=med)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (>=)\n Var (name=optDate)\n ValueConstant (value=\"2024-06-01\"^^)\n LeftJoin\n LeftJoin\n StatementPattern\n Var (name=patient)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\n Extension\n Join\n StatementPattern\n Var (name=patient)\n Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\n Var (name=enc)\n StatementPattern\n Var (name=enc)\n Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\n Var (name=date)\n ExtensionElem (optDate)\n Var (name=date)\n StatementPattern\n Var (name=patient)\n Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\n Var (name=med)\n GroupElem (count)\n Count (Distinct)\n Var (name=patient)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=patient)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (>=)\\n Var (name=optDate)\\n ValueConstant (value=\\\"2024-06-01\\\"^^)\\n LeftJoin\\n LeftJoin\\n StatementPattern\\n Var (name=patient)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\\n Extension\\n Join\\n StatementPattern\\n Var (name=patient)\\n Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\\n Var (name=enc)\\n StatementPattern\\n Var (name=enc)\\n Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\\n Var (name=date)\\n ExtensionElem (optDate)\\n Var (name=date)\\n StatementPattern\\n Var (name=patient)\\n Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\\n Var (name=med)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=patient)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=patient)\\n\",\n \"fingerprintSha256\" : \"ce7bba07b1eb935287481f2eec1a65d579f16066e91f92e194ae7463d96834d1\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHBzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AGEwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAdwYXRpZW50dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF8yNGJlODdiZF91cmlwcHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhcnFTVBdTsbLvAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AGEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACAEAAAAAAXEAfgAmc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AChodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvbWVkaWNhbC9QYXRpZW50c3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHnEAfgAIAQAAAAABcQB+ACVzcQB+ACoAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHnEAfgAIAAAAAAAAcQB+ACRwcHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADZxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA4cQB+AAhzcQB+AB91cQB+ACIAAAADdAAHcGF0aWVudHQAEl9jb25zdF9jYTI4NWUxX3VyaXQAA2VuY3Bwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AOXEAfgAIAAAAAAAAcQB+AD5wc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AOXEAfgAIAQAAAAABcQB+AD1zcQB+ACoAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9tZWRpY2FsL2hhc0VuY291bnRlcnEAfgAzcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADlxAH4ACAAAAAAAAHEAfgA8cHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA4cQB+AAhzcQB+AB91cQB+ACIAAAADdAADZW5jdAATX2NvbnN0XzI4MTZmMmQ3X3VyaXQABGRhdGVwcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AERxAH4ACAAAAAAAAHEAfgBJcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AERxAH4ACAEAAAAAAXEAfgBIc3EAfgAqAAAAAP////90ACtodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvbWVkaWNhbC9yZWNvcmRlZE9ucQB+ADNwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ARHEAfgAIAAAAAAAAcQB+AEdwcAAAc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABh4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA2cQB+AAhzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBScQB+AAgAAAAAAAB0AARkYXRlcHQAB29wdERhdGV4cHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHNxAH4AH3VxAH4AIgAAAAN0AAdwYXRpZW50dAATX2NvbnN0X2ZlOWY0M2UxX3VyaXQAA21lZHBwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AVnEAfgAIAAAAAAAAcQB+AFtwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AVnEAfgAIAQAAAAABcQB+AFpzcQB+ACoAAAAA/////3QALmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9tZWRpY2FsL2hhc01lZGljYXRpb25xAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBWcQB+AAgAAAAAAABxAH4AWXBwcHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGRxAH4ACAAAAAAAAHQAB29wdERhdGVwc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFsdWVDb25zdGFudDY0XwF1yivGAgABTAAFdmFsdWVxAH4AKHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGRxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AGEwACGxhbmd1YWdlcQB+ABh4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHEAfgAydAAEREFURXNxAH4AKgAAAAD/////dAAlaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjZGF0ZXQACjIwMjQtMDYtMDFwfnIAMW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZSRDb21wYXJlT3AAAAAAAAAAABIAAHhxAH4AMnQAAkdFc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAB4c3EAfgBPAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAYTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB9cQB+AAhzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCCcQB+AAgAAAAAAAB0AAdwYXRpZW50cAF4c3EAfgBPAAAAAXcEAAAAAXNxAH4AUQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNxAH4AfwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIZxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIdxAH4ACAAAAAAAAHEAfgCEcAFxAH4AfngBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAxxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABhMAA9wcm9qZWN0aW9uQWxpYXNxAH4AGEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AItxAH4ACAFxAH4AfnBzcQB+AFEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgCTcQB+AAhxAH4AkgFzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCTcQB+AAh1cQB+AIwAAAABc3EAfgCOAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlXEAfgAIAXEAfgB+cHEAfgCRc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AA54cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+AE8AAAABdwQAAAABcQB+AJd4cQB+AJxwcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCScQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCdcQB+AAhzcQB+ABYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCecQB+AAhwc3EAfgAWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4An3EAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKBxAH4ACHEAfgAhcHBzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgChcQB+AAgBAAAAAAFxAH4AJnEAfgAsc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AoXEAfgAIAQAAAAABcQB+ACVxAH4AL3EAfgAzcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKFxAH4ACAAAAAAAAHEAfgAkcHBzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCgcQB+AAhzcQB+ADcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgClcQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ApnEAfgAIcQB+ADpwcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKdxAH4ACAAAAAAAAHEAfgA+cHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKdxAH4ACAEAAAAAAXEAfgA9cQB+AEFxAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCncQB+AAgAAAAAAABxAH4APHBwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ApnEAfgAIcQB+AEVwcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHEAfgBJcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAEAAAAAAXEAfgBIcQB+AExxAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCrcQB+AAgAAAAAAABxAH4AR3BwAABzcQB+AE8AAAABdwQAAAABc3EAfgBRAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ApXEAfgAIc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsHEAfgAIAAAAAAAAcQB+AFRwcQB+AFV4cHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJ9xAH4ACHEAfgBXcHBzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgAAAAAAABxAH4AW3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgBAAAAAAFxAH4AWnEAfgBecQB+ADNwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+AFlwcHBzcQB+AGEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCecQB+AAhzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAgAAAAAAABxAH4AZnBzcQB+AGcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC2cQB+AAhxAH4AbXEAfgB1c3IAEWphdmEudXRpbC5Db2xsU2VyV46rtjobqBEDAAFJAAN0YWd4cAAAAAJ3BAAAAAB4c3EAfgBPAAAAAXcEAAAAAXNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJ1xAH4ACHEAfgB+c3EAfgB/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AvHEAfgAIc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AvXEAfgAIAAAAAAAAcQB+AIRwAXhzcQB+AE8AAAABdwQAAAABcQB+AJF4cQB+AAhzcQB+AH8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCRcQB+AAhzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDAcQB+AAgAAAAAAABxAH4AhHABcQB+AH5zcgAaamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3TZpDy+zYgG0gIAAVsAAWF0ABNbTGphdmEvbGFuZy9PYmplY3Q7eHBxAH4AjXA=\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "37", + "maxDepth" : "10", + "leafNodeCount" : "18", + "maxBranchingFactor" : "3", + "joinNodeCount" : "3", + "filterNodeCount" : "1", + "statementPatternCount" : "4", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=3", + "structureSignatureRawSha256" : "55a222e084c2badb833bb0f45d827a2af494487b8df7cd15993539f374cd00ab", + "structureSignatureNormalizedSha256" : "55a222e084c2badb833bb0f45d827a2af494487b8df7cd15993539f374cd00ab", + "joinAlgorithmSignatureSha256" : "cd1be22ad71cb6c7cf60ff7c784a21c245b3eb5adbf14d5eb8de7aa85bc8d1d1", + "actualResultSizesSignatureSha256" : "bdbaf85599a943cc5fff2e69daf271725d4f965e74476a8e10c9ab370dbd8b94", + "estimatesSignatureSha256" : "8b50c2a38895b7526868e0e4130205c302e325ce2b71009b1fd942eaa4831bc1", + "joinAlgorithmMultisetSignatureSha256" : "7975eaf046dbecc375a1162d669bb9eebe9ff62cf65b652707eca890be6cd143", + "actualResultSizesMultisetSignatureSha256" : "9ff2de80c05ee879e2455d9d00bf030c4e163f9a3b2e0d4d72265e6491f247bf", + "estimatesMultisetSignatureSha256" : "33e983dc121942fd7cb5a2acbe2a6787f7531895e1ab9f5c9c2c53fc3f8f1637", + "statementPatternEstimatesMultisetSignatureSha256" : "170f581d8e5eecac3960bb5f5d6cff97ee2dd6686fde234cb65ed9b8cb0de135", + "statementPatternEstimateTokenCount" : "4", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=1;group=2;join=3;projection=3;scan=4;unknown=18", + "modeledOperatorCountByCategorySignatureSha256" : "f7c4a9f600da3301037510d22d3e42a1782f3fca65b37345dd8a78bc2459571a", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=4;filter=1;group=2;join=3;projection=3;scan=4;unknown=18|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "c57519ac5be236b005d40f6ff8181c84457b156bf5392243414a8a1686a78f59", + "operatorWorkByTypeAlgorithm" : "Compare (>=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optDate)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"2024-06-01\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=date)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=enc)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=med)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optDate)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=patient)[UNKNOWN]|nodes=5|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "29dbe25d572e454b4b9af9045f7eb44cac6f9dbb0a4188d3329271467a12986e", + "operatorWorkTopContributors" : "Compare (>=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;ExtensionElem (optDate)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0;GroupElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "3", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "38", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ LeftJoin\n │ ║ ├── Filter [left]\n │ ║ │ ╠══ Compare (>=)\n │ ║ │ ║ Var (name=optDate)\n │ ║ │ ║ ValueConstant (value=\"2024-06-01\"^^)\n │ ║ │ ╚══ LeftJoin\n │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left]\n │ ║ │ │ s: Var (name=patient)\n │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\n │ ║ │ └── Extension [right]\n │ ║ │ ╠══ Join (JoinIterator)\n │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left]\n │ ║ │ ║ │ s: Var (name=patient)\n │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\n │ ║ │ ║ │ o: Var (name=enc)\n │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right]\n │ ║ │ ║ s: Var (name=enc)\n │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\n │ ║ │ ║ o: Var (name=date)\n │ ║ │ ╚══ ExtensionElem (optDate)\n │ ║ │ Var (name=date)\n │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right]\n │ ║ s: Var (name=patient)\n │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\n │ ║ o: Var (name=med)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=patient)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=patient)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (>=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optDate)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"2024-06-01\\\"^^)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 8335.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 79.01898506055365,\n \"resultSizeEstimate\" : 24971.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n }, {\n \"type\" : \"Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\"\n }, {\n \"type\" : \"Var (name=enc)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 158.0379701211073,\n \"resultSizeEstimate\" : 24971.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=enc)\"\n }, {\n \"type\" : \"Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\"\n }, {\n \"type\" : \"Var (name=date)\"\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (optDate)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=date)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 16692.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n }, {\n \"type\" : \"Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\"\n }, {\n \"type\" : \"Var (name=med)\"\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n LeftJoin\n Filter\n Compare (>=)\n Var (name=optDate)\n ValueConstant (value=\"2024-06-01\"^^)\n LeftJoin\n StatementPattern (resultSizeEstimate=8.3K)\n Var (name=patient)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\n Extension\n Join (JoinIterator)\n StatementPattern (costEstimate=79, resultSizeEstimate=25.0K)\n Var (name=patient)\n Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\n Var (name=enc)\n StatementPattern (costEstimate=158, resultSizeEstimate=25.0K)\n Var (name=enc)\n Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\n Var (name=date)\n ExtensionElem (optDate)\n Var (name=date)\n StatementPattern (resultSizeEstimate=16.7K)\n Var (name=patient)\n Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\n Var (name=med)\n GroupElem (count)\n Count (Distinct)\n Var (name=patient)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=patient)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n LeftJoin\\n Filter\\n Compare (>=)\\n Var (name=optDate)\\n ValueConstant (value=\\\"2024-06-01\\\"^^)\\n LeftJoin\\n StatementPattern (resultSizeEstimate=8.3K)\\n Var (name=patient)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\\n Extension\\n Join (JoinIterator)\\n StatementPattern (costEstimate=79, resultSizeEstimate=25.0K)\\n Var (name=patient)\\n Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\\n Var (name=enc)\\n StatementPattern (costEstimate=158, resultSizeEstimate=25.0K)\\n Var (name=enc)\\n Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\\n Var (name=date)\\n ExtensionElem (optDate)\\n Var (name=date)\\n StatementPattern (resultSizeEstimate=16.7K)\\n Var (name=patient)\\n Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\\n Var (name=med)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=patient)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=patient)\\n\",\n \"fingerprintSha256\" : \"ecc6032bde9bbd666be67f440ef419eae1165eb5cbce066e75006ad777eeddc4\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb250ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYWx1ZUV4cHI7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VHVwbGVPcGVyYXRvcj6Y3mRodHOMAgADTAANYWxnb3JpdGhtTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAB2xlZnRBcmdxAH4AAkwACHJpZ2h0QXJncQB+AAJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAhwc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRmlsdGVyMHu9pSkqq/UCAAFMAAljb25kaXRpb25xAH4AFHhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABdxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHBzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AFkwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QMBHgAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAdwYXRpZW50dAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF8yNGJlODdiZF91cmlwcHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhcnFTVBdTsbLvAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AFkwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACAEAAAAAAXEAfgAmc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AFnhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAAAAACF0AChodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvbWVkaWNhbC9QYXRpZW50c3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHnEAfgAIAQAAAAABcQB+ACVzcQB+ACoAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHnEAfgAIAAAAAAAAcQB+ACRwcHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADZxAH4ACHQADEpvaW5JdGVyYXRvcnNxAH4AGwAAAAAAAAABQFPBNw0djDH///////////////////////////////8A////////////////////////////////////////////////////////////////QNhiwAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADhxAH4ACHNxAH4AH3VxAH4AIgAAAANxAH4AJHQAEl9jb25zdF9jYTI4NWUxX3VyaXQAA2VuY3Bwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AOnEAfgAIAAAAAAAAcQB+AD5wc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AOnEAfgAIAQAAAAABcQB+AD1zcQB+ACoAAAAAAAAAIXQALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9tZWRpY2FsL2hhc0VuY291bnRlcnEAfgAzcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADpxAH4ACAAAAAAAAHEAfgAkcHBzcQB+ABsAAAAAAAAAAUBjwTcNHYwx////////////////////////////////AP///////////////////////////////////////////////////////////////0DYYsAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA4cQB+AAhzcQB+AB91cQB+ACIAAAADcQB+AD50ABNfY29uc3RfMjgxNmYyZDdfdXJpdAAEZGF0ZXBwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ARHEAfgAIAAAAAAAAcQB+AEhwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ARHEAfgAIAQAAAAABcQB+AEdzcQB+ACoAAAAAAAAAIXQAK2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9tZWRpY2FsL3JlY29yZGVkT25xAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBEcQB+AAgAAAAAAABxAH4APnBwAABzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAXcEAAAAAXNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbkVsZW31RFrwC9DoKAIAAkwABGV4cHJxAH4AFEwABG5hbWVxAH4AFnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADZxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFFxAH4ACAAAAAAAAHEAfgBIcHQAB29wdERhdGV4cHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFdxAH4ACAAAAAAAAHEAfgBTcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+ACh4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBXcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABZMAAhsYW5ndWFnZXEAfgAWeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AMnQABERBVEVzcQB+ACoAAAAA/////3QAJWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RhdGV0AAoyMDI0LTA2LTAxcH5yADFvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmUkQ29tcGFyZU9wAAAAAAAAAAASAAB4cQB+ADJ0AAJHRXNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QNBNAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABdxAH4ACHNxAH4AH3VxAH4AIgAAAANxAH4AJHQAE19jb25zdF9mZTlmNDNlMV91cml0AANtZWRwcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGlxAH4ACAAAAAAAAHEAfgBtcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGlxAH4ACAEAAAAAAXEAfgBsc3EAfgAqAAAAAAAAACF0AC5odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvbWVkaWNhbC9oYXNNZWRpY2F0aW9ucQB+ADNwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaXEAfgAIAAAAAAAAcQB+ACRwcHBzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hTZXTYbNdald0qHgIAAHhyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAAAHhzcQB+AE4AAAABdwQAAAABc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXBFbGVtHBNQdl7woHoCAAJMAARuYW1lcQB+ABZMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0FnZ3JlZ2F0ZU9wZXJhdG9yO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHQABWNvdW50c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ291bnTDG6RMNpo3gAIAAHhyADlvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkFic3RyYWN0QWdncmVnYXRlT3BlcmF0b3I3u+2NG0ExvQIAAVoACGRpc3RpbmN0eHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlWYWx1ZU9wZXJhdG9ypZgvcyEVYrgCAAFMAANhcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHlxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH5xAH4ACAAAAAAAAHEAfgAkcAF4c3EAfgBOAAAAAXcEAAAAAXNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIFxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIJxAH4ACAAAAAAAAHEAfgAkcAFxAH4AengBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAxxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABZMAA9wcm9qZWN0aW9uQWxpYXNxAH4AFkwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIZxAH4ACAFxAH4AenBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgCOcQB+AAhxAH4AjQFzcQB+AIQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCOcQB+AAh1cQB+AIcAAAABc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AkHEAfgAIAXEAfgB6cHEAfgCMc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AA54cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+AE4AAAABdwQAAAABcQB+AJJ4cQB+AJdwcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCNcQB+AAhzcQB+ABgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCYcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCZcQB+AAhwc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJtxAH4ACHNxAH4AH3VxAH4AIgAAAANxAH4AJHEAfgAlcQB+ACZwcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJxxAH4ACAEAAAAAAXEAfgAmcQB+ACxzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCccQB+AAgBAAAAAAFxAH4AJXEAfgAvcQB+ADNwc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AnHEAfgAIAAAAAAAAcQB+ACRwcHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJtxAH4ACHNxAH4ANwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKJxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCjcQB+AAhzcQB+AB91cQB+ACIAAAADdAAHcGF0aWVudHEAfgA9cQB+AD5wcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKRxAH4ACAAAAAAAAHEAfgA+cHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKRxAH4ACAEAAAAAAXEAfgA9cQB+AEFxAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCkcQB+AAgAAAAAAABxAH4Ap3Bwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ao3EAfgAIc3EAfgAfdXEAfgAiAAAAA3QAA2VuY3EAfgBHcQB+AEhwcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHEAfgBIcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAEAAAAAAXEAfgBHcQB+AEtxAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCrcQB+AAgAAAAAAABxAH4ArnBwAABzcQB+AE4AAAABdwQAAAABc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AonEAfgAIc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4As3EAfgAIAAAAAAAAdAAEZGF0ZXB0AAdvcHREYXRleHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCacQB+AAhzcQB+AB91cQB+ACIAAAADdAAHcGF0aWVudHEAfgBscQB+AG1wcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALdxAH4ACAAAAAAAAHEAfgBtcHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALdxAH4ACAEAAAAAAXEAfgBscQB+AHBxAH4AM3BzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC3cQB+AAgAAAAAAABxAH4AunBwcHNxAH4AVAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJlxAH4ACHNxAH4AJwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AL5xAH4ACAAAAAAAAHEAfgBTcHNxAH4AWQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AL5xAH4ACHEAfgBfcQB+AGdzcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+AE4AAAABdwQAAAABc3EAfgB3AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmHEAfgAIcQB+AHpzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDEcQB+AAhzcQB+ACcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDFcQB+AAgAAAAAAAB0AAdwYXRpZW50cAF4c3EAfgBOAAAAAXcEAAAAAXEAfgCMeHEAfgAIc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIc3EAfgAnAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AyXEAfgAIAAAAAAAAcQB+AMdwAXEAfgB6c3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwcQB+AIhw\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE {\n ?patient a .\n OPTIONAL {\n ?patient ?enc .\n ?enc ?date .\n BIND(?date AS ?optDate)\n }\n FILTER (?optDate >= \"2024-06-01\"^^)\n OPTIONAL {\n ?patient ?med .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "37", + "maxDepth" : "10", + "leafNodeCount" : "18", + "maxBranchingFactor" : "3", + "joinNodeCount" : "3", + "filterNodeCount" : "1", + "statementPatternCount" : "4", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=2,JoinIterator=1", + "structureSignatureRawSha256" : "05c79d2e87021f3ee468978d603669455e94c941c1a5b7a64fe3bdc98a479d68", + "structureSignatureNormalizedSha256" : "05c79d2e87021f3ee468978d603669455e94c941c1a5b7a64fe3bdc98a479d68", + "joinAlgorithmSignatureSha256" : "ee5cbefab0d1e17223093a7d598750455cc85433604cb22247d30a540bfc8095", + "actualResultSizesSignatureSha256" : "244c3ef9b16dc39fb242503f8a2552dd67ec99c6c40c382f421568de73461d0e", + "estimatesSignatureSha256" : "3469c30f72275cb3ddd806675ccdb292bf906b332f9aacab59a9b5381b2394e3", + "joinAlgorithmMultisetSignatureSha256" : "f6a1ab638a49fe8d0f37d30ad8c6a76e5cb599bbc54a0d8234c064a7aceb2d47", + "actualResultSizesMultisetSignatureSha256" : "9ff2de80c05ee879e2455d9d00bf030c4e163f9a3b2e0d4d72265e6491f247bf", + "estimatesMultisetSignatureSha256" : "b3a56ca3de6137a430fbda6d653452f3950e9c826afb3c467463b24058d83d50", + "statementPatternEstimatesMultisetSignatureSha256" : "84c655fbcdcce779ddd6df039e561477e90585d24dbce0ec0c983c42a3d5f234", + "statementPatternEstimateTokenCount" : "4", + "modeledWorkUnits" : "74969", + "modeledInputRowsSum" : "124967", + "modeledOutputRowsSum" : "74969", + "modeledJoinInputRowsSum" : "74969", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=74969;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=1;group=2;join=3;projection=3;scan=4;unknown=18", + "modeledOperatorCountByCategorySignatureSha256" : "f7c4a9f600da3301037510d22d3e42a1782f3fca65b37345dd8a78bc2459571a", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=49998;projection=0;scan=74969;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "9c810e928ecc3357c0d9b90f9d3c7d7ab9db4ee0a1202e8371c735a120f254e8", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=74969;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "a70e7c882c3f3a4f238c275d8c8e1486b4f38954b9a137fee6f4aeb56f7f7e74", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "JoinIterator=0;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "f14303cf51645ddf2a677b9c40fc44a5eba760e5156242ea41b22fdc1680a8c2", + "modeledWorkVector" : "workUnits=74969|barrierCount=4|joinInputRowsSum=74969|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=4;filter=1;group=2;join=3;projection=3;scan=4;unknown=18|joinWorkByAlgorithm=JoinIterator=0;UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=74969;unknown=0", + "modeledWorkVectorSignatureSha256" : "79806a944ab7854cffb6e0f285ff33809e8dae868dc88a9bff7412c14d38b3c3", + "operatorWorkByTypeAlgorithm" : "Compare (>=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optDate)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=1|workUnits=0|inputRows=24971|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=2|workUnits=0|inputRows=25027|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=4|workUnits=74969|inputRows=74969|outputRows=74969|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"2024-06-01\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=date)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=enc)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=med)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optDate)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=patient)[UNKNOWN]|nodes=5|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "7c8e0120a4d3883ea61ca7f32158b17779b762ad6a19cce0bafa91a32ec4e2e3", + "operatorWorkTopContributors" : "StatementPattern[UNKNOWN]:74969;Compare (>=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;ExtensionElem (optDate)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0;Group ()[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "237.05695518166095", + "costEstimateMax" : "158.0379701211073", + "resultSizeEstimateSum" : "74969", + "resultSizeEstimateMax" : "24971", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "3", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "38", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=183.3M, nextCallCountActual=1, nextTimeNanosActual=31.0K, outputRowsActual=1, firstRowTimeNanosActual=183.3M, openCountActual=1, lastRowTimeNanosActual=183.5M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=91.7M, avgNextNanosActual=31.1K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=183.3M, nextCallCountActual=1, nextTimeNanosActual=14.3K, outputRowsActual=1, firstRowTimeNanosActual=183.3M, openCountActual=1, lastRowTimeNanosActual=183.5M, closeCountActual=1, inputRowsActual=1, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=91.7M, avgNextNanosActual=14.3K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=183.3M, nextCallCountActual=1, nextTimeNanosActual=1.4K, aggregateEvalCountActual=29.1K, outputRowsActual=1, firstRowTimeNanosActual=183.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=183.5M, maxGroupSizeActual=29.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=29.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=29.1K, rowsDroppedActual=29.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=91.7M, avgNextNanosActual=1.4K)\n │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K, hasNextCallCountActual=29.1K, hasNextTrueCountActual=29.1K, hasNextTimeNanosActual=158.1M, nextCallCountActual=29.1K, nextTimeNanosActual=576.5K, joinRightIteratorsCreatedActual=14.5K, joinLeftBindingsConsumedActual=14.5K, joinRightBindingsConsumedActual=29.1K, outputRowsActual=29.1K, firstRowTimeNanosActual=2.1M, leftRowsWithMatchActual=14.5K, openCountActual=1, lastRowTimeNanosActual=180.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=43.6K, rowsDroppedActual=14.5K, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.4K, avgNextNanosActual=20, leftRowsProbedActual=14.5K, rightRowsScannedActual=29.1K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0)\n │ ║ ├── Filter (resultSizeActual=14.5K, hasNextCallCountActual=14.5K, hasNextTrueCountActual=14.5K, hasNextTimeNanosActual=123.2M, nextCallCountActual=14.5K, nextTimeNanosActual=523.1K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=14.5K, sourceRowsFilteredActual=10.4K, outputRowsActual=14.5K, firstRowTimeNanosActual=2.0M, exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, openCountActual=1, exprTrueCountActual=14.5K, lastRowTimeNanosActual=179.7M, closeCountActual=1, exprEvalTimeNanosActual=37.2M, inputRowsActual=24.9K, rowsDroppedActual=10.4K, selectivityActual=0.58, expansionFactorActual=0.58, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.5K, avgNextNanosActual=36, filterRejectRateActual=0.42) [left]\n │ ║ │ ╠══ Compare (>=) (exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, exprTrueCountActual=14.5K, exprEvalTimeNanosActual=32.4M, hasNextFalseCountActual=0)\n │ ║ │ ║ Var (name=optDate) (hasNextFalseCountActual=0)\n │ ║ │ ║ ValueConstant (value=\"2024-06-01\"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0)\n │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=83.1M, nextCallCountActual=24.9K, nextTimeNanosActual=475.8K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, outputRowsActual=24.9K, firstRowTimeNanosActual=810.1K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=179.5M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, selectivityActual=0.75, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=19, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0)\n │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.8M, nextCallCountActual=8.3K, nextTimeNanosActual=861.1K, outputRowsActual=8.3K, firstRowTimeNanosActual=431.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=179.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=221, avgNextNanosActual=103) [left]\n │ ║ │ │ s: Var (name=patient) (hasNextFalseCountActual=0)\n │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ └── Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=62.5M, nextCallCountActual=24.9K, nextTimeNanosActual=3.2M, outputRowsActual=24.9K, firstRowTimeNanosActual=1.2K, openCountActual=8.3K, lastRowTimeNanosActual=7.2K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, inputRowsActual=24.9K, rowsDroppedActual=0, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=940, avgNextNanosActual=132) [right]\n │ ║ │ ╠══ Join (JoinIterator) (resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, outputRowsActual=24.9K, rowsDroppedActual=24.9K, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00)\n │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=7.9M, nextCallCountActual=24.9K, nextTimeNanosActual=2.1M, outputRowsActual=24.9K, firstRowTimeNanosActual=583, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=7.0K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=1.00, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=237, avgNextNanosActual=87) [left]\n │ ║ │ ║ │ s: Var (name=patient) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ │ o: Var (name=enc) (hasNextFalseCountActual=0)\n │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=15.7M, nextCallCountActual=24.9K, nextTimeNanosActual=2.0M, outputRowsActual=24.9K, firstRowTimeNanosActual=500, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.1K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=1.00, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=316, avgNextNanosActual=81) [right]\n │ ║ │ ║ s: Var (name=enc) (hasNextFalseCountActual=0)\n │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ ║ o: Var (name=date) (hasNextFalseCountActual=0)\n │ ║ │ ╚══ ExtensionElem (optDate) (hasNextFalseCountActual=0)\n │ ║ │ Var (name=date) (hasNextFalseCountActual=0)\n │ ║ └── StatementPattern (resultSizeEstimate=16.7K, resultSizeActual=29.1K, hasNextCallCountActual=72.9K, hasNextTrueCountActual=58.3K, hasNextTimeNanosActual=11.7M, nextCallCountActual=29.1K, nextTimeNanosActual=2.0M, outputRowsActual=29.1K, firstRowTimeNanosActual=458, indexLookupCountActual=14.5K, openCountActual=14.5K, lastRowTimeNanosActual=2.2K, closeCountActual=14.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, estimateErrorQ=1.75, hasNextFalseCountActual=14.5K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=162, avgNextNanosActual=70) [right]\n │ ║ s: Var (name=patient) (hasNextFalseCountActual=0)\n │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0)\n │ ║ o: Var (name=med) (hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=patient) (hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=patient) (hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 183366834,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 31084,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 183391042,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 183541292,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 183354958,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 14334,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 183389291,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 183531958,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 183326167,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 1417,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 29141,\n \"outputRowsActual\" : 1,\n \"firstRowTimeNanosActual\" : 183381125,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 183516417,\n \"maxGroupSizeActual\" : 29141,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 10\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 29141.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 29141,\n \"hasNextCallCountActual\" : 29143,\n \"hasNextTrueCountActual\" : 29142,\n \"hasNextTimeNanosActual\" : 158101708,\n \"nextCallCountActual\" : 29141,\n \"nextTimeNanosActual\" : 576509,\n \"joinRightIteratorsCreatedActual\" : 14522,\n \"joinLeftBindingsConsumedActual\" : 14522,\n \"joinRightBindingsConsumedActual\" : 29141,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 29141,\n \"firstRowTimeNanosActual\" : 2194125,\n \"leftRowsWithMatchActual\" : 14522,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 180691875,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 3\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 14522,\n \"hasNextCallCountActual\" : 14523,\n \"hasNextTrueCountActual\" : 14522,\n \"hasNextTimeNanosActual\" : 123251875,\n \"nextCallCountActual\" : 14522,\n \"nextTimeNanosActual\" : 523141,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 14522,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 24971,\n \"sourceRowsMatchedActual\" : 14522,\n \"sourceRowsFilteredActual\" : 10449,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 14522,\n \"firstRowTimeNanosActual\" : 2029625,\n \"exprEvalCountActual\" : 24971,\n \"exprFalseCountActual\" : 10449,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 14522,\n \"lastRowTimeNanosActual\" : 179725084,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3.719316E7\n },\n \"plans\" : [ {\n \"type\" : \"Compare (>=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 24971,\n \"exprFalseCountActual\" : 10449,\n \"exprTrueCountActual\" : 14522\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3.2414025E7\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=optDate)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"ValueConstant (value=\\\"2024-06-01\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1370584.0\n }\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 24971,\n \"hasNextCallCountActual\" : 24972,\n \"hasNextTrueCountActual\" : 24971,\n \"hasNextTimeNanosActual\" : 83138077,\n \"nextCallCountActual\" : 24971,\n \"nextTimeNanosActual\" : 475884,\n \"joinRightIteratorsCreatedActual\" : 8335,\n \"joinLeftBindingsConsumedActual\" : 8335,\n \"joinRightBindingsConsumedActual\" : 24971,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 24971,\n \"firstRowTimeNanosActual\" : 810167,\n \"leftRowsWithMatchActual\" : 8335,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 179597792,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 4\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 8335.0,\n \"resultSizeActual\" : 8335,\n \"hasNextCallCountActual\" : 8336,\n \"hasNextTrueCountActual\" : 8335,\n \"hasNextTimeNanosActual\" : 1838943,\n \"nextCallCountActual\" : 8335,\n \"nextTimeNanosActual\" : 861193,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8335,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 8335,\n \"firstRowTimeNanosActual\" : 431542,\n \"indexLookupCountActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 179852792,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 24971,\n \"hasNextCallCountActual\" : 66578,\n \"hasNextTrueCountActual\" : 58243,\n \"hasNextTimeNanosActual\" : 62582960,\n \"nextCallCountActual\" : 24971,\n \"nextTimeNanosActual\" : 3295970,\n \"joinRightIteratorsCreatedActual\" : 8335,\n \"joinLeftBindingsConsumedActual\" : 8335,\n \"joinRightBindingsConsumedActual\" : 24971,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 24971,\n \"firstRowTimeNanosActual\" : 1209,\n \"openCountActual\" : 8335,\n \"lastRowTimeNanosActual\" : 7209,\n \"closeCountActual\" : 8335,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeActual\" : 24971,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 24971,\n \"joinLeftBindingsConsumedActual\" : 24971,\n \"joinRightBindingsConsumedActual\" : 24971,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 79.01898506055365,\n \"resultSizeEstimate\" : 24971.0,\n \"resultSizeActual\" : 24971,\n \"hasNextCallCountActual\" : 33306,\n \"hasNextTrueCountActual\" : 24971,\n \"hasNextTimeNanosActual\" : 7907969,\n \"nextCallCountActual\" : 24971,\n \"nextTimeNanosActual\" : 2164174,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 24971,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 24971,\n \"firstRowTimeNanosActual\" : 583,\n \"indexLookupCountActual\" : 8335,\n \"openCountActual\" : 8335,\n \"lastRowTimeNanosActual\" : 7000,\n \"closeCountActual\" : 8335,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=enc)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 158.0379701211073,\n \"resultSizeEstimate\" : 24971.0,\n \"resultSizeActual\" : 24971,\n \"hasNextCallCountActual\" : 49942,\n \"hasNextTrueCountActual\" : 24971,\n \"hasNextTimeNanosActual\" : 15778587,\n \"nextCallCountActual\" : 24971,\n \"nextTimeNanosActual\" : 2024345,\n \"joinRightIteratorsCreatedActual\" : 24971,\n \"joinLeftBindingsConsumedActual\" : 24971,\n \"joinRightBindingsConsumedActual\" : 24971,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 24971,\n \"firstRowTimeNanosActual\" : 500,\n \"indexLookupCountActual\" : 24971,\n \"openCountActual\" : 24971,\n \"lastRowTimeNanosActual\" : 1166,\n \"closeCountActual\" : 24971,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=enc)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=date)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (optDate)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=date)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 16692.0,\n \"resultSizeActual\" : 29141,\n \"hasNextCallCountActual\" : 72901,\n \"hasNextTrueCountActual\" : 58379,\n \"hasNextTimeNanosActual\" : 11798176,\n \"nextCallCountActual\" : 29141,\n \"nextTimeNanosActual\" : 2030007,\n \"joinRightIteratorsCreatedActual\" : 14522,\n \"joinLeftBindingsConsumedActual\" : 14522,\n \"joinRightBindingsConsumedActual\" : 29141,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"outputRowsActual\" : 29141,\n \"firstRowTimeNanosActual\" : 458,\n \"indexLookupCountActual\" : 14522,\n \"openCountActual\" : 14522,\n \"lastRowTimeNanosActual\" : 2291,\n \"closeCountActual\" : 14522,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=med)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=patient)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K)\n Filter (resultSizeActual=14.5K)\n Compare (>=)\n Var (name=optDate)\n ValueConstant (value=\"2024-06-01\"^^)\n LeftJoin (LeftJoinIterator) (resultSizeActual=25.0K)\n StatementPattern (resultSizeEstimate=8.3K, resultSizeActual=8.3K)\n Var (name=patient)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\n Extension (resultSizeActual=25.0K)\n Join (JoinIterator) (resultSizeActual=25.0K)\n StatementPattern (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=25.0K)\n Var (name=patient)\n Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\n Var (name=enc)\n StatementPattern (costEstimate=158, resultSizeEstimate=25.0K, resultSizeActual=25.0K)\n Var (name=enc)\n Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\n Var (name=date)\n ExtensionElem (optDate)\n Var (name=date)\n StatementPattern (resultSizeEstimate=16.7K, resultSizeActual=29.1K)\n Var (name=patient)\n Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\n Var (name=med)\n GroupElem (count)\n Count (Distinct)\n Var (name=patient)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=patient)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K)\\n Filter (resultSizeActual=14.5K)\\n Compare (>=)\\n Var (name=optDate)\\n ValueConstant (value=\\\"2024-06-01\\\"^^)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=25.0K)\\n StatementPattern (resultSizeEstimate=8.3K, resultSizeActual=8.3K)\\n Var (name=patient)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)\\n Extension (resultSizeActual=25.0K)\\n Join (JoinIterator) (resultSizeActual=25.0K)\\n StatementPattern (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=25.0K)\\n Var (name=patient)\\n Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)\\n Var (name=enc)\\n StatementPattern (costEstimate=158, resultSizeEstimate=25.0K, resultSizeActual=25.0K)\\n Var (name=enc)\\n Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)\\n Var (name=date)\\n ExtensionElem (optDate)\\n Var (name=date)\\n StatementPattern (resultSizeEstimate=16.7K, resultSizeActual=29.1K)\\n Var (name=patient)\\n Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)\\n Var (name=med)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=patient)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=patient)\\n\",\n \"fingerprintSha256\" : \"5eb1574d4faae95c9d46ec6e9d879388b566e2efe1f698c0610dded24ffaaebc\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAK7fhvAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAACE+gAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAAruXDV0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAACvCLx3hwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAACu30sgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAeWwAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAACu5TQnEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAACvCeLHhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAACu3GTgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAN/4AAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAACu5Ma3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAACvB5tnhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAACu1V1wAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAABYkAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQNx1QAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAcdVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAACu4shXQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAK8D0BdAASbWF4R3JvdXBTaXplQWN0dWFsc3EAfgAMAAAAAAAAcdVxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAHHXAAAAAAlscMwAAAAAAABx1gAAAAAAAAA4ugAAAAAAAHHVAAAAAAAAOLoAAAAAAABx1QAAAAAACMv9AAAAAAAAcdW/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtzcQB+AAwAAAAAAABx1XEAfgAPc3EAfgAMAAAAAAAhes10ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHNxAH4ADAAAAAAAADi6cQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAArFI6NxAH4AEXEAfgAOdAAZbWF4UmlnaHRSb3dzUGVyTGVmdEFjdHVhbHNxAH4ADAAAAAAAAAADeHEAfgAkcQB+AAh0ABBMZWZ0Sm9pbkl0ZXJhdG9yc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRmlsdGVyMHu9pSkqq/UCAAFMAAljb25kaXRpb25xAH4AMnhxAH4AAQAAAAAAAAABv/AAAAAAAAAAAAAAAAA4uwAAAAAHWKyjAAAAAAAAOLoAAAAAAAAAOLoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLoAAAAAAAf7hQAAAAAAADi6v/AAAAAAAAAAAAAAAAAAKNEAAAAAAAA4ugAAAAAAAGGL//////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAF0ABdleHByRXZhbFRpbWVOYW5vc0FjdHVhbHNxAH4AJ0GBvC5AAAAAeHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAACXEAfgALc3EAfgAMAAAAAAAAOLpxAH4AD3NxAH4ADAAAAAAAHvg5dAATZXhwckV2YWxDb3VudEFjdHVhbHNxAH4ADAAAAAAAAGGLdAAUZXhwckZhbHNlQ291bnRBY3R1YWxzcQB+AAwAAAAAAAAo0XQAGXByZWRpY2F0ZUVycm9yQ291bnRBY3R1YWxzcQB+AAwAAAAAAAAAAHEAfgAScQB+AA50ABNleHByVHJ1ZUNvdW50QWN0dWFsc3EAfgAMAAAAAAAAOLpxAH4AE3NxAH4ADAAAAAAKtmMccQB+ABFxAH4ADnhxAH4ANXEAfgAIc3EAfgAxAAAAAAAAAAG/8AAAAAAAAAAAAAAAAGGMAAAAAAT0lh0AAAAAAABhiwAAAAAAAAAgjwAAAAAAAGGLAAAAAAAAII8AAAAAAABhiwAAAAAAB0LsAAAAAAAAYYu/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtzcQB+AAwAAAAAAABhi3EAfgAPc3EAfgAMAAAAAAAMXLdxAH4AOXNxAH4ADAAAAAAAACCPcQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAAq0ceBxAH4AEXEAfgAOcQB+ADxzcQB+AAwAAAAAAAAABHhxAH4AQHEAfgAIcQB+AD5zcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ACNMAApjb250ZXh0VmFycQB+ABdMAAlpbmRleE5hbWVxAH4ANEwACW9iamVjdFZhcnEAfgAXTAAMcHJlZGljYXRlVmFycQB+ABdMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AF0wAB3Zhckxpc3RxAH4AHXhxAH4AAwAAAAAAAAABv/AAAAAAAAAAAAAAAAAgkAAAAAAAHA9fAAAAAAAAII8AAAAAAAAAII8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAII8AAAAAAA0kCQAAAAAAACCPQMBHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAII9xAH4AD3NxAH4ADAAAAAAABpW2dAAWaW5kZXhMb29rdXBDb3VudEFjdHVhbHEAfgAOcQB+ABFxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAKuFX4eHEAfgBQcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAHcGF0aWVudHQAE19jb25zdF9mNWU1NTg1YV91cml0ABNfY29uc3RfMjRiZTg3YmRfdXJpcHBzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYXJxU1QXU7Gy7wIABVoACWFub255bW91c0kADmNhY2hlZEhhc2hDb2RlWgAIY29uc3RhbnRMAARuYW1lcQB+ADRMAAV2YWx1ZXQAH0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9WYWx1ZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBacQB+AAgBAAAAAAFxAH4AZ3NyACZvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUlSSZpFKkOTZkZuAgACSQAMbG9jYWxOYW1lSWR4TAAJaXJpU3RyaW5ncQB+ADR4cgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdElSSWw/DzoHkfCWAgABSQAOY2FjaGVkSGFzaENvZGV4cAAAAAD/////dAAoaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL21lZGljYWwvUGF0aWVudHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFpxAH4ACAEAAAAAAXEAfgBmc3EAfgBrAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFpxAH4ACAAAAAAAAHEAfgBlcHBzcQB+ABwAAAAAAAAAAb/wAAAAAAAAAAAAAAABBBIAAAAAA7rwsAAAAAAAAOODAAAAAAAAACCPAAAAAAAAYYsAAAAAAAAgjwAAAAAAAGGLAAAAAAAySuIAAAAAAABhi7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3NxAH4ADAAAAAAAAGGLcQB+AA9zcQB+AAwAAAAAAAAEuXEAfgARc3EAfgAMAAAAAAAAII9xAH4AEnNxAH4ADAAAAAAAACCPcQB+ABNzcQB+AAwAAAAAAAAcKXhxAH4AUHEAfgAIc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgAzAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAABhiwAAAAAAAGGLAAAAAAAAYYv/////////////////////AAAAAAAAYYu/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ad3EAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgBXAAAAAAAAAAFAU8E3DR2MMQAAAAAAAIIaAAAAAAB4qoEAAAAAAABhiwAAAAAAAABhiwAAAAAAAAAAAAAAAAAAAAAAAAAAAABhiwAAAAAAIQXOAAAAAAAAYYtA2GLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAABhi3EAfgAPc3EAfgAMAAAAAAAAAkdxAH4AXnNxAH4ADAAAAAAAACCPcQB+ABFzcQB+AAwAAAAAAAAgj3EAfgASc3EAfgAMAAAAAAAAII9xAH4AE3NxAH4ADAAAAAAAABtYeHEAfgB/cQB+AAhzcQB+AGB1cQB+AGMAAAADcQB+AGV0ABJfY29uc3RfY2EyODVlMV91cml0AANlbmNwcHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIFxAH4ACAAAAAAAAHEAfgCMcHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIFxAH4ACAEAAAAAAXEAfgCLc3EAfgBrAAAAAP////90AC1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvbWVkaWNhbC9oYXNFbmNvdW50ZXJxAH4AdHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCBcQB+AAgAAAAAAABxAH4AZXBwc3EAfgBXAAAAAAAAAAFAY8E3DR2MMQAAAAAAAMMWAAAAAADwwxsAAAAAAABhiwAAAAAAAABhiwAAAAAAAGGLAAAAAAAAYYsAAAAAAABhiwAAAAAAHuOZAAAAAAAAYYtA2GLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAABhi3EAfgAPc3EAfgAMAAAAAAAAAfRxAH4AXnNxAH4ADAAAAAAAAGGLcQB+ABFzcQB+AAwAAAAAAABhi3EAfgASc3EAfgAMAAAAAAAAYYtxAH4AE3NxAH4ADAAAAAAAAASOeHEAfgB/cQB+AAhzcQB+AGB1cQB+AGMAAAADcQB+AIx0ABNfY29uc3RfMjgxNmYyZDdfdXJpdAAEZGF0ZXBwc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AknEAfgAIAAAAAAAAcQB+AJ1wc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AknEAfgAIAQAAAAABcQB+AJxzcQB+AGsAAAAA/////3QAK2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9tZWRpY2FsL3JlY29yZGVkT25xAH4AdHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCScQB+AAgAAAAAAABxAH4AjHBwAABzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAXcEAAAAAXNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbkVsZW31RFrwC9DoKAIAAkwABGV4cHJxAH4AMkwABG5hbWVxAH4ANHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKZxAH4ACAAAAAAAAHEAfgCdcHQAB29wdERhdGV4cHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAyTAAIcmlnaHRBcmdxAH4AMnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AQnNxAH4AJ0F+6ZSQAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAA3EAfgBHc3EAfgAMAAAAAAAAYYtxAH4ASXNxAH4ADAAAAAAAACjRcQB+AE1zcQB+AAwAAAAAAAA4unhxAH4AQHEAfgAIc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ArHEAfgAIAAAAAAAAcQB+AKhwc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFsdWVDb25zdGFudDY0XwF1yivGAgABTAAFdmFsdWVxAH4AaXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AQnNxAH4AJ0E06dgAAAAAeHNxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBHcQB+AA54cQB+AKxxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4ANEwACGxhbmd1YWdlcQB+ADR4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHEAfgBzdAAEREFURXNxAH4AawAAAAD/////dAAlaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjZGF0ZXQACjIwMjQtMDYtMDFwfnIAMW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZSRDb21wYXJlT3AAAAAAAAAAABIAAHhxAH4Ac3QAAkdFc3EAfgBXAAAAAAAAAAG/8AAAAAAAAAAAAAAAARzFAAAAAAC0BqAAAAAAAADkCwAAAAAAAAA4ugAAAAAAAHHVAAAAAAAAOLoAAAAAAABx1QAAAAAAHvm3AAAAAAAAcdVA0E0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAABx1XEAfgAPc3EAfgAMAAAAAAAAAcpxAH4AXnNxAH4ADAAAAAAAADi6cQB+ABFzcQB+AAwAAAAAAAA4unEAfgASc3EAfgAMAAAAAAAAOLpxAH4AE3NxAH4ADAAAAAAAAAjzeHEAfgA1cQB+AAhzcQB+AGB1cQB+AGMAAAADcQB+AGV0ABNfY29uc3RfZmU5ZjQzZTFfdXJpdAADbWVkcHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDHcQB+AAgAAAAAAABxAH4A0nBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDHcQB+AAgBAAAAAAFxAH4A0XNxAH4AawAAAAD/////dAAuaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL21lZGljYWwvaGFzTWVkaWNhdGlvbnEAfgB0cHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMdxAH4ACAAAAAAAAHEAfgBlcHBwc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAB4c3EAfgCjAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgA0TAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAkcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ADJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDecQB+AAhzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDjcQB+AAgAAAAAAABxAH4AZXABeHNxAH4AowAAAAF3BAAAAAFzcQB+AKUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAecQB+AAhzcQB+AOAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDmcQB+AAhzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDncQB+AAgAAAAAAABxAH4AZXABcQB+AN94AXNyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtTGlzdAJSevzE8kT7AgACWwAIZWxlbWVudHN0ADFbTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW07TAAMZWxlbWVudHNMaXN0cQB+AB14cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAYcQB+AAh1cgAxW0xvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtO9BntqPizhT1AgAAeHAAAAABc3IALm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW2PLRup+WJpDgIABFoAHWFnZ3JlZ2F0ZU9wZXJhdG9ySW5FeHByZXNzaW9uTAAEbmFtZXEAfgA0TAAPcHJvamVjdGlvbkFsaWFzcQB+ADRMABBzb3VyY2VFeHByZXNzaW9udAAvTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvRXh0ZW5zaW9uRWxlbTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDrcQB+AAgBcQB+AN9wc3EAfgClAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AFQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAAAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhwcQB+AAhxAH4A83EAfgAIcQB+APIBc3EAfgDpAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIdXEAfgDsAAAAAXNxAH4A7gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APVxAH4ACAFxAH4A33BxAH4A8XNyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAdeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgCjAAAAAXcEAAAAAXEAfgD3eHEAfgD8cHEAfgAIc3EAfgAiAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8nEAfgAIc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIc3EAfgAxAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/nEAfgAIcHNxAH4AMQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AP9xAH4ACHBzcQB+AFcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEAcQB+AAhzcQB+AGB1cQB+AGMAAAADcQB+AGVxAH4AZnEAfgBncHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEBcQB+AAgBAAAAAAFxAH4AZ3EAfgBtc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BAXEAfgAIAQAAAAABcQB+AGZxAH4AcHEAfgB0cHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQFxAH4ACAAAAAAAAHEAfgBlcHBzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEAcQB+AAhzcQB+AH4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEHcQB+AAhwc3EAfgBXAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCHEAfgAIc3EAfgBgdXEAfgBjAAAAA3QAB3BhdGllbnRxAH4Ai3EAfgCMcHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEJcQB+AAgAAAAAAABxAH4AjHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEJcQB+AAgBAAAAAAFxAH4Ai3EAfgCPcQB+AHRwc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCXEAfgAIAAAAAAAAcQB+AQxwcHNxAH4AVwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQhxAH4ACHNxAH4AYHVxAH4AYwAAAAN0AANlbmNxAH4AnHEAfgCdcHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEQcQB+AAgAAAAAAABxAH4AnXBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEQcQB+AAgBAAAAAAFxAH4AnHEAfgCgcQB+AHRwc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAAAAAAAAcQB+ARNwcAAAc3EAfgCjAAAAAXcEAAAAAXNxAH4ApQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQdxAH4ACHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAAAAAAAAHQABGRhdGVwdAAHb3B0RGF0ZXhwc3EAfgBXAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIc3EAfgBgdXEAfgBjAAAAA3QAB3BhdGllbnRxAH4A0XEAfgDScHBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEccQB+AAgAAAAAAABxAH4A0nBzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEccQB+AAgBAAAAAAFxAH4A0XEAfgDVcQB+AHRwc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHHEAfgAIAAAAAAAAcQB+AR9wcHBzcQB+AKkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD+cQB+AAhzcQB+AGgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEjcQB+AAgAAAAAAABxAH4AqHBzcQB+ALQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEjcQB+AAhxAH4AvXEAfgDFc3IAEWphdmEudXRpbC5Db2xsU2VyV46rtjobqBEDAAFJAAN0YWd4cAAAAAJ3BAAAAAB4c3EAfgCjAAAAAXcEAAAAAXNxAH4A3AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AP1xAH4ACHEAfgDfc3EAfgDgAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BKXEAfgAIc3EAfgBoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BKnEAfgAIAAAAAAAAdAAHcGF0aWVudHABeHNxAH4AowAAAAF3BAAAAAFxAH4A8XhxAH4ACHNxAH4A4AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHNxAH4AaAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AS5xAH4ACAAAAAAAAHEAfgEscAFxAH4A33NyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHEAfgDtcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE {\n ?patient a .\n OPTIONAL {\n ?patient ?enc .\n ?enc ?date .\n BIND(?date AS ?optDate)\n }\n FILTER (?optDate >= \"2024-06-01\"^^)\n OPTIONAL {\n ?patient ?med .\n }\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "37", + "maxDepth" : "10", + "leafNodeCount" : "18", + "maxBranchingFactor" : "3", + "joinNodeCount" : "3", + "filterNodeCount" : "1", + "statementPatternCount" : "4", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=2,JoinIterator=1", + "structureSignatureRawSha256" : "05c79d2e87021f3ee468978d603669455e94c941c1a5b7a64fe3bdc98a479d68", + "structureSignatureNormalizedSha256" : "05c79d2e87021f3ee468978d603669455e94c941c1a5b7a64fe3bdc98a479d68", + "joinAlgorithmSignatureSha256" : "6c943329bdeb85126d71d5fd27c3abca724c5d65afe489d3b39cfd6635519e21", + "actualResultSizesSignatureSha256" : "5d651384c06cd8f4243d3902d96312077655b5e71e5af7d3a1a7ab62d94fc1d2", + "estimatesSignatureSha256" : "3469c30f72275cb3ddd806675ccdb292bf906b332f9aacab59a9b5381b2394e3", + "joinAlgorithmMultisetSignatureSha256" : "900dcda8d29be3ca14a0ac6758c0c5dc8fbd3d3bbdd2c43357076a98232bd18b", + "actualResultSizesMultisetSignatureSha256" : "536a61917b3724bd445b734b62a920884657eae16af6ef6a22bcf449005d0c7e", + "estimatesMultisetSignatureSha256" : "b3a56ca3de6137a430fbda6d653452f3950e9c826afb3c467463b24058d83d50", + "statementPatternEstimatesMultisetSignatureSha256" : "84c655fbcdcce779ddd6df039e561477e90585d24dbce0ec0c983c42a3d5f234", + "statementPatternEstimateTokenCount" : "4", + "modeledWorkUnits" : "326296.449999999997", + "modeledInputRowsSum" : "245586", + "modeledOutputRowsSum" : "205997", + "modeledJoinInputRowsSum" : "126911", + "modeledJoinOutputRowsSum" : "79083", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=4994.400000000001;filter=7491.299999999999;group=20398.699999999997;join=205994;projection=0.05;scan=87418;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=1;group=2;join=3;projection=3;scan=4;unknown=18", + "modeledOperatorCountByCategorySignatureSha256" : "f7c4a9f600da3301037510d22d3e42a1782f3fca65b37345dd8a78bc2459571a", + "modeledInputRowsByCategory" : "distinct=0;extension=24972;filter=24971;group=29141;join=79083;projection=1;scan=87418;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "e307d4e808028a8d7d34b5fc29b88d748d8f41e8b1525312816d711280e7cd95", + "modeledOutputRowsByCategory" : "distinct=0;extension=24972;filter=14522;group=1;join=79083;projection=1;scan=87418;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "d4af5472a9d0f010891c70568b0dab2a9df43a0f0b9d8eb4c3ffbf243ac44ee8", + "modeledFilterInputRowsSum" : "24971", + "modeledFilterOutputRowsSum" : "14522", + "modeledFilterPassRatio" : "0.581555", + "modeledFilterRejectRatio" : "0.418445", + "modeledJoinWorkByAlgorithm" : "JoinIterator=74913;LeftJoinIterator=131081", + "modeledJoinWorkByAlgorithmSignatureSha256" : "cf86e4daecb9c4b74c8ee9e47f46359c33665ea4c092ccc9d668e4af62905c16", + "modeledWorkVector" : "workUnits=326296.449999999997|barrierCount=4|joinInputRowsSum=126911|joinOutputRowsSum=79083|operatorCountByCategory=distinct=2;extension=4;filter=1;group=2;join=3;projection=3;scan=4;unknown=18|joinWorkByAlgorithm=JoinIterator=74913;LeftJoinIterator=131081|categories=distinct=0;extension=4994.400000000001;filter=7491.299999999999;group=20398.699999999997;join=205994;projection=0.05;scan=87418;unknown=0", + "modeledWorkVectorSignatureSha256" : "7bc8394815101dcdb7deb94c22c11f581f459b2ed5bdb88de9197529a1939cd6", + "operatorWorkByTypeAlgorithm" : "Compare (>=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optDate)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=4994.400000000001|inputRows=24972|outputRows=24972|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=1|workUnits=7491.299999999999|inputRows=24971|outputRows=14522|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=20398.699999999997|inputRows=29141|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=1|workUnits=74913|inputRows=24971|outputRows=24971|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=2|workUnits=131081|inputRows=54112|outputRows=54112|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=4|workUnits=87418|inputRows=87418|outputRows=87418|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"2024-06-01\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=date)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=enc)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=med)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optDate)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=patient)[UNKNOWN]|nodes=5|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "26bf31e51fabc63fb4fe5afd13f6e52f4d8be2af60768c642b0609dcf53dae4a", + "operatorWorkTopContributors" : "LeftJoin[LeftJoinIterator]:131081;StatementPattern[UNKNOWN]:87418;Join[JoinIterator]:74913;Group ()[UNKNOWN]:20398.699999999997;Filter[UNKNOWN]:7491.299999999999;Extension[UNKNOWN]:4994.400000000001;Projection[UNKNOWN]:0.05;Compare (>=)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "4", + "estimateActualAbsErrorSum" : "12449", + "estimateActualRelativeErrorMean" : "0.10679969802", + "estimateActualQErrorP50" : "1", + "estimateActualQErrorP95" : "1.745806374311", + "estimateActualQErrorMax" : "1.745806374311", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "237.05695518166095", + "costEstimateMax" : "158.0379701211073", + "resultSizeEstimateSum" : "74969", + "resultSizeEstimateMax" : "24971", + "resultSizeActualSum" : "205997", + "resultSizeActualMax" : "29141", + "modeledHasNextCallCountSum" : "299709", + "modeledHasNextTrueCountSum" : "243538", + "modeledHasNextTimeNanosSum" : "1197814045", + "modeledNextCallCountSum" : "181027", + "modeledNextTimeNanosSum" : "12032100", + "modeledJoinRightIteratorCreateCountSum" : "95656", + "modeledJoinLeftBindingSetConsumedCountSum" : "143484", + "modeledJoinRightBindingSetConsumedCountSum" : "158166", + "modeledJoinTelemetryNodeCount" : "3", + "modeledJoinRightBindingsPerLeftRatio" : "1.102325", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.653487", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "31885.333333", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "47828", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "52722", + "modeledSourceRowsScannedSum" : "24971", + "modeledSourceRowsMatchedSum" : "14522", + "modeledSourceRowsFilteredSum" : "10449", + "modeledSourceFilterOutRatio" : "0.418445", + "modeledIteratorTelemetryNodeCount" : "38", + "modeledHasNextTimeMillisSum" : "1197.814045", + "modeledNextTimeMillisSum" : "12.0321", + "modeledHasNextPerNextRatio" : "1.655604", + "modeledHasNextTruePerNextRatio" : "1.345313" + } + } + } +} \ No newline at end of file From b065b37b73658243c1a315a2ebefd37239657b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Fri, 17 Apr 2026 23:29:08 +0200 Subject: [PATCH 04/43] wip --- .../rdf4j/query/algebra/evaluation/ArrayBindingSet.java | 6 ++---- .../iterator/BadlyDesignedLeftJoinIterator.java | 9 +++++++++ .../rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java | 4 +--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/ArrayBindingSet.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/ArrayBindingSet.java index 0a2736e6d07..0f71b372178 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/ArrayBindingSet.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/ArrayBindingSet.java @@ -56,6 +56,7 @@ public interface SortedBindingNamesCache { .iri("urn:null:d57c56f3-41a9-468e-8dce-5706ebdef84c_e88d9e52-27cb-4056-a889-1ea353fa6f0c"); private static final VarHandle LAST_EQUALS_MISMATCH_INDEX; private static int lastEqualsMismatchIndex; + static { try { LAST_EQUALS_MISMATCH_INDEX = MethodHandles.lookup() @@ -138,14 +139,11 @@ public ArrayBindingSet(ArrayBindingSet toCopy, String... names) { public ArrayBindingSet(ArrayBindingSet toCopy, String[] names, SortedBindingNamesCache sharedSortedBindingNamesCache) { this.bindingNames = names; - this.values = Arrays.copyOf(toCopy.values, toCopy.values.length); this.sharedSortedBindingNamesCache = sharedSortedBindingNamesCache; this.empty = toCopy.empty; this.cachedSize = toCopy.cachedSize; - if (sharedSortedBindingNamesCache != null) { - this.activeBindingMask = calculateActiveBindingMask(); - } + this.activeBindingMask = toCopy.activeBindingMask; assert !this.empty || size() == 0; } diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/BadlyDesignedLeftJoinIterator.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/BadlyDesignedLeftJoinIterator.java index bec5afe007f..695d38cc1ab 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/BadlyDesignedLeftJoinIterator.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/BadlyDesignedLeftJoinIterator.java @@ -112,6 +112,15 @@ private BindingSet getNextLeftJoinElement() throws QueryEvaluationException { try { CloseableIteration nextRightIter = rightIter; while (nextRightIter == null || nextRightIter.hasNext() || leftIter.hasNext()) { + if (isClosed()) { + return null; + } + if (Thread.interrupted()) { + Thread.currentThread().interrupt(); + close(); + return null; + } + BindingSet leftBindings = null; if (nextRightIter == null) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index a0d356d5af8..ecb129eaff9 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -36,7 +36,6 @@ import org.eclipse.rdf4j.query.TupleQueryResult; import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; -import org.eclipse.rdf4j.query.TupleQuery; import org.eclipse.rdf4j.query.explanation.Explanation; import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; import org.eclipse.rdf4j.repository.RepositoryResult; @@ -174,6 +173,7 @@ public long executeQuery() { try (var connection = repository.getConnection()) { long count; TupleQuery tupleQuery = connection.prepareTupleQuery(query); + tupleQuery.setMaxExecutionTime(5 * 60); try (var evaluate = tupleQuery.evaluate()) { count = evaluate .stream() @@ -413,8 +413,6 @@ public void tearDown() { // restoreBenchmarkEstimatorProperties(); } - - @Test public void benchmarkQuery() throws IOException { themeName = "LIBRARY"; From 385f650646472ed54ba6efbcad221e65fe99f1e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Fri, 17 Apr 2026 23:29:11 +0200 Subject: [PATCH 05/43] wip --- .../optimizer/QueryJoinOptimizer.java | 2 +- .../org/eclipse/rdf4j/query/algebra/Join.java | 2 -- .../sail/base/SketchBasedJoinEstimator.java | 18 ++++++++++-------- .../sail/base/SketchJoinOrderPlanner.java | 3 +-- .../sail/base/SketchJoinOrderReorderer.java | 2 +- .../SketchEstimatorThemeJoinAccuracyTest.java | 2 +- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index 3f9afbdad75..ac550791c10 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -315,7 +315,7 @@ private Deque orderJoinArgsPreservingSeparators(List joinA // double cardinality1 = statistics.getCardinality(new Join(tupleExpr, expr)); // } // - //// System.out.println("left: "+tupleExpr.toString().trim()); + //// System.out.println("left: "+tupleExpr.toString().trim()); //// System.out.println("right: "+expr.toString().trim()); //// System.out.println("estimated join cardinality: "+statistics.getCardinality(new Join(tupleExpr, expr))); //// System.out.println(); diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java index 7eb0a53c7f1..514a3f31cda 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/Join.java @@ -59,8 +59,6 @@ public void visit(QueryModelVisitor visitor) throws X { visitor.meet(this); } - - @Override public boolean equals(Object other) { return other instanceof Join && super.equals(other); diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 7f17b422f82..162598096e4 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -149,11 +149,13 @@ * Example (configure default context and reduce refresh cadence): *

* - *
{@code
+ * 
+ * {@code
  * System.setProperty("org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.defaultContextString", "urn:ctx");
  * System.setProperty("org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.refreshSleepMillis", "500");
  * var est = new SketchBasedJoinEstimator(store, Config.defaults().withNominalEntries(128));
- * }
+ * } + *
*/ public class SketchBasedJoinEstimator { @@ -4135,7 +4137,7 @@ private double cardinalityWithInitiallyBoundVars(List tupleExprs, Set algorithm = JoinOrderPlanner.Algorithm.GREEDY; SketchJoinOrderPlanner.PlanOutcome outcome = new SketchJoinOrderPlanner(this, JoinOrderWorkAdjuster.NO_OP, tupleExprs, bound) - .plan(algorithm); + .plan(algorithm); recordRobustCardinalityPath(outcome.path()); return outcome.plan() .map(JoinOrderPlanner.JoinOrderPlan::getEstimatedFinalRows) @@ -4660,14 +4662,14 @@ private Resource exactBoundResource(Var var) { if (var == null || !var.hasValue() || var.getValue() == null) { return null; } - return var.getValue() instanceof Resource resource ? resource : null; + return var.getValue()instanceof Resource resource ? resource : null; } private IRI exactBoundIri(Var var) { if (var == null || !var.hasValue() || var.getValue() == null) { return null; } - return var.getValue() instanceof IRI iri ? iri : null; + return var.getValue()instanceof IRI iri ? iri : null; } private Value exactBoundValue(Var var) { @@ -4684,7 +4686,7 @@ private Resource[] exactBoundContexts(Var contextVar) { if (contextVar.getValue() == null) { return new Resource[] { null }; } - if (!(contextVar.getValue() instanceof Resource resource)) { + if (!(contextVar.getValue()instanceof Resource resource)) { return null; } return new Resource[] { resource }; @@ -4762,7 +4764,7 @@ private double estimatePatternRows(StatementPattern pattern) { getValueOrNull(pattern.getPredicateVar()), getValueOrNull(pattern.getObjectVar()), getValueOrNull(pattern.getContextVar())) - .estimate(); + .estimate(); } private Component resolveJoinComponent(StatementPattern pattern) { @@ -5140,7 +5142,7 @@ private LookupAnalysis analyzeListMemberLookup(StatementPattern pattern, ValueEx } List arguments = ((ListMemberOperator) condition).getArguments(); - if (arguments == null || arguments.size() < 2 || !(arguments.get(0) instanceof Var listedVar) + if (arguments == null || arguments.size() < 2 || !(arguments.get(0)instanceof Var listedVar) || listedVar.getName() == null) { return LookupAnalysis.none(); } diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java index 9c4f26a4012..ed645fa58bf 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java @@ -88,8 +88,7 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { } StatePlan result = switch (algorithm) { - case DYNAMIC_PROGRAMMING -> - optimizeDynamicProgramming(); + case DYNAMIC_PROGRAMMING -> optimizeDynamicProgramming(); // optimizeGreedy(); case GREEDY -> optimizeGreedy(); }; diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java index f1012159c6c..fb0a54d5b21 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java @@ -78,7 +78,7 @@ Optional plan(List args, Set SketchJoinOrderPlanner.PlanOutcome outcome = new SketchJoinOrderPlanner(estimator, workAdjuster, plannedExpressions, plannedBound) - .plan(algorithm); + .plan(algorithm); estimator.recordJoinOrderPlannerPath(outcome.path()); return outcome.plan().map(plan -> prependBindingPrefixes(plan, planningInputs.prefixExpressions())); } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java index e1d6b711422..b604286311a 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/SketchEstimatorThemeJoinAccuracyTest.java @@ -480,7 +480,7 @@ private static long exactJoinRowsForLocatedAtName(SailRepository repository) { long total = 0L; while (locatedAtStatements.hasNext()) { Statement statement = locatedAtStatements.next(); - if (statement.getObject() instanceof Resource branch) { + if (statement.getObject()instanceof Resource branch) { total += branchNameRows.getOrDefault(branch, 0); } } From 507069be8dc193951476173cb00a2549e05ead34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Fri, 17 Apr 2026 23:31:28 +0200 Subject: [PATCH 06/43] wip --- .../sail/lmdb/benchmark/results-develop.md | 11941 ++++++++++++++++ 1 file changed, 11941 insertions(+) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md new file mode 100644 index 00000000000..8437131af70 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md @@ -0,0 +1,11941 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 49.017 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 179.672 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 44.546 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 86.459 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 109.599 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 62.100 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 63.834 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 54.918 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.461 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 258.075 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1505.789 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 667.950 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.064 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 7.910 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.082 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.071 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.093 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 1036.339 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.096 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 8.319 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 851.356 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.813 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.688 ms/op + + +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 686.809 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 307.734 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 41.203 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.520 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 150.699 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.806 ms/op + +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1002.313 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 68.500 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 162.905 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 214.924 ms/op + + +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 240.589 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 334.864 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.375 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 137.681 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 68.308 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.112 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.058 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.361 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.106 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.543 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.838 ms/op + + +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 386.619 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1164.451 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 613.459 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 117.619 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 219.282 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.771 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1387.033 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 125.972 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1315.680 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1526.742 ms/op + + + +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 39.629 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 88.189 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.787 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 154.093 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 149.508 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 20.687 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 112.275 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 53.507 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 234.390 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 248.271 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 207.139 ms/op + +ThemeQueryBenchmark.executeQuery TRAIN 12 avgt 1982.307 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 49.504 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 102.032 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 4.836 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 395.556 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 5.664 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 13.844 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 90.314 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 13.643 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.930 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.201 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 518.380 ms/op + +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 12 avgt 1638.738 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.250 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.746 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 44.187 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 15.385 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 34.718 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.399 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.384 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 24.115 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 31.440 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 18.325 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 20108.719 ms/op + +ThemeQueryBenchmark.executeQuery PHARMA 12 avgt 156.595 ms/op +``` + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:13:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.609 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=333) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=21, resultSizeEstimate=433) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=5.8K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +49.017 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 49.017 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 0.96% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +191.905 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="DX-202") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=3.2K, resultSizeEstimate=1.1K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.1K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=1.7M, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { + ?entity ?code . + ?entity a . + } + UNION + { + ?entity a . + ?entity ?code . + } + FILTER ((?code = ?target) || (?code = "DX-202")) + OPTIONAL { + ?entity ?alt . + } +} + +179.672 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 179.672 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 1.92% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.356 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5480c6497279ee74c49a4e689fdebec77e001234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=146, resultSizeEstimate=433) [left] + │ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=21, resultSizeEstimate=433) [left] + │ ║ │ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=21, resultSizeEstimate=433) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=14.5K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_5480c6497279ee74c49a4e689fdebec77e001234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5480c6497279ee74c49a4e689fdebec77e001234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a . + ?enc ?practitioner . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +44.546 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.546 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 2.88% complete, ETA 00:14:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +96.505 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=333) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=_anon_path_73463994c940c8141ae8421ce9b0cb10b940123456, anonymous) (bindingState=unbound) + │ ║ │ ║ └── Join (JoinIterator) [right] + │ ║ │ ║ ╠══ StatementPattern (costEstimate=61, resultSizeEstimate=15.1K) [left] + │ ║ │ ║ ║ s: Var (name=_anon_path_73463994c940c8141ae8421ce9b0cb10b940123456, anonymous) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=535) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=396) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +86.459 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 86.459 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 3.85% complete, ETA 00:14:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +115.776 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=15.1K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=219, resultSizeEstimate=433) [left] + │ ║ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=60, resultSizeEstimate=14.5K) [left] + │ ║ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="DX-200") + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="DX-201") + │ ║ ║ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ ║ s: Var (name=cond) (bindingState=bound) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=433) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +109.599 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 109.599 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 4.81% complete, ETA 00:13:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +67.686 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ StatementPattern (resultSizeEstimate=14.5K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=333) [left] + │ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ └── Join (JoinIterator) [right] + │ ║ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=61, resultSizeEstimate=15.1K) [left] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=value) (bindingState=bound) + │ ║ ║ ValueConstant (value="50"^^) + │ ║ ║ ValueConstant (value="60"^^) + │ ║ ║ ValueConstant (value="70"^^) + │ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=535) + │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a . + ?patient ?enc . + ?enc ?obs . + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +62.100 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 62.100 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 5.77% complete, ETA 00:13:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +74.948 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=333) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=10.2K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=5.8K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +63.834 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 63.834 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 6.73% complete, ETA 00:13:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +61.331 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=5.8K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=526, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +54.918 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 54.918 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 7.69% complete, ETA 00:13:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +62.996 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=14.5K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=333) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) + │ ║ │ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=21, resultSizeEstimate=433) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +56.461 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 56.461 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 8.65% complete, ETA 00:13:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +282.165 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ │ ║ ├── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ └── Join (JoinIterator) [right] + │ ║ │ ║ ╠══ StatementPattern (costEstimate=1.3K, resultSizeEstimate=433) [left] + │ ║ │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ ╚══ Join (JoinIterator) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=60, resultSizeEstimate=14.5K) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ └── Filter [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=433) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Join (JoinIterator) + │ ║ ╠══ Filter (new scope) [left] + │ ║ ║ ├── Compare (<) + │ ║ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="60"^^) + │ ║ ║ └── StatementPattern (costEstimate=355.1K, resultSizeEstimate=535) + │ ║ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (costEstimate=123, resultSizeEstimate=15.1K) [right] + │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ o: Var (name=obs) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a . + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + ?enc ?obs . + } +} + +258.075 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 258.075 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 9.62% complete, ETA 00:13:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 11) + +# Run progress: 10.58% complete, ETA 00:16:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a med:Patient ; + med:hasEncounter ?encounter . + ?encounter a med:Encounter ; + med:hasObservation ?observation . + OPTIONAL { + ?root med:name ?patientName . + OPTIONAL { + ?root med:hasMedication ?medication . + OPTIONAL { + ?medication med:code ?medicationCode . + OPTIONAL { ?medication med:dosage ?medicationDosage . } + } + } + } + OPTIONAL { + ?encounter med:recordedOn ?recordedOn . + OPTIONAL { + ?encounter med:handledBy ?practitioner . + OPTIONAL { ?practitioner med:name ?practitionerName . } + } + } + OPTIONAL { + ?encounter med:hasCondition ?condition . + OPTIONAL { + ?condition med:code ?conditionCode . + OPTIONAL { ?condition med:description ?conditionDescription . } + } + } + OPTIONAL { + ?observation med:value ?observationValue . + OPTIONAL { ?observation med:unit ?observationUnit . } + } +} +ORDER BY ?root ?encounter ?observation + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000600001112af0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1730.972 ms/op +Iteration 1: ### Optimized Query ### +Reduced + Order + OrderElem (ASC) + Var (name=root) (bindingState=unbound) + OrderElem (ASC) + Var (name=encounter) (bindingState=unbound) + OrderElem (ASC) + Var (name=observation) (bindingState=unbound) + Projection + ╠══ ProjectionElemList + ║ ProjectionElem "root" + ║ ProjectionElem "encounter" + ║ ProjectionElem "observation" + ║ ProjectionElem "patientName" + ║ ProjectionElem "medication" + ║ ProjectionElem "medicationCode" + ║ ProjectionElem "medicationDosage" + ║ ProjectionElem "recordedOn" + ║ ProjectionElem "practitioner" + ║ ProjectionElem "practitionerName" + ║ ProjectionElem "condition" + ║ ProjectionElem "conditionCode" + ║ ProjectionElem "conditionDescription" + ║ ProjectionElem "observationValue" + ║ ProjectionElem "observationUnit" + ╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ Join (JoinIterator) [left] + │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=146, resultSizeEstimate=433, indexName=ospc) [left] + │ ║ │ ║ │ s: Var (name=encounter) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── Join (JoinIterator) [right] + │ ║ │ ║ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ ║ o: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ ╚══ Join (JoinIterator) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=333) [left] + │ ║ │ ║ │ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=123, resultSizeEstimate=15.1K) [right] + │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=396) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ │ │ o: Var (name=patientName) (bindingState=unbound) + │ ║ │ └── LeftJoin [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=5.8K) [left] + │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=medication) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ │ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ │ o: Var (name=medicationCode) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ │ o: Var (name=medicationDosage) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=433) [left] + │ ║ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ ║ o: Var (name=recordedOn) (bindingState=unbound) + │ ║ ╚══ LeftJoin [right] + │ ║ ├── StatementPattern (resultSizeEstimate=433) [left] + │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=396) [right] + │ ║ s: Var (name=practitioner) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=practitionerName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── StatementPattern (resultSizeEstimate=14.5K) [left] + │ │ s: Var (name=encounter) (bindingState=bound) + │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ │ o: Var (name=condition) (bindingState=unbound) + │ └── LeftJoin [right] + │ ╠══ StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ s: Var (name=condition) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=conditionCode) (bindingState=unbound) + │ ╚══ StatementPattern (resultSizeEstimate=0) [right] + │ s: Var (name=condition) (bindingState=bound) + │ p: Var (name=_const_25295cd4_uri, value=http://example.com/theme/medical/description, anonymous) + │ o: Var (name=conditionDescription) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=535) [left] + ║ s: Var (name=observation) (bindingState=bound) + ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + ║ o: Var (name=observationValue) (bindingState=unbound) + ╚══ StatementPattern (resultSizeEstimate=0) [right] + s: Var (name=observation) (bindingState=bound) + p: Var (name=_const_996c3ac_uri, value=http://example.com/theme/medical/unit, anonymous) + o: Var (name=observationUnit) (bindingState=unbound) + +SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicationCode ?medicationDosage ?recordedOn ?practitioner ?practitionerName ?condition ?conditionCode ?conditionDescription ?observationValue ?observationUnit WHERE { + ?encounter a . + ?root ?encounter . + ?root a . + ?encounter ?observation . + OPTIONAL { + ?root ?patientName . + OPTIONAL { + ?root ?medication . + OPTIONAL { + ?medication ?medicationCode . + OPTIONAL { + ?medication ?medicationDosage . + } + } + } + } + OPTIONAL { + ?encounter ?recordedOn . + OPTIONAL { + ?encounter ?practitioner . + OPTIONAL { + ?practitioner ?practitionerName . + } + } + } + OPTIONAL { + ?encounter ?condition . + OPTIONAL { + ?condition ?conditionCode . + OPTIONAL { + ?condition ?conditionDescription . + } + } + } + OPTIONAL { + ?observation ?observationValue . + OPTIONAL { + ?observation ?observationUnit . + } + } +} +ORDER BY ?root ?encounter ?observation + +1505.789 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1505.789 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 12) + +# Run progress: 11.54% complete, ETA 00:15:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { ?root a med:Patient . } + UNION + { ?root a med:Encounter . } + OPTIONAL { + ?root med:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root med:hasEncounter ?optEncounter . + OPTIONAL { ?optEncounter med:recordedOn ?optDate . } + OPTIONAL { ?optEncounter med:handledBy ?optPractitioner . } + } + OPTIONAL { + ?root med:hasMedication ?optMedication . + OPTIONAL { ?optMedication med:code ?optMedicationCode . } + OPTIONAL { ?optMedication med:dosage ?optDosage . } + } + OPTIONAL { + ?root med:hasEncounter ?optEncounter2 . + ?optEncounter2 med:hasCondition ?optCondition . + OPTIONAL { ?optCondition med:code ?optConditionCode . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +745.214 ms/op +Iteration 1: ### Optimized Query ### +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optConditionCode" + │ ProjectionElem "optEncounter2" + │ ProjectionElem "optLabel" + │ ProjectionElem "optEncounter" + │ ProjectionElem "optPractitioner" + │ ProjectionElem "optMedicationCode" + │ ProjectionElem "optDosage" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── Union [left] + ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=333, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=433, indexName=ospc) + ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + ║ │ ║ └── Extension [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=396) + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ ╚══ ExtensionElem (optLabel) + ║ │ ║ Var (name=optName) (bindingState=bound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── LeftJoin [left] + ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) [left] + ║ │ │ ║ s: Var (name=root) (bindingState=bound) + ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + ║ │ │ ║ o: Var (name=optEncounter) (bindingState=unbound) + ║ │ │ ╚══ StatementPattern (resultSizeEstimate=433) [right] + ║ │ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + ║ │ │ o: Var (name=optDate) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=433) [right] + ║ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + ║ │ o: Var (name=optPractitioner) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ LeftJoin [left] + ║ ║ ├── StatementPattern (resultSizeEstimate=5.8K) [left] + ║ ║ │ s: Var (name=root) (bindingState=bound) + ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + ║ ║ │ o: Var (name=optMedication) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + ║ ║ s: Var (name=optMedication) (bindingState=bound) + ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + ║ ║ o: Var (name=optMedicationCode) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + ║ s: Var (name=optMedication) (bindingState=bound) + ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + ║ o: Var (name=optDosage) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Join (JoinIterator) [left] + │ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ o: Var (name=optEncounter2) (bindingState=unbound) + │ ╚══ StatementPattern (costEstimate=120, resultSizeEstimate=14.5K) [right] + │ s: Var (name=optEncounter2) (bindingState=bound) + │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ o: Var (name=optCondition) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=1.1K) [right] + s: Var (name=optCondition) (bindingState=bound) + p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + o: Var (name=optConditionCode) (bindingState=unbound) + +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optEncounter . + OPTIONAL { + ?optEncounter ?optDate . + } + OPTIONAL { + ?optEncounter ?optPractitioner . + } + } + OPTIONAL { + ?root ?optMedication . + OPTIONAL { + ?optMedication ?optMedicationCode . + } + OPTIONAL { + ?optMedication ?optDosage . + } + } + OPTIONAL { + ?root ?optEncounter2 . + ?optEncounter2 ?optCondition . + OPTIONAL { + ?optCondition ?optConditionCode . + } + } +} + +667.950 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 667.950 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:15:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.076 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ │ ╚══ Join (JoinIterator) [right] + │ ║ │ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ │ └── Filter [right] + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ Var (name=v) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=385) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.064 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.064 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.46% complete, ETA 00:15:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.758 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ╠══ Or + │ ║ │ ║ ║ ├── Compare (=) + │ ║ │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ │ ValueConstant (value="user0") + │ ║ │ ║ ║ └── Compare (=) + │ ║ │ ║ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="user1") + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=385) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [left] + │ ║ │ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [left] + │ ║ │ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_7758fdc3a338a8874039bb85e37313cddb640123456) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + VALUES ?u3 { } + ?u1 ?u2 . + FILTER (?u1 != ?u2) + ?u2 ?u1 . + ?u1 ?u3 . + FILTER (?u1 != ?u3) + ?u3 ?u1 . + ?u2 ?u3 . + FILTER (?u2 != ?u3) + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_7758fdc3a338a8874039bb85e37313cddb640123456) + } +} + +7.910 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.910 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.42% complete, ETA 00:14:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.101 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── And + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.082 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.082 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.38% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.087 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=385) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.071 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.071 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 16.35% complete, ETA 00:14:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.108 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Not + │ ║ ║ │ ║ Exists + │ ║ ║ │ ║ Extension + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── ExtensionElem (_anon_path_158413944b1a5e08ab4309b47e3476f49e77520) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_158413944b1a5e08ab4309b47e3476f49e77520) + } + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.093 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.093 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 17.31% complete, ETA 00:13:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1077.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Union (new scope) [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ Extension (new scope) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=196.6K, resultSizeEstimate=98.3K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── ExtensionElem (activity) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ Extension (new scope) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +1036.339 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1036.339 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 18.27% complete, ETA 00:13:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.113 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_454722a672b5edc30b489bb690adea67efd5a60123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_454722a672b5edc30b489bb690adea67efd5a60123) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_454722a672b5edc30b489bb690adea67efd5a60123) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.096 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.096 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 19.23% complete, ETA 00:13:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.324 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ └── Filter [right] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Exists + │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_9944e1fe4ffdb6134be6bf0489da7ee9d350012345678) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_9944e1fe4ffdb6134be6bf0489da7ee9d350012345678) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +8.319 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.319 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 20.19% complete, ETA 00:13:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +931.051 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=32.8K, resultSizeEstimate=98.3K) [left] + │ ║ ║ │ ║ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ ║ │ ├── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) [left] + │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +851.356 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 851.356 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 21.15% complete, ETA 00:12:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +7.607 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=a) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=c) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=d) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=385) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + ?d ?a . + FILTER (?d != ?a) + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +6.813 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.813 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 22.12% complete, ETA 00:12:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.051 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=385) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=a) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ ║ │ Var (name=e) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=e) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + VALUES (?c ?d) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + VALUES ?e { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + ?d ?e . + FILTER (?d != ?e) + ?e ?a . + FILTER (?a != ?c) + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +2.688 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.688 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 11) + +# Run progress: 23.08% complete, ETA 00:12:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a social:User ; + social:follows ?followed . + ?post social:authored ?root . + OPTIONAL { + ?root social:name ?rootName . + OPTIONAL { + ?followed social:name ?followedName . + OPTIONAL { ?followed social:follows ?followedFollows . } + } + } + OPTIONAL { + ?post social:authored ?postAuthor . + OPTIONAL { + ?postAuthor social:name ?postAuthorName . + OPTIONAL { ?postAuthor social:follows ?postAuthorFollows . } + } + } +} +ORDER BY ?root ?followed ?post + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 12) + +# Run progress: 24.04% complete, ETA 00:13:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT DISTINCT * WHERE { + { ?root a social:User . } + UNION + { ?root a social:Post . } + OPTIONAL { + ?root social:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root social:follows ?optFollowed . + OPTIONAL { ?optFollowed social:name ?optFollowedName . } + } + OPTIONAL { + ?post social:authored ?root . + OPTIONAL { ?root social:follows ?optAuthorFollows . } + OPTIONAL { ?post social:authored ?optPostAuthor . } + } + OPTIONAL { + { ?optFollower social:follows ?root . } + UNION + { ?root social:follows ?optFollower . } + OPTIONAL { ?optFollower social:name ?optFollowerName . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:14:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +763.173 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=172.2K) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=60, resultSizeEstimate=3.6K) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +686.809 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 686.809 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 25.96% complete, ETA 00:14:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +335.374 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Member 3") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=329) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=533.0K, resultSizeEstimate=1.1K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=172.2K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?entity a . + ?entity ?name . + } + FILTER ((?name = ?target) || (?name = "Member 3")) + OPTIONAL { + ?entity ?copy . + } +} + +307.734 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 307.734 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 26.92% complete, ETA 00:13:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +48.299 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_217a626eda5519b47f4b287d3847123289c01, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=260, resultSizeEstimate=515) [left] + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=authorName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Author 1") + │ ║ │ │ ValueConstant (value="Author 2") + │ ║ │ │ ValueConstant (value="Author 3") + │ ║ │ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_217a626eda5519b47f4b287d3847123289c01) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_217a626eda5519b47f4b287d3847123289c01) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +41.203 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.203 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 27.88% complete, ETA 00:13:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.805 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=176, resultSizeEstimate=348) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=348) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ o: Var (name=member) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=348) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +45.520 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.520 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 28.85% complete, ETA 00:13:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +166.156 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=172.2K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=533, resultSizeEstimate=1.1K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +150.699 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 150.699 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 29.81% complete, ETA 00:12:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +12.239 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=348) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=348) [left] + │ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=348) + │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ o: Var (name=loanDate) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^ } + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +10.806 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.806 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 30.77% complete, ETA 00:12:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 31.73% complete, ETA 00:13:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1106.235 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Exists + │ ║ │ ║ │ StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=1.2K, resultSizeEstimate=3.6K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=3.6K) [left] + │ ║ │ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ╚══ StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) + │ ║ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.6K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +1002.313 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1002.313 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 32.69% complete, ETA 00:12:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000020001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +77.953 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_09965c96acbb19e48b084ab9717fc00f714, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=71, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=348) [left] + │ ║ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=19, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=60, resultSizeEstimate=3.6K) [left] + │ ║ ║ ║ s: Var (name=copy) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=138, resultSizeEstimate=172.2K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.1K) [left] + │ ║ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=282, resultSizeEstimate=79.7K) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_09965c96acbb19e48b084ab9717fc00f714) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_09965c96acbb19e48b084ab9717fc00f714) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?copy ?branch . + ?book ?copy . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +68.500 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 68.500 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 33.65% complete, ETA 00:12:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +186.229 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=348) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="Author 3") + │ ║ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ║ ╠══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=529, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=329) [left] + │ ║ ║ ║ s: Var (name=member) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=9.39, resultSizeEstimate=348) [left] + │ ║ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=172.2K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=141, resultSizeEstimate=79.7K) [left] + │ ║ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ ║ s: Var (name=author) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?loan ?member . + ?member a . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +162.905 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 162.905 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 34.62% complete, ETA 00:12:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000e011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +238.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +214.924 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 214.924 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 11) + +# Run progress: 35.58% complete, ETA 00:12:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a lib:Loan ; + lib:borrowedBy ?member ; + lib:loanedCopy ?copy . + ?copy lib:locatedAt ?branch . + ?book a lib:Book ; + lib:hasCopy ?copy . + OPTIONAL { + ?member lib:name ?memberName . + OPTIONAL { + ?branch lib:name ?branchName . + OPTIONAL { ?book lib:title ?bookTitle . } + } + } + OPTIONAL { + ?book lib:writtenBy ?author . + OPTIONAL { + ?author lib:name ?authorName . + OPTIONAL { ?author lib:country ?authorCountry . } + } + } + OPTIONAL { + ?root lib:loanDate ?loanDate . + OPTIONAL { + ?root lib:dueDate ?dueDate . + OPTIONAL { ?root lib:returnedDate ?returnedDate . } + } + } +} +ORDER BY ?root ?member ?copy + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 12) + +# Run progress: 36.54% complete, ETA 00:12:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT DISTINCT * WHERE { + { ?root a lib:Book . } + UNION + { ?root a lib:Loan . } + OPTIONAL { + ?root lib:title ?optTitle . + BIND(?optTitle AS ?optLabel) + } + OPTIONAL { + ?root lib:hasCopy ?optCopy . + OPTIONAL { ?optCopy lib:locatedAt ?optBranch . } + OPTIONAL { ?optBranch lib:name ?optBranchName . } + } + OPTIONAL { + ?root lib:loanedCopy ?optLoanCopy . + OPTIONAL { ?root lib:borrowedBy ?optMember . } + OPTIONAL { ?optMember lib:name ?optMemberName . } + } + OPTIONAL { + { ?root lib:writtenBy ?optAuthor . } + UNION + { ?bookForAuthor lib:writtenBy ?optAuthor . ?bookForAuthor lib:hasCopy ?optCopy2 . } + OPTIONAL { ?optAuthor lib:name ?optAuthorName . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01113640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:12:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +268.832 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +240.589 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 240.589 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.46% complete, ETA 00:12:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +353.061 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1002") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=919, resultSizeEstimate=301) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=471.3K, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?entity ?name . + ?entity a . + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + OPTIONAL { + ?entity ?assembly . + } +} + +334.864 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 334.864 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.42% complete, ETA 00:12:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.634 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=154, resultSizeEstimate=303) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=assemblyName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ValueConstant (value="Assembly 3") + │ ║ │ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.375 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.375 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.38% complete, ETA 00:12:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +151.910 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=301) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ o: Var (name=component) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=784) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +137.681 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 137.681 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 41.35% complete, ETA 00:11:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000010001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +73.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (costEstimate=513, resultSizeEstimate=1.0K) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +68.308 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 68.308 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 42.31% complete, ETA 00:11:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.386 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=307) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=936, resultSizeEstimate=307) [left] + │ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=value) (bindingState=bound) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=307) + │ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +2.112 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.112 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 43.27% complete, ETA 00:11:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +273.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5615414f9a8588b4885899c891ee8a149c901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=301) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=1.0K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_5615414f9a8588b4885899c891ee8a149c901234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5615414f9a8588b4885899c891ee8a149c901234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +245.058 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 245.058 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 44.23% complete, ETA 00:11:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.923 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=301) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (JoinIterator) + │ ║ ╠══ StatementPattern (costEstimate=60.4K, resultSizeEstimate=784) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=784) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +4.361 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.361 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 45.19% complete, ETA 00:10:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.436 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_89802854c129599aa4c58931f19079136995301234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=77, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [left] + │ ║ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_89802854c129599aa4c58931f19079136995301234567) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_89802854c129599aa4c58931f19079136995301234567) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?component a . + ?requirement a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.106 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.106 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 46.15% complete, ETA 00:10:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.026 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=301) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=919, resultSizeEstimate=301) [left] + │ ║ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=14, resultSizeEstimate=784) [left] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ o: Var (name=test) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=14, resultSizeEstimate=784) [left] + │ ║ ║ ║ s: Var (name=test) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ ║ o: Var (name=measurement) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── ListMemberOperator + │ ║ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=307) + │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a . + ?requirement ?test . + ?test ?measurement . + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +3.543 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.543 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 47.12% complete, ETA 00:10:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.128 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=154, resultSizeEstimate=303) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ ╚══ Filter [right] + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=301) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +1.838 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.838 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 11) + +# Run progress: 48.08% complete, ETA 00:10:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT DISTINCT * WHERE { + ?root a eng:Requirement ; + eng:satisfies ?component ; + eng:verifiedBy ?test . + ?component a eng:Component ; + eng:partOf ?assembly . + OPTIONAL { + ?root eng:name ?requirementName . + OPTIONAL { + ?component eng:name ?componentName . + OPTIONAL { ?assembly eng:name ?assemblyName . } + } + } + OPTIONAL { + ?component eng:dependsOn ?dependency . + OPTIONAL { + ?dependency eng:name ?dependencyName . + OPTIONAL { ?dependency eng:partOf ?dependencyAssembly . } + } + } + OPTIONAL { + ?test eng:verifiedBy ?measurement . + OPTIONAL { + ?measurement eng:measuredValue ?measuredValue . + OPTIONAL { ?measurement eng:measuredAt ?measuredAt . } + } + } +} +ORDER BY ?root ?component ?test + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 12) + +# Run progress: 49.04% complete, ETA 00:10:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT DISTINCT * WHERE { + { ?root a eng:Component . } + UNION + { ?root a eng:Requirement . } + OPTIONAL { + ?root eng:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root eng:partOf ?optAssembly . + OPTIONAL { ?optAssembly eng:name ?optAssemblyName . } + } + OPTIONAL { + ?root eng:dependsOn ?optDependency . + OPTIONAL { ?optDependency eng:name ?optDependencyName . } + } + OPTIONAL { + ?root eng:satisfies ?optSatisfiedComponent . + OPTIONAL { ?optSatisfiedComponent eng:partOf ?optSatisfiedAssembly . } + } + OPTIONAL { + { ?root eng:verifiedBy ?optVerification . } + UNION + { ?verificationOwner eng:verifiedBy ?optVerification . FILTER(?verificationOwner = ?root) } + OPTIONAL { ?optVerification eng:measuredValue ?optMeasuredValue . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:10:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +415.190 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=509) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +386.619 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 386.619 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 50.96% complete, ETA 00:10:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1292.821 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (JoinIterator) + │ ║ ║ ║ ├── StatementPattern (costEstimate=1.5K, resultSizeEstimate=509) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=793.4K, resultSizeEstimate=509) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1164.451 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1164.451 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 51.92% complete, ETA 00:09:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +662.715 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_07544d7ae981334f3ab39b65ada917657d, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=171, resultSizeEstimate=509) [left] + │ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ ListMemberOperator + │ ║ │ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="1"^^) + │ ║ │ │ ║ ValueConstant (value="2"^^) + │ ║ │ │ ║ ValueConstant (value="3"^^) + │ ║ │ │ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=153.1K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_07544d7ae981334f3ab39b65ada917657d) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_07544d7ae981334f3ab39b65ada917657d) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +613.459 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 613.459 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 52.88% complete, ETA 00:09:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +131.909 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=509) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +117.619 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 117.619 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 53.85% complete, ETA 00:09:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000070001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +235.086 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +219.282 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 219.282 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 54.81% complete, ETA 00:09:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +131.806 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.5K, resultSizeEstimate=509) [left] + │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ValueConstant (value="6"^^) + │ ║ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +117.771 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 117.771 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 55.77% complete, ETA 00:08:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff01112660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1582.615 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0469d01130cd464489af03500edc687d84, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_0469d01130cd464489af03500edc687d84) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0469d01130cd464489af03500edc687d84) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1387.033 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1387.033 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 56.73% complete, ETA 00:08:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +139.447 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +125.972 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 125.972 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 57.69% complete, ETA 00:08:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000200001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1442.768 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=153.1K) + │ ║ ║ ║ s: Var (name=end) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=node) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) + │ ║ ║ ├── StatementPattern (costEstimate=196, resultSizeEstimate=153.1K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1315.680 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1315.680 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 58.65% complete, ETA 00:08:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1611.011 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_237846a7a05ba446e79eee1974af5a193501, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_237846a7a05ba446e79eee1974af5a193501) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_237846a7a05ba446e79eee1974af5a193501) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1526.742 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1526.742 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 59.62% complete, ETA 00:08:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 11) + +# Run progress: 60.58% complete, ETA 00:08:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT DISTINCT * WHERE { + ?root a conn:Node ; + conn:connectsTo ?neighbor . + ?neighbor conn:connectsTo ?neighbor2 . + OPTIONAL { + ?root conn:weight ?rootWeight . + OPTIONAL { + ?neighbor conn:weight ?neighborWeight . + OPTIONAL { ?neighbor2 conn:weight ?neighbor2Weight . } + } + } + OPTIONAL { + ?incoming conn:connectsTo ?root . + OPTIONAL { + ?incoming conn:weight ?incomingWeight . + OPTIONAL { ?incoming conn:connectsTo ?incomingNeighbor . } + } + } + OPTIONAL { + ?root conn:connectsTo ?optionalNeighbor . + OPTIONAL { + ?optionalNeighbor conn:connectsTo ?optionalNeighbor2 . + OPTIONAL { ?optionalNeighbor2 conn:weight ?optionalNeighbor2Weight . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 12) + +# Run progress: 61.54% complete, ETA 00:08:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT * WHERE { + { ?root a conn:Node . } + UNION + { ?root conn:connectsTo ?optUnionNeighbor . } + OPTIONAL { + ?root conn:connectsTo ?optNeighbor . + OPTIONAL { ?optNeighbor conn:weight ?optNeighborWeight . } + } + OPTIONAL { + ?root conn:weight ?optWeight . + BIND(?optWeight AS ?optNodeWeight) + } + OPTIONAL { + { ?optIncoming conn:connectsTo ?root . } + UNION + { ?root conn:connectsTo ?optIncoming . } + OPTIONAL { ?optIncoming conn:weight ?optIncomingWeight . } + } + FILTER(?optNodeWeight != 0 || !BOUND(?optNodeWeight)) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:08:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.316 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=342) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +39.629 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 39.629 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.46% complete, ETA 00:07:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +96.296 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 3") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=1.4K, resultSizeEstimate=459) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=246.6K, resultSizeEstimate=349) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=45.6K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?entity a . + ?entity ?name . + } + FILTER ((?name = ?target) || (?name = "OP 3")) + OPTIONAL { + ?entity ?op . + } +} + +88.189 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 88.189 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.42% complete, ETA 00:07:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.032 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_2733ce25a572abc24178bfe2541f819e512701, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=lineName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Line 0") + │ ║ │ │ ValueConstant (value="Line 1") + │ ║ │ │ ValueConstant (value="Line 2") + │ ║ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=635) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_2733ce25a572abc24178bfe2541f819e512701) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_2733ce25a572abc24178bfe2541f819e512701) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +8.787 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.787 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.38% complete, ETA 00:07:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +171.282 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=320, resultSizeEstimate=635) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=25, resultSizeEstimate=635) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=line) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=635) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +154.093 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 154.093 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 66.35% complete, ETA 00:07:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +161.841 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=635) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.6K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +149.508 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 149.508 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 67.31% complete, ETA 00:06:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +23.009 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=342) [left] + │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=time) (bindingState=bound) + │ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.5K) + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ o: Var (name=time) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^ } + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +20.687 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.687 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 68.27% complete, ETA 00:06:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +122.707 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4146d230a12f547412fa6035192c9acfddf0123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=174, resultSizeEstimate=342) [left] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ ║ │ ├── StatementPattern (costEstimate=49, resultSizeEstimate=9.5K) [left] + │ ║ ║ │ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ │ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ └── StatementPattern (costEstimate=25, resultSizeEstimate=635) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=349) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_4146d230a12f547412fa6035192c9acfddf0123) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4146d230a12f547412fa6035192c9acfddf0123) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +112.275 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 112.275 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 69.23% complete, ETA 00:06:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.204 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=232, resultSizeEstimate=459) [left] + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +53.507 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.507 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 70.19% complete, ETA 00:06:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +255.003 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=22.8K, resultSizeEstimate=45.6K) [left] + │ ║ │ ║ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=213, resultSizeEstimate=45.6K) [right] + │ ║ │ ║ s: Var (name=s2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ValueConstant (value="Line 1") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=2.6M, resultSizeEstimate=342) [left] + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=49, resultSizeEstimate=9.5K) [left] + │ ║ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=13, resultSizeEstimate=635) [left] + │ ║ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=635) [left] + │ ║ ║ ║ s: Var (name=s2) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=9.5K) [right] + │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ o: Var (name=s2) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?s1 . + ?s1 ?line . + ?s2 ?line . + ?service ?s2 . + OPTIONAL { + ?line ?optName . + } + FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) +} + +234.390 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 234.390 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 71.15% complete, ETA 00:05:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c001116660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +273.740 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=320, resultSizeEstimate=635) [left] + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=661) + │ ║ ║ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=25, resultSizeEstimate=635) + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ o: Var (name=track) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=45.6K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a . + ?section ?track . + FILTER EXISTS { + ?track a . + } + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +248.271 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 248.271 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 72.12% complete, ETA 00:05:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +235.516 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=459) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ├── StatementPattern (costEstimate=232, resultSizeEstimate=459) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=45.6K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +207.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 207.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 11) + +# Run progress: 73.08% complete, ETA 00:05:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a train:TrainService ; + train:runsOnSection ?section ; + train:passesThrough ?operationalPoint . + ?section train:partOfLine ?line ; + train:hasTrackSection ?track . + OPTIONAL { + ?root train:name ?serviceName . + OPTIONAL { + ?line train:name ?lineName . + OPTIONAL { ?operationalPoint train:name ?operationalPointName . } + } + } + OPTIONAL { + ?root train:scheduledTime ?scheduledTime . + OPTIONAL { + ?section train:connectsOperationalPoint ?sectionOperationalPoint . + OPTIONAL { ?sectionOperationalPoint train:name ?sectionOperationalPointName . } + } + } + OPTIONAL { + ?line train:connectsOperationalPoint ?lineOperationalPoint . + OPTIONAL { + ?lineOperationalPoint train:name ?lineOperationalPointName . + OPTIONAL { ?lineOperationalPoint train:code ?lineOperationalPointCode . } + } + } + OPTIONAL { + ?track train:length ?trackLength . + OPTIONAL { ?track train:trackType ?trackType . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000c011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 12) + +# Run progress: 74.04% complete, ETA 00:05:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT * WHERE { + { ?root a train:Line . } + UNION + { ?root a train:SectionOfLine . } + OPTIONAL { + ?root train:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root train:partOfLine ?optLine . + OPTIONAL { ?optLine train:name ?optLineName . } + } + OPTIONAL { + ?root train:connectsOperationalPoint ?optOperationalPoint . + OPTIONAL { ?optOperationalPoint train:name ?optOperationalPointName . } + } + OPTIONAL { + { ?service train:runsOnSection ?root . } + UNION + { ?service train:passesThrough ?optOperationalPoint2 . + ?root train:connectsOperationalPoint ?optOperationalPoint2 . } + OPTIONAL { ?service train:scheduledTime ?optScheduledTime . } + } + OPTIONAL { ?root train:hasTrackSection ?optTrackSection . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2163.969 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optLine" +║ ProjectionElem "optLineName" +║ ProjectionElem "optOperationalPoint" +║ ProjectionElem "optOperationalPointName" +║ ProjectionElem "service" +║ ProjectionElem "optOperationalPoint2" +║ ProjectionElem "optScheduledTime" +║ ProjectionElem "optTrackSection" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=349, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=635, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=877) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=635) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=optLine) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=877) [right] + │ ║ │ s: Var (name=optLine) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=optLineName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=45.6K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ ║ o: Var (name=optOperationalPoint) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=optOperationalPoint) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optOperationalPointName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── Union [left] + │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=9.5K) + │ │ ║ s: Var (name=service) (bindingState=unbound) + │ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ │ ║ o: Var (name=root) (bindingState=bound) + │ │ ╚══ Join (JoinIterator) + │ │ ├── StatementPattern (costEstimate=107, resultSizeEstimate=45.6K) [left] + │ │ │ s: Var (name=root) (bindingState=bound) + │ │ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ │ │ o: Var (name=optOperationalPoint2) (bindingState=unbound) + │ │ └── StatementPattern (costEstimate=98, resultSizeEstimate=9.5K) [right] + │ │ s: Var (name=service) (bindingState=unbound) + │ │ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ │ o: Var (name=optOperationalPoint2) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=9.5K) [right] + │ s: Var (name=service) (bindingState=bound) + │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ o: Var (name=optScheduledTime) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=635) [right] + s: Var (name=root) (bindingState=bound) + p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + o: Var (name=optTrackSection) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optLine ?optLineName ?optOperationalPoint ?optOperationalPointName ?service ?optOperationalPoint2 ?optScheduledTime ?optTrackSection WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optLine . + OPTIONAL { + ?optLine ?optLineName . + } + } + OPTIONAL { + ?root ?optOperationalPoint . + OPTIONAL { + ?optOperationalPoint ?optOperationalPointName . + } + } + OPTIONAL { + { + ?service ?root . + } + UNION + { + ?root ?optOperationalPoint2 . + ?service ?optOperationalPoint2 . + } + OPTIONAL { + ?service ?optScheduledTime . + } + } + OPTIONAL { + ?root ?optTrackSection . + } +} + +1982.307 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1982.307 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:05:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +55.203 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=349) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=352) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=349) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +49.504 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 49.504 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 75.96% complete, ETA 00:04:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +114.525 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Substation 3") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=349) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=349) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=187.8K, resultSizeEstimate=349) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=352) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?substation ?name . + ?entity ?substation . + ?entity a . + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + OPTIONAL { + ?entity ?substation2 . + } +} + +102.032 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 102.032 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 76.92% complete, ETA 00:04:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.443 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ValueConstant (value="Substation 2") + │ ║ │ ║ └── StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=53.3K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +4.836 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.836 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 77.88% complete, ETA 00:04:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +433.788 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=502, resultSizeEstimate=998) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=998) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) + │ ║ ╠══ StatementPattern (costEstimate=251.7K, resultSizeEstimate=998) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +395.556 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 395.556 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 78.85% complete, ETA 00:04:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.400 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=91.9K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ ║ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=152, resultSizeEstimate=91.9K) [left] + │ ║ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=substation) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.7K) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=91.9K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +5.664 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.664 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 79.81% complete, ETA 00:04:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +16.629 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=352) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=352) [left] + │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ValueConstant (value="900"^^) + │ ║ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=352) + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=capacity) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +13.844 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.844 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 80.77% complete, ETA 00:03:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +103.752 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_40512af4d370638494b9263f84019767a270123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=267, resultSizeEstimate=529) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=47.7K, resultSizeEstimate=352) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_40512af4d370638494b9263f84019767a270123) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_40512af4d370638494b9263f84019767a270123) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +90.314 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 90.314 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 81.73% complete, ETA 00:03:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.923 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="Substation 1") + │ ║ │ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=998) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +13.643 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.643 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 82.69% complete, ETA 00:03:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +15.405 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optTransformer) (bindingState=bound) + │ ║ │ Var (name=substation) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=349) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +13.930 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.930 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 83.65% complete, ETA 00:03:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.520 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) [left] + │ ║ │ ║ ├── Filter [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=179, resultSizeEstimate=352) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.7K) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=91.9K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=352) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +5.201 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.201 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 84.62% complete, ETA 00:03:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +575.039 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=low) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=low) (bindingState=unbound) + │ ║ │ ╚══ Compare (>) + │ ║ │ Var (name=optValue) (bindingState=bound) + │ ║ │ ValueConstant (value="200"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=502, resultSizeEstimate=998) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=998) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=167.8K, resultSizeEstimate=998) [left] + │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=998) [left] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) +} + +518.380 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 518.380 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 11) + +# Run progress: 85.58% complete, ETA 00:02:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT DISTINCT * WHERE { + ?root a grid:Transformer ; + grid:feeds ?substation ; + grid:hasMeter ?meter . + ?substation a grid:Substation . + ?meter grid:measures ?load . + OPTIONAL { + ?substation grid:name ?substationName . + OPTIONAL { + ?root grid:capacity ?transformerCapacity . + OPTIONAL { ?meter grid:serial ?meterSerial . } + } + } + OPTIONAL { + ?load grid:loadValue ?loadValue . + OPTIONAL { + ?load grid:loadType ?loadType . + OPTIONAL { ?load grid:unit ?loadUnit . } + } + } + OPTIONAL { + ?line grid:connectsTo ?substation . + OPTIONAL { + ?line grid:capacity ?lineCapacity . + OPTIONAL { ?line grid:name ?lineName . } + } + } + OPTIONAL { + ?generator grid:feeds ?substation . + OPTIONAL { + ?generator grid:capacity ?generatorCapacity . + OPTIONAL { ?generator grid:name ?generatorName . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 12) + +# Run progress: 86.54% complete, ETA 00:02:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT * WHERE { + { ?root a grid:Substation . } + UNION + { ?root a grid:Transformer . } + OPTIONAL { + ?root grid:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root grid:feeds ?optFed . + OPTIONAL { ?optFed grid:name ?optFedName . } + } + OPTIONAL { + { ?generator grid:feeds ?root . } + UNION + { ?root grid:feeds ?substation . ?generator grid:feeds ?substation . } + OPTIONAL { ?generator grid:capacity ?optGeneratorCapacity . } + } + OPTIONAL { + ?root grid:hasMeter ?optMeter . + OPTIONAL { ?optMeter grid:measures ?optLoad . } + OPTIONAL { ?optLoad grid:loadValue ?optLoadValue . } + } + OPTIONAL { + ?line grid:connectsTo ?root . + OPTIONAL { ?line grid:capacity ?optLineCapacity . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1777.509 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optFed" +║ ProjectionElem "optFedName" +║ ProjectionElem "generator" +║ ProjectionElem "substation" +║ ProjectionElem "optGeneratorCapacity" +║ ProjectionElem "optMeter" +║ ProjectionElem "optLoad" +║ ProjectionElem "optLoadValue" +║ ProjectionElem "line" +║ ProjectionElem "optLineCapacity" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=349, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=529, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=349) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=optFed) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=349) [right] + │ ║ │ s: Var (name=optFed) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=optFedName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=1.0K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=root) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=352) [right] + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=optGeneratorCapacity) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ StatementPattern (resultSizeEstimate=53.3K) [left] + │ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ │ ║ o: Var (name=optMeter) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=998) [right] + │ │ s: Var (name=optMeter) (bindingState=bound) + │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ │ o: Var (name=optLoad) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ s: Var (name=optLoad) (bindingState=bound) + │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ o: Var (name=optLoadValue) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=91.9K) [left] + ║ s: Var (name=line) (bindingState=unbound) + ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=352) [right] + s: Var (name=line) (bindingState=bound) + p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + o: Var (name=optLineCapacity) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optFed ?optFedName ?generator ?substation ?optGeneratorCapacity ?optMeter ?optLoad ?optLoadValue ?line ?optLineCapacity WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optFed . + OPTIONAL { + ?optFed ?optFedName . + } + } + OPTIONAL { + { + ?generator ?root . + } + UNION + { + ?root ?substation . + ?generator ?substation . + } + OPTIONAL { + ?generator ?optGeneratorCapacity . + } + } + OPTIONAL { + ?root ?optMeter . + OPTIONAL { + ?optMeter ?optLoad . + } + OPTIONAL { + ?optLoad ?optLoadValue . + } + } + OPTIONAL { + ?line ?root . + OPTIONAL { + ?line ?optLineCapacity . + } + } +} + +1638.738 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1638.738 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:02:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.299 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=5.86, resultSizeEstimate=304) [left] + │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ o: Var (name=disease) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [left] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=1.4K) [left] + │ ║ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=5.94, resultSizeEstimate=313) [left] + │ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [right] + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=315) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +0.250 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.250 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.46% complete, ETA 00:02:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f801112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.048 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=102, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (>) + │ ║ ║ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ ║ └── StatementPattern (costEstimate=17, resultSizeEstimate=301) + │ ║ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=508) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) + │ ║ │ ╠══ StatementPattern (costEstimate=29, resultSizeEstimate=3.3K) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=17, resultSizeEstimate=290) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a . + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.746 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.746 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.42% complete, ETA 00:02:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.716 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_86317be114cba80d434ea92091f81ee73ab701234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=159, resultSizeEstimate=313) [left] + │ ║ │ ║ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ │ ╚══ ListMemberOperator + │ ║ │ Var (name=optDisease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=16.3K, resultSizeEstimate=302) [left] + │ ║ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=302) [left] + │ ║ ║ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=324) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_86317be114cba80d434ea92091f81ee73ab701234567) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_86317be114cba80d434ea92091f81ee73ab701234567) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +44.187 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.187 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.38% complete, ETA 00:01:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000600001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +17.525 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Join (JoinIterator) [left] + ║ ├── StatementPattern [index: psoc] (costEstimate=80, resultSizeEstimate=313, indexName=psoc) [left] + ║ │ s: Var (name=arm) (bindingState=unbound) + ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ o: Var (name=result) (bindingState=unbound) + ║ └── Join (JoinIterator) [right] + ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=1.4K) [left] + ║ ║ s: Var (name=trial) (bindingState=unbound) + ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ ║ o: Var (name=arm) (bindingState=bound) + ║ ╚══ Join (JoinIterator) [right] + ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [left] + ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ └── Filter [right] + ║ ╠══ Not + ║ ║ Exists + ║ ║ StatementPattern (resultSizeEstimate=3.6K) + ║ ║ s: Var (name=drug) (bindingState=bound) + ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ ║ o: Var (name=disease) (bindingState=bound) + ║ ╚══ Join (JoinIterator) + ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=304) [left] + ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ o: Var (name=disease) (bindingState=unbound) + ║ └── Join (JoinIterator) [right] + ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] + ║ ║ s: Var (name=arm) (bindingState=bound) + ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ ║ o: Var (name=drug) (bindingState=unbound) + ║ ╚══ Filter [right] + ║ ├── Compare (>) + ║ │ Var (name=rate) (bindingState=bound) + ║ │ ValueConstant (value="0.6"^^) + ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=315) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=7.4K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) + +SELECT ?drug ?disease WHERE { + ?arm ?result . + ?trial ?arm . + ?trial a . + ?trial ?disease . + ?arm ?drug . + ?result ?rate . + FILTER (?rate > 0.6) + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +15.385 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 15.385 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 91.35% complete, ETA 00:01:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +38.967 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) + │ ║ │ │ ║ ├── StatementPattern (costEstimate=165, resultSizeEstimate=324) [left] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ └── Join (JoinIterator) [right] + │ ║ │ │ ║ ╠══ StatementPattern (costEstimate=31, resultSizeEstimate=3.9K) [left] + │ ║ │ │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=325) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ├── StatementPattern (costEstimate=25.2K, resultSizeEstimate=301) [left] + │ ║ │ │ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ └── Join (JoinIterator) [right] + │ ║ │ │ ╠══ StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] + │ ║ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) [right] + │ ║ │ │ ├── StatementPattern (costEstimate=31, resultSizeEstimate=3.9K) [left] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=18, resultSizeEstimate=325) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=372) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=324) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?drug a . + ?drug ?mol . + ?mol ?class . + } + UNION + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +34.718 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 34.718 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 92.31% complete, ETA 00:01:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.490 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=5.97, resultSizeEstimate=315) [left] + │ ║ ║ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=8.92, resultSizeEstimate=313) [left] + │ ║ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ o: Var (name=result) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Or + │ ║ ║ ║ │ ╠══ Compare (<) + │ ║ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ║ │ ╚══ Compare (=) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=315) + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] + │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [right] + │ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=315) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +0.399 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.399 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 93.27% complete, ETA 00:01:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.814 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=102, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] + │ ║ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ ║ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=drugA) (bindingState=bound) + │ ║ ║ ║ Var (name=drugB) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) + │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=7.4K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + ?drugA ?target . + ?drugB ?target . + FILTER (?drugA != ?drugB) + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +5.384 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.384 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 94.23% complete, ETA 00:01:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +28.353 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=159, resultSizeEstimate=313) [left] + │ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ ║ └── Filter [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ║ ValueConstant (value="0.09"^^) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=315) + │ ║ │ ║ s: Var (name=r) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ ║ o: Var (name=p) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optCompName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=24.6K, resultSizeEstimate=304) [left] + │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] + │ ║ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ╚══ Union [right] + │ ║ ║ ├── StatementPattern (new scope) (costEstimate=18, resultSizeEstimate=313) + │ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ │ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (costEstimate=18, resultSizeEstimate=313) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=372) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} + +24.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 24.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 95.19% complete, ETA 00:00:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +41.145 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_59016e83c0d2f09e443794577062990a517001234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=165, resultSizeEstimate=324) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=86, resultSizeEstimate=7.4K) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.9K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=47) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=53) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_59016e83c0d2f09e443794577062990a517001234) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_59016e83c0d2f09e443794577062990a517001234) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +31.440 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.440 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 96.15% complete, ETA 00:00:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +21.232 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join [left] + │ ║ ║ ║ │ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=313) [left] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ Join [right] + │ ║ ║ ║ │ │ ├── StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] + │ ║ ║ ║ │ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ └── Join [right] + │ ║ ║ ║ │ │ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] + │ ║ ║ ║ │ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ Join [right] + │ ║ ║ ║ │ │ ├── StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] + │ ║ ║ ║ │ │ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ │ o: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [right] + │ ║ ║ ║ │ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=315) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?arm ?result . + ?arm ?drug . + ?result ?effect . + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +18.325 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.325 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 97.12% complete, ETA 00:00:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001112660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +20104.209 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=106, resultSizeEstimate=313) [left] + │ ║ │ ║ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ ║ o: Var (name=result) (bindingState=unbound) + │ ║ │ ║ ╚══ Join (JoinIterator) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optTrial) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=16.3K, resultSizeEstimate=302) [left] + │ ║ ║ ║ s: Var (name=target) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=324) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.2K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { } + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER (EXISTS { ?arm ?result . ?result ?marker . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +20108.719 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20108.719 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 11) + +# Run progress: 98.08% complete, ETA 00:00:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a pharma:ClinicalTrial ; + pharma:hasArm ?arm ; + pharma:studiesDisease ?disease . + ?arm pharma:armDrug ?drug ; + pharma:hasResult ?result . + OPTIONAL { + ?drug pharma:name ?drugName . + OPTIONAL { + ?disease pharma:name ?diseaseName . + OPTIONAL { ?root pharma:name ?trialName . } + } + } + OPTIONAL { + ?drug pharma:targets ?target . + OPTIONAL { + ?target pharma:inPathway ?pathway . + OPTIONAL { ?pathway pharma:name ?pathwayName . } + } + } + OPTIONAL { + ?result pharma:pValue ?pValue . + OPTIONAL { + ?result pharma:effectSize ?effectSize . + OPTIONAL { ?result pharma:responseRate ?responseRate . } + } + } + OPTIONAL { + ?drug pharma:hasMolecule ?molecule . + OPTIONAL { + ?molecule pharma:inClass ?drugClass . + OPTIONAL { ?drugClass pharma:name ?drugClassName . } + } + } + OPTIONAL { + ?drug pharma:indicatedFor ?indication . + OPTIONAL { + ?drug pharma:contraindicatedFor ?contraindication . + OPTIONAL { ?drug pharma:hasSideEffect ?sideEffect . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 12) + +# Run progress: 99.04% complete, ETA 00:00:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT * WHERE { + { ?root a pharma:Drug . } + UNION + { ?root a pharma:ClinicalTrial . } + OPTIONAL { + ?root pharma:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root pharma:targets ?optTarget . + OPTIONAL { ?optTarget pharma:inPathway ?optPathway . } + } + OPTIONAL { + ?root pharma:indicatedFor ?optIndication . + OPTIONAL { ?root pharma:contraindicatedFor ?optContraindication . } + } + OPTIONAL { + { ?root pharma:hasArm ?optArm . } + UNION + { ?trial pharma:hasArm ?optArm . ?optArm pharma:armDrug ?root . } + OPTIONAL { ?optArm pharma:hasResult ?optResult . } + OPTIONAL { ?optResult pharma:pValue ?optPValue . } + OPTIONAL { ?optResult pharma:effectSize ?optEffectSize . } + } + OPTIONAL { + ?combo pharma:combinationOf ?root . + OPTIONAL { ?combo pharma:synergyScore ?optSynergy . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +170.050 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optTarget" +║ ProjectionElem "optPathway" +║ ProjectionElem "optIndication" +║ ProjectionElem "optContraindication" +║ ProjectionElem "optArm" +║ ProjectionElem "trial" +║ ProjectionElem "optResult" +║ ProjectionElem "optPValue" +║ ProjectionElem "optEffectSize" +║ ProjectionElem "combo" +║ ProjectionElem "optSynergy" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=324, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=304, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=372) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=7.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=optTarget) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=302) [right] + │ ║ │ s: Var (name=optTarget) (bindingState=bound) + │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ │ o: Var (name=optPathway) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.6K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ ║ o: Var (name=optIndication) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=324) [right] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=optContraindication) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ LeftJoin [left] + │ │ ║ ├── Union [left] + │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=1.4K) + │ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ ║ o: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ ╚══ Join (JoinIterator) + │ │ ║ │ ├── StatementPattern (costEstimate=8.92, resultSizeEstimate=313) [left] + │ │ ║ │ │ s: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ │ ║ │ │ o: Var (name=root) (bindingState=bound) + │ │ ║ │ └── StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ o: Var (name=optArm) (bindingState=bound) + │ │ ║ └── StatementPattern (resultSizeEstimate=313) [right] + │ │ ║ s: Var (name=optArm) (bindingState=bound) + │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ │ ║ o: Var (name=optResult) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=315) [right] + │ │ s: Var (name=optResult) (bindingState=bound) + │ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ │ o: Var (name=optPValue) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=315) [right] + │ s: Var (name=optResult) (bindingState=bound) + │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ o: Var (name=optEffectSize) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=508) [left] + ║ s: Var (name=combo) (bindingState=unbound) + ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=301) [right] + s: Var (name=combo) (bindingState=bound) + p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + o: Var (name=optSynergy) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optTarget ?optPathway ?optIndication ?optContraindication ?optArm ?trial ?optResult ?optPValue ?optEffectSize ?combo ?optSynergy WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optTarget . + OPTIONAL { + ?optTarget ?optPathway . + } + } + OPTIONAL { + ?root ?optIndication . + OPTIONAL { + ?root ?optContraindication . + } + } + OPTIONAL { + { + ?root ?optArm . + } + UNION + { + ?optArm ?root . + ?trial ?optArm . + } + OPTIONAL { + ?optArm ?optResult . + } + OPTIONAL { + ?optResult ?optPValue . + } + OPTIONAL { + ?optResult ?optEffectSize . + } + } + OPTIONAL { + ?combo ?root . + OPTIONAL { + ?combo ?optSynergy . + } + } +} + +156.595 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 156.595 ms/op + + +# Run complete. Total time: 00:20:35 +``` From eab148604f9612900e50ba6283bdee604e6d02af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 00:00:59 +0200 Subject: [PATCH 07/43] wip --- .../sail/base/SketchBasedJoinEstimator.java | 62 ++++++++++--------- .../sail/lmdb/benchmark/results-develop.md | 1 + 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 162598096e4..3f727f3a213 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -1655,7 +1655,7 @@ private void forEach(BatchUpdateConsumer consumer) { private long residentSketchBytes; private static final int INCREMENTAL_BATCH_SIZE = 32 * 1024; - private static final int ROBUST_REBUILD_BATCH_SIZE = 4 * 1024; + private static final int REBUILD_BATCH_SIZE = 4*1024 * 1024; private final Object incrementalBufferLock = new Object(); private IngestEvent[] incrementalBuffer = new IngestEvent[INCREMENTAL_BATCH_SIZE * 2]; private int incrementalBufferCount; @@ -2090,8 +2090,8 @@ public synchronized long rebuildOnceSlow() { try ( SailDataset ds = sailStore.getExplicitSailSource().dataset(IsolationLevels.READ_COMMITTED); CloseableIteration it = ds.getStatements(null, null, null)) { - IngestEvent[] rebuildBatch = new IngestEvent[ROBUST_REBUILD_BATCH_SIZE]; - // long[] robustQuadBatch = new long[ROBUST_REBUILD_BATCH_SIZE << 2]; + IngestEvent[] rebuildBatch = new IngestEvent[REBUILD_BATCH_SIZE]; + // long[] robustQuadBatch = new long[REBUILD_BATCH_SIZE << 2]; int rebuildBatchSize = 0; while (it.hasNext()) { @@ -2120,6 +2120,11 @@ public synchronized long rebuildOnceSlow() { // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); rebuildBatchSize = 0; + System.out.println( + "RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + ", seen " + + seen/1000/1000 + " million triples so far. Elapsed: " + (System.currentTimeMillis() - l) / 1000 + + " s."); + } // if (seen > 0 && seen % ROBUST_HEADROOM_CHECK_INTERVAL == 0 // && shouldShedRobustSynopsisBuilder()) { @@ -2152,12 +2157,7 @@ public synchronized long rebuildOnceSlow() { // } // } - if (seen % 100000 == 0) { - System.out.println( - "RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + ", seen " - + seen + " triples so far. Elapsed: " + (System.currentTimeMillis() - l) / 1000 - + " s."); - } + } if (seen > 0) { if (rebuildBatchSize > 0) { @@ -2267,27 +2267,27 @@ && hasSnapshotAvailable(persistenceFile)) { try { ingestIncremental(s, p, o, c, false); -// while (true) { -// long epoch = rebuildEpoch.get(); -// if ((epoch & 1L) != 0L) { -// synchronized (bufA) { -// ingest(bufA, st, false); -// } -// synchronized (bufB) { -// ingest(bufB, st, false); -// } -// break; -// } -// -// State target = current; -// synchronized (target) { -// if (rebuildEpoch.get() != epoch) { -// continue; -// } -// ingest(target, st, false); -// break; -// } -// } + while (true) { + long epoch = rebuildEpoch.get(); + if ((epoch & 1L) != 0L) { + synchronized (bufA) { + ingest(bufA, st, false); + } + synchronized (bufB) { + ingest(bufB, st, false); + } + break; + } + + State target = current; + synchronized (target) { + if (rebuildEpoch.get() != epoch) { + continue; + } + ingest(target, st, false); + break; + } + } } catch (MemoryPressureAbort | OutOfMemoryError oom) { logger.warn("Out of memory while applying incremental estimator update; unloading sketches", oom); @@ -2354,6 +2354,8 @@ private void ingestIncremental(String s, String p, String o, String c, boolean i ensureIncrementalBufferCapacity(incrementalBufferCount + 1); incrementalBuffer[incrementalBufferCount++] = event; if (incrementalBufferCount >= INCREMENTAL_BATCH_SIZE) { + System.out.println("RdfJoinEstimator: Flushing incremental batch of " + incrementalBufferCount + " events. Seen triples: " + + seenTriples); batch = drainIncrementalBufferLocked(); batchSize = batch.length; } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md index 8437131af70..050757d0bd6 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md @@ -10,6 +10,7 @@ ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 54.918 ms/op ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.461 ms/op ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 258.075 ms/op + ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1505.789 ms/op ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 667.950 ms/op ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.064 ms/op From e461fdd118b47a922ed1fe064df09ecf974b4562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 00:01:05 +0200 Subject: [PATCH 08/43] wip --- .../eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index ecb129eaff9..64e89d5d66f 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -305,7 +305,7 @@ private long dbFileSize(String relativePath) { private void loadData() throws IOException { try (var connection = repository.getConnection()) { - connection.begin(IsolationLevels.NONE); + connection.begin(IsolationLevels.READ_COMMITTED); var inserter = new RDFInserter(connection); // System.out.println("Loading theme dataset: " + theme); // ThemeDataSetGenerator.generate(theme, inserter); From b6122c4c0489b154a7fb52f69999b5828d820981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 08:32:38 +0200 Subject: [PATCH 09/43] wip --- .../sail/lmdb/benchmark/results-2026-04-18.md | 11942 ++++++++++++++++ 1 file changed, 11942 insertions(+) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md new file mode 100644 index 00000000000..050757d0bd6 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md @@ -0,0 +1,11942 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 49.017 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 179.672 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 44.546 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 86.459 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 109.599 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 62.100 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 63.834 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 54.918 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.461 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 258.075 ms/op + +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1505.789 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 667.950 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.064 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 7.910 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.082 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.071 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.093 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 1036.339 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.096 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 8.319 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 851.356 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.813 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.688 ms/op + + +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 686.809 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 307.734 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 41.203 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.520 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 150.699 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.806 ms/op + +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1002.313 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 68.500 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 162.905 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 214.924 ms/op + + +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 240.589 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 334.864 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.375 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 137.681 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 68.308 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.112 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.058 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.361 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.106 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.543 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.838 ms/op + + +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 386.619 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1164.451 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 613.459 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 117.619 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 219.282 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.771 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1387.033 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 125.972 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1315.680 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1526.742 ms/op + + + +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 39.629 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 88.189 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.787 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 154.093 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 149.508 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 20.687 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 112.275 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 53.507 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 234.390 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 248.271 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 207.139 ms/op + +ThemeQueryBenchmark.executeQuery TRAIN 12 avgt 1982.307 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 49.504 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 102.032 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 4.836 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 395.556 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 5.664 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 13.844 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 90.314 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 13.643 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.930 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.201 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 518.380 ms/op + +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 12 avgt 1638.738 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.250 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.746 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 44.187 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 15.385 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 34.718 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.399 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.384 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 24.115 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 31.440 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 18.325 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 20108.719 ms/op + +ThemeQueryBenchmark.executeQuery PHARMA 12 avgt 156.595 ms/op +``` + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:13:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.609 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=333) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=21, resultSizeEstimate=433) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=5.8K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +49.017 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 49.017 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 0.96% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +191.905 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="DX-202") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=3.2K, resultSizeEstimate=1.1K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.1K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=1.7M, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { + ?entity ?code . + ?entity a . + } + UNION + { + ?entity a . + ?entity ?code . + } + FILTER ((?code = ?target) || (?code = "DX-202")) + OPTIONAL { + ?entity ?alt . + } +} + +179.672 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 179.672 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 1.92% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.356 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5480c6497279ee74c49a4e689fdebec77e001234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=146, resultSizeEstimate=433) [left] + │ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=21, resultSizeEstimate=433) [left] + │ ║ │ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=21, resultSizeEstimate=433) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=14.5K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_5480c6497279ee74c49a4e689fdebec77e001234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5480c6497279ee74c49a4e689fdebec77e001234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a . + ?enc ?practitioner . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +44.546 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.546 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 2.88% complete, ETA 00:14:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +96.505 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=333) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=_anon_path_73463994c940c8141ae8421ce9b0cb10b940123456, anonymous) (bindingState=unbound) + │ ║ │ ║ └── Join (JoinIterator) [right] + │ ║ │ ║ ╠══ StatementPattern (costEstimate=61, resultSizeEstimate=15.1K) [left] + │ ║ │ ║ ║ s: Var (name=_anon_path_73463994c940c8141ae8421ce9b0cb10b940123456, anonymous) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=535) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=396) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +86.459 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 86.459 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 3.85% complete, ETA 00:14:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +115.776 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=15.1K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=219, resultSizeEstimate=433) [left] + │ ║ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=60, resultSizeEstimate=14.5K) [left] + │ ║ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="DX-200") + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="DX-201") + │ ║ ║ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ ║ s: Var (name=cond) (bindingState=bound) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=433) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +109.599 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 109.599 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 4.81% complete, ETA 00:13:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +67.686 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ StatementPattern (resultSizeEstimate=14.5K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=333) [left] + │ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ └── Join (JoinIterator) [right] + │ ║ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=61, resultSizeEstimate=15.1K) [left] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=value) (bindingState=bound) + │ ║ ║ ValueConstant (value="50"^^) + │ ║ ║ ValueConstant (value="60"^^) + │ ║ ║ ValueConstant (value="70"^^) + │ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=535) + │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a . + ?patient ?enc . + ?enc ?obs . + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +62.100 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 62.100 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 5.77% complete, ETA 00:13:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +74.948 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=333) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=10.2K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=5.8K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +63.834 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 63.834 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 6.73% complete, ETA 00:13:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +61.331 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=5.8K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=526, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +54.918 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 54.918 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 7.69% complete, ETA 00:13:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +62.996 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=14.5K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=333) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) + │ ║ │ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=21, resultSizeEstimate=433) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +56.461 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 56.461 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 8.65% complete, ETA 00:13:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +282.165 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ │ ║ ├── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ └── Join (JoinIterator) [right] + │ ║ │ ║ ╠══ StatementPattern (costEstimate=1.3K, resultSizeEstimate=433) [left] + │ ║ │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ ╚══ Join (JoinIterator) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=60, resultSizeEstimate=14.5K) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ └── Filter [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=433) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Join (JoinIterator) + │ ║ ╠══ Filter (new scope) [left] + │ ║ ║ ├── Compare (<) + │ ║ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="60"^^) + │ ║ ║ └── StatementPattern (costEstimate=355.1K, resultSizeEstimate=535) + │ ║ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (costEstimate=123, resultSizeEstimate=15.1K) [right] + │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ o: Var (name=obs) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a . + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + ?enc ?obs . + } +} + +258.075 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 258.075 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 9.62% complete, ETA 00:13:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 11) + +# Run progress: 10.58% complete, ETA 00:16:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a med:Patient ; + med:hasEncounter ?encounter . + ?encounter a med:Encounter ; + med:hasObservation ?observation . + OPTIONAL { + ?root med:name ?patientName . + OPTIONAL { + ?root med:hasMedication ?medication . + OPTIONAL { + ?medication med:code ?medicationCode . + OPTIONAL { ?medication med:dosage ?medicationDosage . } + } + } + } + OPTIONAL { + ?encounter med:recordedOn ?recordedOn . + OPTIONAL { + ?encounter med:handledBy ?practitioner . + OPTIONAL { ?practitioner med:name ?practitionerName . } + } + } + OPTIONAL { + ?encounter med:hasCondition ?condition . + OPTIONAL { + ?condition med:code ?conditionCode . + OPTIONAL { ?condition med:description ?conditionDescription . } + } + } + OPTIONAL { + ?observation med:value ?observationValue . + OPTIONAL { ?observation med:unit ?observationUnit . } + } +} +ORDER BY ?root ?encounter ?observation + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000600001112af0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1730.972 ms/op +Iteration 1: ### Optimized Query ### +Reduced + Order + OrderElem (ASC) + Var (name=root) (bindingState=unbound) + OrderElem (ASC) + Var (name=encounter) (bindingState=unbound) + OrderElem (ASC) + Var (name=observation) (bindingState=unbound) + Projection + ╠══ ProjectionElemList + ║ ProjectionElem "root" + ║ ProjectionElem "encounter" + ║ ProjectionElem "observation" + ║ ProjectionElem "patientName" + ║ ProjectionElem "medication" + ║ ProjectionElem "medicationCode" + ║ ProjectionElem "medicationDosage" + ║ ProjectionElem "recordedOn" + ║ ProjectionElem "practitioner" + ║ ProjectionElem "practitionerName" + ║ ProjectionElem "condition" + ║ ProjectionElem "conditionCode" + ║ ProjectionElem "conditionDescription" + ║ ProjectionElem "observationValue" + ║ ProjectionElem "observationUnit" + ╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ Join (JoinIterator) [left] + │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=146, resultSizeEstimate=433, indexName=ospc) [left] + │ ║ │ ║ │ s: Var (name=encounter) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── Join (JoinIterator) [right] + │ ║ │ ║ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ║ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ ║ o: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ ╚══ Join (JoinIterator) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=333) [left] + │ ║ │ ║ │ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=123, resultSizeEstimate=15.1K) [right] + │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=396) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ │ │ o: Var (name=patientName) (bindingState=unbound) + │ ║ │ └── LeftJoin [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=5.8K) [left] + │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=medication) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ │ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ │ o: Var (name=medicationCode) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ │ o: Var (name=medicationDosage) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=433) [left] + │ ║ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ ║ o: Var (name=recordedOn) (bindingState=unbound) + │ ║ ╚══ LeftJoin [right] + │ ║ ├── StatementPattern (resultSizeEstimate=433) [left] + │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=396) [right] + │ ║ s: Var (name=practitioner) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=practitionerName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── StatementPattern (resultSizeEstimate=14.5K) [left] + │ │ s: Var (name=encounter) (bindingState=bound) + │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ │ o: Var (name=condition) (bindingState=unbound) + │ └── LeftJoin [right] + │ ╠══ StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ s: Var (name=condition) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=conditionCode) (bindingState=unbound) + │ ╚══ StatementPattern (resultSizeEstimate=0) [right] + │ s: Var (name=condition) (bindingState=bound) + │ p: Var (name=_const_25295cd4_uri, value=http://example.com/theme/medical/description, anonymous) + │ o: Var (name=conditionDescription) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=535) [left] + ║ s: Var (name=observation) (bindingState=bound) + ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + ║ o: Var (name=observationValue) (bindingState=unbound) + ╚══ StatementPattern (resultSizeEstimate=0) [right] + s: Var (name=observation) (bindingState=bound) + p: Var (name=_const_996c3ac_uri, value=http://example.com/theme/medical/unit, anonymous) + o: Var (name=observationUnit) (bindingState=unbound) + +SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicationCode ?medicationDosage ?recordedOn ?practitioner ?practitionerName ?condition ?conditionCode ?conditionDescription ?observationValue ?observationUnit WHERE { + ?encounter a . + ?root ?encounter . + ?root a . + ?encounter ?observation . + OPTIONAL { + ?root ?patientName . + OPTIONAL { + ?root ?medication . + OPTIONAL { + ?medication ?medicationCode . + OPTIONAL { + ?medication ?medicationDosage . + } + } + } + } + OPTIONAL { + ?encounter ?recordedOn . + OPTIONAL { + ?encounter ?practitioner . + OPTIONAL { + ?practitioner ?practitionerName . + } + } + } + OPTIONAL { + ?encounter ?condition . + OPTIONAL { + ?condition ?conditionCode . + OPTIONAL { + ?condition ?conditionDescription . + } + } + } + OPTIONAL { + ?observation ?observationValue . + OPTIONAL { + ?observation ?observationUnit . + } + } +} +ORDER BY ?root ?encounter ?observation + +1505.789 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1505.789 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 12) + +# Run progress: 11.54% complete, ETA 00:15:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { ?root a med:Patient . } + UNION + { ?root a med:Encounter . } + OPTIONAL { + ?root med:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root med:hasEncounter ?optEncounter . + OPTIONAL { ?optEncounter med:recordedOn ?optDate . } + OPTIONAL { ?optEncounter med:handledBy ?optPractitioner . } + } + OPTIONAL { + ?root med:hasMedication ?optMedication . + OPTIONAL { ?optMedication med:code ?optMedicationCode . } + OPTIONAL { ?optMedication med:dosage ?optDosage . } + } + OPTIONAL { + ?root med:hasEncounter ?optEncounter2 . + ?optEncounter2 med:hasCondition ?optCondition . + OPTIONAL { ?optCondition med:code ?optConditionCode . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +745.214 ms/op +Iteration 1: ### Optimized Query ### +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optConditionCode" + │ ProjectionElem "optEncounter2" + │ ProjectionElem "optLabel" + │ ProjectionElem "optEncounter" + │ ProjectionElem "optPractitioner" + │ ProjectionElem "optMedicationCode" + │ ProjectionElem "optDosage" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── Union [left] + ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=333, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=433, indexName=ospc) + ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + ║ │ ║ └── Extension [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=396) + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ ╚══ ExtensionElem (optLabel) + ║ │ ║ Var (name=optName) (bindingState=bound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── LeftJoin [left] + ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) [left] + ║ │ │ ║ s: Var (name=root) (bindingState=bound) + ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + ║ │ │ ║ o: Var (name=optEncounter) (bindingState=unbound) + ║ │ │ ╚══ StatementPattern (resultSizeEstimate=433) [right] + ║ │ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + ║ │ │ o: Var (name=optDate) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=433) [right] + ║ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + ║ │ o: Var (name=optPractitioner) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ LeftJoin [left] + ║ ║ ├── StatementPattern (resultSizeEstimate=5.8K) [left] + ║ ║ │ s: Var (name=root) (bindingState=bound) + ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + ║ ║ │ o: Var (name=optMedication) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + ║ ║ s: Var (name=optMedication) (bindingState=bound) + ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + ║ ║ o: Var (name=optMedicationCode) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + ║ s: Var (name=optMedication) (bindingState=bound) + ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + ║ o: Var (name=optDosage) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Join (JoinIterator) [left] + │ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ o: Var (name=optEncounter2) (bindingState=unbound) + │ ╚══ StatementPattern (costEstimate=120, resultSizeEstimate=14.5K) [right] + │ s: Var (name=optEncounter2) (bindingState=bound) + │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ o: Var (name=optCondition) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=1.1K) [right] + s: Var (name=optCondition) (bindingState=bound) + p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + o: Var (name=optConditionCode) (bindingState=unbound) + +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optEncounter . + OPTIONAL { + ?optEncounter ?optDate . + } + OPTIONAL { + ?optEncounter ?optPractitioner . + } + } + OPTIONAL { + ?root ?optMedication . + OPTIONAL { + ?optMedication ?optMedicationCode . + } + OPTIONAL { + ?optMedication ?optDosage . + } + } + OPTIONAL { + ?root ?optEncounter2 . + ?optEncounter2 ?optCondition . + OPTIONAL { + ?optCondition ?optConditionCode . + } + } +} + +667.950 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 667.950 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:15:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.076 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ │ ╚══ Join (JoinIterator) [right] + │ ║ │ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ │ └── Filter [right] + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ Var (name=v) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=385) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +0.064 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.064 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.46% complete, ETA 00:15:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.758 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ╠══ Or + │ ║ │ ║ ║ ├── Compare (=) + │ ║ │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ │ ValueConstant (value="user0") + │ ║ │ ║ ║ └── Compare (=) + │ ║ │ ║ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="user1") + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=385) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [left] + │ ║ │ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [left] + │ ║ │ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_7758fdc3a338a8874039bb85e37313cddb640123456) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + VALUES ?u3 { } + ?u1 ?u2 . + FILTER (?u1 != ?u2) + ?u2 ?u1 . + ?u1 ?u3 . + FILTER (?u1 != ?u3) + ?u3 ?u1 . + ?u2 ?u3 . + FILTER (?u2 != ?u3) + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_7758fdc3a338a8874039bb85e37313cddb640123456) + } +} + +7.910 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.910 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.42% complete, ETA 00:14:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.101 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── And + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.082 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.082 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.38% complete, ETA 00:14:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.087 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=385) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +0.071 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.071 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 16.35% complete, ETA 00:14:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.108 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Not + │ ║ ║ │ ║ Exists + │ ║ ║ │ ║ Extension + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── ExtensionElem (_anon_path_158413944b1a5e08ab4309b47e3476f49e77520) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_158413944b1a5e08ab4309b47e3476f49e77520) + } + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +0.093 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.093 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 17.31% complete, ETA 00:13:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1077.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Union (new scope) [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ Extension (new scope) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=196.6K, resultSizeEstimate=98.3K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── ExtensionElem (activity) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ Extension (new scope) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + { + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + VALUES ?u { } + } + UNION + { + { + ?post ?u . + BIND(?post AS ?activity) + } + VALUES ?u { } + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +1036.339 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1036.339 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 18.27% complete, ETA 00:13:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.113 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_454722a672b5edc30b489bb690adea67efd5a60123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_454722a672b5edc30b489bb690adea67efd5a60123) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_454722a672b5edc30b489bb690adea67efd5a60123) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +0.096 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.096 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 19.23% complete, ETA 00:13:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.324 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ └── Filter [right] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Exists + │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_9944e1fe4ffdb6134be6bf0489da7ee9d350012345678) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (EXISTS { ?v ?u . } && (?u != ?v)) + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_9944e1fe4ffdb6134be6bf0489da7ee9d350012345678) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +8.319 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.319 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 20.19% complete, ETA 00:13:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +931.051 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=32.8K, resultSizeEstimate=98.3K) [left] + │ ║ ║ │ ║ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ ║ │ ├── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) [left] + │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +851.356 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 851.356 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 21.15% complete, ETA 00:12:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +7.607 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=a) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=c) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=d) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=385) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + ?d ?a . + FILTER (?d != ?a) + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +6.813 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.813 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 22.12% complete, ETA 00:12:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.051 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=385) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=a) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ ║ │ Var (name=e) (bindingState=bound) + │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) + │ ║ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=e) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + VALUES (?c ?d) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + VALUES ?e { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + ?d ?e . + FILTER (?d != ?e) + ?e ?a . + FILTER (?a != ?c) + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +2.688 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.688 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 11) + +# Run progress: 23.08% complete, ETA 00:12:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a social:User ; + social:follows ?followed . + ?post social:authored ?root . + OPTIONAL { + ?root social:name ?rootName . + OPTIONAL { + ?followed social:name ?followedName . + OPTIONAL { ?followed social:follows ?followedFollows . } + } + } + OPTIONAL { + ?post social:authored ?postAuthor . + OPTIONAL { + ?postAuthor social:name ?postAuthorName . + OPTIONAL { ?postAuthor social:follows ?postAuthorFollows . } + } + } +} +ORDER BY ?root ?followed ?post + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 12) + +# Run progress: 24.04% complete, ETA 00:13:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT DISTINCT * WHERE { + { ?root a social:User . } + UNION + { ?root a social:Post . } + OPTIONAL { + ?root social:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root social:follows ?optFollowed . + OPTIONAL { ?optFollowed social:name ?optFollowedName . } + } + OPTIONAL { + ?post social:authored ?root . + OPTIONAL { ?root social:follows ?optAuthorFollows . } + OPTIONAL { ?post social:authored ?optPostAuthor . } + } + OPTIONAL { + { ?optFollower social:follows ?root . } + UNION + { ?root social:follows ?optFollower . } + OPTIONAL { ?optFollower social:name ?optFollowerName . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:14:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +763.173 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=172.2K) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=60, resultSizeEstimate=3.6K) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +686.809 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 686.809 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 25.96% complete, ETA 00:14:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +335.374 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Member 3") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=329) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=533.0K, resultSizeEstimate=1.1K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=172.2K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?entity a . + ?entity ?name . + } + FILTER ((?name = ?target) || (?name = "Member 3")) + OPTIONAL { + ?entity ?copy . + } +} + +307.734 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 307.734 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 26.92% complete, ETA 00:13:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +48.299 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_217a626eda5519b47f4b287d3847123289c01, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=260, resultSizeEstimate=515) [left] + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=authorName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Author 1") + │ ║ │ │ ValueConstant (value="Author 2") + │ ║ │ │ ValueConstant (value="Author 3") + │ ║ │ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_217a626eda5519b47f4b287d3847123289c01) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_217a626eda5519b47f4b287d3847123289c01) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +41.203 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.203 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 27.88% complete, ETA 00:13:29 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +50.805 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=176, resultSizeEstimate=348) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=348) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ o: Var (name=member) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=348) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +45.520 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.520 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 28.85% complete, ETA 00:13:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +166.156 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=172.2K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=533, resultSizeEstimate=1.1K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +150.699 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 150.699 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 29.81% complete, ETA 00:12:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +12.239 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=348) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=348) [left] + │ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=348) + │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ o: Var (name=loanDate) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^ } + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +10.806 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.806 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 30.77% complete, ETA 00:12:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 31.73% complete, ETA 00:13:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1106.235 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Exists + │ ║ │ ║ │ StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=1.2K, resultSizeEstimate=3.6K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=3.6K) [left] + │ ║ │ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ╚══ StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) + │ ║ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.6K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +1002.313 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1002.313 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 32.69% complete, ETA 00:12:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000020001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +77.953 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_09965c96acbb19e48b084ab9717fc00f714, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=71, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=348) [left] + │ ║ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=19, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=60, resultSizeEstimate=3.6K) [left] + │ ║ ║ ║ s: Var (name=copy) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=138, resultSizeEstimate=172.2K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.1K) [left] + │ ║ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=282, resultSizeEstimate=79.7K) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_09965c96acbb19e48b084ab9717fc00f714) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_09965c96acbb19e48b084ab9717fc00f714) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?copy ?branch . + ?book ?copy . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +68.500 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 68.500 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 33.65% complete, ETA 00:12:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +186.229 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=348) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="Author 3") + │ ║ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ║ ╠══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=529, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=329) [left] + │ ║ ║ ║ s: Var (name=member) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=348) [left] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=9.39, resultSizeEstimate=348) [left] + │ ║ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=172.2K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=141, resultSizeEstimate=79.7K) [left] + │ ║ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ ║ s: Var (name=author) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?loan ?member . + ?member a . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +162.905 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 162.905 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 34.62% complete, ETA 00:12:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000e011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +238.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +214.924 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 214.924 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 11) + +# Run progress: 35.58% complete, ETA 00:12:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a lib:Loan ; + lib:borrowedBy ?member ; + lib:loanedCopy ?copy . + ?copy lib:locatedAt ?branch . + ?book a lib:Book ; + lib:hasCopy ?copy . + OPTIONAL { + ?member lib:name ?memberName . + OPTIONAL { + ?branch lib:name ?branchName . + OPTIONAL { ?book lib:title ?bookTitle . } + } + } + OPTIONAL { + ?book lib:writtenBy ?author . + OPTIONAL { + ?author lib:name ?authorName . + OPTIONAL { ?author lib:country ?authorCountry . } + } + } + OPTIONAL { + ?root lib:loanDate ?loanDate . + OPTIONAL { + ?root lib:dueDate ?dueDate . + OPTIONAL { ?root lib:returnedDate ?returnedDate . } + } + } +} +ORDER BY ?root ?member ?copy + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 12) + +# Run progress: 36.54% complete, ETA 00:12:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT DISTINCT * WHERE { + { ?root a lib:Book . } + UNION + { ?root a lib:Loan . } + OPTIONAL { + ?root lib:title ?optTitle . + BIND(?optTitle AS ?optLabel) + } + OPTIONAL { + ?root lib:hasCopy ?optCopy . + OPTIONAL { ?optCopy lib:locatedAt ?optBranch . } + OPTIONAL { ?optBranch lib:name ?optBranchName . } + } + OPTIONAL { + ?root lib:loanedCopy ?optLoanCopy . + OPTIONAL { ?root lib:borrowedBy ?optMember . } + OPTIONAL { ?optMember lib:name ?optMemberName . } + } + OPTIONAL { + { ?root lib:writtenBy ?optAuthor . } + UNION + { ?bookForAuthor lib:writtenBy ?optAuthor . ?bookForAuthor lib:hasCopy ?optCopy2 . } + OPTIONAL { ?optAuthor lib:name ?optAuthorName . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01113640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:12:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +268.832 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +240.589 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 240.589 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.46% complete, ETA 00:12:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +353.061 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1002") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=919, resultSizeEstimate=301) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=471.3K, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?entity ?name . + ?entity a . + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + OPTIONAL { + ?entity ?assembly . + } +} + +334.864 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 334.864 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.42% complete, ETA 00:12:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1.634 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=154, resultSizeEstimate=303) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=assemblyName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ValueConstant (value="Assembly 3") + │ ║ │ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +1.375 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.375 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.38% complete, ETA 00:12:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +151.910 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=301) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ o: Var (name=component) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=784) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +137.681 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 137.681 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 41.35% complete, ETA 00:11:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000010001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +73.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (costEstimate=513, resultSizeEstimate=1.0K) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +68.308 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 68.308 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 42.31% complete, ETA 00:11:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.386 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=307) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=936, resultSizeEstimate=307) [left] + │ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=value) (bindingState=bound) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=307) + │ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +2.112 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.112 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 43.27% complete, ETA 00:11:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +273.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5615414f9a8588b4885899c891ee8a149c901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=301) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=1.0K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_5615414f9a8588b4885899c891ee8a149c901234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5615414f9a8588b4885899c891ee8a149c901234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +245.058 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 245.058 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 44.23% complete, ETA 00:11:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.923 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=301) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (JoinIterator) + │ ║ ╠══ StatementPattern (costEstimate=60.4K, resultSizeEstimate=784) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=784) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +4.361 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.361 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 45.19% complete, ETA 00:10:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.436 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_89802854c129599aa4c58931f19079136995301234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=77, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [left] + │ ║ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_89802854c129599aa4c58931f19079136995301234567) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_89802854c129599aa4c58931f19079136995301234567) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?component a . + ?requirement a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +2.106 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.106 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 46.15% complete, ETA 00:10:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.026 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=301) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=919, resultSizeEstimate=301) [left] + │ ║ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=14, resultSizeEstimate=784) [left] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ o: Var (name=test) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=14, resultSizeEstimate=784) [left] + │ ║ ║ ║ s: Var (name=test) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ ║ o: Var (name=measurement) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── ListMemberOperator + │ ║ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=307) + │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a . + ?requirement ?test . + ?test ?measurement . + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +3.543 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.543 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 47.12% complete, ETA 00:10:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.128 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=154, resultSizeEstimate=303) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ ╚══ Filter [right] + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=301) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +1.838 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.838 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 11) + +# Run progress: 48.08% complete, ETA 00:10:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT DISTINCT * WHERE { + ?root a eng:Requirement ; + eng:satisfies ?component ; + eng:verifiedBy ?test . + ?component a eng:Component ; + eng:partOf ?assembly . + OPTIONAL { + ?root eng:name ?requirementName . + OPTIONAL { + ?component eng:name ?componentName . + OPTIONAL { ?assembly eng:name ?assemblyName . } + } + } + OPTIONAL { + ?component eng:dependsOn ?dependency . + OPTIONAL { + ?dependency eng:name ?dependencyName . + OPTIONAL { ?dependency eng:partOf ?dependencyAssembly . } + } + } + OPTIONAL { + ?test eng:verifiedBy ?measurement . + OPTIONAL { + ?measurement eng:measuredValue ?measuredValue . + OPTIONAL { ?measurement eng:measuredAt ?measuredAt . } + } + } +} +ORDER BY ?root ?component ?test + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 12) + +# Run progress: 49.04% complete, ETA 00:10:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT DISTINCT * WHERE { + { ?root a eng:Component . } + UNION + { ?root a eng:Requirement . } + OPTIONAL { + ?root eng:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root eng:partOf ?optAssembly . + OPTIONAL { ?optAssembly eng:name ?optAssemblyName . } + } + OPTIONAL { + ?root eng:dependsOn ?optDependency . + OPTIONAL { ?optDependency eng:name ?optDependencyName . } + } + OPTIONAL { + ?root eng:satisfies ?optSatisfiedComponent . + OPTIONAL { ?optSatisfiedComponent eng:partOf ?optSatisfiedAssembly . } + } + OPTIONAL { + { ?root eng:verifiedBy ?optVerification . } + UNION + { ?verificationOwner eng:verifiedBy ?optVerification . FILTER(?verificationOwner = ?root) } + OPTIONAL { ?optVerification eng:measuredValue ?optMeasuredValue . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:10:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +415.190 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=509) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +386.619 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 386.619 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 50.96% complete, ETA 00:10:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1292.821 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (JoinIterator) + │ ║ ║ ║ ├── StatementPattern (costEstimate=1.5K, resultSizeEstimate=509) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=793.4K, resultSizeEstimate=509) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1164.451 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1164.451 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 51.92% complete, ETA 00:09:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +662.715 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_07544d7ae981334f3ab39b65ada917657d, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=171, resultSizeEstimate=509) [left] + │ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ ListMemberOperator + │ ║ │ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="1"^^) + │ ║ │ │ ║ ValueConstant (value="2"^^) + │ ║ │ │ ║ ValueConstant (value="3"^^) + │ ║ │ │ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=153.1K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_07544d7ae981334f3ab39b65ada917657d) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_07544d7ae981334f3ab39b65ada917657d) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +613.459 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 613.459 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 52.88% complete, ETA 00:09:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +131.909 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=509) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +117.619 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 117.619 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 53.85% complete, ETA 00:09:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000070001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +235.086 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +219.282 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 219.282 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 54.81% complete, ETA 00:09:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +131.806 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.5K, resultSizeEstimate=509) [left] + │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ValueConstant (value="6"^^) + │ ║ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +117.771 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 117.771 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 55.77% complete, ETA 00:08:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff01112660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1582.615 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0469d01130cd464489af03500edc687d84, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_0469d01130cd464489af03500edc687d84) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0469d01130cd464489af03500edc687d84) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1387.033 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1387.033 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 56.73% complete, ETA 00:08:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +139.447 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +125.972 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 125.972 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 57.69% complete, ETA 00:08:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000200001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1442.768 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=153.1K) + │ ║ ║ ║ s: Var (name=end) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=node) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) + │ ║ ║ ├── StatementPattern (costEstimate=196, resultSizeEstimate=153.1K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1315.680 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1315.680 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 58.65% complete, ETA 00:08:13 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1611.011 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_237846a7a05ba446e79eee1974af5a193501, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_237846a7a05ba446e79eee1974af5a193501) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_237846a7a05ba446e79eee1974af5a193501) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1526.742 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1526.742 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 59.62% complete, ETA 00:08:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 11) + +# Run progress: 60.58% complete, ETA 00:08:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT DISTINCT * WHERE { + ?root a conn:Node ; + conn:connectsTo ?neighbor . + ?neighbor conn:connectsTo ?neighbor2 . + OPTIONAL { + ?root conn:weight ?rootWeight . + OPTIONAL { + ?neighbor conn:weight ?neighborWeight . + OPTIONAL { ?neighbor2 conn:weight ?neighbor2Weight . } + } + } + OPTIONAL { + ?incoming conn:connectsTo ?root . + OPTIONAL { + ?incoming conn:weight ?incomingWeight . + OPTIONAL { ?incoming conn:connectsTo ?incomingNeighbor . } + } + } + OPTIONAL { + ?root conn:connectsTo ?optionalNeighbor . + OPTIONAL { + ?optionalNeighbor conn:connectsTo ?optionalNeighbor2 . + OPTIONAL { ?optionalNeighbor2 conn:weight ?optionalNeighbor2Weight . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 12) + +# Run progress: 61.54% complete, ETA 00:08:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT * WHERE { + { ?root a conn:Node . } + UNION + { ?root conn:connectsTo ?optUnionNeighbor . } + OPTIONAL { + ?root conn:connectsTo ?optNeighbor . + OPTIONAL { ?optNeighbor conn:weight ?optNeighborWeight . } + } + OPTIONAL { + ?root conn:weight ?optWeight . + BIND(?optWeight AS ?optNodeWeight) + } + OPTIONAL { + { ?optIncoming conn:connectsTo ?root . } + UNION + { ?root conn:connectsTo ?optIncoming . } + OPTIONAL { ?optIncoming conn:weight ?optIncomingWeight . } + } + FILTER(?optNodeWeight != 0 || !BOUND(?optNodeWeight)) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:08:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.316 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=342) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +39.629 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 39.629 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.46% complete, ETA 00:07:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +96.296 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 3") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=1.4K, resultSizeEstimate=459) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=246.6K, resultSizeEstimate=349) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=45.6K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?entity a . + ?entity ?name . + } + FILTER ((?name = ?target) || (?name = "OP 3")) + OPTIONAL { + ?entity ?op . + } +} + +88.189 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 88.189 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.42% complete, ETA 00:07:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.032 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_2733ce25a572abc24178bfe2541f819e512701, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╚══ Filter [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=lineName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Line 0") + │ ║ │ │ ValueConstant (value="Line 1") + │ ║ │ │ ValueConstant (value="Line 2") + │ ║ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=635) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_2733ce25a572abc24178bfe2541f819e512701) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_2733ce25a572abc24178bfe2541f819e512701) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +8.787 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.787 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.38% complete, ETA 00:07:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +171.282 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=320, resultSizeEstimate=635) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=25, resultSizeEstimate=635) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=line) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=635) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +154.093 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 154.093 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 66.35% complete, ETA 00:07:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +161.841 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=635) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.6K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +149.508 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 149.508 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 67.31% complete, ETA 00:06:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +23.009 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=342) [left] + │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=time) (bindingState=bound) + │ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.5K) + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ o: Var (name=time) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^ } + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +20.687 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.687 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 68.27% complete, ETA 00:06:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +122.707 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4146d230a12f547412fa6035192c9acfddf0123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=174, resultSizeEstimate=342) [left] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ ║ │ ├── StatementPattern (costEstimate=49, resultSizeEstimate=9.5K) [left] + │ ║ ║ │ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ │ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ └── StatementPattern (costEstimate=25, resultSizeEstimate=635) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=349) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_4146d230a12f547412fa6035192c9acfddf0123) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4146d230a12f547412fa6035192c9acfddf0123) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +112.275 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 112.275 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 69.23% complete, ETA 00:06:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.204 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=232, resultSizeEstimate=459) [left] + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +53.507 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.507 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 70.19% complete, ETA 00:06:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +255.003 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=22.8K, resultSizeEstimate=45.6K) [left] + │ ║ │ ║ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=213, resultSizeEstimate=45.6K) [right] + │ ║ │ ║ s: Var (name=s2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ValueConstant (value="Line 1") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=2.6M, resultSizeEstimate=342) [left] + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=49, resultSizeEstimate=9.5K) [left] + │ ║ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=13, resultSizeEstimate=635) [left] + │ ║ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=635) [left] + │ ║ ║ ║ s: Var (name=s2) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=9.5K) [right] + │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ o: Var (name=s2) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + ?service ?s1 . + ?s1 ?line . + ?s2 ?line . + ?service ?s2 . + OPTIONAL { + ?line ?optName . + } + FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) +} + +234.390 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 234.390 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 71.15% complete, ETA 00:05:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c001116660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +273.740 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=320, resultSizeEstimate=635) [left] + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=661) + │ ║ ║ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=25, resultSizeEstimate=635) + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ o: Var (name=track) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=45.6K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a . + ?section ?track . + FILTER EXISTS { + ?track a . + } + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +248.271 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 248.271 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 72.12% complete, ETA 00:05:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +235.516 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=459) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ├── StatementPattern (costEstimate=232, resultSizeEstimate=459) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=45.6K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +207.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 207.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 11) + +# Run progress: 73.08% complete, ETA 00:05:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a train:TrainService ; + train:runsOnSection ?section ; + train:passesThrough ?operationalPoint . + ?section train:partOfLine ?line ; + train:hasTrackSection ?track . + OPTIONAL { + ?root train:name ?serviceName . + OPTIONAL { + ?line train:name ?lineName . + OPTIONAL { ?operationalPoint train:name ?operationalPointName . } + } + } + OPTIONAL { + ?root train:scheduledTime ?scheduledTime . + OPTIONAL { + ?section train:connectsOperationalPoint ?sectionOperationalPoint . + OPTIONAL { ?sectionOperationalPoint train:name ?sectionOperationalPointName . } + } + } + OPTIONAL { + ?line train:connectsOperationalPoint ?lineOperationalPoint . + OPTIONAL { + ?lineOperationalPoint train:name ?lineOperationalPointName . + OPTIONAL { ?lineOperationalPoint train:code ?lineOperationalPointCode . } + } + } + OPTIONAL { + ?track train:length ?trackLength . + OPTIONAL { ?track train:trackType ?trackType . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000c011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 12) + +# Run progress: 74.04% complete, ETA 00:05:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT * WHERE { + { ?root a train:Line . } + UNION + { ?root a train:SectionOfLine . } + OPTIONAL { + ?root train:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root train:partOfLine ?optLine . + OPTIONAL { ?optLine train:name ?optLineName . } + } + OPTIONAL { + ?root train:connectsOperationalPoint ?optOperationalPoint . + OPTIONAL { ?optOperationalPoint train:name ?optOperationalPointName . } + } + OPTIONAL { + { ?service train:runsOnSection ?root . } + UNION + { ?service train:passesThrough ?optOperationalPoint2 . + ?root train:connectsOperationalPoint ?optOperationalPoint2 . } + OPTIONAL { ?service train:scheduledTime ?optScheduledTime . } + } + OPTIONAL { ?root train:hasTrackSection ?optTrackSection . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2163.969 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optLine" +║ ProjectionElem "optLineName" +║ ProjectionElem "optOperationalPoint" +║ ProjectionElem "optOperationalPointName" +║ ProjectionElem "service" +║ ProjectionElem "optOperationalPoint2" +║ ProjectionElem "optScheduledTime" +║ ProjectionElem "optTrackSection" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=349, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=635, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=877) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=635) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=optLine) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=877) [right] + │ ║ │ s: Var (name=optLine) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=optLineName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=45.6K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ ║ o: Var (name=optOperationalPoint) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ s: Var (name=optOperationalPoint) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optOperationalPointName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── Union [left] + │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=9.5K) + │ │ ║ s: Var (name=service) (bindingState=unbound) + │ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ │ ║ o: Var (name=root) (bindingState=bound) + │ │ ╚══ Join (JoinIterator) + │ │ ├── StatementPattern (costEstimate=107, resultSizeEstimate=45.6K) [left] + │ │ │ s: Var (name=root) (bindingState=bound) + │ │ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ │ │ o: Var (name=optOperationalPoint2) (bindingState=unbound) + │ │ └── StatementPattern (costEstimate=98, resultSizeEstimate=9.5K) [right] + │ │ s: Var (name=service) (bindingState=unbound) + │ │ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ │ o: Var (name=optOperationalPoint2) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=9.5K) [right] + │ s: Var (name=service) (bindingState=bound) + │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ o: Var (name=optScheduledTime) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=635) [right] + s: Var (name=root) (bindingState=bound) + p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + o: Var (name=optTrackSection) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optLine ?optLineName ?optOperationalPoint ?optOperationalPointName ?service ?optOperationalPoint2 ?optScheduledTime ?optTrackSection WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optLine . + OPTIONAL { + ?optLine ?optLineName . + } + } + OPTIONAL { + ?root ?optOperationalPoint . + OPTIONAL { + ?optOperationalPoint ?optOperationalPointName . + } + } + OPTIONAL { + { + ?service ?root . + } + UNION + { + ?root ?optOperationalPoint2 . + ?service ?optOperationalPoint2 . + } + OPTIONAL { + ?service ?optScheduledTime . + } + } + OPTIONAL { + ?root ?optTrackSection . + } +} + +1982.307 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1982.307 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:05:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +55.203 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=349) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=352) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=349) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +49.504 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 49.504 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 75.96% complete, ETA 00:04:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +114.525 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ Var (name=target) (bindingState=bound) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Substation 3") + │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) + │ ║ │ ├── BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ └── Union [right] + │ ║ │ ╠══ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=349) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=349) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── StatementPattern (costEstimate=187.8K, resultSizeEstimate=349) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=352) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { + ?entity a . + ?entity ?name . + } + UNION + { + ?substation ?name . + ?entity ?substation . + ?entity a . + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + OPTIONAL { + ?entity ?substation2 . + } +} + +102.032 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 102.032 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 76.92% complete, ETA 00:04:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.443 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) [left] + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ValueConstant (value="Substation 2") + │ ║ │ ║ └── StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) [right] + │ ║ │ ├── StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=53.3K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +4.836 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.836 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 77.88% complete, ETA 00:04:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +433.788 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=502, resultSizeEstimate=998) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=998) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) + │ ║ ╠══ StatementPattern (costEstimate=251.7K, resultSizeEstimate=998) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +395.556 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 395.556 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 78.85% complete, ETA 00:04:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.400 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=91.9K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ ║ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=152, resultSizeEstimate=91.9K) [left] + │ ║ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=substation) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.7K) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=91.9K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +5.664 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.664 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 79.81% complete, ETA 00:04:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +16.629 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=352) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (joinType=Cartesian product) + │ ║ ╠══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ╚══ Join (JoinIterator) [right] + │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=352) [left] + │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ └── Filter [right] + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ValueConstant (value="900"^^) + │ ║ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=352) + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=capacity) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +13.844 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.844 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 80.77% complete, ETA 00:03:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +103.752 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_40512af4d370638494b9263f84019767a270123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=267, resultSizeEstimate=529) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=47.7K, resultSizeEstimate=352) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_40512af4d370638494b9263f84019767a270123) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_40512af4d370638494b9263f84019767a270123) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +90.314 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 90.314 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 81.73% complete, ETA 00:03:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.923 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="Substation 1") + │ ║ │ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=998) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +13.643 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.643 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 82.69% complete, ETA 00:03:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +15.405 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optTransformer) (bindingState=bound) + │ ║ │ Var (name=substation) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=349) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +13.930 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.930 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 83.65% complete, ETA 00:03:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.520 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) [left] + │ ║ │ ║ ├── Filter [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=179, resultSizeEstimate=352) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.7K) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=91.9K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=352) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +5.201 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.201 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 84.62% complete, ETA 00:03:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +575.039 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=low) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=low) (bindingState=unbound) + │ ║ │ ╚══ Compare (>) + │ ║ │ Var (name=optValue) (bindingState=bound) + │ ║ │ ValueConstant (value="200"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (JoinIterator) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=502, resultSizeEstimate=998) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=998) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=167.8K, resultSizeEstimate=998) [left] + │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=998) [left] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) +} + +518.380 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 518.380 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 11) + +# Run progress: 85.58% complete, ETA 00:02:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT DISTINCT * WHERE { + ?root a grid:Transformer ; + grid:feeds ?substation ; + grid:hasMeter ?meter . + ?substation a grid:Substation . + ?meter grid:measures ?load . + OPTIONAL { + ?substation grid:name ?substationName . + OPTIONAL { + ?root grid:capacity ?transformerCapacity . + OPTIONAL { ?meter grid:serial ?meterSerial . } + } + } + OPTIONAL { + ?load grid:loadValue ?loadValue . + OPTIONAL { + ?load grid:loadType ?loadType . + OPTIONAL { ?load grid:unit ?loadUnit . } + } + } + OPTIONAL { + ?line grid:connectsTo ?substation . + OPTIONAL { + ?line grid:capacity ?lineCapacity . + OPTIONAL { ?line grid:name ?lineName . } + } + } + OPTIONAL { + ?generator grid:feeds ?substation . + OPTIONAL { + ?generator grid:capacity ?generatorCapacity . + OPTIONAL { ?generator grid:name ?generatorName . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 12) + +# Run progress: 86.54% complete, ETA 00:02:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT * WHERE { + { ?root a grid:Substation . } + UNION + { ?root a grid:Transformer . } + OPTIONAL { + ?root grid:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root grid:feeds ?optFed . + OPTIONAL { ?optFed grid:name ?optFedName . } + } + OPTIONAL { + { ?generator grid:feeds ?root . } + UNION + { ?root grid:feeds ?substation . ?generator grid:feeds ?substation . } + OPTIONAL { ?generator grid:capacity ?optGeneratorCapacity . } + } + OPTIONAL { + ?root grid:hasMeter ?optMeter . + OPTIONAL { ?optMeter grid:measures ?optLoad . } + OPTIONAL { ?optLoad grid:loadValue ?optLoadValue . } + } + OPTIONAL { + ?line grid:connectsTo ?root . + OPTIONAL { ?line grid:capacity ?optLineCapacity . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1777.509 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optFed" +║ ProjectionElem "optFedName" +║ ProjectionElem "generator" +║ ProjectionElem "substation" +║ ProjectionElem "optGeneratorCapacity" +║ ProjectionElem "optMeter" +║ ProjectionElem "optLoad" +║ ProjectionElem "optLoadValue" +║ ProjectionElem "line" +║ ProjectionElem "optLineCapacity" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=349, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=529, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=349) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=1.0K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=optFed) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=349) [right] + │ ║ │ s: Var (name=optFed) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=optFedName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=1.0K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=root) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=352) [right] + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=optGeneratorCapacity) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ StatementPattern (resultSizeEstimate=53.3K) [left] + │ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ │ ║ o: Var (name=optMeter) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=998) [right] + │ │ s: Var (name=optMeter) (bindingState=bound) + │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ │ o: Var (name=optLoad) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ s: Var (name=optLoad) (bindingState=bound) + │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ o: Var (name=optLoadValue) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=91.9K) [left] + ║ s: Var (name=line) (bindingState=unbound) + ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=352) [right] + s: Var (name=line) (bindingState=bound) + p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + o: Var (name=optLineCapacity) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optFed ?optFedName ?generator ?substation ?optGeneratorCapacity ?optMeter ?optLoad ?optLoadValue ?line ?optLineCapacity WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optFed . + OPTIONAL { + ?optFed ?optFedName . + } + } + OPTIONAL { + { + ?generator ?root . + } + UNION + { + ?root ?substation . + ?generator ?substation . + } + OPTIONAL { + ?generator ?optGeneratorCapacity . + } + } + OPTIONAL { + ?root ?optMeter . + OPTIONAL { + ?optMeter ?optLoad . + } + OPTIONAL { + ?optLoad ?optLoadValue . + } + } + OPTIONAL { + ?line ?root . + OPTIONAL { + ?line ?optLineCapacity . + } + } +} + +1638.738 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1638.738 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:02:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.299 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=5.86, resultSizeEstimate=304) [left] + │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ o: Var (name=disease) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [left] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=1.4K) [left] + │ ║ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=5.94, resultSizeEstimate=313) [left] + │ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ╚══ Filter [right] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) + │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [right] + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=315) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +0.250 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.250 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.46% complete, ETA 00:02:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f801112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.048 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=102, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Compare (>) + │ ║ ║ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ ║ └── StatementPattern (costEstimate=17, resultSizeEstimate=301) + │ ║ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=508) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) + │ ║ │ ╠══ StatementPattern (costEstimate=29, resultSizeEstimate=3.3K) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=17, resultSizeEstimate=290) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a . + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +1.746 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1.746 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.42% complete, ETA 00:02:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.716 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_86317be114cba80d434ea92091f81ee73ab701234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=159, resultSizeEstimate=313) [left] + │ ║ │ ║ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ │ ╚══ ListMemberOperator + │ ║ │ Var (name=optDisease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=16.3K, resultSizeEstimate=302) [left] + │ ║ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=302) [left] + │ ║ ║ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=324) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_86317be114cba80d434ea92091f81ee73ab701234567) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_86317be114cba80d434ea92091f81ee73ab701234567) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +44.187 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 44.187 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.38% complete, ETA 00:01:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000600001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +17.525 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Join (JoinIterator) [left] + ║ ├── StatementPattern [index: psoc] (costEstimate=80, resultSizeEstimate=313, indexName=psoc) [left] + ║ │ s: Var (name=arm) (bindingState=unbound) + ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ o: Var (name=result) (bindingState=unbound) + ║ └── Join (JoinIterator) [right] + ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=1.4K) [left] + ║ ║ s: Var (name=trial) (bindingState=unbound) + ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ ║ o: Var (name=arm) (bindingState=bound) + ║ ╚══ Join (JoinIterator) [right] + ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [left] + ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ └── Filter [right] + ║ ╠══ Not + ║ ║ Exists + ║ ║ StatementPattern (resultSizeEstimate=3.6K) + ║ ║ s: Var (name=drug) (bindingState=bound) + ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ ║ o: Var (name=disease) (bindingState=bound) + ║ ╚══ Join (JoinIterator) + ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=304) [left] + ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ o: Var (name=disease) (bindingState=unbound) + ║ └── Join (JoinIterator) [right] + ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] + ║ ║ s: Var (name=arm) (bindingState=bound) + ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ ║ o: Var (name=drug) (bindingState=unbound) + ║ ╚══ Filter [right] + ║ ├── Compare (>) + ║ │ Var (name=rate) (bindingState=bound) + ║ │ ValueConstant (value="0.6"^^) + ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=315) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=7.4K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) + +SELECT ?drug ?disease WHERE { + ?arm ?result . + ?trial ?arm . + ?trial a . + ?trial ?disease . + ?arm ?drug . + ?result ?rate . + FILTER (?rate > 0.6) + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +15.385 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 15.385 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 91.35% complete, ETA 00:01:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +38.967 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) + │ ║ │ │ ║ ├── StatementPattern (costEstimate=165, resultSizeEstimate=324) [left] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ └── Join (JoinIterator) [right] + │ ║ │ │ ║ ╠══ StatementPattern (costEstimate=31, resultSizeEstimate=3.9K) [left] + │ ║ │ │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=325) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ├── StatementPattern (costEstimate=25.2K, resultSizeEstimate=301) [left] + │ ║ │ │ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ └── Join (JoinIterator) [right] + │ ║ │ │ ╠══ StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] + │ ║ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) [right] + │ ║ │ │ ├── StatementPattern (costEstimate=31, resultSizeEstimate=3.9K) [left] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=18, resultSizeEstimate=325) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=372) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=324) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?drug a . + ?drug ?mol . + ?mol ?class . + } + UNION + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +34.718 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 34.718 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 92.31% complete, ETA 00:01:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +0.490 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=5.97, resultSizeEstimate=315) [left] + │ ║ ║ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=8.92, resultSizeEstimate=313) [left] + │ ║ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ o: Var (name=result) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ Filter [left] + │ ║ ║ ║ ├── Or + │ ║ ║ ║ │ ╠══ Compare (<) + │ ║ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ║ │ ╚══ Compare (=) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=315) + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] + │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [right] + │ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=315) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +0.399 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 0.399 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 93.27% complete, ETA 00:01:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.814 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=102, resultSizeEstimate=301) [left] + │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] + │ ║ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ ║ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ └── Filter [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=drugA) (bindingState=bound) + │ ║ ║ ║ Var (name=drugB) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) + │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=7.4K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + ?drugA ?target . + ?drugB ?target . + FILTER (?drugA != ?drugB) + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +5.384 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.384 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 94.23% complete, ETA 00:01:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +28.353 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ├── StatementPattern (costEstimate=159, resultSizeEstimate=313) [left] + │ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ ║ └── Filter [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ║ ValueConstant (value="0.09"^^) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=315) + │ ║ │ ║ s: Var (name=r) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ ║ o: Var (name=p) (bindingState=unbound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optCompName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── StatementPattern (costEstimate=24.6K, resultSizeEstimate=304) [left] + │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] + │ ║ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ╚══ Union [right] + │ ║ ║ ├── StatementPattern (new scope) (costEstimate=18, resultSizeEstimate=313) + │ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ │ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (costEstimate=18, resultSizeEstimate=313) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=372) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} + +24.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 24.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 95.19% complete, ETA 00:00:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +41.145 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_59016e83c0d2f09e443794577062990a517001234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=165, resultSizeEstimate=324) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=86, resultSizeEstimate=7.4K) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.9K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=47) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=53) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_59016e83c0d2f09e443794577062990a517001234) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_59016e83c0d2f09e443794577062990a517001234) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +31.440 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.440 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 96.15% complete, ETA 00:00:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +21.232 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join [left] + │ ║ ║ ║ │ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=313) [left] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ Join [right] + │ ║ ║ ║ │ │ ├── StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] + │ ║ ║ ║ │ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ └── Join [right] + │ ║ ║ ║ │ │ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] + │ ║ ║ ║ │ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ Join [right] + │ ║ ║ ║ │ │ ├── StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] + │ ║ ║ ║ │ │ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ │ o: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [right] + │ ║ ║ ║ │ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=315) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?arm ?result . + ?arm ?drug . + ?result ?effect . + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +18.325 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.325 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 97.12% complete, ETA 00:00:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001112660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +20104.209 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Exists + │ ║ │ ║ Join (JoinIterator) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=106, resultSizeEstimate=313) [left] + │ ║ │ ║ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ ║ o: Var (name=result) (bindingState=unbound) + │ ║ │ ║ ╚══ Join (JoinIterator) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ │ ╚══ Compare (!=) + │ ║ │ Var (name=optTrial) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Join (JoinIterator) [right] + │ ║ ║ ╠══ StatementPattern (costEstimate=16.3K, resultSizeEstimate=302) [left] + │ ║ ║ ║ s: Var (name=target) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ ╚══ Join (JoinIterator) [right] + │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=324) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=1.2K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { } + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER (EXISTS { ?arm ?result . ?result ?marker . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +20108.719 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20108.719 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 11) + +# Run progress: 98.08% complete, ETA 00:00:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a pharma:ClinicalTrial ; + pharma:hasArm ?arm ; + pharma:studiesDisease ?disease . + ?arm pharma:armDrug ?drug ; + pharma:hasResult ?result . + OPTIONAL { + ?drug pharma:name ?drugName . + OPTIONAL { + ?disease pharma:name ?diseaseName . + OPTIONAL { ?root pharma:name ?trialName . } + } + } + OPTIONAL { + ?drug pharma:targets ?target . + OPTIONAL { + ?target pharma:inPathway ?pathway . + OPTIONAL { ?pathway pharma:name ?pathwayName . } + } + } + OPTIONAL { + ?result pharma:pValue ?pValue . + OPTIONAL { + ?result pharma:effectSize ?effectSize . + OPTIONAL { ?result pharma:responseRate ?responseRate . } + } + } + OPTIONAL { + ?drug pharma:hasMolecule ?molecule . + OPTIONAL { + ?molecule pharma:inClass ?drugClass . + OPTIONAL { ?drugClass pharma:name ?drugClassName . } + } + } + OPTIONAL { + ?drug pharma:indicatedFor ?indication . + OPTIONAL { + ?drug pharma:contraindicatedFor ?contraindication . + OPTIONAL { ?drug pharma:hasSideEffect ?sideEffect . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 5 s each +# Measurement: 1 iterations, 3 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 12) + +# Run progress: 99.04% complete, ETA 00:00:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT * WHERE { + { ?root a pharma:Drug . } + UNION + { ?root a pharma:ClinicalTrial . } + OPTIONAL { + ?root pharma:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root pharma:targets ?optTarget . + OPTIONAL { ?optTarget pharma:inPathway ?optPathway . } + } + OPTIONAL { + ?root pharma:indicatedFor ?optIndication . + OPTIONAL { ?root pharma:contraindicatedFor ?optContraindication . } + } + OPTIONAL { + { ?root pharma:hasArm ?optArm . } + UNION + { ?trial pharma:hasArm ?optArm . ?optArm pharma:armDrug ?root . } + OPTIONAL { ?optArm pharma:hasResult ?optResult . } + OPTIONAL { ?optResult pharma:pValue ?optPValue . } + OPTIONAL { ?optResult pharma:effectSize ?optEffectSize . } + } + OPTIONAL { + ?combo pharma:combinationOf ?root . + OPTIONAL { ?combo pharma:synergyScore ?optSynergy . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +170.050 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optTarget" +║ ProjectionElem "optPathway" +║ ProjectionElem "optIndication" +║ ProjectionElem "optContraindication" +║ ProjectionElem "optArm" +║ ProjectionElem "trial" +║ ProjectionElem "optResult" +║ ProjectionElem "optPValue" +║ ProjectionElem "optEffectSize" +║ ProjectionElem "combo" +║ ProjectionElem "optSynergy" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=324, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=304, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=372) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=7.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=optTarget) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=302) [right] + │ ║ │ s: Var (name=optTarget) (bindingState=bound) + │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ │ o: Var (name=optPathway) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.6K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ ║ o: Var (name=optIndication) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=324) [right] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=optContraindication) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ LeftJoin [left] + │ │ ║ ├── Union [left] + │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=1.4K) + │ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ ║ o: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ ╚══ Join (JoinIterator) + │ │ ║ │ ├── StatementPattern (costEstimate=8.92, resultSizeEstimate=313) [left] + │ │ ║ │ │ s: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ │ ║ │ │ o: Var (name=root) (bindingState=bound) + │ │ ║ │ └── StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ o: Var (name=optArm) (bindingState=bound) + │ │ ║ └── StatementPattern (resultSizeEstimate=313) [right] + │ │ ║ s: Var (name=optArm) (bindingState=bound) + │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ │ ║ o: Var (name=optResult) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=315) [right] + │ │ s: Var (name=optResult) (bindingState=bound) + │ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ │ o: Var (name=optPValue) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=315) [right] + │ s: Var (name=optResult) (bindingState=bound) + │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ o: Var (name=optEffectSize) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=508) [left] + ║ s: Var (name=combo) (bindingState=unbound) + ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=301) [right] + s: Var (name=combo) (bindingState=bound) + p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + o: Var (name=optSynergy) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optTarget ?optPathway ?optIndication ?optContraindication ?optArm ?trial ?optResult ?optPValue ?optEffectSize ?combo ?optSynergy WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optTarget . + OPTIONAL { + ?optTarget ?optPathway . + } + } + OPTIONAL { + ?root ?optIndication . + OPTIONAL { + ?root ?optContraindication . + } + } + OPTIONAL { + { + ?root ?optArm . + } + UNION + { + ?optArm ?root . + ?trial ?optArm . + } + OPTIONAL { + ?optArm ?optResult . + } + OPTIONAL { + ?optResult ?optPValue . + } + OPTIONAL { + ?optResult ?optEffectSize . + } + } + OPTIONAL { + ?combo ?root . + OPTIONAL { + ?combo ?optSynergy . + } + } +} + +156.595 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 156.595 ms/op + + +# Run complete. Total time: 00:20:35 +``` From db7ccb4c55157166c270a2ededb6f6a11061b5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 09:48:52 +0200 Subject: [PATCH 10/43] wip --- .../sail/lmdb/benchmark/results-2026-04-18.md | 5994 +++++++++-------- 1 file changed, 3166 insertions(+), 2828 deletions(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md index 050757d0bd6..47d2b27f0cb 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md @@ -1,109 +1,113 @@ ``` Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 49.017 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 179.672 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 44.546 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 86.459 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 109.599 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 62.100 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 63.834 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 54.918 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.461 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 258.075 ms/op - -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1505.789 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 667.950 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.064 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 7.910 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.082 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.071 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.093 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 1036.339 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.096 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 8.319 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 851.356 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 6.813 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.688 ms/op - - -ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 686.809 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 307.734 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 41.203 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.520 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 150.699 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 10.806 ms/op - -ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1002.313 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 68.500 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 162.905 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 214.924 ms/op - - -ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 240.589 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 334.864 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.375 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 137.681 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 68.308 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 2.112 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.058 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.361 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.106 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 3.543 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.838 ms/op - - -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 386.619 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1164.451 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 613.459 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 117.619 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 219.282 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 117.771 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1387.033 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 125.972 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1315.680 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1526.742 ms/op - - - -ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 39.629 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 88.189 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 8.787 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 154.093 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 149.508 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 20.687 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 112.275 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 53.507 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 234.390 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 248.271 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 207.139 ms/op - -ThemeQueryBenchmark.executeQuery TRAIN 12 avgt 1982.307 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 49.504 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 102.032 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 4.836 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 395.556 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 5.664 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 13.844 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 90.314 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 13.643 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.930 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.201 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 518.380 ms/op - -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 12 avgt 1638.738 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 0.250 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.746 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 44.187 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 15.385 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 34.718 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 0.399 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 5.384 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 24.115 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 31.440 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 18.325 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 20108.719 ms/op - -ThemeQueryBenchmark.executeQuery PHARMA 12 avgt 156.595 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 52.437 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 113.484 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 16.557 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 88.904 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 122.787 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 26.194 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 64.122 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 49.804 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.073 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 224.043 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 211.442 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1483.784 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 643.729 ms/op + +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.131 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 11.717 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 0.140 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 0.138 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 0.250 ms/op <--- +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 759.784 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 0.159 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 7.372 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 870.266 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 8.685 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 2.368 ms/op + + +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 721.396 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 167.262 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 19.374 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.042 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 155.454 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 5.235 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 29157.116 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1091.310 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 69.016 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 80.998 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 198.789 ms/op + + +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 235.233 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 156.879 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 1.380 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 135.322 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 141.142 ms/op <-- +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 1.277 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 250.178 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 4.400 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 2.684 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 2.031 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 1.908 ms/op + +ThemeQueryBenchmark.executeQuery ENGINEERING 12 avgt 36044.036 ms/op + +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 410.408 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1218.273 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 580.869 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 122.839 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 218.180 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 128.466 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1454.976 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 129.925 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1332.833 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1412.339 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 260.771 ms/op + + +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 37.792 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 45.349 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 19.566 ms/op <--- +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 155.700 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 150.916 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 15.319 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 117.962 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 52.173 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 140.412 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 237.500 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 202.788 ms/op + +ThemeQueryBenchmark.executeQuery TRAIN 12 avgt 1935.462 ms/op + +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 45.064 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 32.343 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 4.997 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 345.063 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 57.707 ms/op <--- 10x +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 5.178 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 92.246 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 52.628 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.084 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 4.809 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 360.390 ms/op + +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 12 avgt 1607.592 ms/op + +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 3.168 ms/op <--- 10x +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 1.735 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 30.163 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 2956.831 ms/op <--- 200x +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 32.067 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 1.895 ms/op <--- +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 3.806 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 20.872 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 28.645 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 16.097 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 255.101 ms/op + +ThemeQueryBenchmark.executeQuery PHARMA 12 avgt 146.343 ms/op ``` ``` @@ -112,15 +116,15 @@ ThemeQueryBenchmark.executeQuery PHARMA 12 avgt # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) -# Run progress: 0.00% complete, ETA 00:13:52 +# Run progress: 0.00% complete, ETA 00:26:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -142,11 +146,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -54.609 ms/op +75.011 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -159,23 +163,23 @@ Projection │ ║ │ ║ Var (name=optDate) (bindingState=bound) │ ║ │ ║ ValueConstant (value="2024-06-01"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=333) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] │ ║ │ │ s: Var (name=patient) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=21, resultSizeEstimate=433) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] │ ║ │ ║ s: Var (name=enc) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) │ ║ │ ║ o: Var (name=date) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optDate) │ ║ │ Var (name=date) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=5.8K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] │ ║ s: Var (name=patient) (bindingState=bound) │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ o: Var (name=med) (bindingState=unbound) @@ -199,11 +203,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -49.017 ms/op +52.437 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 49.017 ms/op + 52.437 ms/op # JMH version: 1.37 @@ -211,15 +215,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) -# Run progress: 0.96% complete, ETA 00:14:26 +# Run progress: 0.96% complete, ETA 00:26:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -239,11 +243,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -191.905 ms/op +164.469 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -251,36 +255,46 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=code) (bindingState=bound) - │ ║ │ ║ │ Var (name=target) (bindingState=bound) - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=code) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="DX-202") - │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) - │ ║ │ ├── BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ └── Union [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=3.2K, resultSizeEstimate=1.1K) [left] - │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.1K) [right] - │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=1.7M, resultSizeEstimate=1.0K) [left] + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=code) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] + │ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) - │ ║ │ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) [right] + │ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=code) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ o: Var (name=alt) (bindingState=unbound) @@ -292,27 +306,37 @@ Projection Var (name=entity) (bindingState=unbound) SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { - VALUES ?target { "DX-200" "DX-201" } { - ?entity ?code . - ?entity a . + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) } UNION { - ?entity a . - ?entity ?code . + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) } - FILTER ((?code = ?target) || (?code = "DX-202")) OPTIONAL { ?entity ?alt . } } -179.672 ms/op +113.484 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 179.672 ms/op + 113.484 ms/op # JMH version: 1.37 @@ -320,15 +344,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) -# Run progress: 1.92% complete, ETA 00:14:26 +# Run progress: 1.92% complete, ETA 00:26:18 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -347,11 +371,11 @@ GROUP BY ?practitioner HAVING(COUNT(?enc) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000030111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -50.356 ms/op +23.177 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -361,40 +385,40 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5480c6497279ee74c49a4e689fdebec77e001234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_086300987543fef8478fb187672349817fc2, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (practitioner) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) [left] - │ ║ │ ╠══ StatementPattern (costEstimate=146, resultSizeEstimate=433) [left] - │ ║ │ ║ s: Var (name=enc) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── StatementPattern (costEstimate=21, resultSizeEstimate=433) [left] - │ ║ │ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) - │ ║ │ │ o: Var (name=practitioner) (bindingState=unbound) - │ ║ │ └── Filter [right] - │ ║ │ ╠══ ListMemberOperator - │ ║ │ ║ Var (name=date) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="2024-01-01"^^) - │ ║ │ ║ ValueConstant (value="2024-02-01"^^) - │ ║ │ ╚══ StatementPattern (costEstimate=21, resultSizeEstimate=433) - │ ║ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) - │ ║ │ o: Var (name=date) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=14.5K) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ │ ║ ├── Filter (costEstimate=420, resultSizeEstimate=1.3K) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ │ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] │ ║ s: Var (name=enc) (bindingState=bound) │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ GroupElem (_anon_having_5480c6497279ee74c49a4e689fdebec77e001234) + │ ║ GroupElem (_anon_having_086300987543fef8478fb187672349817fc2) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5480c6497279ee74c49a4e689fdebec77e001234) + │ ╚══ ExtensionElem (_anon_having_086300987543fef8478fb187672349817fc2) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -402,10 +426,10 @@ Projection Var (name=enc) (bindingState=unbound) SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { - ?enc a . - ?enc ?practitioner . ?enc ?date . FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + ?enc ?practitioner . + ?enc a . OPTIONAL { ?enc ?cond . } @@ -413,11 +437,11 @@ SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?practitioner HAVING (COUNT(?enc) > 0) -44.546 ms/op +16.557 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 44.546 ms/op + 16.557 ms/op # JMH version: 1.37 @@ -425,15 +449,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) -# Run progress: 2.88% complete, ETA 00:14:14 +# Run progress: 2.88% complete, ETA 00:25:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -455,11 +479,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc00111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -96.505 ms/op +126.809 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -472,25 +496,25 @@ Projection │ ║ │ ║ Var (name=optValue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="60"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=333) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] │ ║ │ │ s: Var (name=patient) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] - │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ ║ │ o: Var (name=_anon_path_73463994c940c8141ae8421ce9b0cb10b940123456, anonymous) (bindingState=unbound) - │ ║ │ ║ └── Join (JoinIterator) [right] - │ ║ │ ║ ╠══ StatementPattern (costEstimate=61, resultSizeEstimate=15.1K) [left] - │ ║ │ ║ ║ s: Var (name=_anon_path_73463994c940c8141ae8421ce9b0cb10b940123456, anonymous) (bindingState=bound) - │ ║ │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ │ ║ ║ o: Var (name=obs) (bindingState=unbound) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=535) [right] - │ ║ │ ║ s: Var (name=obs) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) - │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_2865ff12aa31d954d12b2b04c28c6e1531901, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_2865ff12aa31d954d12b2b04c28c6e1531901, anonymous) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optValue) │ ║ │ Var (name=value) (bindingState=bound) │ ║ └── Filter (new scope) @@ -499,7 +523,7 @@ Projection │ ║ ║ │ Str │ ║ ║ │ Var (name=name) (bindingState=bound) │ ║ ║ └── ValueConstant (value="test") - │ ║ ╚══ StatementPattern (resultSizeEstimate=396) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) │ ║ s: Var (name=patient) (bindingState=unbound) │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) │ ║ o: Var (name=name) (bindingState=unbound) @@ -524,11 +548,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -86.459 ms/op +88.904 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 86.459 ms/op + 88.904 ms/op # JMH version: 1.37 @@ -536,15 +560,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) -# Run progress: 3.85% complete, ETA 00:14:04 +# Run progress: 3.85% complete, ETA 00:25:44 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -563,11 +587,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -115.776 ms/op +170.031 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -576,34 +600,34 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── Exists - │ ║ │ StatementPattern (resultSizeEstimate=15.1K) + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ │ o: Var (name=obs) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=219, resultSizeEstimate=433) [left] - │ ║ ║ │ s: Var (name=enc) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=60, resultSizeEstimate=14.5K) [left] - │ ║ ║ ║ s: Var (name=enc) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ ║ ║ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── Or - │ ║ ║ │ ╠══ Compare (=) - │ ║ ║ │ ║ Var (name=code) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="DX-200") - │ ║ ║ │ ╚══ Compare (=) - │ ║ ║ │ Var (name=code) (bindingState=bound) - │ ║ ║ │ ValueConstant (value="DX-201") - │ ║ ║ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) - │ ║ ║ s: Var (name=cond) (bindingState=bound) - │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ ║ o: Var (name=code) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=433) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=52.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=50.6K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ │ ╚══ Filter (costEstimate=259, resultSizeEstimate=67.2K) [right] + │ ║ ║ │ ├── Or + │ ║ ║ │ │ ╠══ Compare (=) + │ ║ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ ║ │ │ ║ ValueConstant (value="DX-200") + │ ║ ║ │ │ ╚══ Compare (=) + │ ║ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ ║ │ │ ValueConstant (value="DX-201") + │ ║ ║ │ └── StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ │ s: Var (name=cond) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] │ ║ s: Var (name=enc) (bindingState=bound) │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ o: Var (name=practitioner) (bindingState=unbound) @@ -615,10 +639,10 @@ Projection Var (name=enc) (bindingState=unbound) SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { - ?enc a . ?enc ?cond . ?cond ?code . FILTER ((?code = "DX-200") || (?code = "DX-201")) + ?enc a . OPTIONAL { ?enc ?practitioner . } @@ -627,11 +651,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } } -109.599 ms/op +122.787 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 109.599 ms/op + 122.787 ms/op # JMH version: 1.37 @@ -639,15 +663,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) -# Run progress: 4.81% complete, ETA 00:13:57 +# Run progress: 4.81% complete, ETA 00:25:28 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -667,11 +691,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -67.686 ms/op +37.187 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -681,37 +705,37 @@ Projection │ ╠══ Filter │ ║ ├── Not │ ║ │ Exists - │ ║ │ StatementPattern (resultSizeEstimate=14.5K) + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ╠══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=333) [left] - │ ║ │ s: Var (name=patient) (bindingState=unbound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ └── Join (JoinIterator) [right] - │ ║ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] - │ ║ ║ s: Var (name=patient) (bindingState=bound) - │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ ║ o: Var (name=enc) (bindingState=unbound) - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=61, resultSizeEstimate=15.1K) [left] - │ ║ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ │ o: Var (name=obs) (bindingState=unbound) - │ ║ └── Filter [right] - │ ║ ╠══ ListMemberOperator - │ ║ ║ Var (name=value) (bindingState=bound) - │ ║ ║ ValueConstant (value="50"^^) - │ ║ ║ ValueConstant (value="60"^^) - │ ║ ║ ValueConstant (value="70"^^) - │ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=535) - │ ║ s: Var (name=obs) (bindingState=bound) - │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) - │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.0K) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=9.0K, resultSizeEstimate=3.0K) [left] + │ ║ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ ║ │ ║ │ s: Var (name=obs) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ │ o: Var (name=enc) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] + │ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=patient) (bindingState=bound) @@ -720,22 +744,22 @@ Projection Var (name=patient) (bindingState=unbound) SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { - VALUES ?limit { 55 } - ?patient a . - ?patient ?enc . - ?enc ?obs . ?obs ?value . FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + VALUES ?limit { 55 } FILTER NOT EXISTS { ?enc ?cond . } } -62.100 ms/op +26.194 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 62.100 ms/op + 26.194 ms/op # JMH version: 1.37 @@ -743,15 +767,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) -# Run progress: 5.77% complete, ETA 00:13:47 +# Run progress: 5.77% complete, ETA 00:25:11 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -775,11 +799,11 @@ GROUP BY ?patient HAVING(COUNT(?med) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -74.948 ms/op +68.171 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -789,7 +813,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8092d8e7a77f60045a3bb53c903f43525f901234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (patient) │ ║ Filter @@ -798,28 +822,28 @@ Projection │ ║ │ Var (name=patient) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=333) + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=10.2K) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) │ ║ ║ s: Var (name=patient) (bindingState=unbound) │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ ║ o: Var (name=enc) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=5.8K) + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) │ ║ │ s: Var (name=patient) (bindingState=bound) │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ o: Var (name=med) (bindingState=unbound) │ ║ └── ExtensionElem (optMed) │ ║ Var (name=med) (bindingState=bound) - │ ║ GroupElem (_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123) + │ ║ GroupElem (_anon_having_8092d8e7a77f60045a3bb53c903f43525f901234567) │ ║ Count │ ║ Var (name=med) (bindingState=bound) │ ║ GroupElem (medCount) │ ║ Count (Distinct) │ ║ Var (name=med) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_464a2aaa282cdd54167b57e3a17dac73a8a0123) + │ ╚══ ExtensionElem (_anon_having_8092d8e7a77f60045a3bb53c903f43525f901234567) │ Count │ Var (name=med) (bindingState=unbound) └── ExtensionElem (medCount) @@ -843,11 +867,11 @@ SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { GROUP BY ?patient HAVING (COUNT(?med) > 0) -63.834 ms/op +64.122 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 63.834 ms/op + 64.122 ms/op # JMH version: 1.37 @@ -855,15 +879,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) -# Run progress: 6.73% complete, ETA 00:13:39 +# Run progress: 6.73% complete, ETA 00:24:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -881,11 +905,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -61.331 ms/op +69.645 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -895,16 +919,16 @@ Projection │ ╠══ Difference │ ║ ├── Filter │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=5.8K) + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ ║ o: Var (name=med) (bindingState=bound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=526, resultSizeEstimate=1.0K) [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=16.4K) + │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] │ ║ │ │ s: Var (name=med) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) - │ ║ │ └── Filter [right] + │ ║ │ └── Filter (costEstimate=259, resultSizeEstimate=67.2K) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=code) (bindingState=bound) @@ -912,7 +936,7 @@ Projection │ ║ │ ║ └── Compare (=) │ ║ │ ║ Var (name=code) (bindingState=bound) │ ║ │ ║ ValueConstant (value="MED-1001") - │ ║ │ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) │ ║ │ s: Var (name=med) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=code) (bindingState=unbound) @@ -922,7 +946,7 @@ Projection │ ║ ║ │ Str │ ║ ║ │ Var (name=dose) (bindingState=bound) │ ║ ║ └── ValueConstant (value="x") - │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) │ ║ s: Var (name=med) (bindingState=unbound) │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) │ ║ o: Var (name=dose) (bindingState=unbound) @@ -946,11 +970,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } } -54.918 ms/op +49.804 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 54.918 ms/op + 49.804 ms/op # JMH version: 1.37 @@ -958,15 +982,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) -# Run progress: 7.69% complete, ETA 00:13:30 +# Run progress: 7.69% complete, ETA 00:24:40 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -990,11 +1014,11 @@ GROUP BY ?patient HAVING(COUNT(?enc) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -62.996 ms/op +79.149 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1004,43 +1028,43 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_09015551e44fc23644bdaed813cbda91cbc6, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (patient) │ ║ Filter │ ║ ├── And - │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=14.5K) - │ ║ │ ║ s: Var (name=enc) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ │ ╚══ Compare (!=) - │ ║ │ Var (name=optPractitioner) (bindingState=bound) - │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ ║ Var (name=patient) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ StatementPattern (resultSizeEstimate=333) [left] + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] │ ║ ║ s: Var (name=patient) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ ╚══ Extension [right] - │ ║ ├── Join (JoinIterator) - │ ║ │ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] │ ║ │ ║ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=21, resultSizeEstimate=433) [right] + │ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ o: Var (name=practitioner) (bindingState=unbound) │ ║ └── ExtensionElem (optPractitioner) │ ║ Var (name=practitioner) (bindingState=bound) - │ ║ GroupElem (_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234) + │ ║ GroupElem (_anon_having_09015551e44fc23644bdaed813cbda91cbc6) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_57688e335d6bc2f4c4f8d7e2eda7d11823001234) + │ ╚══ ExtensionElem (_anon_having_09015551e44fc23644bdaed813cbda91cbc6) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -1054,16 +1078,16 @@ SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { ?enc ?practitioner . BIND(?practitioner AS ?optPractitioner) } - FILTER (EXISTS { ?enc ?cond . } && (?optPractitioner != ?patient)) + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) } GROUP BY ?patient HAVING (COUNT(?enc) >= 2) -56.461 ms/op +56.073 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 56.461 ms/op + 56.073 ms/op # JMH version: 1.37 @@ -1071,15 +1095,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) -# Run progress: 8.65% complete, ETA 00:13:21 +# Run progress: 8.65% complete, ETA 00:24:25 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1099,11 +1123,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -282.165 ms/op +314.641 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1112,45 +1136,45 @@ Projection ├── Group () │ ╠══ Difference │ ║ ├── LeftJoin - │ ║ │ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] - │ ║ │ ║ ├── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ║ └── Join (JoinIterator) [right] - │ ║ │ ║ ╠══ StatementPattern (costEstimate=1.3K, resultSizeEstimate=433) [left] - │ ║ │ ║ ║ s: Var (name=enc) (bindingState=unbound) - │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ │ ║ ╚══ Join (JoinIterator) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=60, resultSizeEstimate=14.5K) [left] - │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ │ ║ └── Filter [right] - │ ║ │ ║ ╠══ ListMemberOperator - │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) - │ ║ │ ║ ║ ValueConstant (value="DX-200") - │ ║ │ ║ ║ ValueConstant (value="DX-201") - │ ║ │ ║ ║ ValueConstant (value="DX-202") - │ ║ │ ║ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) - │ ║ │ ║ s: Var (name=cond) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=433) [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.4K, joinType=Cartesian product) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.4K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.3K) [left] + │ ║ │ ║ │ ║ ├── Filter (costEstimate=183, resultSizeEstimate=33.6K) [left] + │ ║ │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ │ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ │ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ │ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ │ s: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] + │ ║ │ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ o: Var (name=cond) (bindingState=bound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ o: Var (name=practitioner) (bindingState=unbound) - │ ║ └── Join (JoinIterator) - │ ║ ╠══ Filter (new scope) [left] - │ ║ ║ ├── Compare (<) - │ ║ ║ │ Var (name=value) (bindingState=bound) - │ ║ ║ │ ValueConstant (value="60"^^) - │ ║ ║ └── StatementPattern (costEstimate=355.1K, resultSizeEstimate=535) - │ ║ ║ s: Var (name=obs) (bindingState=unbound) - │ ║ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) - │ ║ ║ o: Var (name=value) (bindingState=unbound) - │ ║ ╚══ StatementPattern (costEstimate=123, resultSizeEstimate=15.1K) [right] - │ ║ s: Var (name=enc) (bindingState=unbound) - │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.2K) + │ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=enc) (bindingState=bound) @@ -1159,30 +1183,30 @@ Projection Var (name=enc) (bindingState=unbound) SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { - VALUES ?code { "DX-200" "DX-201" } - ?enc a . - ?enc ?cond . ?cond ?condCode . FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc ?cond . + ?enc a . + VALUES ?code { "DX-200" "DX-201" } OPTIONAL { ?enc ?practitioner . } MINUS { + ?enc ?obs . { { ?obs ?value . FILTER (?value < 60) } } - ?enc ?obs . } } -258.075 ms/op +224.043 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 258.075 ms/op + 224.043 ms/op # JMH version: 1.37 @@ -1190,15 +1214,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) -# Run progress: 9.62% complete, ETA 00:13:13 +# Run progress: 9.62% complete, ETA 00:24:11 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1219,56 +1243,111 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled - +290.000 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=16.4K) + │ ║ │ ├── StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ o: Var (name=m2) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=259, resultSizeEstimate=67.2K) [right] + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1005") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=m2) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} +211.442 ms/op +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 211.442 ms/op + # JMH version: 1.37 # VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 11) -# Run progress: 10.58% complete, ETA 00:16:11 +# Run progress: 10.58% complete, ETA 00:23:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1315,11 +1394,11 @@ SELECT DISTINCT * WHERE { ORDER BY ?root ?encounter ?observation WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000600001112af0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1730.972 ms/op +2112.090 ms/op Iteration 1: ### Optimized Query ### Reduced Order @@ -1350,65 +1429,65 @@ Reduced ├── LeftJoin (LeftJoinIterator) [left] │ ╠══ LeftJoin (LeftJoinIterator) [left] │ ║ ├── LeftJoin (LeftJoinIterator) [left] - │ ║ │ ╠══ Join (JoinIterator) [left] - │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=146, resultSizeEstimate=433, indexName=ospc) [left] - │ ║ │ ║ │ s: Var (name=encounter) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ │ ║ └── Join (JoinIterator) [right] - │ ║ │ ║ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] - │ ║ │ ║ ║ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ ║ ║ o: Var (name=encounter) (bindingState=bound) - │ ║ │ ║ ╚══ Join (JoinIterator) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=333) [left] - │ ║ │ ║ │ s: Var (name=root) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=123, resultSizeEstimate=15.1K) [right] - │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.4K) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.3K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=4.2K, resultSizeEstimate=8.3K, indexName=ospc) [left] + │ ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=53, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=encounter) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=396) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=21.4K) [left] │ ║ │ │ s: Var (name=root) (bindingState=bound) │ ║ │ │ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) │ ║ │ │ o: Var (name=patientName) (bindingState=unbound) │ ║ │ └── LeftJoin [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=5.8K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=16.7K) [left] │ ║ │ ║ s: Var (name=root) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ ║ o: Var (name=medication) (bindingState=unbound) │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=66.5K) [left] │ ║ │ │ s: Var (name=medication) (bindingState=bound) │ ║ │ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ │ o: Var (name=medicationCode) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=16.7K) [right] │ ║ │ s: Var (name=medication) (bindingState=bound) │ ║ │ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) │ ║ │ o: Var (name=medicationDosage) (bindingState=unbound) │ ║ └── LeftJoin [right] - │ ║ ╠══ StatementPattern (resultSizeEstimate=433) [left] + │ ║ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] │ ║ ║ s: Var (name=encounter) (bindingState=bound) │ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) │ ║ ║ o: Var (name=recordedOn) (bindingState=unbound) │ ║ ╚══ LeftJoin [right] - │ ║ ├── StatementPattern (resultSizeEstimate=433) [left] + │ ║ ├── StatementPattern (resultSizeEstimate=25.0K) [left] │ ║ │ s: Var (name=encounter) (bindingState=bound) │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ o: Var (name=practitioner) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=396) [right] + │ ║ └── StatementPattern (resultSizeEstimate=21.4K) [right] │ ║ s: Var (name=practitioner) (bindingState=bound) │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) │ ║ o: Var (name=practitionerName) (bindingState=unbound) │ ╚══ LeftJoin [right] - │ ├── StatementPattern (resultSizeEstimate=14.5K) [left] + │ ├── StatementPattern (resultSizeEstimate=49.8K) [left] │ │ s: Var (name=encounter) (bindingState=bound) │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ │ o: Var (name=condition) (bindingState=unbound) │ └── LeftJoin [right] - │ ╠══ StatementPattern (resultSizeEstimate=1.1K) [left] + │ ╠══ StatementPattern (resultSizeEstimate=66.5K) [left] │ ║ s: Var (name=condition) (bindingState=bound) │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ o: Var (name=conditionCode) (bindingState=unbound) @@ -1417,7 +1496,7 @@ Reduced │ p: Var (name=_const_25295cd4_uri, value=http://example.com/theme/medical/description, anonymous) │ o: Var (name=conditionDescription) (bindingState=unbound) └── LeftJoin [right] - ╠══ StatementPattern (resultSizeEstimate=535) [left] + ╠══ StatementPattern (resultSizeEstimate=49.7K) [left] ║ s: Var (name=observation) (bindingState=bound) ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) ║ o: Var (name=observationValue) (bindingState=unbound) @@ -1427,9 +1506,9 @@ Reduced o: Var (name=observationUnit) (bindingState=unbound) SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicationCode ?medicationDosage ?recordedOn ?practitioner ?practitionerName ?condition ?conditionCode ?conditionDescription ?observationValue ?observationUnit WHERE { - ?encounter a . - ?root ?encounter . ?root a . + ?root ?encounter . + ?encounter a . ?encounter ?observation . OPTIONAL { ?root ?patientName . @@ -1470,11 +1549,11 @@ SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicatio } ORDER BY ?root ?encounter ?observation -1505.789 ms/op +1483.784 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1505.789 ms/op + 1483.784 ms/op # JMH version: 1.37 @@ -1482,15 +1561,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 12) -# Run progress: 11.54% complete, ETA 00:15:46 +# Run progress: 11.54% complete, ETA 00:23:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1526,11 +1605,11 @@ SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEn } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111e208 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -745.214 ms/op +882.588 ms/op Iteration 1: ### Optimized Query ### Distinct Projection @@ -1549,16 +1628,16 @@ Distinct ║ ├── LeftJoin (LeftJoinIterator) [left] ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] ║ │ ║ ├── Union [left] - ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=333, indexName=ospc) + ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, indexName=ospc) ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) ║ │ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=433, indexName=ospc) + ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=25.0K, indexName=ospc) ║ │ ║ │ s: Var (name=root) (bindingState=unbound) ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) ║ │ ║ └── Extension [right] - ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=396) + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=21.4K) ║ │ ║ ║ s: Var (name=root) (bindingState=bound) ║ │ ║ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) @@ -1566,43 +1645,43 @@ Distinct ║ │ ║ Var (name=optName) (bindingState=bound) ║ │ ╚══ LeftJoin [right] ║ │ ├── LeftJoin [left] - ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) [left] + ║ │ │ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] ║ │ │ ║ s: Var (name=root) (bindingState=bound) ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) ║ │ │ ║ o: Var (name=optEncounter) (bindingState=unbound) - ║ │ │ ╚══ StatementPattern (resultSizeEstimate=433) [right] + ║ │ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] ║ │ │ s: Var (name=optEncounter) (bindingState=bound) ║ │ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) ║ │ │ o: Var (name=optDate) (bindingState=unbound) - ║ │ └── StatementPattern (resultSizeEstimate=433) [right] + ║ │ └── StatementPattern (resultSizeEstimate=25.0K) [right] ║ │ s: Var (name=optEncounter) (bindingState=bound) ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) ║ │ o: Var (name=optPractitioner) (bindingState=unbound) ║ └── LeftJoin [right] ║ ╠══ LeftJoin [left] - ║ ║ ├── StatementPattern (resultSizeEstimate=5.8K) [left] + ║ ║ ├── StatementPattern (resultSizeEstimate=16.7K) [left] ║ ║ │ s: Var (name=root) (bindingState=bound) ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) ║ ║ │ o: Var (name=optMedication) (bindingState=unbound) - ║ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + ║ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] ║ ║ s: Var (name=optMedication) (bindingState=bound) ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) ║ ║ o: Var (name=optMedicationCode) (bindingState=unbound) - ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) [right] ║ s: Var (name=optMedication) (bindingState=bound) ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) ║ o: Var (name=optDosage) (bindingState=unbound) ╚══ LeftJoin [right] - ├── Join (JoinIterator) [left] - │ ╠══ StatementPattern (costEstimate=51, resultSizeEstimate=10.2K) [left] + ├── Join (JoinIterator) (resultSizeEstimate=51.9K) [left] + │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] │ ║ s: Var (name=root) (bindingState=bound) │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ o: Var (name=optEncounter2) (bindingState=unbound) - │ ╚══ StatementPattern (costEstimate=120, resultSizeEstimate=14.5K) [right] + │ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.8K) [right] │ s: Var (name=optEncounter2) (bindingState=bound) │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ o: Var (name=optCondition) (bindingState=unbound) - └── StatementPattern (resultSizeEstimate=1.1K) [right] + └── StatementPattern (resultSizeEstimate=66.5K) [right] s: Var (name=optCondition) (bindingState=bound) p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) o: Var (name=optConditionCode) (bindingState=unbound) @@ -1646,11 +1725,11 @@ SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEn } } -667.950 ms/op +643.729 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 667.950 ms/op + 643.729 ms/op # JMH version: 1.37 @@ -1658,15 +1737,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) -# Run progress: 12.50% complete, ETA 00:15:26 +# Run progress: 12.50% complete, ETA 00:23:41 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1691,11 +1770,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.076 ms/op +0.189 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1710,19 +1789,19 @@ Projection │ ║ │ ║ ValueConstant (value="user1") │ ║ │ ║ ValueConstant (value="user2") │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ │ │ ╚══ Join (JoinIterator) [right] - │ ║ │ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ │ │ └── Filter [right] - │ ║ │ │ ╠══ Compare (!=) - │ ║ │ │ ║ Var (name=u) (bindingState=bound) - │ ║ │ │ ║ Var (name=v) (bindingState=bound) - │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ │ │ s: Var (name=u) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ o: Var (name=v) (bindingState=bound) - │ ║ │ └── StatementPattern (resultSizeEstimate=385) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ │ Var (name=v) (bindingState=bound) + │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ │ s: Var (name=u) (bindingState=bound) │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=optName) (bindingState=unbound) @@ -1751,8 +1830,8 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { ( ) ( ) } - ?u ?v . FILTER (?u != ?v) + ?u ?v . OPTIONAL { ?u ?optName . } @@ -1760,11 +1839,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) } -0.064 ms/op +0.131 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.064 ms/op + 0.131 ms/op # JMH version: 1.37 @@ -1772,15 +1851,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) -# Run progress: 13.46% complete, ETA 00:15:04 +# Run progress: 13.46% complete, ETA 00:23:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1813,11 +1892,11 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.758 ms/op +16.724 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1835,63 +1914,63 @@ Projection │ ║ │ ║ ║ └── Compare (=) │ ║ │ ║ ║ Var (name=name) (bindingState=bound) │ ║ │ ║ ║ ValueConstant (value="user1") - │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=385) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) │ ║ │ ║ s: Var (name=u1) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ │ └── Join (JoinIterator) [right] - │ ║ │ ╠══ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ │ └── Join (JoinIterator) [right] - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── Compare (!=) - │ ║ │ ║ │ Var (name=u1) (bindingState=bound) - │ ║ │ ║ │ Var (name=u2) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ │ ║ s: Var (name=u1) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ ║ o: Var (name=u2) (bindingState=bound) - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [left] - │ ║ │ │ s: Var (name=u2) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ o: Var (name=u1) (bindingState=bound) - │ ║ │ └── Join (JoinIterator) [right] - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── Compare (!=) - │ ║ │ ║ │ Var (name=u1) (bindingState=bound) - │ ║ │ ║ │ Var (name=u3) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ │ ║ s: Var (name=u1) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ ║ o: Var (name=u3) (bindingState=bound) - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [left] - │ ║ │ │ s: Var (name=u3) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ o: Var (name=u1) (bindingState=bound) - │ ║ │ └── Join (JoinIterator) [right] - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── Compare (!=) - │ ║ │ ║ │ Var (name=u2) (bindingState=bound) - │ ║ │ ║ │ Var (name=u3) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ │ ║ s: Var (name=u2) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ ║ o: Var (name=u3) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] - │ ║ │ s: Var (name=u3) (bindingState=bound) - │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3449861048580872E17M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.356555255434E11M) [left] + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6508998.6M) [left] + │ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=45.3M) [left] + │ ║ │ │ ║ │ ║ ├── Filter [left] + │ ║ │ │ ║ │ ║ │ ╠══ And + │ ║ │ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ └── Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.3M) + │ ║ │ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ║ │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ │ │ o: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ └── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) │ ║ └── Extension - │ ║ ╠══ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ s: Var (name=u1) (bindingState=unbound) │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ o: Var (name=u1) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_7758fdc3a338a8874039bb85e37313cddb640123456) + │ ║ ╚══ ExtensionElem (_anon_path_252908ecc5754fa54552b3b10d263f3457cc01) │ ║ Var (name=u1) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -1912,15 +1991,14 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { ( ) ( ) } - VALUES ?u3 { } - ?u1 ?u2 . FILTER (?u1 != ?u2) - ?u2 ?u1 . + ?u1 ?u2 . + VALUES ?u3 { } + FILTER ((?u2 != ?u3) && (?u1 != ?u3)) ?u1 ?u3 . - FILTER (?u1 != ?u3) - ?u3 ?u1 . + ?u2 ?u1 . ?u2 ?u3 . - FILTER (?u2 != ?u3) + ?u3 ?u1 . ?u3 ?u2 . FILTER EXISTS { ?u1 ?name . @@ -1928,15 +2006,15 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } MINUS { ?u1 ?u1 . - BIND(?u1 AS ?_anon_path_7758fdc3a338a8874039bb85e37313cddb640123456) + BIND(?u1 AS ?_anon_path_252908ecc5754fa54552b3b10d263f3457cc01) } } -7.910 ms/op +11.717 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 7.910 ms/op + 11.717 ms/op # JMH version: 1.37 @@ -1944,15 +2022,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) -# Run progress: 14.42% complete, ETA 00:14:44 +# Run progress: 14.42% complete, ETA 00:23:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1979,11 +2057,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.101 ms/op +0.203 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1995,25 +2073,25 @@ Projection │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── And - │ ║ ║ │ ╠══ Exists - │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=98.3K) - │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ╚══ Compare (!=) - │ ║ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ └── Exists + │ ║ ║ │ ║ StatementPattern + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -2043,19 +2121,19 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { ( ) ( ) } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) ?u ?v . - FILTER (EXISTS { ?v ?u . } && (?u != ?v)) OPTIONAL { ?v ?optName . } FILTER (?optName != "") } -0.082 ms/op +0.140 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.082 ms/op + 0.140 ms/op # JMH version: 1.37 @@ -2063,15 +2141,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) -# Run progress: 15.38% complete, ETA 00:14:26 +# Run progress: 15.38% complete, ETA 00:22:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2099,11 +2177,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.087 ms/op +0.198 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2113,7 +2191,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_83506263396a128e854376ba05b39b66faa32101234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (u) │ ║ Filter @@ -2124,32 +2202,32 @@ Projection │ ║ │ ValueConstant (value="user5") │ ║ │ ValueConstant (value="user6") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── Compare (!=) - │ ║ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=385) + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) │ ║ │ s: Var (name=u) (bindingState=bound) │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=optName) (bindingState=unbound) │ ║ └── ExtensionElem (optAlias) │ ║ Var (name=optName) (bindingState=bound) - │ ║ GroupElem (_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567) + │ ║ GroupElem (_anon_having_83506263396a128e854376ba05b39b66faa32101234567) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_891003f1d575f12ceb4b3da7589e70fb2ae26601234567) + │ ╚══ ExtensionElem (_anon_having_83506263396a128e854376ba05b39b66faa32101234567) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (degree) @@ -2175,8 +2253,8 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { ( ) ( ) } - ?u ?v . FILTER (?u != ?v) + ?u ?v . OPTIONAL { ?u ?optName . BIND(?optName AS ?optAlias) @@ -2186,11 +2264,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 3) -0.071 ms/op +0.138 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.071 ms/op + 0.138 ms/op # JMH version: 1.37 @@ -2198,15 +2276,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) -# Run progress: 16.35% complete, ETA 00:14:08 +# Run progress: 16.35% complete, ETA 00:22:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2235,11 +2313,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003e000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.108 ms/op +0.363 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2251,29 +2329,29 @@ Projection │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350) [left] │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Not - │ ║ ║ │ ║ Exists - │ ║ ║ │ ║ Extension - │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=98.3K) - │ ║ ║ │ ║ │ s: Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ └── ExtensionElem (_anon_path_158413944b1a5e08ab4309b47e3476f49e77520) - │ ║ ║ │ ║ Var (name=u) (bindingState=bound) - │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── Compare (!=) - │ ║ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] + │ ║ ║ ╠══ Not + │ ║ ║ ║ Exists + │ ║ ║ ║ Extension + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_path_550091a4ad361ac7fc445689bb4f68bd2c9ab001234) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -2285,25 +2363,25 @@ Projection Var (name=u) (bindingState=unbound) SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) VALUES ?u { } FILTER NOT EXISTS { ?u ?u . - BIND(?u AS ?_anon_path_158413944b1a5e08ab4309b47e3476f49e77520) + BIND(?u AS ?_anon_path_550091a4ad361ac7fc445689bb4f68bd2c9ab001234) } - VALUES ?v { } - ?u ?v . - FILTER (?u != ?v) OPTIONAL { ?v ?optName . } FILTER (?optName != "") } -0.093 ms/op +0.250 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.093 ms/op + 0.250 ms/op # JMH version: 1.37 @@ -2311,15 +2389,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) -# Run progress: 17.31% complete, ETA 00:13:52 +# Run progress: 17.31% complete, ETA 00:22:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2350,11 +2428,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1077.073 ms/op +1036.913 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2370,31 +2448,29 @@ Projection │ ║ │ ValueConstant (value="user10") │ ║ │ ValueConstant (value="user11") │ ║ └── LeftJoin - │ ║ ╠══ Union (new scope) [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ Extension (new scope) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) - │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=196.6K, resultSizeEstimate=98.3K) [left] - │ ║ ║ │ ║ │ ║ s: Var (name=u) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ │ ║ o: Var (name=v) (bindingState=unbound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] - │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ └── ExtensionElem (activity) - │ ║ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] - │ ║ ║ └── Join (JoinIterator) - │ ║ ║ ╠══ Extension (new scope) [left] - │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=9.9K) - │ ║ ║ ║ │ s: Var (name=post) (bindingState=unbound) - │ ║ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) - │ ║ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ╠══ Join (HashJoinIteration) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union (new scope) [right] + │ ║ ║ ╠══ Extension (new scope) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) │ ║ ║ ║ └── ExtensionElem (activity) - │ ║ ║ ║ Var (name=post) (bindingState=bound) - │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ Extension (new scope) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ └── ExtensionElem (activity) + │ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=u) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -2406,21 +2482,16 @@ Projection Var (name=activity) (bindingState=unbound) SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { } { - { - ?u ?v . - ?v ?u . - BIND(?v AS ?activity) - } - VALUES ?u { } + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) } UNION { - { - ?post ?u . - BIND(?post AS ?activity) - } - VALUES ?u { } + ?post ?u . + BIND(?post AS ?activity) } OPTIONAL { ?u ?optName . @@ -2428,11 +2499,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) } -1036.339 ms/op +759.784 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1036.339 ms/op + 759.784 ms/op # JMH version: 1.37 @@ -2440,15 +2511,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) -# Run progress: 18.27% complete, ETA 00:13:38 +# Run progress: 18.27% complete, ETA 00:22:03 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2480,11 +2551,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 5) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.113 ms/op +0.233 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2494,7 +2565,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_454722a672b5edc30b489bb690adea67efd5a60123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_860322dd24ad884e304367a1d561c8f0a0b54201234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="5"^^) │ ║ └── Group (u) │ ║ Filter @@ -2502,29 +2573,29 @@ Projection │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── Compare (!=) - │ ║ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.2M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=u) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_454722a672b5edc30b489bb690adea67efd5a60123) + │ ║ GroupElem (_anon_having_860322dd24ad884e304367a1d561c8f0a0b54201234567) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (connections) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_454722a672b5edc30b489bb690adea67efd5a60123) + │ ╚══ ExtensionElem (_anon_having_860322dd24ad884e304367a1d561c8f0a0b54201234567) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (connections) @@ -2570,8 +2641,8 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { ( ) ( ) } - ?u ?v . FILTER (?u != ?v) + ?u ?v . OPTIONAL { ?u ?optName . } @@ -2580,11 +2651,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 5) -0.096 ms/op +0.159 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.096 ms/op + 0.159 ms/op # JMH version: 1.37 @@ -2592,15 +2663,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) -# Run progress: 19.23% complete, ETA 00:13:24 +# Run progress: 19.23% complete, ETA 00:21:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2632,11 +2703,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -9.324 ms/op +10.549 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2654,32 +2725,32 @@ Projection │ ║ │ ValueConstant (value="user17") │ ║ └── LeftJoin │ ║ ╠══ Difference [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ │ └── Filter [right] - │ ║ ║ │ ╠══ And - │ ║ ║ │ ║ ├── Exists - │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=98.3K) - │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ └── Compare (!=) - │ ║ ║ │ ║ Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ │ s: Var (name=u) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.2M) + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) │ ║ ║ └── Extension - │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=98.3K) + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) - │ ║ ║ ╚══ ExtensionElem (_anon_path_9944e1fe4ffdb6134be6bf0489da7ee9d350012345678) + │ ║ ║ ╚══ ExtensionElem (_anon_path_94184126d4012284484ab0e574ea1d364a8f012345678) │ ║ ║ Var (name=v) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -2729,11 +2800,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { ( ) ( ) } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) ?u ?v . - FILTER (EXISTS { ?v ?u . } && (?u != ?v)) MINUS { ?v ?v . - BIND(?v AS ?_anon_path_9944e1fe4ffdb6134be6bf0489da7ee9d350012345678) + BIND(?v AS ?_anon_path_94184126d4012284484ab0e574ea1d364a8f012345678) } OPTIONAL { ?v ?optName . @@ -2741,11 +2812,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) } -8.319 ms/op +7.372 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 8.319 ms/op + 7.372 ms/op # JMH version: 1.37 @@ -2753,15 +2824,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) -# Run progress: 20.19% complete, ETA 00:13:09 +# Run progress: 20.19% complete, ETA 00:21:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2781,11 +2852,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -931.051 ms/op +1183.147 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2800,23 +2871,23 @@ Projection │ ║ │ ValueConstant (value="user2") │ ║ └── LeftJoin │ ║ ╠══ Extension [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=32.8K, resultSizeEstimate=98.3K) [left] - │ ║ ║ │ ║ s: Var (name=a) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ o: Var (name=b) (bindingState=unbound) - │ ║ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ ║ │ ├── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) [left] - │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) - │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ o: Var (name=c) (bindingState=unbound) - │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] - │ ║ ║ │ s: Var (name=c) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185314.6M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) │ ║ ║ └── ExtensionElem (cycleStart) │ ║ ║ Var (name=a) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=a) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -2838,11 +2909,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optName IN ("user0", "user1", "user2")) } -851.356 ms/op +870.266 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 851.356 ms/op + 870.266 ms/op # JMH version: 1.37 @@ -2850,15 +2921,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) -# Run progress: 21.15% complete, ETA 00:12:59 +# Run progress: 21.15% complete, ETA 00:21:18 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2883,11 +2954,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -7.607 ms/op +12.694 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2899,45 +2970,45 @@ Projection │ ║ │ Var (name=optAlias) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ Filter [left] - │ ║ ║ ║ ├── Compare (!=) - │ ║ ║ ║ │ Var (name=a) (bindingState=bound) - │ ║ ║ ║ │ Var (name=b) (bindingState=bound) - │ ║ ║ ║ └── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) - │ ║ ║ ║ s: Var (name=a) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=b) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) - │ ║ ║ │ s: Var (name=b) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=c) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ Filter [left] - │ ║ ║ ║ ├── Compare (!=) - │ ║ ║ ║ │ Var (name=c) (bindingState=bound) - │ ║ ║ ║ │ Var (name=d) (bindingState=bound) - │ ║ ║ ║ └── StatementPattern (costEstimate=157, resultSizeEstimate=98.3K) - │ ║ ║ ║ s: Var (name=c) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=d) (bindingState=unbound) - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── Compare (!=) - │ ║ ║ │ Var (name=d) (bindingState=bound) - │ ║ ║ │ Var (name=a) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ s: Var (name=d) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9872958282E9M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20830.0M) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ │ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ║ │ ╚══ Filter (costEstimate=189, resultSizeEstimate=143.4K) [right] + │ ║ ║ │ ║ │ ├── Compare (!=) + │ ║ ║ │ ║ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ └── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Filter [right] + │ ║ ║ │ ║ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=d) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=a) (bindingState=bound) + │ ║ ║ │ ╚══ Filter (costEstimate=189, resultSizeEstimate=143.4K) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ └── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ └── Filter (costEstimate=189, resultSizeEstimate=143.4K) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ ║ Var (name=d) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=c) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=d) (bindingState=bound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=385) + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) │ ║ │ s: Var (name=b) (bindingState=bound) │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=optName) (bindingState=unbound) @@ -2954,12 +3025,12 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { VALUES ?b { } ?a ?b . FILTER (?a != ?b) + ?d ?a . + FILTER (?d != ?a) ?b ?c . FILTER (?b != ?c) ?c ?d . FILTER (?c != ?d) - ?d ?a . - FILTER (?d != ?a) OPTIONAL { ?b ?optName . BIND(?optName AS ?optAlias) @@ -2967,11 +3038,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optAlias != "") } -6.813 ms/op +8.685 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.813 ms/op + 8.685 ms/op # JMH version: 1.37 @@ -2979,15 +3050,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) -# Run progress: 22.12% complete, ETA 00:12:46 +# Run progress: 22.12% complete, ETA 00:21:01 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3036,11 +3107,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f800111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.051 ms/op +3.454 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3065,66 +3136,66 @@ Projection │ ║ │ ║ └── Compare (=) │ ║ │ ║ Var (name=name) (bindingState=bound) │ ║ │ ║ ValueConstant (value="user8") - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=385) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) │ ║ │ s: Var (name=a) (bindingState=bound) │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ Filter [left] - │ ║ ║ ║ ├── Compare (!=) - │ ║ ║ ║ │ Var (name=a) (bindingState=bound) - │ ║ ║ ║ │ Var (name=b) (bindingState=bound) - │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ ║ s: Var (name=a) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=b) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ │ s: Var (name=b) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=c) (bindingState=bound) - │ ║ ║ └── Filter [right] - │ ║ ║ ╠══ Compare (!=) - │ ║ ║ ║ Var (name=a) (bindingState=bound) - │ ║ ║ ║ Var (name=c) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ Var (name=d) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ │ s: Var (name=c) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=d) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ Filter [left] - │ ║ ║ ║ ├── Compare (!=) - │ ║ ║ ║ │ Var (name=d) (bindingState=bound) - │ ║ ║ ║ │ Var (name=e) (bindingState=bound) - │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) - │ ║ ║ ║ s: Var (name=d) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=e) (bindingState=bound) - │ ║ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=98.3K) [right] - │ ║ ║ s: Var (name=e) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=a) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=385) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8199985139319455E15M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.26610353809E10M) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=88078.0M) [left] + │ ║ ║ │ ║ ├── Filter [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=e) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1257.8M) + │ ║ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1257.8M) [left] + │ ║ ║ │ ║ │ │ ╠══ Filter [left] + │ ║ ║ │ ║ │ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.8K) + │ ║ ║ │ ║ │ │ ║ ╠══ Filter [left] + │ ║ ║ │ ║ │ │ ║ ║ ├── And + │ ║ ║ │ ║ │ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ │ ╚══ Compare (!=) + │ ║ ║ │ ║ │ │ ║ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.6M) + │ ║ ║ │ ║ │ │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.6M) [left] + │ ║ ║ │ ║ │ │ ║ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ │ │ ║ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ │ ║ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ │ │ ║ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ │ │ ║ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ │ │ ║ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ │ ║ ║ ║ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ │ ║ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ║ ╚══ BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=e) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=e) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -3163,55 +3234,29 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { ( ) ( ) } - VALUES (?c ?d) { - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - } - VALUES ?e { } - ?a ?b . FILTER (?a != ?b) - ?b ?c . - FILTER (?b != ?c) - ?c ?d . + ?a ?b . + VALUES ?c { } + FILTER ((?a != ?c) && (?b != ?c)) + VALUES ?d { } FILTER (?c != ?d) - ?d ?e . + ?c ?d . + VALUES ?e { } FILTER (?d != ?e) + ?d ?e . + ?b ?c . ?e ?a . - FILTER (?a != ?c) OPTIONAL { ?e ?optName . } FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) } -2.688 ms/op +2.368 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.688 ms/op + 2.368 ms/op # JMH version: 1.37 @@ -3219,15 +3264,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 11) -# Run progress: 23.08% complete, ETA 00:12:32 +# Run progress: 23.08% complete, ETA 00:20:45 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3259,7 +3304,7 @@ SELECT DISTINCT * WHERE { ORDER BY ?root ?followed ?post WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -3278,7 +3323,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -3300,15 +3345,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 12) -# Run progress: 24.04% complete, ETA 00:13:30 +# Run progress: 24.04% complete, ETA 00:35:41 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3344,7 +3389,7 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f0111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -3363,7 +3408,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -3385,15 +3430,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 0) -# Run progress: 25.00% complete, ETA 00:14:21 +# Run progress: 25.00% complete, ETA 00:48:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3415,11 +3460,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003800111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -763.173 ms/op +973.444 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3432,23 +3477,23 @@ Projection │ ║ │ ║ Var (name=optBranch) (bindingState=bound) │ ║ │ ║ Var (name=book) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=1.1K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] │ ║ │ │ s: Var (name=book) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=172.2K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) + │ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=60, resultSizeEstimate=3.6K) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] │ ║ │ ║ s: Var (name=copy) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optBranch) │ ║ │ Var (name=branch) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] │ ║ s: Var (name=book) (bindingState=bound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) │ ║ o: Var (name=author) (bindingState=unbound) @@ -3472,11 +3517,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -686.809 ms/op +721.396 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 686.809 ms/op + 721.396 ms/op # JMH version: 1.37 @@ -3484,15 +3529,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 1) -# Run progress: 25.96% complete, ETA 00:14:04 +# Run progress: 25.96% complete, ETA 00:47:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3512,11 +3557,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -335.374 ms/op +231.039 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3524,36 +3569,46 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ Var (name=target) (bindingState=bound) - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="Member 3") - │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) - │ ║ │ ├── BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ └── Union [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=329) [left] - │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] - │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=533.0K, resultSizeEstimate=1.1K) [left] + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] + │ ║ │ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ │ └── StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) [right] + │ ║ │ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=172.2K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) │ ║ o: Var (name=copy) (bindingState=unbound) @@ -3565,27 +3620,37 @@ Projection Var (name=entity) (bindingState=unbound) SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { - VALUES ?target { "Member 1" "Member 2" } { - ?entity a . - ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) } UNION { - ?entity a . - ?entity ?name . + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) } - FILTER ((?name = ?target) || (?name = "Member 3")) OPTIONAL { ?entity ?copy . } } -307.734 ms/op +167.262 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 307.734 ms/op + 167.262 ms/op # JMH version: 1.37 @@ -3593,15 +3658,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 2) -# Run progress: 26.92% complete, ETA 00:13:46 +# Run progress: 26.92% complete, ETA 00:45:43 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3620,11 +3685,11 @@ GROUP BY ?author HAVING(COUNT(?book) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -48.299 ms/op +27.364 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3634,36 +3699,36 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_217a626eda5519b47f4b287d3847123289c01, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_40522c03eef7df5e4b0fa39da7750c07cc330123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) [left] - │ ║ │ ╠══ StatementPattern (costEstimate=260, resultSizeEstimate=515) [left] - │ ║ │ ║ s: Var (name=author) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) - │ ║ │ ╚══ Filter [right] - │ ║ │ ├── ListMemberOperator - │ ║ │ │ Var (name=authorName) (bindingState=bound) - │ ║ │ │ ValueConstant (value="Author 1") - │ ║ │ │ ValueConstant (value="Author 2") - │ ║ │ │ ValueConstant (value="Author 3") - │ ║ │ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) - │ ║ │ s: Var (name=author) (bindingState=bound) - │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ o: Var (name=authorName) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] + │ ║ │ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Author 1") + │ ║ │ ║ │ ValueConstant (value="Author 2") + │ ║ │ ║ │ ValueConstant (value="Author 3") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=40.3K) [right] + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] │ ║ s: Var (name=book) (bindingState=unbound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) │ ║ o: Var (name=author) (bindingState=bound) - │ ║ GroupElem (_anon_having_217a626eda5519b47f4b287d3847123289c01) + │ ║ GroupElem (_anon_having_40522c03eef7df5e4b0fa39da7750c07cc330123) │ ║ Count │ ║ Var (name=book) (bindingState=bound) │ ║ GroupElem (bookCount) │ ║ Count (Distinct) │ ║ Var (name=book) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_217a626eda5519b47f4b287d3847123289c01) + │ ╚══ ExtensionElem (_anon_having_40522c03eef7df5e4b0fa39da7750c07cc330123) │ Count │ Var (name=book) (bindingState=unbound) └── ExtensionElem (bookCount) @@ -3671,9 +3736,9 @@ Projection Var (name=book) (bindingState=unbound) SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { - ?author a . ?author ?authorName . FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . OPTIONAL { ?book ?author . } @@ -3681,11 +3746,11 @@ SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { GROUP BY ?author HAVING (COUNT(?book) > 0) -41.203 ms/op +19.374 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 41.203 ms/op + 19.374 ms/op # JMH version: 1.37 @@ -3693,15 +3758,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 3) -# Run progress: 27.88% complete, ETA 00:13:29 +# Run progress: 27.88% complete, ETA 00:44:13 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3722,11 +3787,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -50.805 ms/op +63.488 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3739,17 +3804,17 @@ Projection │ ║ │ ║ Var (name=optDue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="2024-01-10"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=176, resultSizeEstimate=348) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=348) [right] + │ ║ │ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] │ ║ │ │ s: Var (name=loan) (bindingState=bound) │ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) │ ║ │ │ o: Var (name=member) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=348) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) │ ║ │ ║ s: Var (name=loan) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ ║ o: Var (name=due) (bindingState=unbound) @@ -3761,7 +3826,7 @@ Projection │ ║ ║ │ Str │ ║ ║ │ Var (name=name) (bindingState=bound) │ ║ ║ └── ValueConstant (value="member 1") - │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) │ ║ s: Var (name=member) (bindingState=unbound) │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ o: Var (name=name) (bindingState=unbound) @@ -3786,11 +3851,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } } -45.520 ms/op +45.042 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 45.520 ms/op + 45.042 ms/op # JMH version: 1.37 @@ -3798,15 +3863,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 4) -# Run progress: 28.85% complete, ETA 00:13:12 +# Run progress: 28.85% complete, ETA 00:42:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3824,11 +3889,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -166.156 ms/op +211.487 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3837,17 +3902,17 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── Exists - │ ║ │ StatementPattern (resultSizeEstimate=172.2K) + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) │ ║ │ s: Var (name=book) (bindingState=bound) │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) │ ║ │ o: Var (name=copy) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=533, resultSizeEstimate=1.1K) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [left] │ ║ ║ │ s: Var (name=book) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ ║ └── Filter [right] + │ ║ ║ └── Filter (costEstimate=361, resultSizeEstimate=130.6K) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=title) (bindingState=bound) @@ -3855,11 +3920,11 @@ Projection │ ║ ║ ║ └── Compare (=) │ ║ ║ ║ Var (name=title) (bindingState=bound) │ ║ ║ ║ ValueConstant (value="Book 2") - │ ║ ║ ╚══ StatementPattern (costEstimate=33, resultSizeEstimate=1.1K) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) │ ║ ║ s: Var (name=book) (bindingState=bound) │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) │ ║ ║ o: Var (name=title) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=79.7K) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] │ ║ s: Var (name=book) (bindingState=bound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) │ ║ o: Var (name=author) (bindingState=unbound) @@ -3882,11 +3947,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -150.699 ms/op +155.454 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 150.699 ms/op + 155.454 ms/op # JMH version: 1.37 @@ -3894,15 +3959,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 5) -# Run progress: 29.81% complete, ETA 00:12:56 +# Run progress: 29.81% complete, ETA 00:41:29 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3920,11 +3985,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -12.239 ms/op +7.479 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3938,26 +4003,26 @@ Projection │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=due) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=348) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) │ ║ │ s: Var (name=loan) (bindingState=bound) │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ o: Var (name=due) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ╠══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=348) [left] - │ ║ │ s: Var (name=loan) (bindingState=unbound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ └── Filter [right] - │ ║ ╠══ ListMemberOperator - │ ║ ║ Var (name=loanDate) (bindingState=bound) - │ ║ ║ ValueConstant (value="2024-01-01"^^) - │ ║ ║ ValueConstant (value="2024-01-02"^^) - │ ║ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=348) - │ ║ s: Var (name=loan) (bindingState=bound) - │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) - │ ║ o: Var (name=loanDate) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=511, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=511) [left] + │ ║ ║ ├── Filter (costEstimate=1.5K, resultSizeEstimate=507) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=loan) (bindingState=bound) @@ -3966,21 +4031,21 @@ Projection Var (name=loan) (bindingState=unbound) SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { - VALUES ?threshold { "2024-01-01"^^ } - ?loan a . ?loan ?loanDate . FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } FILTER NOT EXISTS { ?loan ?due . FILTER (?due < ?threshold) } } -10.806 ms/op +5.235 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 10.806 ms/op + 5.235 ms/op # JMH version: 1.37 @@ -3988,15 +4053,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 6) -# Run progress: 30.77% complete, ETA 00:12:41 +# Run progress: 30.77% complete, ETA 00:40:12 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4020,56 +4085,101 @@ GROUP BY ?member HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff0111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled - +33153.720 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_513b0d0f772e984905b56c4363d76c9fc801234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) (bindingState=bound) + │ ║ │ Var (name=member) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) (bindingState=bound) + │ ║ GroupElem (_anon_having_513b0d0f772e984905b56c4363d76c9fc801234) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_513b0d0f772e984905b56c4363d76c9fc801234) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan a . + ?loan ?member . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) +29157.116 ms/op +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 29157.116 ms/op + # JMH version: 1.37 # VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 7) -# Run progress: 31.73% complete, ETA 00:13:13 +# Run progress: 31.73% complete, ETA 00:40:42 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4088,11 +4198,11 @@ SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1106.235 ms/op +1526.643 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4100,40 +4210,40 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Join (JoinIterator) - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── Exists - │ ║ │ ║ │ StatementPattern (resultSizeEstimate=3.6K) - │ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=1.2K, resultSizeEstimate=3.6K) - │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) - │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=3.6K) [left] - │ ║ │ │ s: Var (name=copy) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) - │ ║ │ └── Filter [right] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="Branch 0") - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=branchName) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="Branch 1") - │ ║ │ ╚══ StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) - │ ║ │ s: Var (name=branch) (bindingState=bound) - │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=382.0K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.6K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ │ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ║ └── Filter (costEstimate=0.50, resultSizeEstimate=387.8K) [right] + │ ║ │ ║ ╠══ Exists + │ ║ │ ║ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ╚══ Filter (costEstimate=22.9K, resultSizeEstimate=45.8K) [right] + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="Branch 0") + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=branchName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Branch 1") + │ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=branchName) (bindingState=unbound) │ ║ └── Filter (new scope) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── Str │ ║ ║ │ Var (name=branch) (bindingState=bound) │ ║ ║ └── ValueConstant (value="branch/0") - │ ║ ╚══ StatementPattern (resultSizeEstimate=3.6K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) │ ║ s: Var (name=copy) (bindingState=unbound) │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) │ ║ o: Var (name=branch) (bindingState=unbound) @@ -4146,10 +4256,10 @@ Projection SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { ?copy ?branch . + ?copy a . FILTER EXISTS { ?copy a . } - ?copy a . ?branch ?branchName . FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) MINUS { @@ -4158,11 +4268,11 @@ SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { } } -1002.313 ms/op +1091.310 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1002.313 ms/op + 1091.310 ms/op # JMH version: 1.37 @@ -4170,15 +4280,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 8) -# Run progress: 32.69% complete, ETA 00:12:59 +# Run progress: 32.69% complete, ETA 00:39:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4199,11 +4309,11 @@ GROUP BY ?author HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000020001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -77.953 ms/op +102.598 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4213,7 +4323,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_09965c96acbb19e48b084ab9717fc00f714, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_845174ef1a2c8f474cd2b556948cccf249b801234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ Filter @@ -4223,51 +4333,51 @@ Projection │ ║ │ ValueConstant (value="Member 2") │ ║ │ ValueConstant (value="Member 3") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=71, resultSizeEstimate=348) [left] - │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) - │ ║ ║ │ o: Var (name=copy) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=348) [left] - │ ║ ║ ║ s: Var (name=loan) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=19, resultSizeEstimate=348) [left] - │ ║ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ ║ │ o: Var (name=member) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=60, resultSizeEstimate=3.6K) [left] - │ ║ ║ ║ s: Var (name=copy) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) - │ ║ ║ ║ o: Var (name=branch) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=138, resultSizeEstimate=172.2K) [left] - │ ║ ║ │ s: Var (name=book) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) - │ ║ ║ │ o: Var (name=copy) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.1K) [left] - │ ║ ║ ║ s: Var (name=book) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ ║ ╚══ StatementPattern (costEstimate=282, resultSizeEstimate=79.7K) [right] - │ ║ ║ s: Var (name=book) (bindingState=bound) - │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) - │ ║ ║ o: Var (name=author) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.6K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] + │ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] │ ║ s: Var (name=member) (bindingState=bound) │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_09965c96acbb19e48b084ab9717fc00f714) + │ ║ GroupElem (_anon_having_845174ef1a2c8f474cd2b556948cccf249b801234567) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_09965c96acbb19e48b084ab9717fc00f714) + │ ╚══ ExtensionElem (_anon_having_845174ef1a2c8f474cd2b556948cccf249b801234567) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -4278,8 +4388,8 @@ SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { ?loan ?copy . ?loan a . ?loan ?member . - ?copy ?branch . ?book ?copy . + ?copy ?branch . ?book a . ?book ?author . OPTIONAL { @@ -4290,11 +4400,11 @@ SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?author HAVING (COUNT(?loan) > 0) -68.500 ms/op +69.016 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 68.500 ms/op + 69.016 ms/op # JMH version: 1.37 @@ -4302,15 +4412,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 9) -# Run progress: 33.65% complete, ETA 00:12:43 +# Run progress: 33.65% complete, ETA 00:38:21 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4334,11 +4444,11 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -186.229 ms/op +116.422 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4356,7 +4466,7 @@ Projection │ ║ │ ├── Compare (<) │ ║ │ │ Var (name=due) (bindingState=bound) │ ║ │ │ ValueConstant (value="2024-01-10"^^) - │ ║ │ └── StatementPattern (resultSizeEstimate=348) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) │ ║ │ s: Var (name=loan) (bindingState=bound) │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ o: Var (name=due) (bindingState=unbound) @@ -4369,43 +4479,43 @@ Projection │ ║ ║ │ ╚══ Compare (=) │ ║ ║ │ Var (name=authorName) (bindingState=bound) │ ║ ║ │ ValueConstant (value="Author 3") - │ ║ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ║ ╠══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=529, resultSizeEstimate=348) [left] - │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ ║ │ o: Var (name=member) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=329) [left] - │ ║ ║ ║ s: Var (name=member) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=348) [left] - │ ║ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=9.39, resultSizeEstimate=348) [left] - │ ║ ║ ║ s: Var (name=loan) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) - │ ║ ║ ║ o: Var (name=copy) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=207, resultSizeEstimate=172.2K) [left] - │ ║ ║ │ s: Var (name=book) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) - │ ║ ║ │ o: Var (name=copy) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=141, resultSizeEstimate=79.7K) [left] - │ ║ ║ ║ s: Var (name=book) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) - │ ║ ║ ║ o: Var (name=author) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] - │ ║ ║ s: Var (name=author) (bindingState=bound) - │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ ║ o: Var (name=authorName) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=268.5K, joinType=Cartesian product) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=268.5K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=261.3K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.6K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=member) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ ║ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] + │ ║ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ │ o: Var (name=author) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ ║ ║ s: Var (name=author) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] │ ║ s: Var (name=book) (bindingState=bound) │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) │ ║ o: Var (name=optTitle) (bindingState=unbound) @@ -4417,14 +4527,14 @@ Projection Var (name=member) (bindingState=unbound) SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { - VALUES ?target { "Author 1" "Author 2" } ?loan ?member . - ?member a . ?loan a . ?loan ?copy . + ?member a . ?book ?copy . ?book ?author . ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } FILTER ((?authorName = ?target) || (?authorName = "Author 3")) OPTIONAL { ?book ?optTitle . @@ -4432,11 +4542,11 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) } -162.905 ms/op +80.998 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 162.905 ms/op + 80.998 ms/op # JMH version: 1.37 @@ -4444,15 +4554,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 10) -# Run progress: 34.62% complete, ETA 00:12:27 +# Run progress: 34.62% complete, ETA 00:37:13 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4473,11 +4583,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000e011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -238.625 ms/op +278.295 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4495,17 +4605,17 @@ Projection │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) - │ ║ │ │ ╚══ Join (JoinIterator) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) - │ ║ │ │ └── StatementPattern (costEstimate=49, resultSizeEstimate=2.4K) [right] + │ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] │ ║ │ │ s: Var (name=branch) (bindingState=bound) │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.6K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) │ ║ │ ║ o: Var (name=branch) (bindingState=bound) @@ -4517,7 +4627,7 @@ Projection │ ║ ║ │ Str │ ║ ║ │ Var (name=name2) (bindingState=bound) │ ║ ║ └── ValueConstant (value="branch 0") - │ ║ ╚══ StatementPattern (resultSizeEstimate=2.4K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) │ ║ s: Var (name=branch) (bindingState=unbound) │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ o: Var (name=name2) (bindingState=unbound) @@ -4548,11 +4658,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } } -214.924 ms/op +198.789 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 214.924 ms/op + 198.789 ms/op # JMH version: 1.37 @@ -4560,15 +4670,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 11) -# Run progress: 35.58% complete, ETA 00:12:11 +# Run progress: 35.58% complete, ETA 00:36:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4610,7 +4720,7 @@ SELECT DISTINCT * WHERE { ORDER BY ?root ?member ?copy WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -4629,7 +4739,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -4651,15 +4761,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 12) -# Run progress: 36.54% complete, ETA 00:12:34 +# Run progress: 36.54% complete, ETA 00:43:26 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4696,7 +4806,7 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff01113640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000078000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -4705,7 +4815,7 @@ WARNING: Restricted methods will be blocked in a future release unless native ac org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) @@ -4715,7 +4825,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -4737,15 +4847,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 0) -# Run progress: 37.50% complete, ETA 00:12:55 +# Run progress: 37.50% complete, ETA 00:50:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4762,11 +4872,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -268.832 ms/op +248.956 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4779,18 +4889,18 @@ Projection │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) │ ║ │ ║ Var (name=component) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=1.0K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] │ ║ │ │ s: Var (name=component) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) │ ║ │ ║ s: Var (name=component) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optAssembly) │ ║ │ Var (name=assembly) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=1.1K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=component) (bindingState=bound) │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) │ ║ o: Var (name=dep) (bindingState=unbound) @@ -4813,11 +4923,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -240.589 ms/op +235.233 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 240.589 ms/op + 235.233 ms/op # JMH version: 1.37 @@ -4825,15 +4935,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 1) -# Run progress: 38.46% complete, ETA 00:12:38 +# Run progress: 38.46% complete, ETA 00:48:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4852,11 +4962,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000100001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -353.061 ms/op +218.440 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4864,36 +4974,46 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ Var (name=target) (bindingState=bound) - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="REQ-1002") - │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) - │ ║ │ ├── BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ └── Union [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=919, resultSizeEstimate=301) [left] - │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] - │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=471.3K, resultSizeEstimate=1.0K) [left] + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] + │ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ │ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [right] + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ o: Var (name=assembly) (bindingState=unbound) @@ -4905,27 +5025,37 @@ Projection Var (name=entity) (bindingState=unbound) SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { - VALUES ?target { "REQ-1000" "REQ-1001" } { - ?entity a . - ?entity ?name . + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) } UNION { - ?entity ?name . - ?entity a . + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) } - FILTER ((?name = ?target) || (?name = "REQ-1002")) OPTIONAL { ?entity ?assembly . } } -334.864 ms/op +156.879 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 334.864 ms/op + 156.879 ms/op # JMH version: 1.37 @@ -4933,15 +5063,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 2) -# Run progress: 39.42% complete, ETA 00:12:21 +# Run progress: 39.42% complete, ETA 00:47:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4959,11 +5089,11 @@ GROUP BY ?assembly HAVING(COUNT(?component) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1.634 ms/op +1.998 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4973,36 +5103,36 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8654392cccc0c658c4726bbbf6483cde79fa201234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (assembly) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) [left] - │ ║ │ ╠══ StatementPattern (costEstimate=154, resultSizeEstimate=303) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ ╠══ StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) - │ ║ │ ╚══ Filter [right] + │ ║ │ ╚══ Filter (costEstimate=82, resultSizeEstimate=6.7K) [right] │ ║ │ ├── ListMemberOperator │ ║ │ │ Var (name=assemblyName) (bindingState=bound) │ ║ │ │ ValueConstant (value="Assembly 1") │ ║ │ │ ValueConstant (value="Assembly 2") │ ║ │ │ ValueConstant (value="Assembly 3") - │ ║ │ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K) │ ║ │ s: Var (name=assembly) (bindingState=bound) │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=component) (bindingState=unbound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ o: Var (name=assembly) (bindingState=bound) - │ ║ GroupElem (_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345) + │ ║ GroupElem (_anon_having_8654392cccc0c658c4726bbbf6483cde79fa201234567) │ ║ Count │ ║ Var (name=component) (bindingState=bound) │ ║ GroupElem (componentCount) │ ║ Count (Distinct) │ ║ Var (name=component) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_69902d93382ea814c4ce4b12a9fc1ef66b22e012345) + │ ╚══ ExtensionElem (_anon_having_8654392cccc0c658c4726bbbf6483cde79fa201234567) │ Count │ Var (name=component) (bindingState=unbound) └── ExtensionElem (componentCount) @@ -5020,11 +5150,11 @@ SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { GROUP BY ?assembly HAVING (COUNT(?component) > 0) -1.375 ms/op +1.380 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1.375 ms/op + 1.380 ms/op # JMH version: 1.37 @@ -5032,15 +5162,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 3) -# Run progress: 40.38% complete, ETA 00:12:04 +# Run progress: 40.38% complete, ETA 00:45:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5057,11 +5187,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -151.910 ms/op +187.215 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5074,17 +5204,17 @@ Projection │ ║ │ ║ Var (name=optTest) (bindingState=bound) │ ║ │ ║ Var (name=requirement) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=301) [right] + │ ║ │ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] │ ║ │ │ s: Var (name=requirement) (bindingState=bound) │ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ │ o: Var (name=component) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=784) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ │ ║ o: Var (name=test) (bindingState=unbound) @@ -5095,7 +5225,7 @@ Projection │ ║ ║ ├── Str │ ║ ║ │ Var (name=name) (bindingState=bound) │ ║ ║ └── ValueConstant (value="Component 1") - │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) │ ║ s: Var (name=component) (bindingState=unbound) │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ o: Var (name=name) (bindingState=unbound) @@ -5120,11 +5250,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -137.681 ms/op +135.322 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 137.681 ms/op + 135.322 ms/op # JMH version: 1.37 @@ -5132,15 +5262,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 4) -# Run progress: 41.35% complete, ETA 00:11:48 +# Run progress: 41.35% complete, ETA 00:44:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5157,11 +5287,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000010001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -73.073 ms/op +196.676 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5170,29 +5300,29 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── Exists - │ ║ │ StatementPattern (resultSizeEstimate=1.1K) + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) │ ║ │ s: Var (name=component) (bindingState=bound) │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Or - │ ║ ║ │ ║ ├── Compare (=) - │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ │ ValueConstant (value="Component 1") - │ ║ ║ │ ║ └── Compare (=) - │ ║ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="Component 2") - │ ║ ║ │ ╚══ StatementPattern (costEstimate=513, resultSizeEstimate=1.0K) - │ ║ ║ │ s: Var (name=component) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [right] - │ ║ ║ s: Var (name=component) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137.2K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=66.3K, resultSizeEstimate=132.7K) [left] + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Component 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Component 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=component) (bindingState=bound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ o: Var (name=assembly) (bindingState=unbound) @@ -5204,9 +5334,9 @@ Projection Var (name=component) (bindingState=unbound) SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . ?component ?name . FILTER ((?name = "Component 1") || (?name = "Component 2")) - ?component a . OPTIONAL { ?component ?assembly . } @@ -5215,11 +5345,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -68.308 ms/op +141.142 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 68.308 ms/op + 141.142 ms/op # JMH version: 1.37 @@ -5227,15 +5357,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 5) -# Run progress: 42.31% complete, ETA 00:11:32 +# Run progress: 42.31% complete, ETA 00:42:46 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5252,11 +5382,11 @@ SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.386 ms/op +1.836 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5270,26 +5400,26 @@ Projection │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=value2) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=307) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) │ ║ │ s: Var (name=measurement) (bindingState=bound) │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) │ ║ │ o: Var (name=value2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ╠══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=936, resultSizeEstimate=307) [left] - │ ║ │ s: Var (name=measurement) (bindingState=unbound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) - │ ║ └── Filter [right] - │ ║ ╠══ ListMemberOperator - │ ║ ║ Var (name=value) (bindingState=bound) - │ ║ ║ ValueConstant (value="0.9"^^) - │ ║ ║ ValueConstant (value="0.95"^^) - │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=307) - │ ║ s: Var (name=measurement) (bindingState=bound) - │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) - │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=78, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ ├── Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.6K) [right] + │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=measurement) (bindingState=bound) @@ -5298,21 +5428,21 @@ Projection Var (name=measurement) (bindingState=unbound) SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { - VALUES ?threshold { 0.85 } - ?measurement a . ?measurement ?value . FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } FILTER NOT EXISTS { ?measurement ?value2 . FILTER (?value2 < ?threshold) } } -2.112 ms/op +1.277 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.112 ms/op + 1.277 ms/op # JMH version: 1.37 @@ -5320,15 +5450,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 6) -# Run progress: 43.27% complete, ETA 00:11:16 +# Run progress: 43.27% complete, ETA 00:41:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5348,11 +5478,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000010000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -273.614 ms/op +349.868 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5362,7 +5492,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5615414f9a8588b4885899c891ee8a149c901234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5528c77d099dc4d415e961b092bc309484501234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (component) │ ║ Filter @@ -5371,33 +5501,33 @@ Projection │ ║ │ Var (name=component) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=301) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ ║ │ o: Var (name=component) (bindingState=unbound) - │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=1.0K) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) │ ║ ║ s: Var (name=component) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=1.1K) + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) │ ║ │ s: Var (name=component) (bindingState=bound) │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_5615414f9a8588b4885899c891ee8a149c901234) + │ ║ GroupElem (_anon_having_5528c77d099dc4d415e961b092bc309484501234) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5615414f9a8588b4885899c891ee8a149c901234) + │ ╚══ ExtensionElem (_anon_having_5528c77d099dc4d415e961b092bc309484501234) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -5422,11 +5552,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) > 0) -245.058 ms/op +250.178 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 245.058 ms/op + 250.178 ms/op # JMH version: 1.37 @@ -5434,15 +5564,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 7) -# Run progress: 44.23% complete, ETA 00:11:01 +# Run progress: 44.23% complete, ETA 00:40:11 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5459,11 +5589,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.923 ms/op +6.394 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5473,16 +5603,16 @@ Projection │ ╠══ Difference │ ║ ├── Filter │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=301) + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ ║ o: Var (name=component) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=153, resultSizeEstimate=301) [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=531) + │ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ └── Filter [right] + │ ║ │ └── Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) @@ -5490,16 +5620,16 @@ Projection │ ║ │ ║ └── Compare (=) │ ║ │ ║ Var (name=name) (bindingState=bound) │ ║ │ ║ ValueConstant (value="REQ-1001") - │ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) │ ║ │ s: Var (name=requirement) (bindingState=bound) │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ └── Join (JoinIterator) - │ ║ ╠══ StatementPattern (costEstimate=60.4K, resultSizeEstimate=784) [left] + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (costEstimate=571.3K, resultSizeEstimate=3.1K) [left] │ ║ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ ║ o: Var (name=test) (bindingState=unbound) - │ ║ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=784) [right] + │ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] │ ║ s: Var (name=test) (bindingState=bound) │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ o: Var (name=measurement) (bindingState=unbound) @@ -5523,11 +5653,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -4.361 ms/op +4.400 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.361 ms/op + 4.400 ms/op # JMH version: 1.37 @@ -5535,15 +5665,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 8) -# Run progress: 45.19% complete, ETA 00:10:46 +# Run progress: 45.19% complete, ETA 00:38:58 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5562,11 +5692,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) >= 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.436 ms/op +3.955 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5576,7 +5706,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_89802854c129599aa4c58931f19079136995301234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_673621d43fa149cf74ecf85f113af86f736b6012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (component) │ ║ Filter @@ -5584,39 +5714,39 @@ Projection │ ║ │ Var (name=optDep) (bindingState=bound) │ ║ │ Var (name=component) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=77, resultSizeEstimate=301) [left] - │ ║ ║ │ s: Var (name=requirement) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) - │ ║ ║ │ o: Var (name=component) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.0K) [left] - │ ║ ║ ║ s: Var (name=component) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=301) [left] - │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] - │ ║ ║ s: Var (name=component) (bindingState=bound) - │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) - │ ║ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=1.1K) + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) │ ║ │ s: Var (name=component) (bindingState=bound) │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_89802854c129599aa4c58931f19079136995301234567) + │ ║ GroupElem (_anon_having_673621d43fa149cf74ecf85f113af86f736b6012345) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_89802854c129599aa4c58931f19079136995301234567) + │ ╚══ ExtensionElem (_anon_having_673621d43fa149cf74ecf85f113af86f736b6012345) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -5625,8 +5755,8 @@ Projection SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { ?requirement ?component . - ?component a . ?requirement a . + ?component a . ?component ?assembly . OPTIONAL { ?component ?dep . @@ -5637,11 +5767,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) >= 1) -2.106 ms/op +2.684 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.106 ms/op + 2.684 ms/op # JMH version: 1.37 @@ -5649,15 +5779,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 9) -# Run progress: 46.15% complete, ETA 00:10:31 +# Run progress: 46.15% complete, ETA 00:37:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5678,11 +5808,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000080001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.026 ms/op +2.922 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5695,39 +5825,39 @@ Projection │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ Exists - │ ║ │ StatementPattern (resultSizeEstimate=301) + │ ║ │ StatementPattern (resultSizeEstimate=520) │ ║ │ s: Var (name=requirement) (bindingState=bound) │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ o: Var (name=component) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=919, resultSizeEstimate=301) [left] - │ ║ ║ ║ s: Var (name=requirement) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=14, resultSizeEstimate=784) [left] - │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) - │ ║ ║ │ o: Var (name=test) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=14, resultSizeEstimate=784) [left] - │ ║ ║ ║ s: Var (name=test) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) - │ ║ ║ ║ o: Var (name=measurement) (bindingState=unbound) - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── ListMemberOperator - │ ║ ║ │ Var (name=value) (bindingState=bound) - │ ║ ║ │ ValueConstant (value="0.85"^^) - │ ║ ║ │ ValueConstant (value="0.9"^^) - │ ║ ║ │ ValueConstant (value="0.95"^^) - │ ║ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=307) - │ ║ ║ s: Var (name=measurement) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) - │ ║ ║ o: Var (name=value) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, joinType=Cartesian product) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] │ ║ s: Var (name=component) (bindingState=unbound) │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -5739,23 +5869,23 @@ Projection Var (name=requirement) (bindingState=unbound) SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { - VALUES ?threshold { 0.85 } - ?requirement a . - ?requirement ?test . - ?test ?measurement . ?measurement ?value . FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } OPTIONAL { ?component ?optName . } FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) } -3.543 ms/op +2.031 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.543 ms/op + 2.031 ms/op # JMH version: 1.37 @@ -5763,15 +5893,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 10) -# Run progress: 47.12% complete, ETA 00:10:17 +# Run progress: 47.12% complete, ETA 00:36:38 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5789,11 +5919,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.128 ms/op +2.770 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5806,12 +5936,12 @@ Projection │ ║ │ ║ Var (name=optComponent) (bindingState=bound) │ ║ │ ║ Var (name=assembly) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=154, resultSizeEstimate=303) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=963) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) - │ ║ │ │ ╚══ Filter [right] + │ ║ │ │ ╚══ Filter (costEstimate=366, resultSizeEstimate=134.2K) [right] │ ║ │ │ ├── Or │ ║ │ │ │ ╠══ Compare (=) │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) @@ -5819,18 +5949,18 @@ Projection │ ║ │ │ │ ╚══ Compare (=) │ ║ │ │ │ Var (name=name) (bindingState=bound) │ ║ │ │ │ ValueConstant (value="Assembly 2") - │ ║ │ │ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K) │ ║ │ │ s: Var (name=assembly) (bindingState=bound) │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) │ ║ │ ║ s: Var (name=component) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) │ ║ │ ╚══ ExtensionElem (optComponent) │ ║ │ Var (name=component) (bindingState=bound) - │ ║ └── StatementPattern (new scope) (resultSizeEstimate=301) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) │ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ o: Var (name=component) (bindingState=unbound) @@ -5855,11 +5985,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } } -1.838 ms/op +1.908 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1.838 ms/op + 1.908 ms/op # JMH version: 1.37 @@ -5867,15 +5997,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 11) -# Run progress: 48.08% complete, ETA 00:10:02 +# Run progress: 48.08% complete, ETA 00:35:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5915,7 +6045,7 @@ SELECT DISTINCT * WHERE { ORDER BY ?root ?component ?test WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -5924,7 +6054,7 @@ WARNING: Restricted methods will be blocked in a future release unless native ac org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) @@ -5934,7 +6064,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -5956,15 +6086,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 12) -# Run progress: 49.04% complete, ETA 00:10:11 +# Run progress: 49.04% complete, ETA 00:39:26 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6002,40 +6132,144 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled - +36281.566 ms/op +Iteration 1: ### Optimized Query ### +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optLabel" + │ ProjectionElem "optAssembly" + │ ProjectionElem "optAssemblyName" + │ ProjectionElem "optDependency" + │ ProjectionElem "optDependencyName" + │ ProjectionElem "optSatisfiedComponent" + │ ProjectionElem "optSatisfiedAssembly" + │ ProjectionElem "optVerification" + │ ProjectionElem "verificationOwner" + │ ProjectionElem "optMeasuredValue" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ║ │ ╠══ Union [left] + ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, indexName=ospc) + ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + ║ │ ║ │ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=520, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + ║ │ ║ │ ╚══ Extension [right] + ║ │ ║ │ ├── StatementPattern (resultSizeEstimate=134.1K) + ║ │ ║ │ │ s: Var (name=root) (bindingState=bound) + ║ │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ ║ │ │ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ │ └── ExtensionElem (optLabel) + ║ │ ║ │ Var (name=optName) (bindingState=bound) + ║ │ ║ └── LeftJoin [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=132.7K) [left] + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + ║ │ ║ ║ o: Var (name=optAssembly) (bindingState=unbound) + ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + ║ │ ║ s: Var (name=optAssembly) (bindingState=bound) + ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ ║ o: Var (name=optAssemblyName) (bindingState=unbound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + ║ │ │ s: Var (name=root) (bindingState=bound) + ║ │ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + ║ │ │ o: Var (name=optDependency) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=134.1K) [right] + ║ │ s: Var (name=optDependency) (bindingState=bound) + ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ o: Var (name=optDependencyName) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ StatementPattern (resultSizeEstimate=520) [left] + ║ ║ s: Var (name=root) (bindingState=bound) + ║ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + ║ ║ o: Var (name=optSatisfiedComponent) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + ║ s: Var (name=optSatisfiedComponent) (bindingState=bound) + ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + ║ o: Var (name=optSatisfiedAssembly) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Union [left] + │ ╠══ StatementPattern (new scope) (resultSizeEstimate=3.1K) + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=optVerification) (bindingState=unbound) + │ ╚══ Filter (new scope) + │ ├── Compare (=) + │ │ Var (name=verificationOwner) (bindingState=bound) + │ │ Var (name=root) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=3.1K) + │ s: Var (name=verificationOwner) (bindingState=unbound) + │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ o: Var (name=optVerification) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=1.6K) [right] + s: Var (name=optVerification) (bindingState=bound) + p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + o: Var (name=optMeasuredValue) (bindingState=unbound) + +SELECT DISTINCT ?root ?optName ?optLabel ?optAssembly ?optAssemblyName ?optDependency ?optDependencyName ?optSatisfiedComponent ?optSatisfiedAssembly ?optVerification ?verificationOwner ?optMeasuredValue WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optAssembly . + OPTIONAL { + ?optAssembly ?optAssemblyName . + } + } + OPTIONAL { + ?root ?optDependency . + OPTIONAL { + ?optDependency ?optDependencyName . + } + } + OPTIONAL { + ?root ?optSatisfiedComponent . + OPTIONAL { + ?optSatisfiedComponent ?optSatisfiedAssembly . + } + } + OPTIONAL { + { + ?root ?optVerification . + } + UNION + { + ?verificationOwner ?optVerification . + FILTER (?verificationOwner = ?root) + } + OPTIONAL { + ?optVerification ?optMeasuredValue . + } + } +} -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) +36044.036 ms/op +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 36044.036 ms/op # JMH version: 1.37 @@ -6043,15 +6277,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) -# Run progress: 50.00% complete, ETA 00:10:18 +# Run progress: 50.00% complete, ETA 00:39:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6068,11 +6302,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -415.190 ms/op +426.774 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6085,18 +6319,18 @@ Projection │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) │ ║ │ ║ Var (name=node) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=509) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] │ ║ │ │ s: Var (name=node) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ ║ s: Var (name=node) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optNeighbor) │ ║ │ Var (name=neighbor) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] │ ║ s: Var (name=node) (bindingState=bound) │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ o: Var (name=w) (bindingState=unbound) @@ -6119,11 +6353,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -386.619 ms/op +410.408 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 386.619 ms/op + 410.408 ms/op # JMH version: 1.37 @@ -6131,15 +6365,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) -# Run progress: 50.96% complete, ETA 00:10:04 +# Run progress: 50.96% complete, ETA 00:37:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6158,11 +6392,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000038000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1292.821 ms/op +1672.657 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6181,20 +6415,20 @@ Projection │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ ║ └── Union [right] - │ ║ ║ ╠══ Join (JoinIterator) - │ ║ ║ ║ ├── StatementPattern (costEstimate=1.5K, resultSizeEstimate=509) [left] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ ║ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (new scope) (costEstimate=793.4K, resultSizeEstimate=509) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) │ ║ ║ s: Var (name=entity) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ╚══ StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ o: Var (name=w) (bindingState=unbound) @@ -6221,11 +6455,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { FILTER ((?w = ?target) || (?w = 3)) } -1164.451 ms/op +1218.273 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1164.451 ms/op + 1218.273 ms/op # JMH version: 1.37 @@ -6233,15 +6467,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) -# Run progress: 51.92% complete, ETA 00:09:49 +# Run progress: 51.92% complete, ETA 00:36:45 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6260,11 +6494,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000004000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -662.715 ms/op +800.607 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6274,41 +6508,41 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_07544d7ae981334f3ab39b65ada917657d, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_511d81b344f0cef481199a8a3a167b950fb01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) [left] - │ ║ │ ╠══ StatementPattern (costEstimate=171, resultSizeEstimate=509) [left] - │ ║ │ ║ s: Var (name=node) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── Filter [left] - │ ║ │ │ ╠══ ListMemberOperator - │ ║ │ │ ║ Var (name=w) (bindingState=bound) - │ ║ │ │ ║ ValueConstant (value="1"^^) - │ ║ │ │ ║ ValueConstant (value="2"^^) - │ ║ │ │ ║ ValueConstant (value="3"^^) - │ ║ │ │ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) - │ ║ │ │ s: Var (name=node) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ │ │ o: Var (name=w) (bindingState=unbound) - │ ║ │ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] - │ ║ │ s: Var (name=node) (bindingState=bound) - │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ │ o: Var (name=neighbor) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=153.1K) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.3K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=13.4K, resultSizeEstimate=40.3K) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.5K) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] │ ║ s: Var (name=neighbor) (bindingState=bound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=node) (bindingState=bound) - │ ║ GroupElem (_anon_having_07544d7ae981334f3ab39b65ada917657d) + │ ║ GroupElem (_anon_having_511d81b344f0cef481199a8a3a167b950fb01234) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_07544d7ae981334f3ab39b65ada917657d) + │ ╚══ ExtensionElem (_anon_having_511d81b344f0cef481199a8a3a167b950fb01234) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -6327,11 +6561,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -613.459 ms/op +580.869 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 613.459 ms/op + 580.869 ms/op # JMH version: 1.37 @@ -6339,15 +6573,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) -# Run progress: 52.88% complete, ETA 00:09:35 +# Run progress: 52.88% complete, ETA 00:35:36 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6364,11 +6598,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -131.909 ms/op +129.738 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6381,12 +6615,12 @@ Projection │ ║ │ ║ Var (name=optWeight) (bindingState=bound) │ ║ │ ║ ValueConstant (value="5"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=509) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] │ ║ │ │ s: Var (name=node) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) │ ║ │ ║ s: Var (name=node) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ ║ o: Var (name=w) (bindingState=unbound) @@ -6396,7 +6630,7 @@ Projection │ ║ ╠══ Compare (=) │ ║ ║ Var (name=neighbor) (bindingState=bound) │ ║ ║ Var (name=node) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) │ ║ s: Var (name=node) (bindingState=unbound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=neighbor) (bindingState=unbound) @@ -6420,11 +6654,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -117.619 ms/op +122.839 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 117.619 ms/op + 122.839 ms/op # JMH version: 1.37 @@ -6432,15 +6666,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) -# Run progress: 53.85% complete, ETA 00:09:20 +# Run progress: 53.85% complete, ETA 00:34:28 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6457,11 +6691,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000070001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -235.086 ms/op +299.232 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6470,17 +6704,17 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── Exists - │ ║ │ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ o: Var (name=neighbor) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=223.6K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] │ ║ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ └── Filter [right] + │ ║ ║ └── Filter (costEstimate=474, resultSizeEstimate=224.9K) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=w) (bindingState=bound) @@ -6488,11 +6722,11 @@ Projection │ ║ ║ ║ └── Compare (=) │ ║ ║ ║ Var (name=w) (bindingState=bound) │ ║ ║ ║ ValueConstant (value="2"^^) - │ ║ ║ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) │ ║ ║ s: Var (name=node) (bindingState=bound) │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ ║ o: Var (name=w) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] │ ║ s: Var (name=neighbor) (bindingState=unbound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=node) (bindingState=bound) @@ -6515,11 +6749,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -219.282 ms/op +218.180 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 219.282 ms/op + 218.180 ms/op # JMH version: 1.37 @@ -6527,15 +6761,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) -# Run progress: 54.81% complete, ETA 00:09:06 +# Run progress: 54.81% complete, ETA 00:33:22 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6552,11 +6786,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000060000111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -131.806 ms/op +177.709 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6570,27 +6804,27 @@ Projection │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=w2) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=121.0K) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ╠══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=1.5K, resultSizeEstimate=509) [left] - │ ║ │ s: Var (name=node) (bindingState=unbound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ └── Filter [right] - │ ║ ╠══ ListMemberOperator - │ ║ ║ Var (name=w) (bindingState=bound) - │ ║ ║ ValueConstant (value="4"^^) - │ ║ ║ ValueConstant (value="5"^^) - │ ║ ║ ValueConstant (value="6"^^) - │ ║ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) - │ ║ s: Var (name=node) (bindingState=bound) - │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.1K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.5K) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=node) (bindingState=bound) @@ -6599,21 +6833,21 @@ Projection Var (name=node) (bindingState=unbound) SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { - VALUES ?threshold { 4 } ?node a . ?node ?w . FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } FILTER NOT EXISTS { ?node ?w2 . FILTER (?w2 < ?threshold) } } -117.771 ms/op +128.466 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 117.771 ms/op + 128.466 ms/op # JMH version: 1.37 @@ -6621,15 +6855,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) -# Run progress: 55.77% complete, ETA 00:08:52 +# Run progress: 55.77% complete, ETA 00:32:18 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6649,11 +6883,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff01112660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1582.615 ms/op +2075.307 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6663,7 +6897,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0469d01130cd464489af03500edc687d84, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0510138235fb934840b963e1dd8f9d3531, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ Filter @@ -6672,33 +6906,33 @@ Projection │ ║ │ ValueConstant (value="0"^^) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] │ ║ ║ │ s: Var (name=node) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) - │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=node) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=121.0K) + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_0469d01130cd464489af03500edc687d84) + │ ║ GroupElem (_anon_having_0510138235fb934840b963e1dd8f9d3531) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0469d01130cd464489af03500edc687d84) + │ ╚══ ExtensionElem (_anon_having_0510138235fb934840b963e1dd8f9d3531) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -6723,11 +6957,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -1387.033 ms/op +1454.976 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1387.033 ms/op + 1454.976 ms/op # JMH version: 1.37 @@ -6735,15 +6969,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) -# Run progress: 56.73% complete, ETA 00:08:39 +# Run progress: 56.73% complete, ETA 00:31:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6760,11 +6994,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -139.447 ms/op +182.994 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6774,16 +7008,16 @@ Projection │ ╠══ Difference │ ║ ├── Filter │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=153.1K) + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ ║ s: Var (name=node) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=223.6K) + │ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] │ ║ │ │ s: Var (name=node) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ └── Filter [right] + │ ║ │ └── Filter (costEstimate=474, resultSizeEstimate=224.9K) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=w) (bindingState=bound) @@ -6791,7 +7025,7 @@ Projection │ ║ │ ║ └── Compare (=) │ ║ │ ║ Var (name=w) (bindingState=bound) │ ║ │ ║ ValueConstant (value="9"^^) - │ ║ │ ╚══ StatementPattern (costEstimate=348, resultSizeEstimate=121.0K) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w) (bindingState=unbound) @@ -6799,7 +7033,7 @@ Projection │ ║ ╠══ Compare (=) │ ║ ║ Var (name=neighbor) (bindingState=bound) │ ║ ║ Var (name=node) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=153.1K) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) │ ║ s: Var (name=neighbor) (bindingState=unbound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=node) (bindingState=unbound) @@ -6823,11 +7057,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -125.972 ms/op +129.925 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 125.972 ms/op + 129.925 ms/op # JMH version: 1.37 @@ -6835,15 +7069,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) -# Run progress: 57.69% complete, ETA 00:08:26 +# Run progress: 57.69% complete, ETA 00:30:16 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6861,11 +7095,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000200001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1442.768 ms/op +1752.909 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6879,27 +7113,27 @@ Projection │ ║ │ ValueConstant (value="8"^^) │ ║ │ ValueConstant (value="9"^^) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=257, resultSizeEstimate=509) [left] - │ ║ ║ │ s: Var (name=node) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ └── Filter [right] - │ ║ ║ ╠══ Exists - │ ║ ║ ║ StatementPattern (resultSizeEstimate=153.1K) - │ ║ ║ ║ s: Var (name=end) (bindingState=bound) + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ ║ ║ o: Var (name=node) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) - │ ║ ║ ├── StatementPattern (costEstimate=196, resultSizeEstimate=153.1K) [left] - │ ║ ║ │ s: Var (name=node) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ ║ │ o: Var (name=mid) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=391, resultSizeEstimate=153.1K) [right] - │ ║ ║ s: Var (name=mid) (bindingState=bound) - │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ ║ o: Var (name=end) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=121.0K) [right] + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] │ ║ s: Var (name=node) (bindingState=bound) │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ o: Var (name=optWeight) (bindingState=unbound) @@ -6923,11 +7157,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { FILTER (?optWeight IN (7, 8, 9)) } -1315.680 ms/op +1332.833 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1315.680 ms/op + 1332.833 ms/op # JMH version: 1.37 @@ -6935,15 +7169,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) -# Run progress: 58.65% complete, ETA 00:08:13 +# Run progress: 58.65% complete, ETA 00:29:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6963,11 +7197,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f00111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1611.011 ms/op +1562.669 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6977,7 +7211,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_237846a7a05ba446e79eee1974af5a193501, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8490e8c7e40a144eb3994f4cb6d75c91c601234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (node) │ ║ Filter @@ -6986,28 +7220,28 @@ Projection │ ║ │ ValueConstant (value="0"^^) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) │ ║ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) - │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=153.1K) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=node) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=121.0K) + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) │ ║ │ s: Var (name=neighbor) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_237846a7a05ba446e79eee1974af5a193501) + │ ║ GroupElem (_anon_having_8490e8c7e40a144eb3994f4cb6d75c91c601234567) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_237846a7a05ba446e79eee1974af5a193501) + │ ╚══ ExtensionElem (_anon_having_8490e8c7e40a144eb3994f4cb6d75c91c601234567) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (degree) @@ -7025,11 +7259,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 1) -1526.742 ms/op +1412.339 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1526.742 ms/op + 1412.339 ms/op # JMH version: 1.37 @@ -7037,15 +7271,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) -# Run progress: 59.62% complete, ETA 00:08:02 +# Run progress: 59.62% complete, ETA 00:28:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7064,56 +7298,103 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled - +360.784 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=w2) (bindingState=bound) + │ ║ │ ║ │ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=528.1K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ ║ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=n2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=89.4K, joinType=Cartesian product) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=89.4K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter (costEstimate=300, resultSizeEstimate=90.0K) [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_492d708140b34cd415ca16f2b80965654db0123) + │ ║ Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_492d708140b34cd415ca16f2b80965654db0123) + } +} +260.771 ms/op +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 260.771 ms/op + # JMH version: 1.37 # VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 11) -# Run progress: 60.58% complete, ETA 00:08:02 +# Run progress: 60.58% complete, ETA 00:27:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7150,38 +7431,47 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000002000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "RdfJoinEstimator-Refresh" -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) +java.lang.OutOfMemoryError: Java heap space + at org.eclipse.rdf4j.query.algebra.evaluation.impl.ArrayBindingBasedQueryEvaluationContext.createBindingSet(ArrayBindingBasedQueryEvaluationContext.java:341) + at org.eclipse.rdf4j.query.algebra.evaluation.impl.ArrayBindingBasedQueryEvaluationContext.createBindingSet(ArrayBindingBasedQueryEvaluationContext.java:55) + at org.eclipse.rdf4j.query.algebra.evaluation.impl.evaluationsteps.StatementPatternQueryEvaluationStep$JoinStatementWithBindingSetIterator.convert(StatementPatternQueryEvaluationStep.java:728) + at org.eclipse.rdf4j.query.algebra.evaluation.impl.evaluationsteps.StatementPatternQueryEvaluationStep$JoinStatementWithBindingSetIterator.next(StatementPatternQueryEvaluationStep.java:740) + at org.eclipse.rdf4j.query.algebra.evaluation.impl.evaluationsteps.StatementPatternQueryEvaluationStep$JoinStatementWithBindingSetIterator.next(StatementPatternQueryEvaluationStep.java:705) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.LeftJoinIterator.getNextElement(LeftJoinIterator.java:112) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.LeftJoinIterator.getNextElement(LeftJoinIterator.java:23) + at org.eclipse.rdf4j.common.iteration.LookAheadIteration.lookAhead(LookAheadIteration.java:95) + at org.eclipse.rdf4j.common.iteration.LookAheadIteration.hasNext(LookAheadIteration.java:64) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.LeftJoinIterator.getNextElement(LeftJoinIterator.java:87) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.LeftJoinIterator.getNextElement(LeftJoinIterator.java:23) + at org.eclipse.rdf4j.common.iteration.LookAheadIteration.lookAhead(LookAheadIteration.java:95) + at org.eclipse.rdf4j.common.iteration.LookAheadIteration.hasNext(LookAheadIteration.java:64) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.LeftJoinIterator.getNextElement(LeftJoinIterator.java:87) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.LeftJoinIterator.getNextElement(LeftJoinIterator.java:23) + at org.eclipse.rdf4j.common.iteration.LookAheadIteration.lookAhead(LookAheadIteration.java:95) + at org.eclipse.rdf4j.common.iteration.LookAheadIteration.hasNext(LookAheadIteration.java:64) + at org.eclipse.rdf4j.common.iteration.ConvertingIteration.hasNext(ConvertingIteration.java:65) + at org.eclipse.rdf4j.common.iteration.FilterIteration.findNextElement(FilterIteration.java:97) + at org.eclipse.rdf4j.common.iteration.FilterIteration.hasNext(FilterIteration.java:59) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.sail.base.SailClosingIteration.hasNext(SailClosingIteration.java:83) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.sail.helpers.SailBaseIteration.hasNext(SailBaseIteration.java:43) + at org.eclipse.rdf4j.sail.helpers.CleanerIteration.hasNext(CleanerIteration.java:42) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:51) at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) @@ -7191,15 +7481,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 12) -# Run progress: 61.54% complete, ETA 00:08:02 +# Run progress: 61.54% complete, ETA 00:29:16 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7230,7 +7520,7 @@ SELECT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000020000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -7239,7 +7529,7 @@ WARNING: Restricted methods will be blocked in a future release unless native ac org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:45) at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) @@ -7249,7 +7539,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -7271,15 +7561,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 0) -# Run progress: 62.50% complete, ETA 00:08:01 +# Run progress: 62.50% complete, ETA 00:31:06 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7300,11 +7590,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011128a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f00111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -43.316 ms/op +39.756 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7317,18 +7607,18 @@ Projection │ ║ │ ║ Var (name=optTime) (bindingState=bound) │ ║ │ ║ ValueConstant (value="08:00:00"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=342) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] │ ║ │ │ s: Var (name=service) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) │ ║ │ ║ s: Var (name=service) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) │ ║ │ ║ o: Var (name=time) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optTime) │ ║ │ Var (name=time) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=877) [right] + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] │ ║ s: Var (name=service) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=name) (bindingState=unbound) @@ -7351,11 +7641,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } } -39.629 ms/op +37.792 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 39.629 ms/op + 37.792 ms/op # JMH version: 1.37 @@ -7363,15 +7653,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 1) -# Run progress: 63.46% complete, ETA 00:07:47 +# Run progress: 63.46% complete, ETA 00:30:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7391,11 +7681,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -96.296 ms/op +63.792 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7403,36 +7693,46 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ Var (name=target) (bindingState=bound) - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="OP 3") - │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) - │ ║ │ ├── BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ └── Union [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=1.4K, resultSizeEstimate=459) [left] - │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] - │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=246.6K, resultSizeEstimate=349) [left] + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] + │ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=45.6K) [right] + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ o: Var (name=op) (bindingState=unbound) @@ -7444,27 +7744,37 @@ Projection Var (name=entity) (bindingState=unbound) SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { - VALUES ?target { "OP 1" "OP 2" } { - ?entity a . - ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) } UNION { - ?entity a . - ?entity ?name . + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) } - FILTER ((?name = ?target) || (?name = "OP 3")) OPTIONAL { ?entity ?op . } } -88.189 ms/op +45.349 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 88.189 ms/op + 45.349 ms/op # JMH version: 1.37 @@ -7472,15 +7782,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 2) -# Run progress: 64.42% complete, ETA 00:07:32 +# Run progress: 64.42% complete, ETA 00:28:55 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7499,11 +7809,11 @@ GROUP BY ?line HAVING(COUNT(?section) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111f8b0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.032 ms/op +27.220 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7513,36 +7823,36 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_2733ce25a572abc24178bfe2541f819e512701, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0052bfb7f46b32f24d25b3d2d38b3db1f241, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) [left] - │ ║ │ ╠══ StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] - │ ║ │ ║ s: Var (name=line) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ ╚══ Filter [right] - │ ║ │ ├── ListMemberOperator - │ ║ │ │ Var (name=lineName) (bindingState=bound) - │ ║ │ │ ValueConstant (value="Line 0") - │ ║ │ │ ValueConstant (value="Line 1") - │ ║ │ │ ValueConstant (value="Line 2") - │ ║ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) - │ ║ │ s: Var (name=line) (bindingState=bound) - │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ │ o: Var (name=lineName) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=635) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ │ ╠══ Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=lineName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ║ │ ValueConstant (value="Line 2") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=lineName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] │ ║ s: Var (name=section) (bindingState=unbound) │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ o: Var (name=line) (bindingState=bound) - │ ║ GroupElem (_anon_having_2733ce25a572abc24178bfe2541f819e512701) + │ ║ GroupElem (_anon_having_0052bfb7f46b32f24d25b3d2d38b3db1f241) │ ║ Count │ ║ Var (name=section) (bindingState=bound) │ ║ GroupElem (sectionCount) │ ║ Count (Distinct) │ ║ Var (name=section) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_2733ce25a572abc24178bfe2541f819e512701) + │ ╚══ ExtensionElem (_anon_having_0052bfb7f46b32f24d25b3d2d38b3db1f241) │ Count │ Var (name=section) (bindingState=unbound) └── ExtensionElem (sectionCount) @@ -7550,9 +7860,9 @@ Projection Var (name=section) (bindingState=unbound) SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { - ?line a . ?line ?lineName . FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + ?line a . OPTIONAL { ?section ?line . } @@ -7560,11 +7870,11 @@ SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { GROUP BY ?line HAVING (COUNT(?section) > 0) -8.787 ms/op +19.566 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 8.787 ms/op + 19.566 ms/op # JMH version: 1.37 @@ -7572,15 +7882,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 3) -# Run progress: 65.38% complete, ETA 00:07:18 +# Run progress: 65.38% complete, ETA 00:27:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7598,11 +7908,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -171.282 ms/op +214.521 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7615,17 +7925,17 @@ Projection │ ║ │ ║ Var (name=optTrack) (bindingState=bound) │ ║ │ ║ Var (name=section) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=320, resultSizeEstimate=635) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=25, resultSizeEstimate=635) [right] + │ ║ │ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] │ ║ │ │ s: Var (name=section) (bindingState=bound) │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ │ │ o: Var (name=line) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=635) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) │ ║ │ ║ s: Var (name=section) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) │ ║ │ ║ o: Var (name=track) (bindingState=unbound) @@ -7636,7 +7946,7 @@ Projection │ ║ ║ ├── Str │ ║ ║ │ Var (name=name) (bindingState=bound) │ ║ ║ └── ValueConstant (value="Line 0") - │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) │ ║ s: Var (name=line) (bindingState=unbound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=name) (bindingState=unbound) @@ -7661,11 +7971,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } } -154.093 ms/op +155.700 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 154.093 ms/op + 155.700 ms/op # JMH version: 1.37 @@ -7673,15 +7983,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 4) -# Run progress: 66.35% complete, ETA 00:07:04 +# Run progress: 66.35% complete, ETA 00:26:49 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7699,11 +8009,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -161.841 ms/op +206.033 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7712,17 +8022,17 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── Exists - │ ║ │ StatementPattern (resultSizeEstimate=635) + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) │ ║ │ s: Var (name=section) (bindingState=bound) │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ │ o: Var (name=line) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] │ ║ ║ │ s: Var (name=line) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ ║ └── Filter [right] + │ ║ ║ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=name) (bindingState=bound) @@ -7730,11 +8040,11 @@ Projection │ ║ ║ ║ └── Compare (=) │ ║ ║ ║ Var (name=name) (bindingState=bound) │ ║ ║ ║ ValueConstant (value="Line 2") - │ ║ ║ ╚══ StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) │ ║ ║ s: Var (name=line) (bindingState=bound) │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ ║ o: Var (name=name) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=45.6K) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] │ ║ s: Var (name=section) (bindingState=unbound) │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ o: Var (name=op) (bindingState=unbound) @@ -7757,11 +8067,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -149.508 ms/op +150.916 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 149.508 ms/op + 150.916 ms/op # JMH version: 1.37 @@ -7769,15 +8079,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 5) -# Run progress: 67.31% complete, ETA 00:06:50 +# Run progress: 67.31% complete, ETA 00:25:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7795,11 +8105,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff80111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -23.009 ms/op +21.877 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7813,26 +8123,26 @@ Projection │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=late) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) │ ║ │ s: Var (name=service) (bindingState=bound) │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) │ ║ │ o: Var (name=late) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ╠══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=1.0K, resultSizeEstimate=342) [left] - │ ║ │ s: Var (name=service) (bindingState=unbound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ └── Filter [right] - │ ║ ╠══ ListMemberOperator - │ ║ ║ Var (name=time) (bindingState=bound) - │ ║ ║ ValueConstant (value="08:00:00"^^) - │ ║ ║ ValueConstant (value="09:00:00"^^) - │ ║ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=9.5K) - │ ║ s: Var (name=service) (bindingState=bound) - │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) - │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.3K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ ║ ├── Filter (costEstimate=3.9K, resultSizeEstimate=1.3K) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=time) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ │ o: Var (name=time) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.6K) [right] + │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=service) (bindingState=bound) @@ -7841,21 +8151,21 @@ Projection Var (name=service) (bindingState=unbound) SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { - VALUES ?threshold { "10:00:00"^^ } - ?service a . ?service ?time . FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } FILTER NOT EXISTS { ?service ?late . FILTER (?late > ?threshold) } } -20.687 ms/op +15.319 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 20.687 ms/op + 15.319 ms/op # JMH version: 1.37 @@ -7863,15 +8173,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 6) -# Run progress: 68.27% complete, ETA 00:06:36 +# Run progress: 68.27% complete, ETA 00:24:49 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7893,11 +8203,11 @@ GROUP BY ?line HAVING(COUNT(?service) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -122.707 ms/op +162.619 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7907,7 +8217,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_4146d230a12f547412fa6035192c9acfddf0123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_636c6a47be07a004d98aaf88f1de57f738f012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ Filter @@ -7916,35 +8226,35 @@ Projection │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=174, resultSizeEstimate=342) [left] - │ ║ ║ │ ║ s: Var (name=service) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ ║ │ ├── StatementPattern (costEstimate=49, resultSizeEstimate=9.5K) [left] - │ ║ ║ │ │ s: Var (name=service) (bindingState=bound) - │ ║ ║ │ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) - │ ║ ║ │ │ o: Var (name=section) (bindingState=unbound) - │ ║ ║ │ └── StatementPattern (costEstimate=25, resultSizeEstimate=635) [right] - │ ║ ║ │ s: Var (name=section) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ ║ │ o: Var (name=line) (bindingState=unbound) - │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=349) + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) │ ║ ║ s: Var (name=line) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_4146d230a12f547412fa6035192c9acfddf0123) + │ ║ GroupElem (_anon_having_636c6a47be07a004d98aaf88f1de57f738f012345) │ ║ Count │ ║ Var (name=service) (bindingState=bound) │ ║ GroupElem (serviceCount) │ ║ Count (Distinct) │ ║ Var (name=service) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_4146d230a12f547412fa6035192c9acfddf0123) + │ ╚══ ExtensionElem (_anon_having_636c6a47be07a004d98aaf88f1de57f738f012345) │ Count │ Var (name=service) (bindingState=unbound) └── ExtensionElem (serviceCount) @@ -7953,9 +8263,9 @@ Projection SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { { - ?service a . ?service ?section . ?section ?line . + ?service a . } UNION { @@ -7969,11 +8279,11 @@ SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { GROUP BY ?line HAVING (COUNT(?service) > 0) -112.275 ms/op +117.962 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 112.275 ms/op + 117.962 ms/op # JMH version: 1.37 @@ -7981,15 +8291,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 7) -# Run progress: 69.23% complete, ETA 00:06:23 +# Run progress: 69.23% complete, ETA 00:23:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8007,11 +8317,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -57.204 ms/op +73.057 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8021,16 +8331,16 @@ Projection │ ╠══ Difference │ ║ ├── Filter │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=9.5K) + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) │ ║ │ ║ s: Var (name=service) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) │ ║ │ ║ o: Var (name=op) (bindingState=bound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=232, resultSizeEstimate=459) [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] │ ║ │ │ s: Var (name=op) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ └── Filter [right] + │ ║ │ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) @@ -8038,7 +8348,7 @@ Projection │ ║ │ ║ └── Compare (=) │ ║ │ ║ Var (name=name) (bindingState=bound) │ ║ │ ║ ValueConstant (value="OP 2") - │ ║ │ ╚══ StatementPattern (costEstimate=30, resultSizeEstimate=877) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) │ ║ │ s: Var (name=op) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) @@ -8048,7 +8358,7 @@ Projection │ ║ ║ │ Str │ ║ ║ │ Var (name=name2) (bindingState=bound) │ ║ ║ └── ValueConstant (value="op 0") - │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) │ ║ s: Var (name=op) (bindingState=unbound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=name2) (bindingState=unbound) @@ -8072,11 +8382,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -53.507 ms/op +52.173 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 53.507 ms/op + 52.173 ms/op # JMH version: 1.37 @@ -8084,15 +8394,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 8) -# Run progress: 70.19% complete, ETA 00:06:09 +# Run progress: 70.19% complete, ETA 00:22:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8113,11 +8423,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe00111f0e8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -255.003 ms/op +197.637 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8126,46 +8436,46 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── And - │ ║ │ ╠══ Exists - │ ║ │ ║ Join (JoinIterator) - │ ║ │ ║ ╠══ StatementPattern (costEstimate=22.8K, resultSizeEstimate=45.6K) [left] - │ ║ │ ║ ║ s: Var (name=s1) (bindingState=bound) - │ ║ │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) - │ ║ │ ║ ║ o: Var (name=op) (bindingState=unbound) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=213, resultSizeEstimate=45.6K) [right] - │ ║ │ ║ s: Var (name=s2) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) - │ ║ │ ║ o: Var (name=op) (bindingState=bound) - │ ║ │ ╚══ ListMemberOperator - │ ║ │ Var (name=optName) (bindingState=bound) - │ ║ │ ValueConstant (value="Line 0") - │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) + │ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=2.6M, resultSizeEstimate=342) [left] - │ ║ ║ │ s: Var (name=service) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=49, resultSizeEstimate=9.5K) [left] - │ ║ ║ ║ s: Var (name=service) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) - │ ║ ║ ║ o: Var (name=s1) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=13, resultSizeEstimate=635) [left] - │ ║ ║ │ s: Var (name=s1) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ ║ │ o: Var (name=line) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=635) [left] - │ ║ ║ ║ s: Var (name=s2) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ ║ ║ o: Var (name=line) (bindingState=bound) - │ ║ ║ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=9.5K) [right] - │ ║ ║ s: Var (name=service) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) - │ ║ ║ o: Var (name=s2) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) @@ -8177,22 +8487,22 @@ Projection Var (name=service) (bindingState=unbound) SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { - ?service a . ?service ?s1 . ?s1 ?line . - ?s2 ?line . + ?service a . ?service ?s2 . + ?s2 ?line . OPTIONAL { ?line ?optName . } - FILTER (EXISTS { ?s1 ?op . ?s2 ?op . } && (?optName IN ("Line 0", "Line 1"))) + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) } -234.390 ms/op +140.412 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 234.390 ms/op + 140.412 ms/op # JMH version: 1.37 @@ -8200,15 +8510,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 9) -# Run progress: 71.15% complete, ETA 00:05:56 +# Run progress: 71.15% complete, ETA 00:21:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8228,11 +8538,11 @@ GROUP BY ?section HAVING(COUNT(?track) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c001116660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -273.740 ms/op +334.734 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8242,7 +8552,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_56295262ffd8e0a45b89565328e8f8fa21601234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (section) │ ║ Filter @@ -8250,35 +8560,35 @@ Projection │ ║ │ Var (name=optOp) (bindingState=bound) │ ║ │ Var (name=section) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=320, resultSizeEstimate=635) [left] - │ ║ ║ │ s: Var (name=section) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) - │ ║ ║ └── Filter [right] - │ ║ ║ ╠══ Exists - │ ║ ║ ║ StatementPattern (resultSizeEstimate=661) - │ ║ ║ ║ s: Var (name=track) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) - │ ║ ║ ╚══ StatementPattern (costEstimate=25, resultSizeEstimate=635) - │ ║ ║ s: Var (name=section) (bindingState=bound) - │ ║ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) - │ ║ ║ o: Var (name=track) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=45.6K) + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) │ ║ │ s: Var (name=section) (bindingState=bound) │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ │ o: Var (name=op) (bindingState=unbound) │ ║ └── ExtensionElem (optOp) │ ║ Var (name=op) (bindingState=bound) - │ ║ GroupElem (_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234) + │ ║ GroupElem (_anon_having_56295262ffd8e0a45b89565328e8f8fa21601234) │ ║ Count │ ║ Var (name=track) (bindingState=bound) │ ║ GroupElem (trackCount) │ ║ Count (Distinct) │ ║ Var (name=track) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5613fa2c0e3ed1b474fadf0233a3fbc92f201234) + │ ╚══ ExtensionElem (_anon_having_56295262ffd8e0a45b89565328e8f8fa21601234) │ Count │ Var (name=track) (bindingState=unbound) └── ExtensionElem (trackCount) @@ -8286,11 +8596,11 @@ Projection Var (name=track) (bindingState=unbound) SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { - ?section a . ?section ?track . FILTER EXISTS { ?track a . } + ?section a . OPTIONAL { ?section ?op . BIND(?op AS ?optOp) @@ -8300,11 +8610,11 @@ SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { GROUP BY ?section HAVING (COUNT(?track) > 0) -248.271 ms/op +237.500 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 248.271 ms/op + 237.500 ms/op # JMH version: 1.37 @@ -8312,15 +8622,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 10) -# Run progress: 72.12% complete, ETA 00:05:43 +# Run progress: 72.12% complete, ETA 00:21:02 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8340,11 +8650,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -235.516 ms/op +289.367 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8358,21 +8668,21 @@ Projection │ ║ │ ║ Var (name=op) (bindingState=bound) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Union [left] - │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=459) + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ │ ╚══ Join (JoinIterator) - │ ║ │ │ ├── StatementPattern (costEstimate=232, resultSizeEstimate=459) [left] + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ │ └── StatementPattern (costEstimate=30, resultSizeEstimate=877) [right] + │ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] │ ║ │ │ s: Var (name=op) (bindingState=bound) │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=45.6K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) │ ║ │ ║ s: Var (name=section) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ │ ║ o: Var (name=op) (bindingState=bound) @@ -8384,7 +8694,7 @@ Projection │ ║ ║ │ Str │ ║ ║ │ Var (name=name2) (bindingState=bound) │ ║ ║ └── ValueConstant (value="op 1") - │ ║ ╚══ StatementPattern (resultSizeEstimate=877) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) │ ║ s: Var (name=op) (bindingState=unbound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=name2) (bindingState=unbound) @@ -8415,11 +8725,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -207.139 ms/op +202.788 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 207.139 ms/op + 202.788 ms/op # JMH version: 1.37 @@ -8427,15 +8737,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 11) -# Run progress: 73.08% complete, ETA 00:05:30 +# Run progress: 73.08% complete, ETA 00:20:08 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8479,7 +8789,7 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000c011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff80111e208 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -8498,7 +8808,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -8520,15 +8830,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 12) -# Run progress: 74.04% complete, ETA 00:05:25 +# Run progress: 74.04% complete, ETA 00:20:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8565,11 +8875,11 @@ SELECT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000038000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2163.969 ms/op +2645.930 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8590,59 +8900,59 @@ Projection │ ║ ├── LeftJoin (LeftJoinIterator) [left] │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] │ ║ │ ║ ├── Union [left] - │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=349, indexName=ospc) + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, indexName=ospc) │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=635, indexName=ospc) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=67.4K, indexName=ospc) │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) │ ║ │ ║ └── Extension [right] - │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=877) + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=47.0K) │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) │ ║ │ ║ ╚══ ExtensionElem (optLabel) │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=635) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=67.4K) [left] │ ║ │ │ s: Var (name=root) (bindingState=bound) │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ │ │ o: Var (name=optLine) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=877) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) [right] │ ║ │ s: Var (name=optLine) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=optLineName) (bindingState=unbound) │ ║ └── LeftJoin [right] - │ ║ ╠══ StatementPattern (resultSizeEstimate=45.6K) [left] + │ ║ ╠══ StatementPattern (resultSizeEstimate=134.8K) [left] │ ║ ║ s: Var (name=root) (bindingState=bound) │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ ║ o: Var (name=optOperationalPoint) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=877) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] │ ║ s: Var (name=optOperationalPoint) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=optOperationalPointName) (bindingState=unbound) │ ╚══ LeftJoin [right] │ ├── Union [left] - │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=9.5K) + │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=25.9K) │ │ ║ s: Var (name=service) (bindingState=unbound) │ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) │ │ ║ o: Var (name=root) (bindingState=bound) - │ │ ╚══ Join (JoinIterator) - │ │ ├── StatementPattern (costEstimate=107, resultSizeEstimate=45.6K) [left] + │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=117.0K) + │ │ ├── StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] │ │ │ s: Var (name=root) (bindingState=bound) │ │ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ │ │ o: Var (name=optOperationalPoint2) (bindingState=unbound) - │ │ └── StatementPattern (costEstimate=98, resultSizeEstimate=9.5K) [right] + │ │ └── StatementPattern (costEstimate=161, resultSizeEstimate=25.9K) [right] │ │ s: Var (name=service) (bindingState=unbound) │ │ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) │ │ o: Var (name=optOperationalPoint2) (bindingState=bound) - │ └── StatementPattern (resultSizeEstimate=9.5K) [right] + │ └── StatementPattern (resultSizeEstimate=25.8K) [right] │ s: Var (name=service) (bindingState=bound) │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) │ o: Var (name=optScheduledTime) (bindingState=unbound) - └── StatementPattern (resultSizeEstimate=635) [right] + └── StatementPattern (resultSizeEstimate=67.4K) [right] s: Var (name=root) (bindingState=bound) p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) o: Var (name=optTrackSection) (bindingState=unbound) @@ -8689,11 +8999,11 @@ SELECT ?root ?optName ?optLabel ?optLine ?optLineName ?optOperationalPoint ?optO } } -1982.307 ms/op +1935.462 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1982.307 ms/op + 1935.462 ms/op # JMH version: 1.37 @@ -8701,15 +9011,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) -# Run progress: 75.00% complete, ETA 00:05:12 +# Run progress: 75.00% complete, ETA 00:20:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8726,11 +9036,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe01113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -55.203 ms/op +62.654 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8743,23 +9053,23 @@ Projection │ ║ │ ║ Var (name=optCap) (bindingState=bound) │ ║ │ ║ ValueConstant (value="600"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=349) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] │ ║ │ │ s: Var (name=substation) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=352) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] │ ║ │ ║ s: Var (name=generator) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optCap) │ ║ │ Var (name=cap) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=349) [right] + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] │ ║ s: Var (name=substation) (bindingState=bound) │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) │ ║ o: Var (name=name) (bindingState=unbound) @@ -8783,11 +9093,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } } -49.504 ms/op +45.064 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 49.504 ms/op + 45.064 ms/op # JMH version: 1.37 @@ -8795,15 +9105,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) -# Run progress: 75.96% complete, ETA 00:04:59 +# Run progress: 75.96% complete, ETA 00:19:04 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8822,11 +9132,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000030000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -114.525 ms/op +46.382 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8834,41 +9144,51 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ Var (name=target) (bindingState=bound) - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="Substation 3") - │ ║ │ ╚══ Join (JoinIterator) (joinType=Cartesian product) - │ ║ │ ├── BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ └── Union [right] - │ ║ │ ╠══ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=349) [left] - │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=349) [right] - │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── StatementPattern (costEstimate=187.8K, resultSizeEstimate=349) [left] - │ ║ │ │ s: Var (name=substation) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ └── Join (JoinIterator) [right] - │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] - │ ║ │ ║ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ ║ o: Var (name=substation) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=352) [right] - │ ║ │ s: Var (name=entity) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] + │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ o: Var (name=substation2) (bindingState=unbound) @@ -8880,28 +9200,38 @@ Projection Var (name=entity) (bindingState=unbound) SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { - VALUES ?target { "Substation 1" "Substation 2" } { - ?entity a . - ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) } UNION { - ?substation ?name . - ?entity ?substation . - ?entity a . + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?substation . + ?substation ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) } - FILTER ((?name = ?target) || (?name = "Substation 3")) OPTIONAL { ?entity ?substation2 . } } -102.032 ms/op +32.343 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 102.032 ms/op + 32.343 ms/op # JMH version: 1.37 @@ -8909,15 +9239,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) -# Run progress: 76.92% complete, ETA 00:04:46 +# Run progress: 76.92% complete, ETA 00:18:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8936,11 +9266,11 @@ GROUP BY ?transformer HAVING(COUNT(?meter) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe00111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -5.443 ms/op +7.228 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8950,41 +9280,41 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5491138dfb7475eb84f9f8e74feda9786600a01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (transformer) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) [left] - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── ListMemberOperator - │ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="Substation 0") - │ ║ │ ║ │ ValueConstant (value="Substation 1") - │ ║ │ ║ │ ValueConstant (value="Substation 2") - │ ║ │ ║ └── StatementPattern (costEstimate=177, resultSizeEstimate=349) - │ ║ │ ║ s: Var (name=substation) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) [right] - │ ║ │ ├── StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] - │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ │ o: Var (name=substation) (bindingState=bound) - │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] - │ ║ │ s: Var (name=transformer) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ └── StatementPattern (resultSizeEstimate=53.3K) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8K) [left] + │ ║ │ ║ ├── Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ o: Var (name=meter) (bindingState=unbound) - │ ║ GroupElem (_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234) + │ ║ GroupElem (_anon_having_5491138dfb7475eb84f9f8e74feda9786600a01234) │ ║ Count │ ║ Var (name=meter) (bindingState=bound) │ ║ GroupElem (meterCount) │ ║ Count (Distinct) │ ║ Var (name=meter) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_51771c18739b4f7c47f9859cdb5698a41df101234) + │ ╚══ ExtensionElem (_anon_having_5491138dfb7475eb84f9f8e74feda9786600a01234) │ Count │ Var (name=meter) (bindingState=unbound) └── ExtensionElem (meterCount) @@ -9003,11 +9333,11 @@ SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { GROUP BY ?transformer HAVING (COUNT(?meter) > 0) -4.836 ms/op +4.997 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.836 ms/op + 4.997 ms/op # JMH version: 1.37 @@ -9015,15 +9345,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) -# Run progress: 77.88% complete, ETA 00:04:33 +# Run progress: 77.88% complete, ETA 00:17:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9040,11 +9370,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -433.788 ms/op +483.621 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9057,24 +9387,24 @@ Projection │ ║ │ ║ Var (name=optValue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="100"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=502, resultSizeEstimate=998) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=998) [right] + │ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] │ ║ │ │ s: Var (name=meter) (bindingState=bound) │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ │ │ o: Var (name=load) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=1.0K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) │ ║ │ ║ s: Var (name=load) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) │ ║ │ ║ o: Var (name=value) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optValue) │ ║ │ Var (name=value) (bindingState=bound) - │ ║ └── Join (HashJoinIteration) - │ ║ ╠══ StatementPattern (costEstimate=251.7K, resultSizeEstimate=998) [left] + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=280.9K) + │ ║ ╠══ StatementPattern (costEstimate=6278.4M, resultSizeEstimate=112.1K) [left] │ ║ ║ s: Var (name=meter) (bindingState=unbound) │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ ║ o: Var (name=load2) (bindingState=unbound) @@ -9082,7 +9412,7 @@ Projection │ ║ ├── Compare (>) │ ║ │ Var (name=value2) (bindingState=bound) │ ║ │ ValueConstant (value="180"^^) - │ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) │ ║ s: Var (name=load2) (bindingState=unbound) │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) │ ║ o: Var (name=value2) (bindingState=unbound) @@ -9112,11 +9442,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } } -395.556 ms/op +345.063 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 395.556 ms/op + 345.063 ms/op # JMH version: 1.37 @@ -9124,15 +9454,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) -# Run progress: 78.85% complete, ETA 00:04:20 +# Run progress: 78.85% complete, ETA 00:16:22 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9150,11 +9480,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff0111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -6.400 ms/op +79.239 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9163,34 +9493,34 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── Exists - │ ║ │ StatementPattern (resultSizeEstimate=91.9K) + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) │ ║ │ s: Var (name=line) (bindingState=bound) │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) │ ║ │ o: Var (name=other) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Or - │ ║ ║ │ ║ ├── Compare (=) - │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ │ ValueConstant (value="Substation 0") - │ ║ ║ │ ║ └── Compare (=) - │ ║ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="Substation 1") - │ ║ ║ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) - │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=152, resultSizeEstimate=91.9K) [left] - │ ║ ║ ║ s: Var (name=line) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) - │ ║ ║ ║ o: Var (name=substation) (bindingState=bound) - │ ║ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=1.7K) [right] - │ ║ ║ s: Var (name=line) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) - │ ║ ╚══ StatementPattern (resultSizeEstimate=91.9K) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=37.3K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [left] + │ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Filter (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Substation 1") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) │ ║ o: Var (name=other2) (bindingState=unbound) @@ -9202,10 +9532,10 @@ Projection Var (name=line) (bindingState=unbound) SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?substation . ?substation ?name . FILTER ((?name = "Substation 0") || (?name = "Substation 1")) - ?line ?substation . - ?line a . OPTIONAL { ?line ?other2 . } @@ -9214,11 +9544,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -5.664 ms/op +57.707 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.664 ms/op + 57.707 ms/op # JMH version: 1.37 @@ -9226,15 +9556,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) -# Run progress: 79.81% complete, ETA 00:04:08 +# Run progress: 79.81% complete, ETA 00:15:30 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9251,11 +9581,11 @@ SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000020000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -16.629 ms/op +7.603 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9269,27 +9599,27 @@ Projection │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=cap2) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=352) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) │ ║ │ s: Var (name=generator) (bindingState=bound) │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ o: Var (name=cap2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (joinType=Cartesian product) - │ ║ ╠══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ╚══ Join (JoinIterator) [right] - │ ║ ├── StatementPattern (costEstimate=1.1K, resultSizeEstimate=352) [left] - │ ║ │ s: Var (name=generator) (bindingState=unbound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ └── Filter [right] - │ ║ ╠══ ListMemberOperator - │ ║ ║ Var (name=capacity) (bindingState=bound) - │ ║ ║ ValueConstant (value="700"^^) - │ ║ ║ ValueConstant (value="800"^^) - │ ║ ║ ValueConstant (value="900"^^) - │ ║ ╚══ StatementPattern (costEstimate=19, resultSizeEstimate=352) - │ ║ s: Var (name=generator) (bindingState=bound) - │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - │ ║ o: Var (name=capacity) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=469, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=469) [left] + │ ║ ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=470) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="700"^^) + │ ║ ║ │ ║ ValueConstant (value="800"^^) + │ ║ ║ │ ║ ValueConstant (value="900"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=generator) (bindingState=bound) @@ -9298,21 +9628,21 @@ Projection Var (name=generator) (bindingState=unbound) SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { - VALUES ?threshold { 700 } - ?generator a . ?generator ?capacity . FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } FILTER NOT EXISTS { ?generator ?cap2 . FILTER (?cap2 < ?threshold) } } -13.844 ms/op +5.178 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 13.844 ms/op + 5.178 ms/op # JMH version: 1.37 @@ -9320,15 +9650,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) -# Run progress: 80.77% complete, ETA 00:03:55 +# Run progress: 80.77% complete, ETA 00:14:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9348,11 +9678,11 @@ GROUP BY ?substation HAVING(COUNT(?asset) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -103.752 ms/op +128.466 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9362,7 +9692,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_40512af4d370638494b9263f84019767a270123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_408cb4b7aa9ddcb4e939c4d3d3f78a385ef0123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) │ ║ Filter @@ -9371,38 +9701,38 @@ Projection │ ║ │ Var (name=asset) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=267, resultSizeEstimate=529) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] │ ║ ║ │ s: Var (name=asset) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) - │ ║ ║ ╠══ StatementPattern (costEstimate=47.7K, resultSizeEstimate=352) [left] + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ ║ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] │ ║ ║ s: Var (name=asset) (bindingState=bound) │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ o: Var (name=substation) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=1.0K) + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) │ ║ │ s: Var (name=asset) (bindingState=bound) │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ │ o: Var (name=substation) (bindingState=bound) │ ║ └── ExtensionElem (optSub) │ ║ Var (name=substation) (bindingState=bound) - │ ║ GroupElem (_anon_having_40512af4d370638494b9263f84019767a270123) + │ ║ GroupElem (_anon_having_408cb4b7aa9ddcb4e939c4d3d3f78a385ef0123) │ ║ Count │ ║ Var (name=asset) (bindingState=bound) │ ║ GroupElem (assetCount) │ ║ Count (Distinct) │ ║ Var (name=asset) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_40512af4d370638494b9263f84019767a270123) + │ ╚══ ExtensionElem (_anon_having_408cb4b7aa9ddcb4e939c4d3d3f78a385ef0123) │ Count │ Var (name=asset) (bindingState=unbound) └── ExtensionElem (assetCount) @@ -9428,11 +9758,11 @@ SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { GROUP BY ?substation HAVING (COUNT(?asset) > 0) -90.314 ms/op +92.246 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 90.314 ms/op + 92.246 ms/op # JMH version: 1.37 @@ -9440,15 +9770,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) -# Run progress: 81.73% complete, ETA 00:03:43 +# Run progress: 81.73% complete, ETA 00:13:49 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9466,11 +9796,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -14.923 ms/op +73.761 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9480,37 +9810,37 @@ Projection │ ╠══ Difference │ ║ ├── Filter │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) - │ ║ │ ├── Filter [left] - │ ║ │ │ ╠══ Or - │ ║ │ │ ║ ├── Compare (=) - │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ │ ValueConstant (value="Substation 0") - │ ║ │ │ ║ └── Compare (=) - │ ║ │ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ ValueConstant (value="Substation 1") - │ ║ │ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) - │ ║ │ │ s: Var (name=substation) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ └── Join (JoinIterator) [right] - │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] - │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ ║ o: Var (name=substation) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] - │ ║ │ s: Var (name=transformer) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [left] + │ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=4.7K, resultSizeEstimate=9.4K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── Filter (new scope) │ ║ ╠══ Compare (=) │ ║ ║ Var (name=load) (bindingState=bound) │ ║ ║ Var (name=substation) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=998) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ o: Var (name=load) (bindingState=unbound) @@ -9522,10 +9852,10 @@ Projection Var (name=transformer) (bindingState=unbound) SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a . + ?transformer ?substation . ?substation ?name . FILTER ((?name = "Substation 0") || (?name = "Substation 1")) - ?transformer ?substation . - ?transformer a . FILTER EXISTS { ?transformer ?meter . } @@ -9535,11 +9865,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } } -13.643 ms/op +52.628 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 13.643 ms/op + 52.628 ms/op # JMH version: 1.37 @@ -9547,15 +9877,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) -# Run progress: 82.69% complete, ETA 00:03:30 +# Run progress: 82.69% complete, ETA 00:12:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9574,11 +9904,11 @@ GROUP BY ?substation HAVING(COUNT(?transformer) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -15.405 ms/op +19.620 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9588,43 +9918,43 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_533418cababc870341ea9b05926d231742cf01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) │ ║ Filter │ ║ ├── And - │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) - │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) - │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) - │ ║ │ ╚══ Compare (!=) - │ ║ │ Var (name=optTransformer) (bindingState=bound) - │ ║ │ Var (name=substation) (bindingState=bound) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) + │ ║ │ ║ Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=177, resultSizeEstimate=349) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=19, resultSizeEstimate=349) [right] + │ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] │ ║ ║ s: Var (name=substation) (bindingState=bound) │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) │ ║ ║ o: Var (name=name) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=1.0K) + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) │ ║ │ s: Var (name=substation) (bindingState=bound) │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ │ o: Var (name=transformer) (bindingState=unbound) │ ║ └── ExtensionElem (optTransformer) │ ║ Var (name=transformer) (bindingState=bound) - │ ║ GroupElem (_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3) + │ ║ GroupElem (_anon_having_533418cababc870341ea9b05926d231742cf01234) │ ║ Count │ ║ Var (name=transformer) (bindingState=bound) │ ║ GroupElem (transformerCount) │ ║ Count (Distinct) │ ║ Var (name=transformer) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_01728ee8096b3ece4e0991b20ce24345f3f3) + │ ╚══ ExtensionElem (_anon_having_533418cababc870341ea9b05926d231742cf01234) │ Count │ Var (name=transformer) (bindingState=unbound) └── ExtensionElem (transformerCount) @@ -9638,16 +9968,16 @@ SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { ?substation ?transformer . BIND(?transformer AS ?optTransformer) } - FILTER (EXISTS { ?transformer ?meter . } && (?optTransformer != ?substation)) + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) } GROUP BY ?substation HAVING (COUNT(?transformer) > 0) -13.930 ms/op +14.084 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 13.930 ms/op + 14.084 ms/op # JMH version: 1.37 @@ -9655,15 +9985,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) -# Run progress: 83.65% complete, ETA 00:03:18 +# Run progress: 83.65% complete, ETA 00:12:10 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9680,11 +10010,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f001113b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc0111ec98 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -5.520 ms/op +6.681 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9693,22 +10023,22 @@ Projection ├── Group () │ ╠══ Difference │ ║ ├── LeftJoin - │ ║ │ ╠══ Join (JoinIterator) [left] - │ ║ │ ║ ├── Filter [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (costEstimate=238, resultSizeEstimate=470) [left] │ ║ │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) │ ║ │ ║ │ ║ ValueConstant (value="500"^^) │ ║ │ ║ │ ║ ValueConstant (value="600"^^) │ ║ │ ║ │ ║ ValueConstant (value="700"^^) - │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=179, resultSizeEstimate=352) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.7K) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] │ ║ │ ║ s: Var (name=line) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=91.9K) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] │ ║ │ s: Var (name=line) (bindingState=bound) │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) │ ║ │ o: Var (name=substation) (bindingState=unbound) @@ -9716,7 +10046,7 @@ Projection │ ║ ╠══ Compare (<) │ ║ ║ Var (name=cap2) (bindingState=bound) │ ║ ║ ValueConstant (value="500"^^) - │ ║ ╚══ StatementPattern (resultSizeEstimate=352) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) │ ║ s: Var (name=line) (bindingState=unbound) │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ o: Var (name=cap2) (bindingState=unbound) @@ -9740,11 +10070,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -5.201 ms/op +4.809 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.201 ms/op + 4.809 ms/op # JMH version: 1.37 @@ -9752,15 +10082,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) -# Run progress: 84.62% complete, ETA 00:03:06 +# Run progress: 84.62% complete, ETA 00:11:22 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9779,11 +10109,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -575.039 ms/op +502.127 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9792,45 +10122,45 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── And - │ ║ │ ╠══ Not - │ ║ │ ║ Exists - │ ║ │ ║ Filter - │ ║ │ ║ ├── Compare (<) - │ ║ │ ║ │ Var (name=low) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="50"^^) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.0K) - │ ║ │ ║ s: Var (name=load) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) - │ ║ │ ║ o: Var (name=low) (bindingState=unbound) - │ ║ │ ╚══ Compare (>) - │ ║ │ Var (name=optValue) (bindingState=bound) - │ ║ │ ValueConstant (value="200"^^) + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (JoinIterator) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=502, resultSizeEstimate=998) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=998) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] │ ║ ║ │ s: Var (name=meter) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ ║ │ o: Var (name=load) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) - │ ║ ║ ╠══ StatementPattern (costEstimate=167.8K, resultSizeEstimate=998) [left] - │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) - │ ║ ║ ║ o: Var (name=load) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=998) [left] - │ ║ ║ │ s: Var (name=meter) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] - │ ║ ║ s: Var (name=load) (bindingState=bound) - │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) - │ ║ ║ o: Var (name=value) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=1.0K) [right] + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] │ ║ s: Var (name=load) (bindingState=bound) │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) │ ║ o: Var (name=optValue) (bindingState=unbound) @@ -9855,14 +10185,14 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { OPTIONAL { ?load ?optValue . } - FILTER (NOT EXISTS { ?load ?low . FILTER (?low < 50) } && (?optValue > 200)) + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) } -518.380 ms/op +360.390 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 518.380 ms/op + 360.390 ms/op # JMH version: 1.37 @@ -9870,15 +10200,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 11) -# Run progress: 85.58% complete, ETA 00:02:53 +# Run progress: 85.58% complete, ETA 00:10:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9924,7 +10254,7 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f0111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -9943,7 +10273,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -9965,15 +10295,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 12) -# Run progress: 86.54% complete, ETA 00:02:45 +# Run progress: 86.54% complete, ETA 00:10:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10012,11 +10342,11 @@ SELECT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff801113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1777.509 ms/op +2150.072 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10039,69 +10369,69 @@ Projection │ ║ ├── LeftJoin (LeftJoinIterator) [left] │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] │ ║ │ ║ ├── Union [left] - │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=349, indexName=ospc) + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=9.4K, indexName=ospc) │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=529, indexName=ospc) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=28.0K, indexName=ospc) │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) │ ║ │ ║ └── Extension [right] - │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=349) + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K) │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) │ ║ │ ║ ╚══ ExtensionElem (optLabel) │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=1.0K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=37.4K) [left] │ ║ │ │ s: Var (name=root) (bindingState=bound) │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ │ │ o: Var (name=optFed) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=349) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) [right] │ ║ │ s: Var (name=optFed) (bindingState=bound) │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) │ ║ │ o: Var (name=optFedName) (bindingState=unbound) │ ║ └── LeftJoin [right] │ ║ ╠══ Union [left] - │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=1.0K) + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=37.4K) │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ │ o: Var (name=root) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) - │ ║ ║ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=141.3K) + │ ║ ║ ╠══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] │ ║ ║ ║ s: Var (name=root) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ ║ o: Var (name=substation) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=32, resultSizeEstimate=1.0K) [right] + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] │ ║ ║ s: Var (name=generator) (bindingState=unbound) │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ o: Var (name=substation) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=352) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] │ ║ s: Var (name=generator) (bindingState=bound) │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ o: Var (name=optGeneratorCapacity) (bindingState=unbound) │ ╚══ LeftJoin [right] │ ├── LeftJoin [left] - │ │ ╠══ StatementPattern (resultSizeEstimate=53.3K) [left] + │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) [left] │ │ ║ s: Var (name=root) (bindingState=bound) │ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ │ ║ o: Var (name=optMeter) (bindingState=unbound) - │ │ ╚══ StatementPattern (resultSizeEstimate=998) [right] + │ │ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] │ │ s: Var (name=optMeter) (bindingState=bound) │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ │ o: Var (name=optLoad) (bindingState=unbound) - │ └── StatementPattern (resultSizeEstimate=1.0K) [right] + │ └── StatementPattern (resultSizeEstimate=112.1K) [right] │ s: Var (name=optLoad) (bindingState=bound) │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) │ o: Var (name=optLoadValue) (bindingState=unbound) └── LeftJoin [right] - ╠══ StatementPattern (resultSizeEstimate=91.9K) [left] + ╠══ StatementPattern (resultSizeEstimate=37.5K) [left] ║ s: Var (name=line) (bindingState=unbound) ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) ║ o: Var (name=root) (bindingState=bound) - ╚══ StatementPattern (resultSizeEstimate=352) [right] + ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] s: Var (name=line) (bindingState=bound) p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) o: Var (name=optLineCapacity) (bindingState=unbound) @@ -10154,11 +10484,11 @@ SELECT ?root ?optName ?optLabel ?optFed ?optFedName ?generator ?substation ?optG } } -1638.738 ms/op +1607.592 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1638.738 ms/op + 1607.592 ms/op # JMH version: 1.37 @@ -10166,15 +10496,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 0) -# Run progress: 87.50% complete, ETA 00:02:33 +# Run progress: 87.50% complete, ETA 00:09:44 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10196,11 +10526,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f8001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe0111f8b0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.299 ms/op +4.627 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10212,52 +10542,52 @@ Projection │ ║ │ Var (name=optMarker) (bindingState=bound) │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=5.86, resultSizeEstimate=304) [left] - │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) - │ ║ ║ ║ o: Var (name=disease) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [left] - │ ║ ║ │ s: Var (name=trial) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=1.4K) [left] - │ ║ ║ ║ s: Var (name=trial) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=5.94, resultSizeEstimate=313) [left] - │ ║ ║ │ s: Var (name=arm) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ │ o: Var (name=result) (bindingState=unbound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] - │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ ║ ║ ║ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ ╚══ Filter [right] - │ ║ ║ ├── Or - │ ║ ║ │ ╠══ Compare (<) - │ ║ ║ │ ║ Var (name=p) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="0.05"^^) - │ ║ ║ │ ╚══ Compare (>) - │ ║ ║ │ Var (name=effect) (bindingState=bound) - │ ║ ║ │ ValueConstant (value="0.7"^^) - │ ║ ║ └── Join (JoinIterator) - │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] - │ ║ ║ ║ s: Var (name=result) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) - │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [right] - │ ║ ║ s: Var (name=result) (bindingState=bound) - │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) - │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=315) + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) │ ║ │ s: Var (name=result) (bindingState=bound) │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) │ ║ │ o: Var (name=marker) (bindingState=unbound) @@ -10287,11 +10617,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER (?optMarker != ) } -0.250 ms/op +3.168 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.250 ms/op + 3.168 ms/op # JMH version: 1.37 @@ -10299,15 +10629,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 1) -# Run progress: 88.46% complete, ETA 00:02:20 +# Run progress: 88.46% complete, ETA 00:08:55 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10331,11 +10661,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?drug) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f801112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000018000111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.048 ms/op +2.544 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10345,7 +10675,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_239044b97ad8c698e463fad60b0011814a9fd01, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (combo) │ ║ Filter @@ -10354,43 +10684,43 @@ Projection │ ║ │ ValueConstant (value="Mild") │ ║ │ ValueConstant (value="Moderate") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=102, resultSizeEstimate=301) [left] - │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ Filter [left] - │ ║ ║ ║ ├── Compare (>) - │ ║ ║ ║ │ Var (name=score) (bindingState=bound) - │ ║ ║ ║ │ ValueConstant (value="0.7"^^) - │ ║ ║ ║ └── StatementPattern (costEstimate=17, resultSizeEstimate=301) - │ ║ ║ ║ s: Var (name=combo) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) - │ ║ ║ ║ o: Var (name=score) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=508) [right] - │ ║ ║ s: Var (name=combo) (bindingState=bound) - │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=477) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=161, resultSizeEstimate=477) [left] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ╚══ Filter (costEstimate=22, resultSizeEstimate=477) [right] + │ ║ ║ │ ├── Compare (>) + │ ║ ║ │ │ Var (name=score) (bindingState=bound) + │ ║ ║ │ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ └── StatementPattern (resultSizeEstimate=477) + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ o: Var (name=score) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── Join (JoinIterator) - │ ║ │ ╠══ StatementPattern (costEstimate=29, resultSizeEstimate=3.3K) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] │ ║ │ ║ s: Var (name=drug) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=17, resultSizeEstimate=290) [right] + │ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] │ ║ │ s: Var (name=sideEffect) (bindingState=bound) │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) │ ║ │ o: Var (name=sev) (bindingState=unbound) │ ║ └── ExtensionElem (optSeverity) │ ║ Var (name=sev) (bindingState=bound) - │ ║ GroupElem (_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701) + │ ║ GroupElem (_anon_having_239044b97ad8c698e463fad60b0011814a9fd01) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_20052c8ade7adb8724209b7fb9e9eef0610f701) + │ ╚══ ExtensionElem (_anon_having_239044b97ad8c698e463fad60b0011814a9fd01) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -10412,11 +10742,11 @@ SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?drug) >= 2) -1.746 ms/op +1.735 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1.746 ms/op + 1.735 ms/op # JMH version: 1.37 @@ -10424,15 +10754,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 2) -# Run progress: 89.42% complete, ETA 00:02:08 +# Run progress: 89.42% complete, ETA 00:08:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10454,11 +10784,11 @@ GROUP BY ?target HAVING(COUNT(DISTINCT ?drug) > 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -49.716 ms/op +41.958 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10468,59 +10798,59 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_86317be114cba80d434ea92091f81ee73ab701234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_84230162c7d1ffd74c6ebfbc10ff78aacd3201234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (target) │ ║ Filter │ ║ ├── And - │ ║ │ ╠══ Exists - │ ║ │ ║ Join (JoinIterator) - │ ║ │ ║ ╠══ StatementPattern (costEstimate=159, resultSizeEstimate=313) [left] - │ ║ │ ║ ║ s: Var (name=arm) (bindingState=unbound) - │ ║ │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ ║ │ ║ ║ o: Var (name=drug) (bindingState=bound) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] - │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ │ ║ o: Var (name=arm) (bindingState=bound) - │ ║ │ ╚══ ListMemberOperator - │ ║ │ Var (name=optDisease) (bindingState=bound) - │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/2) - │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=16.3K, resultSizeEstimate=302) [left] - │ ║ ║ │ s: Var (name=target) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=302) [left] - │ ║ ║ ║ s: Var (name=target) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) - │ ║ ║ ║ o: Var (name=pathway) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] - │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ ║ │ o: Var (name=target) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=324) [right] - │ ║ ║ s: Var (name=drug) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=224, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=26, resultSizeEstimate=666) [right] + │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=3.6K) + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) │ ║ │ s: Var (name=drug) (bindingState=bound) │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) │ ║ │ o: Var (name=disease) (bindingState=unbound) │ ║ └── ExtensionElem (optDisease) │ ║ Var (name=disease) (bindingState=bound) - │ ║ GroupElem (_anon_having_86317be114cba80d434ea92091f81ee73ab701234567) + │ ║ GroupElem (_anon_having_84230162c7d1ffd74c6ebfbc10ff78aacd3201234567) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_86317be114cba80d434ea92091f81ee73ab701234567) + │ ╚══ ExtensionElem (_anon_having_84230162c7d1ffd74c6ebfbc10ff78aacd3201234567) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -10536,16 +10866,16 @@ SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { ?drug ?disease . BIND(?disease AS ?optDisease) } - FILTER (EXISTS { ?arm ?drug . ?trial ?arm . } && (?optDisease IN (, ))) + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) } GROUP BY ?target HAVING (COUNT(DISTINCT ?drug) > 2) -44.187 ms/op +30.163 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 44.187 ms/op + 30.163 ms/op # JMH version: 1.37 @@ -10553,15 +10883,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 3) -# Run progress: 90.38% complete, ETA 00:01:56 +# Run progress: 90.38% complete, ETA 00:07:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10582,11 +10912,11 @@ SELECT ?drug ?disease WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000600001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff80111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -17.525 ms/op +3896.184 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10597,48 +10927,48 @@ Projection │ Var (name=optTarget) (bindingState=bound) │ ValueConstant (value=http://example.com/theme/pharma/target/0) └── LeftJoin (LeftJoinIterator) - ╠══ Join (JoinIterator) [left] - ║ ├── StatementPattern [index: psoc] (costEstimate=80, resultSizeEstimate=313, indexName=psoc) [left] - ║ │ s: Var (name=arm) (bindingState=unbound) - ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - ║ │ o: Var (name=result) (bindingState=unbound) - ║ └── Join (JoinIterator) [right] - ║ ╠══ StatementPattern (costEstimate=13, resultSizeEstimate=1.4K) [left] - ║ ║ s: Var (name=trial) (bindingState=unbound) - ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - ║ ║ o: Var (name=arm) (bindingState=bound) - ║ ╚══ Join (JoinIterator) [right] - ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [left] - ║ │ s: Var (name=trial) (bindingState=bound) - ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - ║ └── Filter [right] - ║ ╠══ Not - ║ ║ Exists - ║ ║ StatementPattern (resultSizeEstimate=3.6K) - ║ ║ s: Var (name=drug) (bindingState=bound) - ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) - ║ ║ o: Var (name=disease) (bindingState=bound) - ║ ╚══ Join (JoinIterator) - ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=304) [left] - ║ │ s: Var (name=trial) (bindingState=bound) - ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) - ║ │ o: Var (name=disease) (bindingState=unbound) - ║ └── Join (JoinIterator) [right] - ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] - ║ ║ s: Var (name=arm) (bindingState=bound) - ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - ║ ║ o: Var (name=drug) (bindingState=unbound) - ║ ╚══ Filter [right] - ║ ├── Compare (>) - ║ │ Var (name=rate) (bindingState=bound) - ║ │ ValueConstant (value="0.6"^^) - ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=315) - ║ s: Var (name=result) (bindingState=bound) - ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) - ║ o: Var (name=rate) (bindingState=unbound) + ╠══ Join (JoinIterator) (resultSizeEstimate=6.318151175523E13M) [left] + ║ ├── Join (JoinIterator) (resultSizeEstimate=2.19000040746E10M) [left] + ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=7590989.3M) [left] + ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=7948.7M) [left] + ║ │ ║ │ ╠══ Filter [left] + ║ │ ║ │ ║ ├── Not + ║ │ ║ │ ║ │ Exists + ║ │ ║ │ ║ │ StatementPattern + ║ │ ║ │ ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ ║ │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound) + ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.8M) + ║ │ ║ │ ║ ╠══ StatementPattern [index: psoc] (costEstimate=31, resultSizeEstimate=955, indexName=psoc) [left] + ║ │ ║ │ ║ ║ s: Var (name=trial) (bindingState=unbound) + ║ │ ║ │ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ ║ │ ║ ║ o: Var (name=disease) (bindingState=unbound) + ║ │ ║ │ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ │ ║ │ ║ o: Var (name=drug) (bindingState=unbound) + ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ │ ║ │ o: Var (name=arm) (bindingState=bound) + ║ │ ║ └── StatementPattern (costEstimate=320, resultSizeEstimate=955) [right] + ║ │ ║ s: Var (name=trial) (bindingState=bound) + ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + ║ │ s: Var (name=arm) (bindingState=bound) + ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ o: Var (name=result) (bindingState=unbound) + ║ └── Filter (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ ╠══ Compare (>) + ║ ║ Var (name=rate) (bindingState=bound) + ║ ║ ValueConstant (value="0.6"^^) + ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) ╚══ Extension [right] - ├── StatementPattern (resultSizeEstimate=7.4K) + ├── StatementPattern (resultSizeEstimate=20.0K) │ s: Var (name=drug) (bindingState=bound) │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) │ o: Var (name=target) (bindingState=unbound) @@ -10646,16 +10976,16 @@ Projection Var (name=target) (bindingState=bound) SELECT ?drug ?disease WHERE { - ?arm ?result . - ?trial ?arm . - ?trial a . ?trial ?disease . ?arm ?drug . - ?result ?rate . - FILTER (?rate > 0.6) FILTER NOT EXISTS { ?drug ?disease . } + ?trial ?arm . + ?trial a . + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) OPTIONAL { ?drug ?target . BIND(?target AS ?optTarget) @@ -10663,11 +10993,11 @@ SELECT ?drug ?disease WHERE { FILTER (?optTarget != ) } -15.385 ms/op +2956.831 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 15.385 ms/op + 2956.831 ms/op # JMH version: 1.37 @@ -10675,15 +11005,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 4) -# Run progress: 91.35% complete, ETA 00:01:44 +# Run progress: 91.35% complete, ETA 00:06:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10707,11 +11037,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc01112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001800111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -38.967 ms/op +46.836 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10725,41 +11055,41 @@ Projection │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ LeftJoin │ ║ │ ├── Union [left] - │ ║ │ │ ╠══ Join (JoinIterator) - │ ║ │ │ ║ ├── StatementPattern (costEstimate=165, resultSizeEstimate=324) [left] - │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=unbound) - │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ │ ║ └── Join (JoinIterator) [right] - │ ║ │ │ ║ ╠══ StatementPattern (costEstimate=31, resultSizeEstimate=3.9K) [left] - │ ║ │ │ ║ ║ s: Var (name=drug) (bindingState=bound) - │ ║ │ │ ║ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) - │ ║ │ │ ║ ║ o: Var (name=mol) (bindingState=unbound) - │ ║ │ │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=325) [right] - │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) - │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) - │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) - │ ║ │ │ ╚══ Join (JoinIterator) - │ ║ │ │ ├── StatementPattern (costEstimate=25.2K, resultSizeEstimate=301) [left] - │ ║ │ │ │ s: Var (name=combo) (bindingState=unbound) - │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) - │ ║ │ │ └── Join (JoinIterator) [right] - │ ║ │ │ ╠══ StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] - │ ║ │ │ ║ s: Var (name=combo) (bindingState=bound) - │ ║ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) - │ ║ │ │ ╚══ Join (JoinIterator) [right] - │ ║ │ │ ├── StatementPattern (costEstimate=31, resultSizeEstimate=3.9K) [left] - │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) - │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) - │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) - │ ║ │ │ └── StatementPattern (costEstimate=18, resultSizeEstimate=325) [right] - │ ║ │ │ s: Var (name=mol) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) - │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=372) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) │ ║ │ ║ s: Var (name=class) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) @@ -10770,7 +11100,7 @@ Projection │ ║ ║ Var (name=disease) (bindingState=bound) │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) - │ ║ ╚══ StatementPattern (resultSizeEstimate=324) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ o: Var (name=disease) (bindingState=unbound) @@ -10783,15 +11113,23 @@ Projection SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { { - ?drug a . - ?drug ?mol . + { + { + ?drug a . + ?drug ?mol . + } + } ?mol ?class . } UNION { - ?combo a . - ?combo ?drug . - ?drug ?mol . + { + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + } + } ?mol ?class . } OPTIONAL { @@ -10805,11 +11143,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } } -34.718 ms/op +32.067 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 34.718 ms/op + 32.067 ms/op # JMH version: 1.37 @@ -10817,15 +11155,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 5) -# Run progress: 92.31% complete, ETA 00:01:32 +# Run progress: 92.31% complete, ETA 00:05:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10848,11 +11186,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -0.490 ms/op +2.799 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10864,42 +11202,42 @@ Projection │ ║ │ Var (name=optEffect) (bindingState=bound) │ ║ │ ValueConstant (value="0.3"^^) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=5.97, resultSizeEstimate=315) [left] - │ ║ ║ ║ s: Var (name=result) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) - │ ║ ║ ║ o: Var (name=marker) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=8.92, resultSizeEstimate=313) [left] - │ ║ ║ │ s: Var (name=arm) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ │ o: Var (name=result) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ Filter [left] - │ ║ ║ ║ ├── Or - │ ║ ║ ║ │ ╠══ Compare (<) - │ ║ ║ ║ │ ║ Var (name=p) (bindingState=bound) - │ ║ ║ ║ │ ║ ValueConstant (value="0.05"^^) - │ ║ ║ ║ │ ╚══ Compare (=) - │ ║ ║ ║ │ Var (name=p) (bindingState=bound) - │ ║ ║ ║ │ ValueConstant (value="0.05"^^) - │ ║ ║ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=315) - │ ║ ║ ║ s: Var (name=result) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) - │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] - │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ │ o: Var (name=arm) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [right] - │ ║ ║ s: Var (name=trial) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Filter (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=315) + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) │ ║ │ s: Var (name=result) (bindingState=bound) │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) │ ║ │ o: Var (name=effect) (bindingState=unbound) @@ -10916,10 +11254,10 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { VALUES ?marker { } ?result ?marker . ?arm ?result . - ?result ?p . - FILTER ((?p < 0.05) || (?p = 0.05)) ?trial ?arm . ?trial a . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) OPTIONAL { ?result ?effect . BIND(?effect AS ?optEffect) @@ -10927,11 +11265,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { FILTER (?optEffect > 0.3) } -0.399 ms/op +1.895 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 0.399 ms/op + 1.895 ms/op # JMH version: 1.37 @@ -10939,15 +11277,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 6) -# Run progress: 93.27% complete, ETA 00:01:20 +# Run progress: 93.27% complete, ETA 00:05:02 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10970,11 +11308,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?target) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -5.814 ms/op +5.430 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10984,62 +11322,62 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_692528e2454ae739f4c8f998c0941a7a379bb012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (combo) │ ║ Filter │ ║ ├── And - │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=3.3K) - │ ║ │ ║ s: Var (name=drugB) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) - │ ║ │ ║ o: Var (name=sideEffect2) (bindingState=unbound) - │ ║ │ ╚══ Compare (!=) - │ ║ │ Var (name=optSideEffect) (bindingState=bound) - │ ║ │ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=102, resultSizeEstimate=301) [left] - │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] - │ ║ ║ ║ s: Var (name=combo) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ ║ ║ o: Var (name=drugA) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=11, resultSizeEstimate=508) [left] - │ ║ ║ │ s: Var (name=combo) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ ║ │ o: Var (name=drugB) (bindingState=unbound) - │ ║ ║ └── Filter [right] - │ ║ ║ ╠══ Compare (!=) - │ ║ ║ ║ Var (name=drugA) (bindingState=bound) - │ ║ ║ ║ Var (name=drugB) (bindingState=bound) - │ ║ ║ ╚══ Join (JoinIterator) - │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] - │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ ║ │ o: Var (name=target) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=7.4K) [right] - │ ║ ║ s: Var (name=drugB) (bindingState=bound) - │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.602304E8M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=18011.5M) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=900.6K) [left] + │ ║ ║ │ ║ ├── Filter [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=drugA) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=drugB) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.9K) + │ ║ ║ │ ║ │ ├── StatementPattern (costEstimate=15, resultSizeEstimate=949) [left] + │ ║ ║ │ ║ │ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ │ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ │ │ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ │ ║ │ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ │ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=161, resultSizeEstimate=477) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=3.3K) + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) │ ║ │ s: Var (name=drugA) (bindingState=bound) │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) │ ║ └── ExtensionElem (optSideEffect) │ ║ Var (name=sideEffect) (bindingState=bound) - │ ║ GroupElem (_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567) + │ ║ GroupElem (_anon_having_692528e2454ae739f4c8f998c0941a7a379bb012345) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (sharedTargets) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_86311b5614e65f89346e1894fb73fe909f6d801234567) + │ ╚══ ExtensionElem (_anon_having_692528e2454ae739f4c8f998c0941a7a379bb012345) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (sharedTargets) @@ -11047,26 +11385,26 @@ Projection Var (name=target) (bindingState=unbound) SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { - ?combo a . ?combo ?drugA . ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?combo a . ?drugA ?target . ?drugB ?target . - FILTER (?drugA != ?drugB) OPTIONAL { ?drugA ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } - FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) } GROUP BY ?combo HAVING (COUNT(DISTINCT ?target) > 1) -5.384 ms/op +3.806 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.384 ms/op + 3.806 ms/op # JMH version: 1.37 @@ -11074,15 +11412,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 7) -# Run progress: 94.23% complete, ETA 00:01:09 +# Run progress: 94.23% complete, ETA 00:04:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11104,11 +11442,11 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011133e0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -28.353 ms/op +30.101 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11117,47 +11455,47 @@ Projection ├── Group () │ ╠══ Filter │ ║ ├── And - │ ║ │ ╠══ Not - │ ║ │ ║ Exists - │ ║ │ ║ Join (JoinIterator) - │ ║ │ ║ ├── StatementPattern (costEstimate=159, resultSizeEstimate=313) [left] - │ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ │ ║ │ o: Var (name=r) (bindingState=unbound) - │ ║ │ ║ └── Filter [right] - │ ║ │ ║ ╠══ ListMemberOperator - │ ║ │ ║ ║ Var (name=p) (bindingState=bound) - │ ║ │ ║ ║ ValueConstant (value="0.08"^^) - │ ║ │ ║ ║ ValueConstant (value="0.09"^^) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=315) - │ ║ │ ║ s: Var (name=r) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) - │ ║ │ ║ o: Var (name=p) (bindingState=unbound) - │ ║ │ ╚══ Compare (!=) - │ ║ │ Var (name=optCompName) (bindingState=bound) - │ ║ │ ValueConstant (value="") + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) + │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=12, resultSizeEstimate=144) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) (bindingState=bound) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) [left] - │ ║ ║ ├── StatementPattern (costEstimate=24.6K, resultSizeEstimate=304) [left] - │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] - │ ║ ║ ║ s: Var (name=trial) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ ╚══ Union [right] - │ ║ ║ ├── StatementPattern (new scope) (costEstimate=18, resultSizeEstimate=313) - │ ║ ║ │ s: Var (name=arm) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) - │ ║ ║ │ o: Var (name=comp) (bindingState=unbound) - │ ║ ║ └── StatementPattern (new scope) (costEstimate=18, resultSizeEstimate=313) - │ ║ ║ s: Var (name=arm) (bindingState=bound) - │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=372) + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) │ ║ │ s: Var (name=comp) (bindingState=bound) │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) │ ║ │ o: Var (name=optName) (bindingState=unbound) @@ -11178,14 +11516,14 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { ?comp ?optName . BIND(?optName AS ?optCompName) } - FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) } -24.115 ms/op +20.872 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 24.115 ms/op + 20.872 ms/op # JMH version: 1.37 @@ -11193,15 +11531,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 8) -# Run progress: 95.19% complete, ETA 00:00:57 +# Run progress: 95.19% complete, ETA 00:03:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11223,11 +11561,11 @@ GROUP BY ?drug HAVING(COUNT(DISTINCT ?target) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000060001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f80111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -41.145 ms/op +41.455 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11237,7 +11575,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_59016e83c0d2f09e443794577062990a517001234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_090237ff5e97dadc469aacce8c764fdb2367, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (drug) │ ║ Difference @@ -11246,17 +11584,17 @@ Projection │ ║ │ ║ Var (name=optMol) (bindingState=bound) │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=165, resultSizeEstimate=324) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=86, resultSizeEstimate=7.4K) [right] + │ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] │ ║ │ │ s: Var (name=drug) (bindingState=bound) │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) │ ║ │ │ o: Var (name=target) (bindingState=unbound) │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.9K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) │ ║ │ ║ s: Var (name=drug) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) @@ -11267,7 +11605,7 @@ Projection │ ║ ║ ├── SameTerm │ ║ ║ │ Var (name=disease) (bindingState=bound) │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) - │ ║ ║ └── StatementPattern (resultSizeEstimate=47) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) │ ║ ║ s: Var (name=drug) (bindingState=unbound) │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) @@ -11275,17 +11613,17 @@ Projection │ ║ ├── SameTerm │ ║ │ Var (name=disease) (bindingState=bound) │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) - │ ║ └── StatementPattern (resultSizeEstimate=53) + │ ║ └── StatementPattern (resultSizeEstimate=14) │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) - │ ║ GroupElem (_anon_having_59016e83c0d2f09e443794577062990a517001234) + │ ║ GroupElem (_anon_having_090237ff5e97dadc469aacce8c764fdb2367) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (targetCount) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_59016e83c0d2f09e443794577062990a517001234) + │ ╚══ ExtensionElem (_anon_having_090237ff5e97dadc469aacce8c764fdb2367) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (targetCount) @@ -11315,11 +11653,11 @@ SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { GROUP BY ?drug HAVING (COUNT(DISTINCT ?target) >= 3) -31.440 ms/op +28.645 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 31.440 ms/op + 28.645 ms/op # JMH version: 1.37 @@ -11327,15 +11665,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 9) -# Run progress: 96.15% complete, ETA 00:00:45 +# Run progress: 96.15% complete, ETA 00:02:49 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11364,11 +11702,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fff0111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -21.232 ms/op +23.701 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11382,7 +11720,7 @@ Projection │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) │ ║ │ ╚══ Exists - │ ║ │ StatementPattern (resultSizeEstimate=3.3K) + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) │ ║ │ s: Var (name=drug) (bindingState=bound) │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) │ ║ │ o: Var (name=se) (bindingState=unbound) @@ -11395,7 +11733,7 @@ Projection │ ║ ║ ╠══ Extension │ ║ ║ ║ ├── Filter │ ║ ║ ║ │ ╠══ Compare (>) - │ ║ ║ ║ │ ║ Var (name=_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ Var (name=_anon_having_3166e729020f6c7d4a6a98a69d5983e568f2012, anonymous) (bindingState=bound) │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) │ ║ ║ ║ │ ╚══ Group (drug) │ ║ ║ ║ │ Filter @@ -11403,51 +11741,51 @@ Projection │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) │ ║ ║ ║ │ ╚══ LeftJoin - │ ║ ║ ║ │ ├── Join [left] - │ ║ ║ ║ │ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=313) [left] - │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=unbound) - │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) - │ ║ ║ ║ │ │ ╚══ Join [right] - │ ║ ║ ║ │ │ ├── StatementPattern (costEstimate=18, resultSizeEstimate=313) [left] - │ ║ ║ ║ │ │ │ s: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ │ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ ║ ║ ║ │ │ │ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ ║ │ │ └── Join [right] - │ ║ ║ ║ │ │ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] - │ ║ ║ ║ │ │ ║ s: Var (name=result) (bindingState=bound) - │ ║ ║ ║ │ │ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) - │ ║ ║ ║ │ │ ║ o: Var (name=effect) (bindingState=unbound) - │ ║ ║ ║ │ │ ╚══ Join [right] - │ ║ ║ ║ │ │ ├── StatementPattern (costEstimate=19, resultSizeEstimate=1.4K) [left] - │ ║ ║ ║ │ │ │ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ ║ │ │ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ ║ │ │ │ o: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ │ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=304) [right] - │ ║ ║ ║ │ │ s: Var (name=trial) (bindingState=bound) - │ ║ ║ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ │ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) │ ║ ║ ║ │ └── Extension [right] - │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=315) + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) - │ ║ ║ ║ │ GroupElem (_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345) + │ ║ ║ ║ │ GroupElem (_anon_having_3166e729020f6c7d4a6a98a69d5983e568f2012) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) │ ║ ║ ║ │ GroupElem (avgEffect) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_having_6163f52a30178a27464e961ac32bd614ee3f012345) + │ ║ ║ ║ └── ExtensionElem (_anon_having_3166e729020f6c7d4a6a98a69d5983e568f2012) │ ║ ║ ║ Avg │ ║ ║ ║ Var (name=effect) (bindingState=unbound) │ ║ ║ ╚══ ExtensionElem (avgEffect) │ ║ ║ Avg │ ║ ║ Var (name=effect) (bindingState=unbound) │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=3.6K) + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) │ ║ │ s: Var (name=drug) (bindingState=bound) │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) │ ║ │ o: Var (name=disease) (bindingState=unbound) @@ -11463,11 +11801,11 @@ Projection SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { { SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . ?arm ?result . ?arm ?drug . ?result ?effect . - ?trial ?arm . - ?trial a . OPTIONAL { ?result ?rate . BIND(?rate AS ?optRate) @@ -11484,11 +11822,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) } -18.325 ms/op +16.097 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 18.325 ms/op + 16.097 ms/op # JMH version: 1.37 @@ -11496,15 +11834,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 10) -# Run progress: 97.12% complete, ETA 00:00:34 +# Run progress: 97.12% complete, ETA 00:02:06 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11528,11 +11866,11 @@ GROUP BY ?pathway HAVING(COUNT(DISTINCT ?drug) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001112660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -20104.209 ms/op +351.469 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11542,60 +11880,60 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0041e3da7c0c79d41bab6894dcbbde17ab7, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (pathway) │ ║ Filter │ ║ ├── And - │ ║ │ ╠══ Exists - │ ║ │ ║ Join (JoinIterator) - │ ║ │ ║ ╠══ StatementPattern (costEstimate=106, resultSizeEstimate=313) [left] - │ ║ │ ║ ║ s: Var (name=arm) (bindingState=unbound) - │ ║ │ ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ │ ║ ║ o: Var (name=result) (bindingState=unbound) - │ ║ │ ║ ╚══ Join (JoinIterator) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=315) [left] - │ ║ │ ║ │ s: Var (name=result) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) - │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] - │ ║ │ ║ s: Var (name=trial) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ │ ║ o: Var (name=arm) (bindingState=bound) - │ ║ │ ╚══ Compare (!=) - │ ║ │ Var (name=optTrial) (bindingState=bound) - │ ║ │ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ ║ └── Join (JoinIterator) [right] - │ ║ ║ ╠══ StatementPattern (costEstimate=16.3K, resultSizeEstimate=302) [left] - │ ║ ║ ║ s: Var (name=target) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) - │ ║ ║ ║ o: Var (name=pathway) (bindingState=unbound) - │ ║ ║ ╚══ Join (JoinIterator) [right] - │ ║ ║ ├── StatementPattern (costEstimate=43, resultSizeEstimate=7.4K) [left] - │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ ║ │ o: Var (name=target) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=324) [right] - │ ║ ║ s: Var (name=drug) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, joinType=Cartesian product) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ║ ╚══ Extension [right] - │ ║ ├── StatementPattern (resultSizeEstimate=1.2K) + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) │ ║ │ s: Var (name=drug) (bindingState=bound) │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) │ ║ │ o: Var (name=trial) (bindingState=unbound) │ ║ └── ExtensionElem (optTrial) │ ║ Var (name=trial) (bindingState=bound) - │ ║ GroupElem (_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123) + │ ║ GroupElem (_anon_having_0041e3da7c0c79d41bab6894dcbbde17ab7) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_42f06f95e16dd84e36b842fe4a6847c5690123) + │ ╚══ ExtensionElem (_anon_having_0041e3da7c0c79d41bab6894dcbbde17ab7) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -11603,24 +11941,24 @@ Projection Var (name=drug) (bindingState=unbound) SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { - VALUES ?marker { } - ?target ?pathway . - ?drug ?target . ?drug a . + ?drug ?target . + ?target ?pathway . + VALUES ?marker { } OPTIONAL { ?drug ?trial . BIND(?trial AS ?optTrial) } - FILTER (EXISTS { ?arm ?result . ?result ?marker . ?trial ?arm . } && (?optTrial != )) + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) } GROUP BY ?pathway HAVING (COUNT(DISTINCT ?drug) > 1) -20108.719 ms/op +255.101 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 20108.719 ms/op + 255.101 ms/op # JMH version: 1.37 @@ -11628,15 +11966,15 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 11) -# Run progress: 98.08% complete, ETA 00:00:23 +# Run progress: 98.08% complete, ETA 00:01:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11690,7 +12028,7 @@ SELECT DISTINCT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f0001112f80 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc00111e008 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled @@ -11709,7 +12047,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:180) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) @@ -11731,15 +12069,15 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java # VM options: -Xms1G -Xmx32G # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 5 s each -# Measurement: 1 iterations, 3 s each +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 12) -# Run progress: 99.04% complete, ETA 00:00:11 +# Run progress: 99.04% complete, ETA 00:00:44 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11780,11 +12118,11 @@ SELECT * WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff01113c00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000040111e418 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -170.050 ms/op +205.664 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11808,36 +12146,36 @@ Projection │ ║ ├── LeftJoin (LeftJoinIterator) [left] │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] │ ║ │ ║ ├── Union [left] - │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=324, indexName=ospc) + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.0K, indexName=ospc) │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=304, indexName=ospc) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=955, indexName=ospc) │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) │ ║ │ ║ └── Extension [right] - │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=372) + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=13.2K) │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) │ ║ │ ║ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) │ ║ │ ║ ╚══ ExtensionElem (optLabel) │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=7.4K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=20.0K) [left] │ ║ │ │ s: Var (name=root) (bindingState=bound) │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) │ ║ │ │ o: Var (name=optTarget) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=302) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=666) [right] │ ║ │ s: Var (name=optTarget) (bindingState=bound) │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) │ ║ │ o: Var (name=optPathway) (bindingState=unbound) │ ║ └── LeftJoin [right] - │ ║ ╠══ StatementPattern (resultSizeEstimate=3.6K) [left] + │ ║ ╠══ StatementPattern (resultSizeEstimate=9.9K) [left] │ ║ ║ s: Var (name=root) (bindingState=bound) │ ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) │ ║ ║ o: Var (name=optIndication) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=324) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) [right] │ ║ s: Var (name=root) (bindingState=bound) │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ o: Var (name=optContraindication) (bindingState=unbound) @@ -11845,37 +12183,37 @@ Projection │ ├── LeftJoin [left] │ │ ╠══ LeftJoin [left] │ │ ║ ├── Union [left] - │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=1.4K) + │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) │ │ ║ │ ║ s: Var (name=root) (bindingState=bound) │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ │ ║ │ ║ o: Var (name=optArm) (bindingState=unbound) - │ │ ║ │ ╚══ Join (JoinIterator) - │ │ ║ │ ├── StatementPattern (costEstimate=8.92, resultSizeEstimate=313) [left] + │ │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=2.9K) + │ │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] │ │ ║ │ │ s: Var (name=optArm) (bindingState=unbound) │ │ ║ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) │ │ ║ │ │ o: Var (name=root) (bindingState=bound) - │ │ ║ │ └── StatementPattern (costEstimate=38, resultSizeEstimate=1.4K) [right] + │ │ ║ │ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] │ │ ║ │ s: Var (name=trial) (bindingState=unbound) │ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ │ ║ │ o: Var (name=optArm) (bindingState=bound) - │ │ ║ └── StatementPattern (resultSizeEstimate=313) [right] + │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K) [right] │ │ ║ s: Var (name=optArm) (bindingState=bound) │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) │ │ ║ o: Var (name=optResult) (bindingState=unbound) - │ │ ╚══ StatementPattern (resultSizeEstimate=315) [right] + │ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) [right] │ │ s: Var (name=optResult) (bindingState=bound) │ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) │ │ o: Var (name=optPValue) (bindingState=unbound) - │ └── StatementPattern (resultSizeEstimate=315) [right] + │ └── StatementPattern (resultSizeEstimate=2.9K) [right] │ s: Var (name=optResult) (bindingState=bound) │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) │ o: Var (name=optEffectSize) (bindingState=unbound) └── LeftJoin [right] - ╠══ StatementPattern (resultSizeEstimate=508) [left] + ╠══ StatementPattern (resultSizeEstimate=949) [left] ║ s: Var (name=combo) (bindingState=unbound) ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) ║ o: Var (name=root) (bindingState=bound) - ╚══ StatementPattern (resultSizeEstimate=301) [right] + ╚══ StatementPattern (resultSizeEstimate=477) [right] s: Var (name=combo) (bindingState=bound) p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) o: Var (name=optSynergy) (bindingState=unbound) @@ -11931,12 +12269,12 @@ SELECT ?root ?optName ?optLabel ?optTarget ?optPathway ?optIndication ?optContra } } -156.595 ms/op +146.343 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 156.595 ms/op + 146.343 ms/op -# Run complete. Total time: 00:20:35 +# Run complete. Total time: 01:16:21 ``` From 54862c4a10c61ddc996839a881d1c2f2c07c95e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 19:50:46 +0200 Subject: [PATCH 11/43] learned --- .../impl/DefaultEvaluationStrategy.java | 6 +- .../evaluation/impl/EvaluationStatistics.java | 13 + .../evaluation/iterator/FilterIterator.java | 81 ++- .../evaluation/optimizer/FilterOptimizer.java | 25 +- .../optimizer/FilterSelectivityKeys.java | 22 + .../optimizer/QueryJoinOptimizer.java | 551 +++++++++++---- .../StandardQueryOptimizerPipeline.java | 2 +- ...uationStrategyTelemetryRegressionTest.java | 48 ++ .../evaluation/impl/FilterOptimizerTest.java | 92 ++- ...yJoinOptimizerGreedyOuterBindingsTest.java | 393 ++++++++++- .../impl/QueryJoinOptimizerTest.java | 143 +++- .../sail/base/SketchBasedJoinEstimator.java | 186 +++-- .../sail/lmdb/LmdbEvaluationStatistics.java | 59 +- .../sail/lmdb/LmdbFilterSelectivityStats.java | 647 ++++++++++++++++++ .../rdf4j/sail/lmdb/LmdbSailStore.java | 17 +- ...dbEvaluationStatisticsMemoizationTest.java | 97 ++- ...LmdbSailStoreEstimatorPersistenceTest.java | 111 +++ .../LmdbSketchAwareFilterPlacementTest.java | 246 ++++++- .../lmdb/benchmark/ThemeQueryBenchmark.java | 22 + .../ThemeQueryBenchmarkSmokeTest.java | 153 +++++ 20 files changed, 2631 insertions(+), 283 deletions(-) create mode 100644 core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategy.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategy.java index 900a872f677..d8f14dd227b 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategy.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategy.java @@ -206,6 +206,7 @@ public class DefaultEvaluationStrategy implements EvaluationStrategy, FederatedS private QueryOptimizerPipeline pipeline; private final TupleFunctionRegistry tupleFuncRegistry; + private final EvaluationStatistics evaluationStatistics; private QueryEvaluationMode queryEvaluationMode; @@ -284,8 +285,9 @@ public DefaultEvaluationStrategy(TripleSource tripleSource, Dataset dataset, this.dataset = dataset; this.serviceResolver = serviceResolver; this.iterationCacheSyncThreshold = iterationCacheSyncTreshold; + this.evaluationStatistics = evaluationStatistics == null ? new EvaluationStatistics() : evaluationStatistics; this.pipeline = new org.eclipse.rdf4j.query.algebra.evaluation.optimizer.StandardQueryOptimizerPipeline(this, - tripleSource, evaluationStatistics); + tripleSource, this.evaluationStatistics); this.trackResultSize = trackResultSize; this.tupleFuncRegistry = tupleFunctionRegistry; this.setQueryEvaluationMode(QueryEvaluationMode.STANDARD); @@ -693,7 +695,7 @@ protected QueryEvaluationStep prepare(Service service, QueryEvaluationContext co protected QueryEvaluationStep prepare(Filter node, QueryEvaluationContext context) throws QueryEvaluationException { - return FilterIterator.supply(node, DefaultEvaluationStrategy.this, context); + return FilterIterator.supply(node, DefaultEvaluationStrategy.this, context, evaluationStatistics); } diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java index 1e4a22df9e3..435ef366e3f 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java @@ -19,6 +19,7 @@ import org.eclipse.rdf4j.query.algebra.BinaryTupleOperator; import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; import org.eclipse.rdf4j.query.algebra.EmptySet; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.LeftJoin; import org.eclipse.rdf4j.query.algebra.QueryModelNode; @@ -82,6 +83,18 @@ public boolean supportsJoinEstimation() { return false; } + public boolean supportsFilterSelectivityCosting() { + return false; + } + + public double estimateFilterPassRatio(Filter filter) { + return -1.0d; + } + + public void recordFilterOutcome(Filter filter, long passedCount, long filteredCount) { + // no-op by default + } + /*-----------------------------------* * Inner class CardinalityCalculator * *-----------------------------------*/ diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/FilterIterator.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/FilterIterator.java index e26ea8b31bc..412afd901da 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/FilterIterator.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/FilterIterator.java @@ -31,6 +31,7 @@ import org.eclipse.rdf4j.query.algebra.evaluation.QueryEvaluationStep; import org.eclipse.rdf4j.query.algebra.evaluation.QueryValueEvaluationStep; import org.eclipse.rdf4j.query.algebra.evaluation.ValueExprEvaluationException; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; import org.eclipse.rdf4j.query.algebra.evaluation.impl.QueryEvaluationContext; import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; @@ -40,7 +41,9 @@ public class FilterIterator extends FilterIteration implements Index private final EvaluationStrategy strategy; private final Function retain; private final Filter filterNode; + private final EvaluationStatistics evaluationStatistics; private final boolean runtimeTelemetryEnabled; + private final boolean recordFilterOutcomes; private long sourceRowsScannedActual; private long sourceRowsMatchedActual; private long sourceRowsFilteredActual; @@ -49,9 +52,16 @@ public class FilterIterator extends FilterIteration implements Index private long exprTrueCountActual; private long exprFalseCountActual; private long exprEvalTimeNanosActual; + private long recordedPassedCount; + private long recordedFilteredCount; public static QueryEvaluationStep supply(Filter filter, EvaluationStrategy strategy, QueryEvaluationContext context) { + return supply(filter, strategy, context, null); + } + + public static QueryEvaluationStep supply(Filter filter, EvaluationStrategy strategy, + QueryEvaluationContext context, EvaluationStatistics evaluationStatistics) { QueryEvaluationStep arg = strategy.precompile(filter.getArg(), context); QueryValueEvaluationStep ves; try { @@ -68,7 +78,7 @@ public static QueryEvaluationStep supply(Filter filter, EvaluationStrategy strat retain = Function.identity(); } - return (bs) -> new FilterIterator(filter, arg.evaluate(bs), ves, strategy, retain); + return (bs) -> new FilterIterator(filter, arg.evaluate(bs), ves, strategy, retain, evaluationStatistics); } /*--------------* @@ -77,9 +87,16 @@ public static QueryEvaluationStep supply(Filter filter, EvaluationStrategy strat public FilterIterator(Filter filter, CloseableIteration iter, QueryValueEvaluationStep condition, EvaluationStrategy strategy) throws QueryEvaluationException { + this(filter, iter, condition, strategy, null); + } + + public FilterIterator(Filter filter, CloseableIteration iter, QueryValueEvaluationStep condition, + EvaluationStrategy strategy, EvaluationStatistics evaluationStatistics) throws QueryEvaluationException { super(iter); this.filterNode = filter; + this.evaluationStatistics = evaluationStatistics; this.runtimeTelemetryEnabled = filter != null && filter.isRuntimeTelemetryEnabled(); + this.recordFilterOutcomes = filter != null && evaluationStatistics != null; this.condition = condition; this.strategy = strategy; if (!isPartOfSubQuery(filter)) { @@ -94,11 +111,14 @@ public FilterIterator(Filter filter, CloseableIteration iter, QueryV } private FilterIterator(Filter filterNode, CloseableIteration iter, - QueryValueEvaluationStep condition, EvaluationStrategy strategy, Function retain) + QueryValueEvaluationStep condition, EvaluationStrategy strategy, Function retain, + EvaluationStatistics evaluationStatistics) throws QueryEvaluationException { super(iter); this.filterNode = filterNode; + this.evaluationStatistics = evaluationStatistics; this.runtimeTelemetryEnabled = filterNode != null && filterNode.isRuntimeTelemetryEnabled(); + this.recordFilterOutcomes = filterNode != null && evaluationStatistics != null; this.condition = condition; this.strategy = strategy; // FIXME Jeen Boekstra scopeBindingNames should include bindings from superquery @@ -137,38 +157,47 @@ private static Function buildRetainFunction(Filter filte @Override protected boolean accept(BindingSet bindings) throws QueryEvaluationException { - if (!runtimeTelemetryEnabled) { - try { - BindingSet scopeBindings = this.retain.apply(bindings); - return strategy.isTrue(condition, scopeBindings); - } catch (ValueExprEvaluationException e) { - return false; - } + if (runtimeTelemetryEnabled) { + sourceRowsScannedActual++; + exprEvalCountActual++; } - - sourceRowsScannedActual++; - exprEvalCountActual++; - long started = System.nanoTime(); + long started = runtimeTelemetryEnabled ? System.nanoTime() : 0L; try { // Limit the bindings to the ones that are in scope for this filter BindingSet scopeBindings = this.retain.apply(bindings); boolean accepted = strategy.isTrue(condition, scopeBindings); - if (accepted) { - sourceRowsMatchedActual++; - exprTrueCountActual++; - } else { - sourceRowsFilteredActual++; - exprFalseCountActual++; + if (runtimeTelemetryEnabled) { + if (accepted) { + sourceRowsMatchedActual++; + exprTrueCountActual++; + } else { + sourceRowsFilteredActual++; + exprFalseCountActual++; + } + } + if (recordFilterOutcomes) { + if (accepted) { + recordedPassedCount++; + } else { + recordedFilteredCount++; + } } return accepted; } catch (ValueExprEvaluationException e) { // failed to evaluate condition - sourceRowsFilteredActual++; - predicateErrorCountActual++; + if (runtimeTelemetryEnabled) { + sourceRowsFilteredActual++; + predicateErrorCountActual++; + } + if (recordFilterOutcomes) { + recordedFilteredCount++; + } return false; } finally { - exprEvalTimeNanosActual += Math.max(0L, System.nanoTime() - started); + if (runtimeTelemetryEnabled) { + exprEvalTimeNanosActual += Math.max(0L, System.nanoTime() - started); + } } } @@ -187,6 +216,14 @@ public static boolean isPartOfSubQuery(QueryModelNode node) { @Override protected void handleClose() { + if (filterNode != null && recordFilterOutcomes + && (recordedPassedCount > 0L || recordedFilteredCount > 0L)) { + try { + evaluationStatistics.recordFilterOutcome(filterNode, recordedPassedCount, recordedFilteredCount); + } catch (RuntimeException e) { + // Estimation feedback must never break query evaluation. + } + } if (filterNode != null && runtimeTelemetryEnabled) { filterNode.setLongMetricActual(TelemetryMetricNames.PREDICATE_ERROR_COUNT_ACTUAL, Math.max(0L, filterNode.getLongMetricActual(TelemetryMetricNames.PREDICATE_ERROR_COUNT_ACTUAL)) diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java index 999c6bee5ae..6a73277cdc8 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java @@ -402,11 +402,34 @@ private boolean shouldKeepFilterAtJoin(Join join, TupleExpr candidateArg) { } double currentInputRows = statistics.getCardinality(join); - double candidateInputRows = statistics.getCardinality(candidateArg); + double candidateInputRows = estimateFilteredInputRows(candidateArg); return isFiniteNonNegative(currentInputRows) && isFiniteNonNegative(candidateInputRows) && currentInputRows < candidateInputRows; } + private double estimateFilteredInputRows(TupleExpr candidateArg) { + double baseRows = statistics.getCardinality(candidateArg); + if (!isFiniteNonNegative(baseRows) || filter.getCondition() == null) { + return baseRows; + } + + Filter candidateFilter = new Filter(candidateArg.clone(), filter.getCondition().clone()); + double filteredRows = statistics.getCardinality(candidateFilter); + if (isFiniteNonNegative(filteredRows) && filteredRows < baseRows) { + return filteredRows; + } + + double passRatio = statistics.estimateFilterPassRatio(candidateFilter); + if (Double.isFinite(passRatio) && passRatio > 0.0d && passRatio <= 1.0d) { + double passRatioRows = baseRows * passRatio; + if (isFiniteNonNegative(passRatioRows)) { + return passRatioRows; + } + } + + return baseRows; + } + private boolean hasSiblingWithHigherConditionCost() { return hasSiblingWithHigherConditionCost(filter.getParentNode()) || hasSiblingWithHigherConditionCost(filter.getArg()); diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java index 7cdd9f8ce58..7e0343bb631 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java @@ -11,13 +11,16 @@ // Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; +import java.util.List; import java.util.Set; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.ValueExpr; import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.StatementPatternCollector; import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; /** @@ -60,6 +63,25 @@ public static String filterKeyFor(ValueExpr condition) { return condition.toString().replaceAll("\\s+", " ").trim(); } + public static StatementPattern patternLocalBaseForFilter(Filter filter) { + if (filter == null || filter.getCondition() == null || filter.getArg() == null) { + return null; + } + + List patterns = StatementPatternCollector.process(filter.getArg()); + StatementPattern match = null; + for (StatementPattern pattern : patterns) { + if (!conditionIntersectsPattern(filter.getCondition(), pattern)) { + continue; + } + if (match != null) { + return null; + } + match = pattern; + } + return match; + } + public static boolean conditionIntersectsPattern(ValueExpr condition, StatementPattern pattern) { if (condition == null || pattern == null) { return false; diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index ac550791c10..8b46d0d1714 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -86,6 +86,19 @@ public class QueryJoinOptimizer implements QueryOptimizer { @Experimental public static boolean REORDER_JOINS_WITH_SKETCHES = true; + private static final double MIN_NORMALIZED_JOIN_ROWS = 1.0e-9d; + private static final double AVOIDABLE_CROSS_JOIN_PENALTY = 10.0d; + private static final double UNANCHORED_INITIAL_PAIR_PENALTY = 5.0d; + private static final double SHARED_VAR_BONUS_PER_VAR = 1.7d; + private static final double MAX_SHARED_VAR_BONUS = 3.4d; + private static final double BOUND_ANCHOR_BONUS_PER_VAR = 1.4d; + private static final double MAX_BOUND_ANCHOR_BONUS = 2.8d; + private static final double CHEAP_FILTER_BONUS_PER_FILTER = 1.6d; + private static final double MAX_CHEAP_FILTER_BONUS = 2.56d; + private static final double EXPENSIVE_FILTER_BONUS_PER_FILTER = 1.1d; + private static final double MAX_EXPENSIVE_FILTER_BONUS = 1.21d; + private static final double MIN_UNLOCKED_FILTER_PASS_RATIO = 0.25d; + public enum JoinOrderStrategy { GREEDY, DYNAMIC_PROGRAMMING, @@ -466,12 +479,12 @@ private TupleExpr buildSegmentRoot(OrderedJoinSegment orderedJoinSegment) { List pendingFilters = new ArrayList<>(orderedJoinSegment.deferredFilters); Set availableVars = new HashSet<>(orderedJoinSegment.boundBeforeSegment); - TupleExpr root = orderedJoinArgs.removeFirst(); + TupleExpr root = applyCompatibleLocalDeferredFilters(orderedJoinArgs.removeFirst(), pendingFilters); availableVars.addAll(root.getBindingNames()); root = applyCompatibleDeferredFilters(root, pendingFilters, availableVars); while (!orderedJoinArgs.isEmpty()) { - TupleExpr next = orderedJoinArgs.removeFirst(); + TupleExpr next = applyCompatibleLocalDeferredFilters(orderedJoinArgs.removeFirst(), pendingFilters); root = createJoinWithEstimatedResultSize(root, next); availableVars.addAll(next.getBindingNames()); root = applyCompatibleDeferredFilters(root, pendingFilters, availableVars); @@ -598,19 +611,16 @@ private Deque optimizeJoinGroup(List joinGroup, List remaining = new ArrayList<>(joinGroup); Deque orderedJoinArgs = new ArrayDeque<>(remaining.size()); - Map cardinalityMap = Collections.emptyMap(); + Map cardinalityMap = new IdentityHashMap<>(remaining.size()); Map> varsMap = new HashMap<>(); for (TupleExpr tupleExpr : remaining) { double cardinality = statistics.getCardinality(tupleExpr); + double effectiveCardinality = estimateTupleExprRowsWithLocalDeferredFilters(tupleExpr, deferredFilters, + cardinality); - tupleExpr.setResultSizeEstimate(Math.max(cardinality, tupleExpr.getResultSizeEstimate())); - if (!hasCachedCardinality(tupleExpr)) { - if (cardinalityMap.isEmpty()) { - cardinalityMap = new HashMap<>(); - } - cardinalityMap.put(tupleExpr, cardinality); - } + tupleExpr.setResultSizeEstimate(Math.max(effectiveCardinality, tupleExpr.getResultSizeEstimate())); + cardinalityMap.put(tupleExpr, effectiveCardinality); if (tupleExpr instanceof ZeroLengthPath) { varsMap.put(tupleExpr, ((ZeroLengthPath) tupleExpr).getVarList()); } else { @@ -633,7 +643,9 @@ private Deque optimizeJoinGroup(List joinGroup, List 2) { + if (REORDER_JOINS_WITH_SKETCHES && orderedJoinArgs.size() > 2 + && (statistics.supportsJoinEstimation() + || (!deferredFilters.isEmpty() && statistics.supportsFilterSelectivityCosting()))) { orderedJoinArgs = new ArrayDeque<>( reorderSegment(new ArrayList<>(orderedJoinArgs), boundBeforeSegment, deferredFilters)); } @@ -818,36 +830,29 @@ private List greedyReorderByJoinCardinality(List segment, List remaining = new ArrayList<>(segment); JoinCardinalityCache cardinalityCache = new JoinCardinalityCache(); - Map> tupleExprsByVariable = buildTupleExprsByVariable(segment); + Map originalOrder = new IdentityHashMap<>(segment.size()); + for (int i = 0; i < segment.size(); i++) { + originalOrder.put(segment.get(i), i); + } List ordered = new ArrayList<>(remaining.size()); Set prefixBindingNames = new HashSet<>(outerBoundVars); + boolean hasConnectedInitialPair = hasConnectedInitialPair(remaining); + boolean hasAnchoredInitialPair = hasAnchoredInitialPair(remaining, outerBoundVars); int bestLeftIndex = 0; int bestRightIndex = 1; - int bestCheapFilterUnlocks = Integer.MIN_VALUE; - int bestTotalFilterUnlocks = Integer.MIN_VALUE; - int bestOuterBindingImpact = Integer.MIN_VALUE; - int bestSharedVarCount = Integer.MIN_VALUE; - double bestCost = Double.POSITIVE_INFINITY; + GreedyChoiceScore bestInitialScore = null; for (int leftIndex = 0; leftIndex < remaining.size() - 1; leftIndex++) { for (int rightIndex = leftIndex + 1; rightIndex < remaining.size(); rightIndex++) { TupleExpr left = remaining.get(leftIndex); TupleExpr right = remaining.get(rightIndex); - Set availableVars = getAvailableVars(outerBoundVars, left, right); - int cheapFilterUnlocks = countCompatibleFilters(deferredFilters, availableVars, 0); - int totalFilterUnlocks = countCompatibleFilters(deferredFilters, availableVars); - int sharedVarCount = sharedJoinVariableCount(left, right); - int outerBindingImpact = estimateOuterBindingImpact(left, right, outerBoundVars, - tupleExprsByVariable); - double joinCost = cardinalityCache.get(left, right); - if (isBetterGreedyChoice(cheapFilterUnlocks, totalFilterUnlocks, outerBindingImpact, sharedVarCount, - joinCost, bestCheapFilterUnlocks, bestTotalFilterUnlocks, bestOuterBindingImpact, - bestSharedVarCount, bestCost)) { - bestCheapFilterUnlocks = cheapFilterUnlocks; - bestTotalFilterUnlocks = totalFilterUnlocks; - bestOuterBindingImpact = outerBindingImpact; - bestSharedVarCount = sharedVarCount; - bestCost = joinCost; + GreedyChoiceMetrics metrics = buildInitialGreedyChoiceMetrics(left, right, outerBoundVars, + deferredFilters, cardinalityCache, hasConnectedInitialPair, hasAnchoredInitialPair); + GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(left), + originalOrder.get(right)); + traceGreedyChoice("initial", left, right, metrics, score); + if (bestInitialScore == null || compareGreedyChoices(score, bestInitialScore) < 0) { + bestInitialScore = score; bestLeftIndex = leftIndex; bestRightIndex = rightIndex; } @@ -856,49 +861,28 @@ private List greedyReorderByJoinCardinality(List segment, TupleExpr left = remaining.remove(bestLeftIndex); TupleExpr right = remaining.remove(bestRightIndex > bestLeftIndex ? bestRightIndex - 1 : bestRightIndex); - if (left.getResultSizeEstimate() > 0 && right.getResultSizeEstimate() > 0) { - if (left.getResultSizeEstimate() > right.getResultSizeEstimate()) { - var temp = left; - left = right; - right = temp; - } - } + double joinCost = cardinalityCache.get(left, right); + TupleExpr[] orderedInitialPair = orderInitialPairByEffectiveLeafRows(left, right, deferredFilters); + left = orderedInitialPair[0]; + right = orderedInitialPair[1]; ordered.add(left); ordered.add(right); prefixBindingNames.addAll(left.getBindingNames()); prefixBindingNames.addAll(right.getBindingNames()); List pendingDeferredFilters = removeCompatibleFilters(deferredFilters, prefixBindingNames); + TupleExpr prefixForEstimation = new Join(left.clone(), right.clone()); while (!remaining.isEmpty()) { TupleExpr bestCandidate = null; - int bestCandidateCheapFilterUnlocks = Integer.MIN_VALUE; - int bestCandidateTotalFilterUnlocks = Integer.MIN_VALUE; - int bestCandidateOuterBindingImpact = Integer.MIN_VALUE; - int bestCandidateSharedVarCount = Integer.MIN_VALUE; - double lowestJoinCost = Double.POSITIVE_INFINITY; + GreedyChoiceScore bestCandidateScore = null; + boolean hasConnectedCandidate = hasConnectedCandidate(remaining, prefixBindingNames); for (TupleExpr candidate : remaining) { - Set candidateAvailableVars = getAvailableVars(prefixBindingNames, candidate); - int cheapFilterUnlocks = countCompatibleFilters(pendingDeferredFilters, candidateAvailableVars, 0); - int totalFilterUnlocks = countCompatibleFilters(pendingDeferredFilters, candidateAvailableVars); - int sharedVarCount = sharedJoinVariableCount(candidate, prefixBindingNames); - double candidateCost = Double.POSITIVE_INFINITY; - for (TupleExpr existing : ordered) { - if (!sharesJoinVariable(existing, candidate)) { - continue; - } - candidateCost = Math.min(candidateCost, cardinalityCache.get(existing, candidate)); - } - int candidateOuterBindingImpact = estimateOuterBindingImpact(candidate, outerBoundVars, - tupleExprsByVariable); - if (bestCandidate == null || isBetterGreedyChoice(cheapFilterUnlocks, totalFilterUnlocks, - candidateOuterBindingImpact, sharedVarCount, candidateCost, - bestCandidateCheapFilterUnlocks, bestCandidateTotalFilterUnlocks, - bestCandidateOuterBindingImpact, bestCandidateSharedVarCount, lowestJoinCost)) { - bestCandidateCheapFilterUnlocks = cheapFilterUnlocks; - bestCandidateTotalFilterUnlocks = totalFilterUnlocks; - bestCandidateOuterBindingImpact = candidateOuterBindingImpact; - bestCandidateSharedVarCount = sharedVarCount; - lowestJoinCost = candidateCost; + GreedyChoiceMetrics metrics = buildNextGreedyChoiceMetrics(prefixForEstimation, prefixBindingNames, + candidate, pendingDeferredFilters, cardinalityCache, hasConnectedCandidate); + GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(candidate), -1); + traceGreedyChoice("expand", prefixForEstimation, candidate, metrics, score); + if (bestCandidateScore == null || compareGreedyChoices(score, bestCandidateScore) < 0) { + bestCandidateScore = score; bestCandidate = candidate; } } @@ -910,6 +894,7 @@ private List greedyReorderByJoinCardinality(List segment, ordered.addLast(bestCandidate); prefixBindingNames.addAll(bestCandidate.getBindingNames()); pendingDeferredFilters = removeCompatibleFilters(pendingDeferredFilters, prefixBindingNames); + prefixForEstimation = new Join(prefixForEstimation, bestCandidate.clone()); } if (log.isTraceEnabled()) { @@ -920,46 +905,6 @@ private List greedyReorderByJoinCardinality(List segment, return ordered; } - private Map> buildTupleExprsByVariable(List segment) { - Map> tupleExprsByVariable = new HashMap<>((segment.size() + 1) * 2); - for (TupleExpr tupleExpr : segment) { - for (String bindingName : tupleExpr.getBindingNames()) { - if (bindingName.startsWith("_const_")) { - continue; - } - tupleExprsByVariable.computeIfAbsent(bindingName, ignored -> new ArrayList<>(2)).add(tupleExpr); - } - } - return tupleExprsByVariable; - } - - private int estimateOuterBindingImpact(TupleExpr left, TupleExpr right, Set outerBoundVars, - Map> tupleExprsByVariable) { - Set bindingNames = new HashSet<>(left.getBindingNames()); - bindingNames.addAll(right.getBindingNames()); - return estimateOuterBindingImpact(bindingNames, outerBoundVars, tupleExprsByVariable); - } - - private int estimateOuterBindingImpact(TupleExpr tupleExpr, Set outerBoundVars, - Map> tupleExprsByVariable) { - return estimateOuterBindingImpact(tupleExpr.getBindingNames(), outerBoundVars, tupleExprsByVariable); - } - - private int estimateOuterBindingImpact(Set bindingNames, Set outerBoundVars, - Map> tupleExprsByVariable) { - if (outerBoundVars.isEmpty()) { - return 0; - } - - int impact = 0; - for (String bindingName : bindingNames) { - if (!bindingName.startsWith("_const_") && outerBoundVars.contains(bindingName)) { - impact += tupleExprsByVariable.getOrDefault(bindingName, Collections.emptyList()).size(); - } - } - return impact; - } - private Set getAvailableVars(Set baseBindingNames, TupleExpr tupleExpr) { Set availableVars = new HashSet<>(baseBindingNames); availableVars.addAll(tupleExpr.getBindingNames()); @@ -982,11 +927,10 @@ private int countCompatibleFilters(List deferredFilters, Set deferredFilters, Set availableVars, - int requiredConditionCost) { + private int countCompatibleCheapFilters(List deferredFilters, Set availableVars) { int compatibleFilters = 0; for (DeferredFilter deferredFilter : deferredFilters) { - if (deferredFilter.conditionCost == requiredConditionCost + if (deferredFilter.conditionCost == 0 && availableVars.containsAll(deferredFilter.requiredVars)) { compatibleFilters++; } @@ -994,6 +938,16 @@ private int countCompatibleFilters(List deferredFilters, Set deferredFilters, Set availableVars) { + int compatibleFilters = 0; + for (DeferredFilter deferredFilter : deferredFilters) { + if (deferredFilter.conditionCost > 0 && availableVars.containsAll(deferredFilter.requiredVars)) { + compatibleFilters++; + } + } + return compatibleFilters; + } + private List removeCompatibleFilters(List deferredFilters, Set availableVars) { if (deferredFilters.isEmpty()) { @@ -1009,22 +963,326 @@ private List removeCompatibleFilters(List deferr return pendingFilters; } - private boolean isBetterGreedyChoice(int cheapFilterUnlocks, int totalFilterUnlocks, int outerBindingImpact, - int sharedVarCount, double joinCost, int bestCheapFilterUnlocks, int bestTotalFilterUnlocks, - int bestOuterBindingImpact, int bestSharedVarCount, double bestCost) { - if (cheapFilterUnlocks != bestCheapFilterUnlocks) { - return cheapFilterUnlocks > bestCheapFilterUnlocks; + private List compatibleDeferredFilters(List deferredFilters, + Set availableVars) { + if (deferredFilters.isEmpty()) { + return List.of(); + } + + List compatibleFilters = new ArrayList<>(deferredFilters.size()); + for (DeferredFilter deferredFilter : deferredFilters) { + if (availableVars.containsAll(deferredFilter.requiredVars)) { + compatibleFilters.add(deferredFilter); + } + } + return compatibleFilters; + } + + private double estimateTupleExprRowsWithLocalDeferredFilters(TupleExpr tupleExpr, + List deferredFilters, double baseRows) { + if (!isFiniteNonNegative(baseRows)) { + return baseRows; + } + + List localFilters = compatibleLocalDeferredFilters(deferredFilters, tupleExpr); + if (localFilters.isEmpty()) { + return baseRows; + } + + double filteredRows = statistics.getCardinality(wrapTupleExprWithDeferredFilters(tupleExpr.clone(), + localFilters)); + if (isFiniteNonNegative(filteredRows) && filteredRows < baseRows) { + return filteredRows; + } + + double combinedPassRatio = combinedCompatibleFilterPassRatio(localFilters); + if (combinedPassRatio > 0.0d) { + double passRatioRows = baseRows * combinedPassRatio; + if (isFiniteNonNegative(passRatioRows)) { + return passRatioRows; + } + } + + return baseRows; + } + + private TupleExpr applyCompatibleLocalDeferredFilters(TupleExpr tupleExpr, + List deferredFilters) { + if (deferredFilters.isEmpty()) { + return tupleExpr; + } + + List localFilters = new ArrayList<>(); + for (int i = 0; i < deferredFilters.size();) { + DeferredFilter deferredFilter = deferredFilters.get(i); + if (!canApplyDeferredFilterToTupleExpr(deferredFilter, tupleExpr)) { + i++; + continue; + } + localFilters.add(deferredFilter); + deferredFilters.remove(i); + } + + return localFilters.isEmpty() ? tupleExpr : wrapTupleExprWithDeferredFilters(tupleExpr, localFilters); + } + + private List compatibleLocalDeferredFilters(List deferredFilters, + TupleExpr tupleExpr) { + if (deferredFilters.isEmpty()) { + return List.of(); + } + + List localFilters = new ArrayList<>(deferredFilters.size()); + for (DeferredFilter deferredFilter : deferredFilters) { + if (canApplyDeferredFilterToTupleExpr(deferredFilter, tupleExpr)) { + localFilters.add(deferredFilter); + } + } + return localFilters; + } + + private boolean canApplyDeferredFilterToTupleExpr(DeferredFilter deferredFilter, TupleExpr tupleExpr) { + if (!(tupleExpr instanceof StatementPattern)) { + return false; + } + return deferredFilter.patternLocalBase != null + && tupleExpr.getBindingNames().containsAll(deferredFilter.requiredVars); + } + + private TupleExpr wrapTupleExprWithDeferredFilters(TupleExpr tupleExpr, List deferredFilters) { + TupleExpr current = tupleExpr; + for (DeferredFilter deferredFilter : sortDeferredFilters(deferredFilters)) { + Filter filterClone = deferredFilter.filter.clone(); + filterClone.setArg(current); + current = filterClone; + } + return current; + } + + private double combinedCompatibleFilterPassRatio(List compatibleFilters) { + double combinedPassRatio = 1.0d; + boolean foundEstimatedFilter = false; + for (DeferredFilter deferredFilter : compatibleFilters) { + double passRatio = statistics.estimateFilterPassRatio(deferredFilter.filter); + if (Double.isFinite(passRatio) && passRatio > 0.0d && passRatio <= 1.0d) { + combinedPassRatio *= passRatio; + foundEstimatedFilter = true; + } + } + return foundEstimatedFilter ? combinedPassRatio : -1.0d; + } + + private double combinedUnlockedFilterPassRatio(List deferredFilters, + Set availableVars) { + return combinedCompatibleFilterPassRatio(compatibleDeferredFilters(deferredFilters, availableVars)); + } + + private double estimateDeferredFilterAwareRows(TupleExpr tupleExpr, List deferredFilters, + Set availableVars, double baseRows) { + if (!isFiniteNonNegative(baseRows)) { + return baseRows; + } + + List compatibleFilters = compatibleDeferredFilters(deferredFilters, availableVars); + if (compatibleFilters.isEmpty()) { + return baseRows; + } + + double filteredRows = estimateRowsWithDeferredFilters(tupleExpr, compatibleFilters); + if (isFiniteNonNegative(filteredRows) && filteredRows < baseRows) { + return filteredRows; + } + + double combinedPassRatio = combinedCompatibleFilterPassRatio(compatibleFilters); + if (combinedPassRatio > 0.0d) { + double passRatioRows = baseRows * combinedPassRatio; + if (isFiniteNonNegative(passRatioRows)) { + return passRatioRows; + } + } + + return baseRows; + } + + private double estimateRowsWithDeferredFilters(TupleExpr tupleExpr, List compatibleFilters) { + return statistics.getCardinality(wrapTupleExprWithDeferredFilters(tupleExpr.clone(), compatibleFilters)); + } + + private GreedyChoiceMetrics buildInitialGreedyChoiceMetrics(TupleExpr left, TupleExpr right, + Set outerBoundVars, List deferredFilters, JoinCardinalityCache cardinalityCache, + boolean hasConnectedInitialPair, boolean hasAnchoredInitialPair) { + Set availableVars = getAvailableVars(outerBoundVars, left, right); + int sharedVarCount = sharedJoinVariableCount(left, right); + int boundAnchorCount = boundAnchorCount(left, right, outerBoundVars); + double rawJoinRows = cardinalityCache.get(left, right); + double effectiveJoinRows = estimateDeferredFilterAwareRows(new Join(left.clone(), right.clone()), + deferredFilters, availableVars, rawJoinRows); + return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, sharedVarCount, boundAnchorCount, + countCompatibleCheapFilters(deferredFilters, availableVars), + countCompatibleExpensiveFilters(deferredFilters, availableVars), + sharedVarCount == 0 && hasConnectedInitialPair, boundAnchorCount == 0 && hasAnchoredInitialPair, + combinedUnlockedFilterPassRatio(deferredFilters, availableVars)); + } + + private GreedyChoiceMetrics buildNextGreedyChoiceMetrics(TupleExpr prefixForEstimation, + Set prefixBindingNames, TupleExpr candidate, List deferredFilters, + JoinCardinalityCache cardinalityCache, boolean hasConnectedCandidate) { + Set candidateAvailableVars = getAvailableVars(prefixBindingNames, candidate); + int sharedVarCount = sharedJoinVariableCount(candidate, prefixBindingNames); + double rawJoinRows = cardinalityCache.get(prefixForEstimation, candidate); + double effectiveJoinRows = estimateDeferredFilterAwareRows( + new Join(prefixForEstimation.clone(), candidate.clone()), deferredFilters, candidateAvailableVars, + rawJoinRows); + return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, sharedVarCount, 0, + countCompatibleCheapFilters(deferredFilters, candidateAvailableVars), + countCompatibleExpensiveFilters(deferredFilters, candidateAvailableVars), + sharedVarCount == 0 && hasConnectedCandidate, false, + combinedUnlockedFilterPassRatio(deferredFilters, candidateAvailableVars)); + } + + private boolean hasConnectedInitialPair(List tupleExprs) { + for (int leftIndex = 0; leftIndex < tupleExprs.size() - 1; leftIndex++) { + for (int rightIndex = leftIndex + 1; rightIndex < tupleExprs.size(); rightIndex++) { + if (sharedJoinVariableCount(tupleExprs.get(leftIndex), tupleExprs.get(rightIndex)) > 0) { + return true; + } + } + } + return false; + } + + private boolean hasAnchoredInitialPair(List tupleExprs, Set outerBoundVars) { + if (outerBoundVars.isEmpty()) { + return false; + } + for (int leftIndex = 0; leftIndex < tupleExprs.size() - 1; leftIndex++) { + for (int rightIndex = leftIndex + 1; rightIndex < tupleExprs.size(); rightIndex++) { + if (boundAnchorCount(tupleExprs.get(leftIndex), tupleExprs.get(rightIndex), outerBoundVars) > 0) { + return true; + } + } + } + return false; + } + + private boolean hasConnectedCandidate(List tupleExprs, Set prefixBindingNames) { + for (TupleExpr tupleExpr : tupleExprs) { + if (sharedJoinVariableCount(tupleExpr, prefixBindingNames) > 0) { + return true; + } + } + return false; + } + + private int compareGreedyChoices(GreedyChoiceScore left, GreedyChoiceScore right) { + int adjustedCostComparison = Double.compare(left.adjustedCost, right.adjustedCost); + if (adjustedCostComparison != 0) { + return adjustedCostComparison; + } + int rawCostComparison = Double.compare(left.rawCost, right.rawCost); + if (rawCostComparison != 0) { + return rawCostComparison; + } + int stableIndexComparison = Integer.compare(left.stableIndex, right.stableIndex); + if (stableIndexComparison != 0) { + return stableIndexComparison; + } + return Integer.compare(left.secondaryStableIndex, right.secondaryStableIndex); + } + + private GreedyChoiceScore scoreGreedyChoice(GreedyChoiceMetrics metrics, int stableIndex, + int secondaryStableIndex) { + double normalizedJoinRows = normalizeJoinRows(metrics.effectiveJoinRows); + double adjustedCost = normalizedJoinRows; + if (adjustedCost != Double.POSITIVE_INFINITY) { + if (metrics.avoidableCrossJoin) { + adjustedCost *= AVOIDABLE_CROSS_JOIN_PENALTY; + } + if (metrics.unanchoredInitialPair) { + adjustedCost *= UNANCHORED_INITIAL_PAIR_PENALTY; + } + adjustedCost /= boundedBonus(metrics.sharedVarCount, SHARED_VAR_BONUS_PER_VAR, MAX_SHARED_VAR_BONUS); + adjustedCost /= boundedBonus(metrics.boundAnchorCount, BOUND_ANCHOR_BONUS_PER_VAR, + MAX_BOUND_ANCHOR_BONUS); + adjustedCost /= boundedBonus(metrics.cheapFilterUnlockCount, CHEAP_FILTER_BONUS_PER_FILTER, + MAX_CHEAP_FILTER_BONUS); + adjustedCost /= boundedBonus(metrics.expensiveFilterUnlockCount, EXPENSIVE_FILTER_BONUS_PER_FILTER, + MAX_EXPENSIVE_FILTER_BONUS); + if (Double.isFinite(metrics.combinedUnlockedFilterPassRatio) + && metrics.combinedUnlockedFilterPassRatio > 0.0d) { + adjustedCost *= Math.max(metrics.combinedUnlockedFilterPassRatio, + MIN_UNLOCKED_FILTER_PASS_RATIO); + } + } + return new GreedyChoiceScore(adjustedCost, normalizedJoinRows, stableIndex, secondaryStableIndex); + } + + private TupleExpr[] orderInitialPairByEffectiveLeafRows(TupleExpr left, TupleExpr right, + List deferredFilters) { + double leftRows = estimateLeafRowsWithLocalDeferredFilters(left, deferredFilters); + double rightRows = estimateLeafRowsWithLocalDeferredFilters(right, deferredFilters); + if (isFiniteNonNegative(leftRows) && isFiniteNonNegative(rightRows) && leftRows > rightRows) { + return new TupleExpr[] { right, left }; } - if (totalFilterUnlocks != bestTotalFilterUnlocks) { - return totalFilterUnlocks > bestTotalFilterUnlocks; + if (left.getResultSizeEstimate() > 0 && right.getResultSizeEstimate() > 0 + && left.getResultSizeEstimate() > right.getResultSizeEstimate()) { + return new TupleExpr[] { right, left }; } - if (outerBindingImpact != bestOuterBindingImpact) { - return outerBindingImpact > bestOuterBindingImpact; + return new TupleExpr[] { left, right }; + } + + private double estimateLeafRowsWithLocalDeferredFilters(TupleExpr tupleExpr, + List deferredFilters) { + double baseRows = statistics.getCardinality(tupleExpr); + return estimateTupleExprRowsWithLocalDeferredFilters(tupleExpr, deferredFilters, baseRows); + } + + private double normalizeJoinRows(double joinRows) { + if (!Double.isFinite(joinRows) || joinRows < 0) { + return Double.POSITIVE_INFINITY; } - if (sharedVarCount != bestSharedVarCount) { - return sharedVarCount > bestSharedVarCount; + return Math.max(joinRows, MIN_NORMALIZED_JOIN_ROWS); + } + + private boolean isFiniteNonNegative(double value) { + return Double.isFinite(value) && value >= 0.0d; + } + + private double boundedBonus(int count, double bonusPerUnit, double maxBonus) { + if (count <= 0) { + return 1.0d; + } + return Math.min(1.0d + count * (bonusPerUnit - 1.0d), maxBonus); + } + + private int boundAnchorCount(TupleExpr left, TupleExpr right, Set outerBoundVars) { + Set bindingNames = new HashSet<>(left.getBindingNames()); + bindingNames.addAll(right.getBindingNames()); + return boundAnchorCount(bindingNames, outerBoundVars); + } + + private int boundAnchorCount(Set bindingNames, Set outerBoundVars) { + int count = 0; + for (String bindingName : bindingNames) { + if (!bindingName.startsWith("_const_") && outerBoundVars.contains(bindingName)) { + count++; + } + } + return count; + } + + private void traceGreedyChoice(String phase, TupleExpr left, TupleExpr right, GreedyChoiceMetrics metrics, + GreedyChoiceScore score) { + if (log.isTraceEnabled()) { + log.trace( + "Greedy {} choice left={} right={} rawRows={} effectiveRows={} adjusted={} sharedVars={} boundAnchors={} cheapFilters={} expensiveFilters={} filterPassRatio={} avoidableCrossJoin={} unanchoredInitialPair={}", + phase, left.toString().trim(), right.toString().trim(), metrics.rawJoinRows, + metrics.effectiveJoinRows, score.adjustedCost, + metrics.sharedVarCount, metrics.boundAnchorCount, metrics.cheapFilterUnlockCount, + metrics.expensiveFilterUnlockCount, metrics.combinedUnlockedFilterPassRatio, + metrics.avoidableCrossJoin, + metrics.unanchoredInitialPair); } - return joinCost < bestCost; } private int sharedJoinVariableCount(TupleExpr left, TupleExpr right) { @@ -1048,8 +1306,45 @@ private int sharedJoinVariableCount(TupleExpr tupleExpr, Set bindingName return sharedVarCount; } - private boolean sharesJoinVariable(TupleExpr left, TupleExpr right) { - return sharedJoinVariableCount(left, right) > 0; + private final class GreedyChoiceMetrics { + private final double rawJoinRows; + private final double effectiveJoinRows; + private final int sharedVarCount; + private final int boundAnchorCount; + private final int cheapFilterUnlockCount; + private final int expensiveFilterUnlockCount; + private final boolean avoidableCrossJoin; + private final boolean unanchoredInitialPair; + private final double combinedUnlockedFilterPassRatio; + + private GreedyChoiceMetrics(double rawJoinRows, double effectiveJoinRows, int sharedVarCount, + int boundAnchorCount, + int cheapFilterUnlockCount, int expensiveFilterUnlockCount, boolean avoidableCrossJoin, + boolean unanchoredInitialPair, double combinedUnlockedFilterPassRatio) { + this.rawJoinRows = rawJoinRows; + this.effectiveJoinRows = effectiveJoinRows; + this.sharedVarCount = sharedVarCount; + this.boundAnchorCount = boundAnchorCount; + this.cheapFilterUnlockCount = cheapFilterUnlockCount; + this.expensiveFilterUnlockCount = expensiveFilterUnlockCount; + this.avoidableCrossJoin = avoidableCrossJoin; + this.unanchoredInitialPair = unanchoredInitialPair; + this.combinedUnlockedFilterPassRatio = combinedUnlockedFilterPassRatio; + } + } + + private final class GreedyChoiceScore { + private final double adjustedCost; + private final double rawCost; + private final int stableIndex; + private final int secondaryStableIndex; + + private GreedyChoiceScore(double adjustedCost, double rawCost, int stableIndex, int secondaryStableIndex) { + this.adjustedCost = adjustedCost; + this.rawCost = rawCost; + this.stableIndex = stableIndex; + this.secondaryStableIndex = secondaryStableIndex; + } } private interface OrderedJoinPlanItem { @@ -1099,12 +1394,14 @@ private final class DeferredFilter { private final Set requiredVars; private final int conditionCost; private final int originalIndex; + private final StatementPattern patternLocalBase; private DeferredFilter(Filter filter, Set requiredVars, int conditionCost, int originalIndex) { this.filter = filter; this.requiredVars = requiredVars; this.conditionCost = conditionCost; this.originalIndex = originalIndex; + this.patternLocalBase = FilterSelectivityKeys.patternLocalBaseForFilter(filter); } } @@ -1122,7 +1419,7 @@ private final class JoinCardinalityCache { if (cached != null) { return cached; } - double estimated = statistics.getCardinality(new Join(left, right)); + double estimated = statistics.getCardinality(new Join(left.clone(), right.clone())); row.put(right, estimated); return estimated; } @@ -1450,8 +1747,10 @@ protected double getTupleExprCost(TupleExpr tupleExpr, Map ca } double cost; - - if (hasCachedCardinality(tupleExpr)) { + Double effectiveCardinality = cardinalityMap.get(tupleExpr); + if (effectiveCardinality != null) { + cost = effectiveCardinality; + } else if (hasCachedCardinality(tupleExpr)) { cost = ((AbstractQueryModelNode) tupleExpr).getCardinality(); } else { cost = cardinalityMap.get(tupleExpr); diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java index fe84d103e0f..8a7d533ae71 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/StandardQueryOptimizerPipeline.java @@ -81,7 +81,7 @@ public Iterable getOptimizers() { UNION_SCOPE_CHANGE_OPTIMIZER, QUERY_MODEL_NORMALIZER, PROJECTION_REMOVAL_OPTIMIZER, // Make sure this is after the UnionScopeChangeOptimizer - new FilterOptimizer(evaluationStatistics, false, false), + new FilterOptimizer(evaluationStatistics, false, true), new QueryJoinOptimizer(evaluationStatistics, strategy.isTrackResultSize(), tripleSource), ITERATIVE_EVALUATION_OPTIMIZER, new FilterOptimizer(evaluationStatistics), diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategyTelemetryRegressionTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategyTelemetryRegressionTest.java index 73024de7b69..dbd42456a92 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategyTelemetryRegressionTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/DefaultEvaluationStrategyTelemetryRegressionTest.java @@ -14,15 +14,22 @@ import static org.assertj.core.api.Assertions.assertThat; import java.lang.reflect.Field; +import java.util.List; import java.util.Map; +import org.eclipse.rdf4j.common.iteration.CloseableIteration; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; import org.eclipse.rdf4j.model.vocabulary.RDF; +import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.Dataset; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.MathExpr; import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.ValueConstant; import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; import org.eclipse.rdf4j.query.algebra.evaluation.QueryValueEvaluationStep; import org.eclipse.rdf4j.query.impl.EmptyBindingSet; import org.junit.jupiter.api.AfterEach; @@ -99,6 +106,36 @@ void telemetryRegistryEvictsLeastRecentlyUsedPattern() { assertThat(presentUntouchedCount).isEqualTo(capacity - 2); } + @Test + void filterEvaluationRecordsOutcomesWhenRuntimeTelemetryDisabled() { + BindingSetAssignment assignments = new BindingSetAssignment(); + QueryBindingSet keep = new QueryBindingSet(); + keep.addBinding("name", SimpleValueFactory.getInstance().createLiteral("keep")); + QueryBindingSet drop = new QueryBindingSet(); + drop.addBinding("name", SimpleValueFactory.getInstance().createLiteral("drop")); + assignments.setBindingSets(List.of(keep, drop)); + + Filter filter = new Filter(assignments, + new Compare(Var.of("name"), + new ValueConstant(SimpleValueFactory.getInstance().createLiteral("keep")), + Compare.CompareOp.EQ)); + filter.setRuntimeTelemetryEnabled(false); + + RecordingEvaluationStatistics statistics = new RecordingEvaluationStatistics(); + DefaultEvaluationStrategy strategy = new DefaultEvaluationStrategy(new EmptyTripleSource(), null, null, 0, + statistics); + + try (CloseableIteration results = strategy.precompile(filter) + .evaluate(EmptyBindingSet.getInstance())) { + assertThat(results.hasNext()).isTrue(); + assertThat(results.next().getValue("name").stringValue()).isEqualTo("keep"); + assertThat(results.hasNext()).isFalse(); + } + + assertThat(statistics.passedCount).isEqualTo(1L); + assertThat(statistics.filteredCount).isEqualTo(1L); + } + private static StatementPattern statementPatternWithMetrics(int index) { StatementPattern statementPattern = new StatementPattern( Var.of("s", SimpleValueFactory.getInstance().createIRI("urn:test:s" + index)), @@ -138,4 +175,15 @@ private static int evictionCheckInterval() { throw new AssertionError("Unable to inspect runtime telemetry eviction check interval", e); } } + + private static final class RecordingEvaluationStatistics extends EvaluationStatistics { + private long passedCount; + private long filteredCount; + + @Override + public void recordFilterOutcome(Filter filter, long passedCount, long filteredCount) { + this.passedCount += passedCount; + this.filteredCount += filteredCount; + } + } } diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java index 349d9e97fc0..385087a56c9 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java @@ -132,6 +132,14 @@ public void stillPushesFilterWhenJoinEstimateIsNotMoreSelective() { testOptimizer(expectedQuery, query, new SelectiveJoinStatistics(200.0d, 100.0d, 20.0d)); } + @Test + public void pushesFilterWhenFilteredPatternIsMoreSelectiveThanJoinEstimate() { + String expectedQuery = "SELECT * WHERE {{?branch ?branchName . FILTER(?branchName = \"Branch 0\") } ?copy ?branch }"; + String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . FILTER(?branchName = \"Branch 0\") }"; + + testOptimizer(expectedQuery, query, new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d, 1.0d)); + } + @Test public void pushesCheapCompareBelowJoinWhileKeepingExistsAtSelectiveJoin() { String expectedQuery = "SELECT * WHERE {?s ?u . {?u ?v . FILTER(?u != ?v) } FILTER EXISTS {?v ?u .} }"; @@ -202,7 +210,7 @@ public void standardPipelineShowsInScopeFilterInsideJoinGroup() { } @Test - public void standardPipelinePreJoinFilterPassIgnoresSelectiveJoinPlacement() { + public void standardPipelinePreJoinFilterPassKeepsFilterAboveJoinWhenJoinRemainsCheaperThanFilteredPattern() { String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . " + "FILTER(?branchName = \"Branch 0\") }"; @@ -210,18 +218,46 @@ public void standardPipelinePreJoinFilterPassIgnoresSelectiveJoinPlacement() { StandardQueryOptimizerPipeline pipeline = new StandardQueryOptimizerPipeline( new StrictEvaluationStrategy(new EmptyTripleSource(), null), new EmptyTripleSource(), - new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d)); + new SelectiveJoinStatistics(10.0d, 100.0d, 20.0d, 20.0d)); for (QueryOptimizer optimizer : pipeline.getOptimizers()) { + if (optimizer instanceof org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer) { + break; + } optimizer.optimize(root, null, EmptyBindingSet.getInstance()); + } + + List filters = findAll(root, Filter.class); + assertThat(filters) + .as("Before join ordering, the pre-pass should keep the filter at the join when the filtered pattern is still less selective") + .singleElement() + .satisfies(filter -> { + assertThat(filter.getCondition()).isInstanceOf(Compare.class); + assertThat(filter.getArg()).isInstanceOf(Join.class); + }); + } + + @Test + public void standardPipelinePreJoinFilterPassStillPushesFilterBelowJoinWhenOnlyFilterSelectivityCostingIsAvailable() { + String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . " + + "FILTER(?branchName = \"Branch 0\") }"; + + QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); + StandardQueryOptimizerPipeline pipeline = new StandardQueryOptimizerPipeline( + new StrictEvaluationStrategy(new EmptyTripleSource(), null), + new EmptyTripleSource(), + new FilterSelectivityOnlyStatistics(10.0d, 100.0d, 20.0d, 20.0d)); + + for (QueryOptimizer optimizer : pipeline.getOptimizers()) { if (optimizer instanceof org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer) { break; } + optimizer.optimize(root, null, EmptyBindingSet.getInstance()); } List filters = findAll(root, Filter.class); assertThat(filters) - .as("Before join ordering, the pre-pass should always push the filter as close as possible") + .as("Before sketches are ready, the pre-pass should still push a pattern-local filter below the join") .singleElement() .satisfies(filter -> { assertThat(filter.getCondition()).isInstanceOf(Compare.class); @@ -255,16 +291,23 @@ void testOptimizer(TupleExpr expectedQuery, String actualQuery) assertEquals(expectedQuery, pq.getTupleExpr()); } - private static final class SelectiveJoinStatistics extends EvaluationStatistics { + private static class SelectiveJoinStatistics extends EvaluationStatistics { private final double joinCardinality; private final double namePatternCardinality; private final double defaultPatternCardinality; + private final double filteredNameCardinality; private SelectiveJoinStatistics(double joinCardinality, double namePatternCardinality, double defaultPatternCardinality) { + this(joinCardinality, namePatternCardinality, defaultPatternCardinality, Double.NaN); + } + + private SelectiveJoinStatistics(double joinCardinality, double namePatternCardinality, + double defaultPatternCardinality, double filteredNameCardinality) { this.joinCardinality = joinCardinality; this.namePatternCardinality = namePatternCardinality; this.defaultPatternCardinality = defaultPatternCardinality; + this.filteredNameCardinality = filteredNameCardinality; } @Override @@ -274,6 +317,10 @@ public boolean supportsJoinEstimation() { @Override public double getCardinality(TupleExpr expr) { + if (expr instanceof Filter filter && isNameFilter(filter) + && Double.isFinite(filteredNameCardinality)) { + return filteredNameCardinality; + } if (expr instanceof Join) { return joinCardinality; } @@ -288,6 +335,43 @@ public double getCardinality(TupleExpr expr) { } return super.getCardinality(expr); } + + @Override + public double estimateFilterPassRatio(Filter filter) { + if (!isNameFilter(filter) || !Double.isFinite(filteredNameCardinality) + || !(namePatternCardinality > 0.0d)) { + return -1.0d; + } + double ratio = filteredNameCardinality / namePatternCardinality; + return ratio > 0.0d && ratio <= 1.0d ? ratio : -1.0d; + } + + private boolean isNameFilter(Filter filter) { + if (!(filter.getArg()instanceof StatementPattern statementPattern)) { + return false; + } + return statementPattern.getPredicateVar() != null + && statementPattern.getPredicateVar().hasValue() + && "urn:name".equals(statementPattern.getPredicateVar().getValue().stringValue()); + } + } + + private static final class FilterSelectivityOnlyStatistics extends SelectiveJoinStatistics { + + private FilterSelectivityOnlyStatistics(double joinCardinality, double namePatternCardinality, + double defaultPatternCardinality, double filteredNameCardinality) { + super(joinCardinality, namePatternCardinality, defaultPatternCardinality, filteredNameCardinality); + } + + @Override + public boolean supportsJoinEstimation() { + return false; + } + + @Override + public boolean supportsFilterSelectivityCosting() { + return true; + } } private static List flattenJoinLeaves(TupleExpr tupleExpr) { diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java index 7356f6916fc..397a3174660 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerGreedyOuterBindingsTest.java @@ -15,6 +15,8 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -22,10 +24,14 @@ import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.ValueConstant; import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterSelectivityKeys; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; import org.junit.jupiter.api.Test; @@ -55,13 +61,219 @@ void reorderSegmentPrefersPairAnchoredByOuterBindings() throws Exception { .containsExactly(ex("hasEncounter"), ex("hasObservation"), ex("otherA"), ex("otherB")); } + @Test + void reorderSegmentAllowsDisconnectedInitialPairWhenItIsAnOrderOfMagnitudeCheaper() throws Exception { + StatementPattern connectedA = statementPattern("root", "shared", ex("connectedA")); + StatementPattern connectedB = statementPattern("shared", "leaf", ex("connectedB")); + StatementPattern disconnectedA = statementPattern("otherSubject", "otherObject", ex("disconnectedA")); + StatementPattern disconnectedB = statementPattern("thirdSubject", "thirdObject", ex("disconnectedB")); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer( + new PairwiseCostStatistics(Map.of( + pairKey(ex("connectedA"), ex("connectedB")), 20.0d, + pairKey(ex("disconnectedA"), ex("disconnectedB")), 1.0d)), + new EmptyTripleSource()); + + List reordered = invokeReorderSegment(optimizer, + List.of(connectedA, connectedB, disconnectedA, disconnectedB), + Set.of()); + + assertThat(predicates(reordered)) + .as("A disconnected pair should still be allowed when the estimated join rows are an order of magnitude lower") + .containsExactly(ex("disconnectedA"), ex("disconnectedB"), ex("connectedA"), ex("connectedB")); + } + + @Test + void reorderSegmentPrefersConnectedCandidateDuringExpansionOverDisconnectedCheaperPairwiseCost() throws Exception { + StatementPattern a = statementPattern("root", "shared", ex("pA")); + StatementPattern b = statementPattern("shared", "next", ex("pB")); + StatementPattern connected = statementPattern("next", "leaf", ex("pC")); + StatementPattern disconnected = statementPattern("otherSubject", "otherObject", ex("pD")); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer( + new PairwiseCostStatistics(Map.of( + pairKey(ex("pA"), ex("pB")), 1.0d, + pairKey(ex("pA"), ex("pC")), 80.0d, + pairKey(ex("pB"), ex("pC")), 50.0d, + pairKey(ex("pA"), ex("pD")), 2.0d, + pairKey(ex("pB"), ex("pD")), 2.0d, + pairKey(ex("pC"), ex("pD")), 3.0d, + pairKey(groupKey(ex("pA"), ex("pB")), ex("pC")), 4.0d, + pairKey(groupKey(ex("pA"), ex("pB")), ex("pD")), 60.0d)), + new EmptyTripleSource()); + + List reordered = invokeReorderSegment(optimizer, + List.of(a, b, connected, disconnected), + Set.of()); + + assertThat(predicates(reordered)) + .as("Greedy expansion should still prefer the next connected candidate over a disconnected cheaper alternative") + .containsExactly(ex("pA"), ex("pB"), ex("pC"), ex("pD")); + } + + @Test + void reorderSegmentPrefersLowerEstimatedUnlockedFilterPassRatioWhenFilterCountsTie() throws Exception { + StatementPattern lessSelectiveLeft = statementPattern("leftRoot", "leftJoin", ex("lessLeft")); + StatementPattern lessSelectiveRight = statementPattern("leftJoin", "leftValue", ex("lessRight")); + StatementPattern moreSelectiveLeft = statementPattern("rightRoot", "rightJoin", ex("moreLeft")); + StatementPattern moreSelectiveRight = statementPattern("rightJoin", "rightValue", ex("moreRight")); + + Filter lessSelectiveFilter = equalsFilter(lessSelectiveRight.clone(), "leftValue", "common"); + Filter moreSelectiveFilter = equalsFilter(moreSelectiveRight.clone(), "rightValue", "rare"); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer( + new PairwiseCostStatistics(Map.of( + pairKey(ex("lessLeft"), ex("lessRight")), 10.0d, + pairKey(ex("moreLeft"), ex("moreRight")), 10.0d), + Map.of( + filterKey(lessSelectiveFilter), 0.50d, + filterKey(moreSelectiveFilter), 0.05d)), + new EmptyTripleSource()); + + Object joinVisitor = buildJoinVisitor(optimizer); + List segment = List.of(lessSelectiveLeft, lessSelectiveRight, moreSelectiveLeft, moreSelectiveRight); + List deferredFilters = buildDeferredFilters(joinVisitor, List.of(lessSelectiveFilter, moreSelectiveFilter), + segmentBindingNames(segment)); + + List reordered = invokeReorderSegment(joinVisitor, segment, Set.of(), deferredFilters); + List reorderedPredicates = predicates(reordered); + + assertThat(reorderedPredicates.subList(0, 2)) + .as("When join rows and filter counts tie, the filtered leaf should surface first inside the winning pair") + .containsExactly(ex("moreRight"), ex("moreLeft")); + assertThat(reorderedPredicates) + .containsExactlyInAnyOrder(ex("moreLeft"), ex("moreRight"), ex("lessLeft"), ex("lessRight")); + } + + @Test + void reorderSegmentPrefersDeferredFilterTrueCostOverCheaperRawJoinRows() throws Exception { + StatementPattern filteredLeft = statementPattern("filteredRoot", "filteredJoin", ex("filteredLeft")); + StatementPattern filteredRight = statementPattern("filteredJoin", "filteredValue", ex("filteredRight")); + StatementPattern cheapLeft = statementPattern("cheapRoot", "cheapJoin", ex("cheapLeft")); + StatementPattern cheapRight = statementPattern("cheapJoin", "cheapValue", ex("cheapRight")); + + Filter selectiveFilter = equalsFilter(filteredRight.clone(), "filteredValue", "rare"); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer( + new PairwiseCostStatistics(Map.of( + pairKey(ex("filteredLeft"), ex("filteredRight")), 1000.0d, + pairKey(ex("cheapLeft"), ex("cheapRight")), 10.0d), + Map.of(filterKey(selectiveFilter), 0.001d)), + new EmptyTripleSource()); + + Object joinVisitor = buildJoinVisitor(optimizer); + List segment = List.of(filteredLeft, filteredRight, cheapLeft, cheapRight); + List deferredFilters = buildDeferredFilters(joinVisitor, List.of(selectiveFilter), + segmentBindingNames(segment)); + + List reordered = invokeReorderSegment(joinVisitor, segment, Set.of(), deferredFilters); + + assertThat(predicates(reordered).subList(0, 2)) + .as("A deferred filter should lower the true pair cost and surface the filtered leaf first") + .containsExactly(ex("filteredRight"), ex("filteredLeft")); + } + + @Test + void reorderSegmentPrefersDeferredFilterTrueCostDuringExpansion() throws Exception { + StatementPattern prefixLeft = statementPattern("root", "shared", ex("prefixLeft")); + StatementPattern prefixRight = statementPattern("shared", "mid", ex("prefixRight")); + StatementPattern selectiveCandidate = statementPattern("mid", "selectiveValue", ex("selectiveCandidate")); + StatementPattern cheapCandidate = statementPattern("mid", "cheapValue", ex("cheapCandidate")); + + Filter selectiveFilter = equalsFilter(selectiveCandidate.clone(), "selectiveValue", "rare"); + + QueryJoinOptimizer optimizer = new QueryJoinOptimizer( + new PairwiseCostStatistics(Map.of( + pairKey(ex("prefixLeft"), ex("prefixRight")), 1.0d, + pairKey(ex("prefixLeft"), ex("selectiveCandidate")), 10000.0d, + pairKey(ex("prefixRight"), ex("selectiveCandidate")), 10000.0d, + pairKey(ex("prefixLeft"), ex("cheapCandidate")), 100.0d, + pairKey(ex("prefixRight"), ex("cheapCandidate")), 100.0d, + pairKey(ex("selectiveCandidate"), ex("cheapCandidate")), 1000.0d, + pairKey(groupKey(ex("prefixLeft"), ex("prefixRight")), ex("selectiveCandidate")), 1000.0d, + pairKey(groupKey(ex("prefixLeft"), ex("prefixRight")), ex("cheapCandidate")), 10.0d), + Map.of(filterKey(selectiveFilter), 0.001d)), + new EmptyTripleSource()); + + Object joinVisitor = buildJoinVisitor(optimizer); + List deferredFilters = buildDeferredFilters(joinVisitor, List.of(selectiveFilter), + segmentBindingNames(List.of(prefixLeft, prefixRight, selectiveCandidate, cheapCandidate))); + Object cardinalityCache = newJoinCardinalityCache(joinVisitor); + TupleExpr prefixForEstimation = new Join(prefixLeft.clone(), prefixRight.clone()); + Set prefixBindingNames = segmentBindingNames(List.of(prefixLeft, prefixRight)); + + Object selectiveMetrics = buildNextGreedyChoiceMetrics(joinVisitor, prefixForEstimation, prefixBindingNames, + selectiveCandidate, deferredFilters, cardinalityCache, true); + Object cheapMetrics = buildNextGreedyChoiceMetrics(joinVisitor, prefixForEstimation, prefixBindingNames, + cheapCandidate, deferredFilters, cardinalityCache, true); + Object selectiveScore = scoreGreedyChoice(joinVisitor, selectiveMetrics, 2, -1); + Object cheapScore = scoreGreedyChoice(joinVisitor, cheapMetrics, 3, -1); + + assertThat(compareGreedyChoices(joinVisitor, selectiveScore, cheapScore)) + .as("Expansion should rank a newly unlocked selective filter by its true filtered cost") + .isLessThan(0); + } + + @Test + void reorderSegmentOrdersPatternLocalDeferredFilterLeafBeforeOtherMandatoryPatterns() throws Exception { + StatementPattern encounterType = new StatementPattern(Var.of("enc"), + Var.of("rdfType", VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")), + Var.of("encType", VF.createIRI(ex("Encounter")))); + StatementPattern handledBy = statementPattern("enc", "practitioner", ex("handledBy")); + StatementPattern recordedOn = statementPattern("enc", "date", ex("recordedOn")); + Filter dateFilter = equalsFilter(recordedOn.clone(), "date", "2024-01-01"); + + Object joinVisitor = buildJoinVisitor(new QueryJoinOptimizer(new DeferredFilterLeafCostStatistics(), + new EmptyTripleSource())); + List segment = List.of(encounterType, handledBy, recordedOn); + List deferredFilters = buildDeferredFilters(joinVisitor, List.of(dateFilter), segmentBindingNames(segment)); + + List reordered = invokeReorderSegment(joinVisitor, segment, Set.of(), deferredFilters); + + assertThat(predicates(reordered)) + .as("The recordedOn branch should win once its local filter true cost is priced inside greedy ordering") + .containsExactly(ex("recordedOn"), ex("handledBy"), + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + } + + @Test + void reorderSegmentOrdersPatternLocalDeferredFilterLeafWhenOnlyFilterSelectivityCostingIsAvailable() + throws Exception { + StatementPattern encounterType = new StatementPattern(Var.of("enc"), + Var.of("rdfType", VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")), + Var.of("encType", VF.createIRI(ex("Encounter")))); + StatementPattern handledBy = statementPattern("enc", "practitioner", ex("handledBy")); + StatementPattern recordedOn = statementPattern("enc", "date", ex("recordedOn")); + Filter dateFilter = equalsFilter(recordedOn.clone(), "date", "2024-01-01"); + + Object joinVisitor = buildJoinVisitor(new QueryJoinOptimizer(new DeferredFilterOnlyStatistics(), + new EmptyTripleSource())); + List segment = List.of(encounterType, handledBy, recordedOn); + List deferredFilters = buildDeferredFilters(joinVisitor, List.of(dateFilter), segmentBindingNames(segment)); + + List reordered = invokeReorderSegment(joinVisitor, segment, Set.of(), deferredFilters); + + assertThat(predicates(reordered)) + .as("Filter-aware greedy reordering should still run before sketches are ready") + .containsExactly(ex("recordedOn"), ex("handledBy"), + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + } + @SuppressWarnings("unchecked") private static List invokeReorderSegment(QueryJoinOptimizer optimizer, List segment, Set outerBoundVars) throws Exception { Object joinVisitor = buildJoinVisitor(optimizer); - Method reorderSegment = joinVisitor.getClass().getDeclaredMethod("reorderSegment", List.class, Set.class); + return invokeReorderSegment(joinVisitor, segment, outerBoundVars, List.of()); + } + + @SuppressWarnings("unchecked") + private static List invokeReorderSegment(Object joinVisitor, List segment, + Set outerBoundVars, List deferredFilters) throws Exception { + Method reorderSegment = joinVisitor.getClass() + .getDeclaredMethod("reorderSegment", List.class, Set.class, + List.class); reorderSegment.setAccessible(true); - return (List) reorderSegment.invoke(joinVisitor, segment, outerBoundVars); + return (List) reorderSegment.invoke(joinVisitor, segment, outerBoundVars, deferredFilters); } private static Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { @@ -72,12 +284,72 @@ private static Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exce return constructor.newInstance(optimizer); } + @SuppressWarnings("unchecked") + private static List buildDeferredFilters(Object joinVisitor, List filters, Set scopeBindingNames) + throws Exception { + Method buildDeferredFilters = joinVisitor.getClass() + .getDeclaredMethod("buildDeferredFilters", List.class, + Set.class); + buildDeferredFilters.setAccessible(true); + return (List) buildDeferredFilters.invoke(joinVisitor, filters, scopeBindingNames); + } + + private static Object newJoinCardinalityCache(Object joinVisitor) throws Exception { + for (Class nestedClass : joinVisitor.getClass().getDeclaredClasses()) { + if ("JoinCardinalityCache".equals(nestedClass.getSimpleName())) { + Constructor constructor = nestedClass.getDeclaredConstructor(joinVisitor.getClass()); + constructor.setAccessible(true); + return constructor.newInstance(joinVisitor); + } + } + throw new NoSuchMethodException("JoinCardinalityCache"); + } + + private static Object buildNextGreedyChoiceMetrics(Object joinVisitor, TupleExpr prefixForEstimation, + Set prefixBindingNames, TupleExpr candidate, List deferredFilters, Object cardinalityCache, + boolean hasConnectedCandidate) throws Exception { + Method method = joinVisitor.getClass() + .getDeclaredMethod("buildNextGreedyChoiceMetrics", TupleExpr.class, + Set.class, TupleExpr.class, List.class, cardinalityCache.getClass(), boolean.class); + method.setAccessible(true); + return method.invoke(joinVisitor, prefixForEstimation, prefixBindingNames, candidate, deferredFilters, + cardinalityCache, hasConnectedCandidate); + } + + private static Object scoreGreedyChoice(Object joinVisitor, Object metrics, int stableIndex, + int secondaryStableIndex) throws Exception { + Method method = joinVisitor.getClass() + .getDeclaredMethod("scoreGreedyChoice", metrics.getClass(), int.class, + int.class); + method.setAccessible(true); + return method.invoke(joinVisitor, metrics, stableIndex, secondaryStableIndex); + } + + private static int compareGreedyChoices(Object joinVisitor, Object left, Object right) throws Exception { + Method method = joinVisitor.getClass() + .getDeclaredMethod("compareGreedyChoices", left.getClass(), + right.getClass()); + method.setAccessible(true); + return (int) method.invoke(joinVisitor, left, right); + } + + private static Set segmentBindingNames(List segment) { + return segment.stream() + .flatMap(tupleExpr -> tupleExpr.getBindingNames().stream()) + .collect(Collectors.toSet()); + } + private static StatementPattern statementPattern(String subjectVarName, String objectVarName, String predicateIri) { return new StatementPattern(Var.of(subjectVarName), Var.of(subjectVarName + "Predicate", VF.createIRI(predicateIri)), Var.of(objectVarName)); } + private static Filter equalsFilter(StatementPattern pattern, String varName, String value) { + return new Filter(pattern, + new Compare(Var.of(varName), new ValueConstant(VF.createLiteral(value)), Compare.CompareOp.EQ)); + } + private static List predicates(List tupleExprs) { return tupleExprs.stream() .map(QueryJoinOptimizerGreedyOuterBindingsTest::predicate) @@ -96,15 +368,53 @@ private static String pairKey(String left, String right) { return right + "|" + left; } + private static String groupKey(String... predicates) { + ArrayList normalized = new ArrayList<>(List.of(predicates)); + Collections.sort(normalized); + return String.join("+", normalized); + } + + private static String tupleExprKey(TupleExpr expr) { + ArrayList predicates = new ArrayList<>(); + collectPredicates(expr, predicates); + if (predicates.isEmpty()) { + return null; + } + Collections.sort(predicates); + return String.join("+", predicates); + } + + private static void collectPredicates(TupleExpr expr, List predicates) { + if (expr instanceof Join) { + Join join = (Join) expr; + collectPredicates(join.getLeftArg(), predicates); + collectPredicates(join.getRightArg(), predicates); + return; + } + if (expr instanceof StatementPattern) { + predicates.add(predicate(expr)); + } + } + private static String ex(String localName) { return "http://example.com/" + localName; } + private static String filterKey(Filter filter) { + return FilterSelectivityKeys.filterKeyFor(filter.getCondition()); + } + private static final class PairwiseCostStatistics extends EvaluationStatistics { private final Map joinCosts; + private final Map filterPassRatios; private PairwiseCostStatistics(Map joinCosts) { + this(joinCosts, Map.of()); + } + + private PairwiseCostStatistics(Map joinCosts, Map filterPassRatios) { this.joinCosts = joinCosts; + this.filterPassRatios = filterPassRatios; } @Override @@ -116,13 +426,88 @@ public boolean supportsJoinEstimation() { public double getCardinality(TupleExpr expr) { if (expr instanceof Join) { Join join = (Join) expr; - return joinCosts.getOrDefault(pairKey(predicate(join.getLeftArg()), predicate(join.getRightArg())), - 1000.0d); + String leftKey = tupleExprKey(join.getLeftArg()); + String rightKey = tupleExprKey(join.getRightArg()); + if (leftKey != null && rightKey != null) { + return joinCosts.getOrDefault(pairKey(leftKey, rightKey), 1000.0d); + } + return 1000.0d; } if (expr instanceof StatementPattern) { return 10.0d; } return super.getCardinality(expr); } + + @Override + public double estimateFilterPassRatio(Filter filter) { + return filterPassRatios.getOrDefault(filterKey(filter), -1.0d); + } + } + + private static class DeferredFilterLeafCostStatistics extends EvaluationStatistics { + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + if (expr instanceof Filter filter && filter.getArg()instanceof StatementPattern statementPattern) { + if (predicate(statementPattern).equals(ex("recordedOn"))) { + return 0.1d; + } + return getCardinality(statementPattern); + } + if (expr instanceof Join join) { + String left = tupleExprKey(join.getLeftArg()); + String right = tupleExprKey(join.getRightArg()); + if (left != null && right != null) { + String pairKey = pairKey(left, right); + if (pairKey.equals(pairKey(ex("handledBy"), "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"))) { + return 1.0d; + } + if (pairKey.equals(pairKey(ex("handledBy"), ex("recordedOn"))) + || pairKey.equals(pairKey(ex("recordedOn"), + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"))) { + return 10.0d; + } + } + return 1000.0d; + } + if (expr instanceof StatementPattern statementPattern) { + String predicate = predicate(statementPattern); + if (predicate.equals(ex("handledBy"))) { + return 1.0d; + } + if (predicate.equals(ex("recordedOn"))) { + return 100.0d; + } + if (predicate.equals("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")) { + return 10.0d; + } + } + return super.getCardinality(expr); + } + + @Override + public double estimateFilterPassRatio(Filter filter) { + return filter.getArg()instanceof StatementPattern statementPattern + && predicate(statementPattern).equals(ex("recordedOn")) ? 0.01d : -1.0d; + } + } + + private static final class DeferredFilterOnlyStatistics extends DeferredFilterLeafCostStatistics { + + @Override + public boolean supportsJoinEstimation() { + return false; + } + + @Override + public boolean supportsFilterSelectivityCosting() { + return true; + } } } diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java index afb008229e3..5008c3ae608 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java @@ -19,6 +19,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -38,6 +39,7 @@ import org.eclipse.rdf4j.query.algebra.ExtensionElem; import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.Projection; import org.eclipse.rdf4j.query.algebra.QueryModelNode; import org.eclipse.rdf4j.query.algebra.QueryRoot; import org.eclipse.rdf4j.query.algebra.StatementPattern; @@ -400,7 +402,7 @@ public void optimizeUsesDeferredFilterToAnchorGreedyPrefix() { QueryRoot root = new QueryRoot(new Join(new Join(encounterObservationFilter, unrelatedA), unrelatedB)); new QueryJoinOptimizer( new ParsedQueryPairwiseJoinStatistics(Map.of( - pairKey(ex("hasEncounter"), ex("hasObservation")), 5.0d, + pairKey(ex("hasEncounter"), ex("hasObservation")), 1.5d, pairKey(ex("otherA"), ex("otherB")), 1.0d)), new EmptyTripleSource()).optimize(root, null, null); @@ -431,7 +433,7 @@ public void optimizeSchedulesDeferredExistsByCorrelatedVarsAndOrdersFiltersByCos QueryRoot root = new QueryRoot(new Join(new Join(filterChain, unrelatedA), unrelatedB)); new QueryJoinOptimizer( new ParsedQueryPairwiseJoinStatistics(Map.of( - pairKey(ex("hasEncounter"), ex("hasObservation")), 5.0d, + pairKey(ex("hasEncounter"), ex("hasObservation")), 1.5d, pairKey(ex("otherA"), ex("otherB")), 1.0d)), new EmptyTripleSource()).optimize(root, null, null); @@ -473,6 +475,81 @@ public void optimizeKeepsDeferredFilterInsideSegmentBeforeExtensionSeparator() { assertThat(getPredicateValue(outerLeaves.get(2))).isEqualTo(ex("pD")); } + @Test + public void optimizePrefersConnectedInitialPairOverNotExistsCrossJoinInPharmaQuery() { + String query = String.join("\n", + "PREFIX pharma: ", + "PREFIX xsd: ", + "SELECT ?drug ?disease WHERE {", + " ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm .", + " ?arm pharma:armDrug ?drug ; pharma:hasResult ?result .", + " ?result pharma:responseRate ?rate .", + " FILTER(?rate > 0.6)", + " FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . }", + " OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) }", + " FILTER(?optTarget != )", + "}"); + + QueryRoot root = optimizeWithStatistics(query, + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(pharma("studiesDisease"), pharma("armDrug")), 1.0d, + pairKey(pharma("studiesDisease"), pharma("hasArm")), 4.0d, + pairKey(pharma("hasArm"), pharma("armDrug")), 6.0d, + pairKey(pharma("armDrug"), pharma("hasResult")), 7.0d, + pairKey(pharma("hasResult"), pharma("responseRate")), 9.0d, + pairKey("http://www.w3.org/1999/02/22-rdf-syntax-ns#type", pharma("studiesDisease")), 10.0d, + pairKey("http://www.w3.org/1999/02/22-rdf-syntax-ns#type", pharma("hasArm")), 12.0d))); + + assertThat(leadingPrefixPredicates(root.getArg(), 2)) + .as("A NOT EXISTS unlock should not force a cross join when a moderately more expensive connected pair is available") + .containsExactlyInAnyOrder(pharma("studiesDisease"), pharma("hasArm")); + } + + @Test + public void optimizeLetsCheapFilterBonusBeatSlightlyCheaperConnectedAlternative() { + StatementPattern a = statementPattern("s", "a", ex("pA")); + StatementPattern b = statementPattern("a", "b", ex("pB")); + Filter filteredPair = filter(new Join(a, b), "s", "b"); + StatementPattern c = statementPattern("b", "c", ex("pC")); + StatementPattern x = statementPattern("other", "x", ex("pX")); + + QueryRoot root = new QueryRoot(new Join(new Join(filteredPair, c), x)); + new QueryJoinOptimizer( + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(ex("pA"), ex("pB")), 8.0d, + pairKey(ex("pB"), ex("pC")), 6.0d, + pairKey(ex("pC"), ex("pX")), 20.0d)), + new EmptyTripleSource()).optimize(root, null, null); + + assertThat(leadingPrefixPredicates(root.getArg(), 2)) + .as("A newly unlocked cheap filter should be able to overcome a slightly cheaper connected alternative") + .containsExactlyInAnyOrder(ex("pA"), ex("pB")); + } + + @Test + public void optimizeDiscountsNotExistsUnlockAgainstConnectedInitialPair() { + String query = String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?trial ex:pDisease ?disease .", + " ?trial ex:pArm ?arm .", + " ?arm ex:pDrug ?drug .", + " FILTER NOT EXISTS { ?drug ex:pIndicated ?disease . }", + " ?arm ex:pResult ?result .", + "}"); + + QueryRoot root = optimizeWithStatistics(query, + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(ex("pDisease"), ex("pDrug")), 1.0d, + pairKey(ex("pDisease"), ex("pArm")), 4.0d, + pairKey(ex("pArm"), ex("pDrug")), 6.0d, + pairKey(ex("pDrug"), ex("pResult")), 8.0d))); + + assertThat(leadingPrefixPredicates(root.getArg(), 2)) + .as("An expensive NOT EXISTS unlock should not dominate a substantially better connected first join") + .containsExactlyInAnyOrder(ex("pDisease"), ex("pArm")); + } + @Override public QueryJoinOptimizer getOptimizer() { return new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()); @@ -573,6 +650,38 @@ private static void collectJoinLeavesKeepingScopeBarriers(TupleExpr tupleExpr, L leaves.add(tupleExpr); } + private static List leadingPrefixPredicates(TupleExpr tupleExpr, int limit) { + TupleExpr prefix = flattenJoinLeavesKeepingScopeBarriers(unwrapQueryRoot(tupleExpr)).get(0); + while (prefix instanceof Filter) { + prefix = unwrapQueryRoot(((Filter) prefix).getArg()); + } + ArrayList predicates = new ArrayList<>(); + unwrapQueryRoot(prefix).visit(new AbstractQueryModelVisitor() { + @Override + public void meet(StatementPattern statementPattern) { + predicates.add(statementPattern.getPredicateVar().getValue().stringValue()); + } + }); + return predicates.stream().limit(limit).collect(Collectors.toList()); + } + + private static TupleExpr unwrapQueryRoot(TupleExpr tupleExpr) { + while (tupleExpr instanceof QueryRoot || tupleExpr instanceof Projection) { + if (tupleExpr instanceof QueryRoot) { + tupleExpr = ((QueryRoot) tupleExpr).getArg(); + } else { + tupleExpr = ((Projection) tupleExpr).getArg(); + } + } + return tupleExpr; + } + + private static QueryRoot optimizeWithStatistics(String query, EvaluationStatistics statistics) { + QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); + return root; + } + private Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { Class joinVisitorClass = Class .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); @@ -628,10 +737,36 @@ private static String pairKey(String left, String right) { return right + "|" + left; } + private static String tupleExprKey(TupleExpr expr) { + ArrayList predicates = new ArrayList<>(); + collectTupleExprPredicates(expr, predicates); + if (predicates.isEmpty()) { + return null; + } + Collections.sort(predicates); + return String.join("+", predicates); + } + + private static void collectTupleExprPredicates(TupleExpr expr, List predicates) { + if (expr instanceof Join) { + Join join = (Join) expr; + collectTupleExprPredicates(join.getLeftArg(), predicates); + collectTupleExprPredicates(join.getRightArg(), predicates); + return; + } + if (expr instanceof StatementPattern) { + predicates.add(getPredicateValue(expr)); + } + } + private static String ex(String localName) { return "http://example.com/" + localName; } + private static String pharma(String localName) { + return "http://example.com/theme/pharma/" + localName; + } + private static final class PairwiseJoinStatistics extends EvaluationStatistics { @Override public boolean supportsJoinEstimation() { @@ -713,8 +848,8 @@ public boolean supportsJoinEstimation() { public double getCardinality(TupleExpr expr) { if (expr instanceof Join) { Join join = (Join) expr; - String left = predicate(join.getLeftArg()); - String right = predicate(join.getRightArg()); + String left = tupleExprKey(join.getLeftArg()); + String right = tupleExprKey(join.getRightArg()); if (left != null && right != null) { return joinCosts.getOrDefault(pairKey(left, right), 1000.0d); } diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 3f727f3a213..0273298e846 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -323,6 +323,7 @@ enum SketchPlannerPath { private volatile boolean running; private Thread refresher; private volatile JoinStatsProvider learnedStatsProvider; + private volatile PatternFilterSamplingEstimator patternFilterSamplingEstimator; private volatile boolean robustSynopsisFresh; private volatile int lastRobustSynopsisSpillSegmentCount; private volatile SketchPlannerPath lastJoinOrderPlannerPath = SketchPlannerPath.ROBUST_NOT_READY; @@ -1655,7 +1656,7 @@ private void forEach(BatchUpdateConsumer consumer) { private long residentSketchBytes; private static final int INCREMENTAL_BATCH_SIZE = 32 * 1024; - private static final int REBUILD_BATCH_SIZE = 4*1024 * 1024; + private static final int REBUILD_BATCH_SIZE = 4 * 1024 * 1024; private final Object incrementalBufferLock = new Object(); private IngestEvent[] incrementalBuffer = new IngestEvent[INCREMENTAL_BATCH_SIZE * 2]; private int incrementalBufferCount; @@ -1930,6 +1931,15 @@ public void setLearnedStatsProvider(JoinStatsProvider learnedStatsProvider) { this.learnedStatsProvider = learnedStatsProvider; } + public void setPatternFilterSamplingEstimator(PatternFilterSamplingEstimator patternFilterSamplingEstimator) { + this.patternFilterSamplingEstimator = patternFilterSamplingEstimator; + } + + @FunctionalInterface + public interface PatternFilterSamplingEstimator { + double estimateFilterPassRatio(Filter filter, StatementPattern pattern); + } + /** * Install a store-provided gate for background rebuilds. Returning {@code false} pauses refresh-thread rebuild * attempts until the gate opens again. @@ -2120,10 +2130,11 @@ public synchronized long rebuildOnceSlow() { // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); rebuildBatchSize = 0; - System.out.println( - "RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + ", seen " - + seen/1000/1000 + " million triples so far. Elapsed: " + (System.currentTimeMillis() - l) / 1000 - + " s."); + System.out.println( + "RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + ", seen " + + seen / 1000 / 1000 + " million triples so far. Elapsed: " + + (System.currentTimeMillis() - l) / 1000 + + " s."); } // if (seen > 0 && seen % ROBUST_HEADROOM_CHECK_INTERVAL == 0 @@ -2157,7 +2168,6 @@ public synchronized long rebuildOnceSlow() { // } // } - } if (seen > 0) { if (rebuildBatchSize > 0) { @@ -2267,27 +2277,27 @@ && hasSnapshotAvailable(persistenceFile)) { try { ingestIncremental(s, p, o, c, false); - while (true) { - long epoch = rebuildEpoch.get(); - if ((epoch & 1L) != 0L) { - synchronized (bufA) { - ingest(bufA, st, false); - } - synchronized (bufB) { - ingest(bufB, st, false); - } - break; + while (true) { + long epoch = rebuildEpoch.get(); + if ((epoch & 1L) != 0L) { + synchronized (bufA) { + ingest(bufA, st, false); + } + synchronized (bufB) { + ingest(bufB, st, false); } + break; + } - State target = current; - synchronized (target) { - if (rebuildEpoch.get() != epoch) { - continue; - } - ingest(target, st, false); - break; + State target = current; + synchronized (target) { + if (rebuildEpoch.get() != epoch) { + continue; } + ingest(target, st, false); + break; } + } } catch (MemoryPressureAbort | OutOfMemoryError oom) { logger.warn("Out of memory while applying incremental estimator update; unloading sketches", oom); @@ -2354,7 +2364,8 @@ private void ingestIncremental(String s, String p, String o, String c, boolean i ensureIncrementalBufferCapacity(incrementalBufferCount + 1); incrementalBuffer[incrementalBufferCount++] = event; if (incrementalBufferCount >= INCREMENTAL_BATCH_SIZE) { - System.out.println("RdfJoinEstimator: Flushing incremental batch of " + incrementalBufferCount + " events. Seen triples: " + System.out.println("RdfJoinEstimator: Flushing incremental batch of " + incrementalBufferCount + + " events. Seen triples: " + seenTriples); batch = drainIncrementalBufferLocked(); batchSize = batch.length; @@ -3517,16 +3528,6 @@ private static Method resolveHashUpdateMethod() { } } - private static Method resolveAccessibleMethod(Class owner, String methodName, Class... parameterTypes) { - try { - Method method = owner.getDeclaredMethod(methodName, parameterTypes); - method.setAccessible(true); - return method; - } catch (NoSuchMethodException e) { - throw new ExceptionInInitializerError(e); - } - } - private static Field resolveHeapAlphaField(String fieldName) { try { Class heapAlphaClass = Class.forName("org.apache.datasketches.theta.HeapAlphaSketch"); @@ -3555,61 +3556,6 @@ private static void hashUpdateRaw(UpdateSketch sketch, long hash) throws IOExcep } } - private static long invokeLongMethod(Method method, Object target) { - try { - Object value = method.invoke(target); - if (!(value instanceof Number number)) { - throw new IllegalStateException("Expected numeric result from " + method); - } - return Math.max(0L, number.longValue()); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to invoke " + method, e); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException runtimeException) { - throw runtimeException; - } - if (cause instanceof Error error) { - throw error; - } - throw new IllegalStateException("Unable to invoke " + method, cause); - } - } - - private static void invokeVoidMethod(Method method, Object target, Object... args) { - try { - method.invoke(target, args); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to invoke " + method, e); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException runtimeException) { - throw runtimeException; - } - if (cause instanceof Error error) { - throw error; - } - throw new IllegalStateException("Unable to invoke " + method, cause); - } - } - - private static Object invokeObjectMethod(Method method, Object target, Object... args) { - try { - return method.invoke(target, args); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to invoke " + method, e); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException runtimeException) { - throw runtimeException; - } - if (cause instanceof Error error) { - throw error; - } - throw new IllegalStateException("Unable to invoke " + method, cause); - } - } - private static long align(long bytes) { return (bytes + 7L) & ~7L; } @@ -3725,6 +3671,14 @@ private void recordRobustCardinalityPath(SketchPlannerPath plannerPath) { return resolveFilterMultiplier(filter, pattern); } + public double estimateFilterPassRatio(Filter filter) { + StatementPattern pattern = basePatternForFilter(filter); + if (pattern == null) { + return -1.0d; + } + return resolveFilterMultiplier(filter, pattern); + } + private TuplePlanEstimate toPlannerTupleEstimate(TupleExpr tupleExpr, Set initiallyBoundVars) { TuplePlanEstimate estimate; if (tupleExpr instanceof BindingSetAssignment) { @@ -5287,24 +5241,21 @@ private String lookupKey(ValueExpr valueExpr, Set currentlyBoundVars) { } private double resolveFilterMultiplier(Filter filter, StatementPattern pattern) { - if (!FilterSelectivityKeys.conditionIntersectsPattern(filter.getCondition(), pattern)) { - return 1.0d; - } - double learnedMultiplier = resolveLearnedFilterMultiplier(filter, pattern); - if (learnedMultiplier > 0.0d) { - return learnedMultiplier; - } - double heuristicMultiplier = estimateHeuristicFilterMultiplier(filter, pattern); - if (heuristicMultiplier > 0.0d) { - return heuristicMultiplier; - } - return 1.0d; + double knownMultiplier = estimateKnownFilterMultiplier(filter, pattern); + return knownMultiplier > 0.0d ? knownMultiplier : 1.0d; } private double resolveFilterMultiplier(Filter filter, TuplePlanEstimate estimate) { if (filter.getCondition() == null || estimate == null) { return 1.0d; } + StatementPattern patternLocalBase = basePatternForFilter(filter); + if (patternLocalBase != null) { + double knownMultiplier = estimateKnownFilterMultiplier(filter, patternLocalBase); + if (knownMultiplier > 0.0d) { + return knownMultiplier; + } + } Set conditionVars = VarNameCollector.process(filter.getCondition()); if (conditionVars.isEmpty()) { return 1.0d; @@ -5340,6 +5291,39 @@ private double resolveLearnedFilterMultiplier(Filter filter, StatementPattern pa return -1.0d; } + private double resolveSampledFilterMultiplier(Filter filter, StatementPattern pattern) { + PatternFilterSamplingEstimator samplingEstimator = patternFilterSamplingEstimator; + if (samplingEstimator == null || filter == null || filter.getCondition() == null || pattern == null) { + return -1.0d; + } + double ratio = samplingEstimator.estimateFilterPassRatio(filter, pattern); + return isValidFilterMultiplier(ratio) ? normalizeFilterMultiplier(ratio) : -1.0d; + } + + private double estimateKnownFilterMultiplier(Filter filter, StatementPattern pattern) { + if (filter == null || filter.getCondition() == null || pattern == null + || !FilterSelectivityKeys.conditionIntersectsPattern(filter.getCondition(), pattern)) { + return -1.0d; + } + double learnedMultiplier = resolveLearnedFilterMultiplier(filter, pattern); + if (learnedMultiplier > 0.0d) { + return learnedMultiplier; + } + double sampledMultiplier = resolveSampledFilterMultiplier(filter, pattern); + if (sampledMultiplier > 0.0d) { + return sampledMultiplier; + } + double heuristicMultiplier = estimateHeuristicFilterMultiplier(filter, pattern); + if (heuristicMultiplier > 0.0d) { + return heuristicMultiplier; + } + return -1.0d; + } + + private StatementPattern basePatternForFilter(Filter filter) { + return FilterSelectivityKeys.patternLocalBaseForFilter(filter); + } + private double estimateHeuristicFilterMultiplier(Filter filter, StatementPattern pattern) { if (filter.getCondition() == null) { return -1.0d; diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java index 0347576572e..f9cbfb0dead 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java @@ -29,7 +29,9 @@ import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterSelectivityKeys; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.PatternKey; import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.Component; import org.eclipse.rdf4j.sail.lmdb.model.LmdbValue; @@ -52,6 +54,7 @@ class LmdbEvaluationStatistics extends EvaluationStatistics implements JoinOrder private final int tripleStoreIdentity; private final Map cardinalityCache = new ConcurrentHashMap<>(); private final SketchBasedJoinEstimator sketchBasedJoinEstimator; + private final LmdbFilterSelectivityStats filterSelectivityStats; private final SketchBasedJoinEstimator.JoinOrderWorkAdjuster joinOrderWorkAdjuster; private volatile long joinSupportCacheExpiryMs = Long.MIN_VALUE; private volatile long joinSupportCacheRevisionId = Long.MIN_VALUE; @@ -59,10 +62,16 @@ class LmdbEvaluationStatistics extends EvaluationStatistics implements JoinOrder public LmdbEvaluationStatistics(ValueStore valueStore, TripleStore tripleStore, SketchBasedJoinEstimator sketchBasedJoinEstimator) { + this(valueStore, tripleStore, sketchBasedJoinEstimator, null); + } + + public LmdbEvaluationStatistics(ValueStore valueStore, TripleStore tripleStore, + SketchBasedJoinEstimator sketchBasedJoinEstimator, LmdbFilterSelectivityStats filterSelectivityStats) { this.valueStore = valueStore; this.tripleStore = tripleStore; this.tripleStoreIdentity = System.identityHashCode(tripleStore); this.sketchBasedJoinEstimator = sketchBasedJoinEstimator; + this.filterSelectivityStats = filterSelectivityStats; this.joinOrderWorkAdjuster = this::adjustJoinOrderWorkRows; } @@ -82,6 +91,11 @@ public boolean supportsJoinEstimation() { return ready; } + @Override + public boolean supportsFilterSelectivityCosting() { + return true; + } + @Override public Optional planJoinOrder(List args, Set initiallyBoundVars, Algorithm algorithm) { @@ -143,6 +157,36 @@ protected CardinalityCalculator createCardinalityCalculator() { return new LmdbCardinalityCalculator(); } + @Override + public double estimateFilterPassRatio(Filter filter) { + double ratio = sketchBasedJoinEstimator.estimateFilterPassRatio(filter); + return Double.isFinite(ratio) && ratio > 0.0d && ratio <= 1.0d ? ratio : -1.0d; + } + + @Override + public void recordFilterOutcome(Filter filter, long passedCount, long filteredCount) { + if (filterSelectivityStats == null || filter == null || filter.getCondition() == null + || (passedCount <= 0L && filteredCount <= 0L)) { + return; + } + + StatementPattern pattern = basePatternForFilter(filter); + if (pattern == null) { + return; + } + PatternKey patternKey = FilterSelectivityKeys.patternKeyFor(pattern); + if (patternKey == null) { + return; + } + filterSelectivityStats.recordFilterOutcome(patternKey, + FilterSelectivityKeys.filterKeyFor(filter.getCondition()), + passedCount, filteredCount); + } + + private StatementPattern basePatternForFilter(Filter filter) { + return FilterSelectivityKeys.patternLocalBaseForFilter(filter); + } + protected class LmdbCardinalityCalculator extends CardinalityCalculator { @Override @@ -181,7 +225,20 @@ public void meet(Filter node) { } } - super.meet(node); + node.getArg().visit(this); + double inputRows = this.cardinality; + + double passRatio = LmdbEvaluationStatistics.this.estimateFilterPassRatio(node); + if (Double.isFinite(passRatio) && passRatio > 0.0d && passRatio <= 1.0d + && Double.isFinite(inputRows) && inputRows >= 0.0d) { + double filteredRows = inputRows * passRatio; + if (Double.isFinite(filteredRows) && filteredRows >= 0.0d) { + this.cardinality = filteredRows; + return; + } + } + + this.cardinality = inputRows; } @Override diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java new file mode 100644 index 00000000000..d90b2daa7ca --- /dev/null +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java @@ -0,0 +1,647 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.order.StatementOrder; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.QueryEvaluationException; +import org.eclipse.rdf4j.query.algebra.CompareAll; +import org.eclipse.rdf4j.query.algebra.CompareAny; +import org.eclipse.rdf4j.query.algebra.Exists; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryValueEvaluationStep; +import org.eclipse.rdf4j.query.algebra.evaluation.TripleSource; +import org.eclipse.rdf4j.query.algebra.evaluation.ValueExprEvaluationException; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.DefaultEvaluationStrategy; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.QueryEvaluationContext; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterSelectivityKeys; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinStatsProvider; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.PatternKey; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractSimpleQueryModelVisitor; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.eclipse.rdf4j.sail.lmdb.TxnManager.Txn; +import org.eclipse.rdf4j.sail.lmdb.model.LmdbValue; + +class LmdbFilterSelectivityStats + implements JoinStatsProvider, SketchBasedJoinEstimator.PatternFilterSamplingEstimator { + + private static final SimpleValueFactory VF = SimpleValueFactory.getInstance(); + private static final String SIDECAR_SUFFIX = ".filters"; + private static final int PERSIST_VERSION = 1; + private static final int SAMPLE_SCAN_BUDGET = 4096; + private static final int SAMPLE_RESERVOIR_SIZE = 256; + private static final long MISSING_VALUE_ID = Long.MIN_VALUE; + + private final TripleStore tripleStore; + private final ValueStore valueStore; + private final Path estimatorPath; + private final Path sidecarPath; + + private final Map learnedByFilter = new HashMap<>(); + private final Map learnedByPattern = new HashMap<>(); + private final Map sampledByFilter = new HashMap<>(); + + private boolean dirty; + + LmdbFilterSelectivityStats(Path estimatorPath, TripleStore tripleStore, ValueStore valueStore) { + this.estimatorPath = Objects.requireNonNull(estimatorPath, "estimatorPath"); + this.sidecarPath = estimatorPath.resolveSibling(estimatorPath.getFileName().toString() + SIDECAR_SUFFIX); + this.tripleStore = Objects.requireNonNull(tripleStore, "tripleStore"); + this.valueStore = Objects.requireNonNull(valueStore, "valueStore"); + loadIfPresent(); + } + + @Override + public synchronized void reset() { + if (learnedByFilter.isEmpty() && learnedByPattern.isEmpty() && sampledByFilter.isEmpty()) { + return; + } + learnedByFilter.clear(); + learnedByPattern.clear(); + sampledByFilter.clear(); + dirty = true; + } + + void recordStoreMutation() { + reset(); + } + + @Override + public synchronized void recordCall(PatternKey key) { + // not used for filter selectivity + } + + @Override + public synchronized void recordResults(PatternKey key, long resultCount) { + // not used for filter selectivity + } + + @Override + public synchronized void recordFilterOutcome(PatternKey key, String filterKey, long passedCount, + long filteredCount) { + if (key == null || filterKey == null || (passedCount <= 0L && filteredCount <= 0L)) { + return; + } + + PatternFilterKey patternFilterKey = new PatternFilterKey(key, filterKey); + learnedByFilter.computeIfAbsent(patternFilterKey, ignored -> new LearnedCounts()) + .add(passedCount, filteredCount); + learnedByPattern.computeIfAbsent(key, ignored -> new LearnedCounts()).add(passedCount, filteredCount); + dirty = true; + } + + @Override + public synchronized double getFilterPassRatio(PatternKey key, String filterKey) { + LearnedCounts counts = learnedByFilter.get(new PatternFilterKey(key, filterKey)); + return counts == null ? -1.0d : counts.passRatio(); + } + + @Override + public synchronized double getPatternPassRatio(PatternKey key) { + LearnedCounts counts = learnedByPattern.get(key); + return counts == null ? -1.0d : counts.passRatio(); + } + + @Override + public synchronized void seedIfAbsent(PatternKey key, double defaultCardinality, long priorCalls) { + // not used for filter selectivity + } + + @Override + public synchronized double getAverageResults(PatternKey key) { + return -1.0d; + } + + @Override + public synchronized boolean hasStats(PatternKey key) { + LearnedCounts counts = learnedByPattern.get(key); + return counts != null && counts.total() > 0L; + } + + @Override + public synchronized long getTotalCalls() { + return 0L; + } + + @Override + public double estimateFilterPassRatio(Filter filter, StatementPattern pattern) { + PatternFilterKey key = samplingKey(filter, pattern); + if (key == null) { + return -1.0d; + } + + synchronized (this) { + SampledPassRatio cached = sampledByFilter.get(key); + if (cached != null) { + return cached.passRatio; + } + } + + if (!supportsSampling(filter, pattern)) { + return -1.0d; + } + + SampledPassRatio sampled = sampleFilterPassRatio(filter, pattern); + if (sampled == null || !isValidPassRatio(sampled.passRatio)) { + return -1.0d; + } + + synchronized (this) { + sampledByFilter.put(key, sampled); + dirty = true; + } + return sampled.passRatio; + } + + synchronized void persistIfDirty() { + if (!dirty) { + return; + } + + SnapshotRevision estimatorRevision = currentEstimatorRevision(); + if (estimatorRevision == null) { + return; + } + + Path tempPath = sidecarPath.resolveSibling(sidecarPath.getFileName().toString() + ".tmp"); + try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(tempPath))) { + out.writeInt(PERSIST_VERSION); + estimatorRevision.writeTo(out); + out.writeInt(learnedByFilter.size()); + for (var entry : learnedByFilter.entrySet()) { + entry.getKey().writeTo(out); + entry.getValue().writeTo(out); + } + out.writeInt(sampledByFilter.size()); + for (var entry : sampledByFilter.entrySet()) { + entry.getKey().writeTo(out); + entry.getValue().writeTo(out); + } + } catch (IOException e) { + try { + Files.deleteIfExists(tempPath); + } catch (IOException ignored) { + // ignored + } + return; + } + + try { + Files.move(tempPath, sidecarPath, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); + } catch (IOException atomicMoveFailure) { + try { + Files.move(tempPath, sidecarPath, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException moveFailure) { + try { + Files.deleteIfExists(tempPath); + } catch (IOException ignored) { + // ignored + } + return; + } + } + dirty = false; + } + + private void loadIfPresent() { + if (!Files.isRegularFile(sidecarPath)) { + return; + } + + SnapshotRevision currentRevision = currentEstimatorRevision(); + if (currentRevision == null) { + return; + } + + Map loadedLearned = new HashMap<>(); + Map loadedPatternTotals = new HashMap<>(); + Map loadedSampled = new HashMap<>(); + + try (DataInputStream in = new DataInputStream(Files.newInputStream(sidecarPath))) { + if (in.readInt() != PERSIST_VERSION) { + return; + } + SnapshotRevision persistedRevision = SnapshotRevision.readFrom(in); + if (!persistedRevision.matches(currentRevision)) { + return; + } + + int learnedEntries = in.readInt(); + for (int i = 0; i < learnedEntries; i++) { + PatternFilterKey key = PatternFilterKey.readFrom(in); + LearnedCounts counts = LearnedCounts.readFrom(in); + if (counts.total() <= 0L) { + continue; + } + loadedLearned.put(key, counts); + loadedPatternTotals.computeIfAbsent(key.patternKey, ignored -> new LearnedCounts()) + .add(counts.passedCount, counts.filteredCount); + } + + int sampledEntries = in.readInt(); + for (int i = 0; i < sampledEntries; i++) { + PatternFilterKey key = PatternFilterKey.readFrom(in); + SampledPassRatio sampled = SampledPassRatio.readFrom(in); + if (!isValidPassRatio(sampled.passRatio)) { + continue; + } + loadedSampled.put(key, sampled); + } + } catch (IOException | RuntimeException e) { + return; + } + + synchronized (this) { + learnedByFilter.clear(); + learnedByFilter.putAll(loadedLearned); + learnedByPattern.clear(); + learnedByPattern.putAll(loadedPatternTotals); + sampledByFilter.clear(); + sampledByFilter.putAll(loadedSampled); + dirty = false; + } + } + + private SampledPassRatio sampleFilterPassRatio(Filter filter, StatementPattern pattern) { + long subjId; + long predId; + long objId; + long contextId; + try { + subjId = resolvePatternId(pattern.getSubjectVar()); + predId = resolvePatternId(pattern.getPredicateVar()); + objId = resolvePatternId(pattern.getObjectVar()); + contextId = resolvePatternId(pattern.getContextVar()); + } catch (IOException e) { + return null; + } + if (subjId == MISSING_VALUE_ID || predId == MISSING_VALUE_ID || objId == MISSING_VALUE_ID + || contextId == MISSING_VALUE_ID) { + return null; + } + + DefaultEvaluationStrategy strategy = samplingStrategy(); + QueryValueEvaluationStep condition = prepareCondition(strategy, filter); + if (condition == null) { + return null; + } + + List samples = new ArrayList<>(SAMPLE_RESERVOIR_SIZE); + int eligibleRows = 0; + int scannedRows = 0; + + try (Txn txn = tripleStore.getTxnManager().createReadTxn()) { + for (boolean explicit : new boolean[] { true, false }) { + try (RecordIterator triples = tripleStore.getTriples(txn, subjId, predId, objId, contextId, explicit)) { + long[] row; + while (scannedRows < SAMPLE_SCAN_BUDGET && (row = triples.next()) != null) { + scannedRows++; + if (!matchesRepeatedVarEquality(pattern, row)) { + continue; + } + BindingSet bindingSet = toBindingSet(pattern, row); + eligibleRows++; + if (samples.size() < SAMPLE_RESERVOIR_SIZE) { + samples.add(bindingSet); + continue; + } + int replacementIndex = ThreadLocalRandom.current().nextInt(eligibleRows); + if (replacementIndex < SAMPLE_RESERVOIR_SIZE) { + samples.set(replacementIndex, bindingSet); + } + } + } + if (scannedRows >= SAMPLE_SCAN_BUDGET) { + break; + } + } + } catch (IOException e) { + return null; + } + + if (samples.isEmpty()) { + return null; + } + + int passed = 0; + for (BindingSet sample : samples) { + try { + if (strategy.isTrue(condition, sample)) { + passed++; + } + } catch (ValueExprEvaluationException e) { + // Per-row evaluation failures behave like filtered rows during query execution. + } catch (RuntimeException e) { + return null; + } + } + + return new SampledPassRatio((double) passed / samples.size(), samples.size()); + } + + private QueryValueEvaluationStep prepareCondition(DefaultEvaluationStrategy strategy, Filter filter) { + try { + return strategy.precompile(filter.getCondition(), + new QueryEvaluationContext.Minimal(null, valueStore, null)); + } catch (RuntimeException e) { + return null; + } + } + + private DefaultEvaluationStrategy samplingStrategy() { + return new DefaultEvaluationStrategy(new TripleSource() { + @Override + public CloseableIteration getStatements(Resource subj, IRI pred, Value obj, + Resource... contexts) throws QueryEvaluationException { + return TripleSource.EMPTY_ITERATION; + } + + @Override + public CloseableIteration getStatements(StatementOrder order, Resource subj, IRI pred, + Value obj, Resource... contexts) throws QueryEvaluationException { + return TripleSource.EMPTY_ITERATION; + } + + @Override + public ValueFactory getValueFactory() { + return valueStore; + } + }, null); + } + + private boolean supportsSampling(Filter filter, StatementPattern pattern) { + if (filter == null || filter.getCondition() == null || pattern == null) { + return false; + } + Set patternBindings = pattern.getBindingNames(); + if (patternBindings.isEmpty()) { + return false; + } + + final boolean[] supported = { true }; + filter.getCondition().visit(new AbstractSimpleQueryModelVisitor() { + @Override + public void meet(Var node) { + if (!supported[0]) { + return; + } + if (!node.hasValue() && node.getName() != null && !patternBindings.contains(node.getName())) { + supported[0] = false; + } + } + + @Override + public void meet(Exists node) { + supported[0] = false; + } + + @Override + public void meet(CompareAny node) { + supported[0] = false; + } + + @Override + public void meet(CompareAll node) { + supported[0] = false; + } + }); + return supported[0]; + } + + private PatternFilterKey samplingKey(Filter filter, StatementPattern pattern) { + if (filter == null || filter.getCondition() == null || pattern == null) { + return null; + } + PatternKey patternKey = FilterSelectivityKeys.patternKeyFor(pattern); + if (patternKey == null) { + return null; + } + return new PatternFilterKey(patternKey, FilterSelectivityKeys.filterKeyFor(filter.getCondition())); + } + + private long resolvePatternId(Var var) throws IOException { + if (var == null || !var.hasValue()) { + return LmdbValue.UNKNOWN_ID; + } + long id = valueStore.getId(var.getValue()); + return id == LmdbValue.UNKNOWN_ID ? MISSING_VALUE_ID : id; + } + + private boolean matchesRepeatedVarEquality(StatementPattern pattern, long[] row) { + Map bindingsByName = new HashMap<>(4); + return matchesRepeatedVar(pattern.getSubjectVar(), row[TripleStore.SUBJ_IDX], bindingsByName) + && matchesRepeatedVar(pattern.getPredicateVar(), row[TripleStore.PRED_IDX], bindingsByName) + && matchesRepeatedVar(pattern.getObjectVar(), row[TripleStore.OBJ_IDX], bindingsByName) + && matchesRepeatedVar(pattern.getContextVar(), row[TripleStore.CONTEXT_IDX], bindingsByName); + } + + private boolean matchesRepeatedVar(Var var, long valueId, Map bindingsByName) { + if (var == null || var.hasValue() || var.getName() == null) { + return true; + } + Long existing = bindingsByName.putIfAbsent(var.getName(), valueId); + return existing == null || existing.longValue() == valueId; + } + + private BindingSet toBindingSet(StatementPattern pattern, long[] row) throws IOException { + QueryBindingSet bindingSet = new QueryBindingSet(); + addBinding(bindingSet, pattern.getSubjectVar(), row[TripleStore.SUBJ_IDX]); + addBinding(bindingSet, pattern.getPredicateVar(), row[TripleStore.PRED_IDX]); + addBinding(bindingSet, pattern.getObjectVar(), row[TripleStore.OBJ_IDX]); + addBinding(bindingSet, pattern.getContextVar(), row[TripleStore.CONTEXT_IDX]); + return bindingSet; + } + + private void addBinding(QueryBindingSet bindingSet, Var var, long valueId) throws IOException { + if (var == null || var.hasValue() || var.getName() == null || bindingSet.hasBinding(var.getName()) + || valueId == 0L) { + return; + } + bindingSet.addBinding(var.getName(), valueStore.getValue(valueId)); + } + + private SnapshotRevision currentEstimatorRevision() { + try { + if (!Files.isRegularFile(estimatorPath)) { + return null; + } + BasicFileAttributes attributes = Files.readAttributes(estimatorPath, BasicFileAttributes.class); + return new SnapshotRevision(attributes.size(), attributes.lastModifiedTime().toMillis()); + } catch (IOException e) { + return null; + } + } + + private static boolean isValidPassRatio(double value) { + return Double.isFinite(value) && value >= 0.0d && value <= 1.0d; + } + + private static void writeString(DataOutputStream out, String value) throws IOException { + byte[] bytes = value.getBytes(java.nio.charset.StandardCharsets.UTF_8); + out.writeInt(bytes.length); + out.write(bytes); + } + + private static String readString(DataInputStream in) throws IOException { + int length = in.readInt(); + byte[] bytes = new byte[length]; + in.readFully(bytes); + if (bytes.length == 0) { + return ""; + } + return new String(bytes, java.nio.charset.StandardCharsets.UTF_8); + } + + private static final class PatternFilterKey { + private final PatternKey patternKey; + private final String filterKey; + + private PatternFilterKey(PatternKey patternKey, String filterKey) { + this.patternKey = Objects.requireNonNull(patternKey, "patternKey"); + this.filterKey = Objects.requireNonNull(filterKey, "filterKey"); + } + + private void writeTo(DataOutputStream out) throws IOException { + IRI predicate = patternKey.getPredicate(); + out.writeBoolean(predicate != null); + if (predicate != null) { + writeString(out, predicate.stringValue()); + } + out.writeInt(patternKey.getBoundMask()); + writeString(out, filterKey); + } + + private static PatternFilterKey readFrom(DataInputStream in) throws IOException { + IRI predicate = in.readBoolean() ? VF.createIRI(readString(in)) : null; + PatternKey patternKey = new PatternKey(predicate, in.readInt()); + return new PatternFilterKey(patternKey, readString(in)); + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (!(other instanceof PatternFilterKey)) { + return false; + } + PatternFilterKey that = (PatternFilterKey) other; + return patternKey.equals(that.patternKey) && filterKey.equals(that.filterKey); + } + + @Override + public int hashCode() { + return Objects.hash(patternKey, filterKey); + } + } + + private static final class LearnedCounts { + private long passedCount; + private long filteredCount; + + private void add(long passedCount, long filteredCount) { + this.passedCount += Math.max(0L, passedCount); + this.filteredCount += Math.max(0L, filteredCount); + } + + private long total() { + return passedCount + filteredCount; + } + + private double passRatio() { + long total = total(); + if (total <= 0L) { + return -1.0d; + } + return (double) passedCount / total; + } + + private void writeTo(DataOutputStream out) throws IOException { + out.writeLong(passedCount); + out.writeLong(filteredCount); + } + + private static LearnedCounts readFrom(DataInputStream in) throws IOException { + LearnedCounts counts = new LearnedCounts(); + counts.passedCount = Math.max(0L, in.readLong()); + counts.filteredCount = Math.max(0L, in.readLong()); + return counts; + } + } + + private static final class SampledPassRatio { + private final double passRatio; + private final int sampleSize; + + private SampledPassRatio(double passRatio, int sampleSize) { + this.passRatio = passRatio; + this.sampleSize = sampleSize; + } + + private void writeTo(DataOutputStream out) throws IOException { + out.writeDouble(passRatio); + out.writeInt(sampleSize); + } + + private static SampledPassRatio readFrom(DataInputStream in) throws IOException { + return new SampledPassRatio(in.readDouble(), in.readInt()); + } + } + + private static final class SnapshotRevision { + private final long size; + private final long lastModifiedMillis; + + private SnapshotRevision(long size, long lastModifiedMillis) { + this.size = size; + this.lastModifiedMillis = lastModifiedMillis; + } + + private boolean matches(SnapshotRevision other) { + return other != null && size == other.size && lastModifiedMillis == other.lastModifiedMillis; + } + + private void writeTo(DataOutputStream out) throws IOException { + out.writeLong(size); + out.writeLong(lastModifiedMillis); + } + + private static SnapshotRevision readFrom(DataInputStream in) throws IOException { + return new SnapshotRevision(in.readLong(), in.readLong()); + } + } +} diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java index 6739e5b99c1..fbef3928669 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java @@ -94,6 +94,7 @@ class LmdbSailStore implements SailStore { SketchBasedJoinEstimator.Config.defaults() .withThrottleEveryN(1024 * 1024) .withThrottleMillis(2)); + private LmdbFilterSelectivityStats filterSelectivityStats; private final ScheduledExecutorService estimatorPersistExec = Executors.newSingleThreadScheduledExecutor(r -> { Thread t = new Thread(r, "LmdbJoinEstimator-Persist"); t.setDaemon(true); @@ -292,7 +293,10 @@ public LmdbSailStore(File dataDir, LmdbStoreConfig config) throws IOException, S initialized = true; Path estimatorPath = new File(dataDir, JOIN_ESTIMATOR_FILE_NAME).toPath(); boolean snapshotExists = Files.exists(estimatorPath); + filterSelectivityStats = new LmdbFilterSelectivityStats(estimatorPath, tripleStore, valueStore); sketchBasedJoinEstimator.setRebuildAllowedSupplier(() -> !storeTxnStarted.get()); + sketchBasedJoinEstimator.setLearnedStatsProvider(filterSelectivityStats); + sketchBasedJoinEstimator.setPatternFilterSamplingEstimator(filterSelectivityStats); sketchBasedJoinEstimator.configurePersistence(estimatorPath, snapshotExists); if (!snapshotExists) { sketchBasedJoinEstimator.rebuildOnceSlow(); @@ -348,6 +352,7 @@ public void close() throws SailException { if (persistFuture != null) { persistFuture.cancel(false); } + persistEstimatorState(); sketchBasedJoinEstimator.close(); } finally { try { @@ -393,6 +398,13 @@ public void close() throws SailException { } } + private void persistEstimatorState() { + sketchBasedJoinEstimator.persistIfDirty(); + if (filterSelectivityStats != null) { + filterSelectivityStats.persistIfDirty(); + } + } + SailException wrapTripleStoreException() { return tripleStoreException instanceof SailException ? (SailException) tripleStoreException : new SailException(tripleStoreException); @@ -400,7 +412,7 @@ SailException wrapTripleStoreException() { @Override public EvaluationStatistics getEvaluationStatistics() { - return new LmdbEvaluationStatistics(valueStore, tripleStore, sketchBasedJoinEstimator); + return new LmdbEvaluationStatistics(valueStore, tripleStore, sketchBasedJoinEstimator, filterSelectivityStats); } @Override @@ -651,7 +663,7 @@ private void scheduleEstimatorPersist() { if (persistScheduled.compareAndSet(false, true)) { persistFuture = estimatorPersistExec.schedule(() -> { try { - sketchBasedJoinEstimator.persistIfDirty(); + LmdbSailStore.this.persistEstimatorState(); } finally { persistScheduled.set(false); } @@ -728,6 +740,7 @@ public void flush() throws SailException { // The triple/value stores are authoritative once both commits succeed. storeTxnStarted.set(false); applyEstimatorUpdates(); + filterSelectivityStats.recordStoreMutation(); nonIsolatedUpdatesApplied = false; try { scheduleEstimatorPersist(); diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java index 72ca443f913..d44061997b1 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatisticsMemoizationTest.java @@ -80,9 +80,8 @@ void memoizesSupportsJoinEstimationAndInvalidatesAfterCacheWindow() throws Excep @Test void supportsJoinEstimationDoesNotForceRobustRebuildWhenBaseSketchesAreReady() throws Exception { - SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(mock(SailStore.class), - SketchBasedJoinEstimator.Config.defaults().withNominalEntries(64)); - setEstimatorSeenTriples(estimator, 1L); + SketchBasedJoinEstimator estimator = mock(SketchBasedJoinEstimator.class); + when(estimator.isReady()).thenReturn(true); ValueStore valueStore = mock(ValueStore.class); ValueStoreRevision revision = mock(ValueStoreRevision.class); @@ -94,6 +93,7 @@ void supportsJoinEstimationDoesNotForceRobustRebuildWhenBaseSketchesAreReady() t assertTrue(statistics.supportsJoinEstimation(), "Ready base sketches should remain usable even when the robust synopsis is unavailable"); + verify(estimator).isReady(); } @Test @@ -302,6 +302,72 @@ void usesSketchEstimatorForFilterCardinalityWhenReady() throws Exception { } } + @Test + void samplesPatternLocalFilterPassRatioWhenLearnedStatsUnavailable() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-sampled-filter").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + loadData(repository); + + LmdbStore sail = (LmdbStore) repository.getSail(); + LmdbSailStore backingStore = sail.getBackingStore(); + backingStore.getSketchBasedJoinEstimator().rebuildOnceSlow(); + + EvaluationStatistics statistics = backingStore.getEvaluationStatistics(); + Filter filter = firstFilter( + "SELECT * WHERE { ?s ?name . FILTER(CONTAINS(STR(?name), \"0\")) }"); + StatementPattern pattern = (StatementPattern) filter.getArg(); + + double patternCardinality = statistics.getCardinality(pattern); + double filterCardinality = statistics.getCardinality(filter); + double filterPassRatio = statistics.estimateFilterPassRatio(filter); + + assertTrue(filterPassRatio > 0.0d && filterPassRatio < 1.0d, + "Expected sampling fallback to estimate a selective pass ratio for CONTAINS over a single pattern"); + assertTrue(filterCardinality < patternCardinality, + "Expected sampled filter selectivity to reduce estimated filter cardinality below the base pattern"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + + void recordsLearnedFilterPassRatioForExternalBoundPatternLocalFilter() throws Exception { + File dataDir = Files.createTempDirectory("lmdb-eval-stats-learned-filter").toFile(); + SailRepository repository = new SailRepository(new LmdbStore(dataDir, new LmdbStoreConfig())); + try { + loadData(repository); + + LmdbStore sail = (LmdbStore) repository.getSail(); + LmdbSailStore backingStore = sail.getBackingStore(); + backingStore.getSketchBasedJoinEstimator().rebuildOnceSlow(); + + Filter filter = firstFilter( + "SELECT * WHERE { VALUES ?target { \"u0\" \"u1\" } ?s ?name . FILTER(?name = ?target) }"); + EvaluationStatistics beforeExecution = backingStore.getEvaluationStatistics(); + assertTrue(beforeExecution.estimateFilterPassRatio(filter) < 0.0d, + "Expected external-bound filter to have no sampled or heuristic estimate before runtime learning"); + + try (SailRepositoryConnection connection = repository.getConnection()) { + try (var result = connection.prepareTupleQuery(QueryLanguage.SPARQL, + "SELECT * WHERE { VALUES ?target { \"u0\" \"u1\" } ?s ?name . FILTER(?name = ?target) }") + .evaluate()) { + while (result.hasNext()) { + result.next(); + } + } + } + + EvaluationStatistics afterExecution = backingStore.getEvaluationStatistics(); + double learnedPassRatio = afterExecution.estimateFilterPassRatio(filter); + assertTrue(learnedPassRatio > 0.0d && learnedPassRatio < 1.0d, + "Expected runtime evaluation to record a learned pass ratio for external-bound pattern-local filters"); + } finally { + repository.shutDown(); + FileUtils.deleteDirectory(dataDir); + } + } + private static void loadData(SailRepository repository) { SimpleValueFactory vf = SimpleValueFactory.getInstance(); IRI follows = vf.createIRI("urn:test:follows"); @@ -343,6 +409,22 @@ private static Filter filterWrappedPattern(String subjectVarName, String predica return new Filter(pattern, condition); } + private static Filter firstFilter(String query) { + ParsedTupleQuery parsed = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, query, null); + final Filter[] found = new Filter[1]; + parsed.getTupleExpr().visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter node) { + if (found[0] == null) { + found[0] = node; + } + super.meet(node); + } + }); + assertNotNull(found[0], "Expected query to contain a FILTER"); + return found[0]; + } + private static LeftJoin leftJoin(String query) { ParsedTupleQuery parsed = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, query, null); final LeftJoin[] found = new LeftJoin[1]; @@ -372,13 +454,4 @@ public void meet(LeftJoin node) { return (Map) field.get(null); } - private static void setEstimatorSeenTriples(SketchBasedJoinEstimator estimator, long seenTriples) { - try { - Field field = SketchBasedJoinEstimator.class.getDeclaredField("seenTriples"); - field.setAccessible(true); - field.setLong(estimator, seenTriples); - } catch (ReflectiveOperationException e) { - throw new AssertionError(e); - } - } } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java index 986f6c8f414..838c1589b6d 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java @@ -22,12 +22,20 @@ import java.lang.reflect.Field; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.attribute.FileTime; import java.util.concurrent.atomic.AtomicLong; import org.eclipse.rdf4j.common.transaction.IsolationLevels; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.QueryLanguage; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.parser.ParsedTupleQuery; +import org.eclipse.rdf4j.query.parser.QueryParserUtil; import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; import org.eclipse.rdf4j.sail.NotifyingSailConnection; import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; @@ -39,6 +47,9 @@ class LmdbSailStoreEstimatorPersistenceTest { private static final String SNAPSHOT_FILE = "join-estimator.rjes"; + private static final String FILTER_SNAPSHOT_FILE = SNAPSHOT_FILE + ".filters"; + private static final String LEARNED_FILTER_QUERY = "SELECT * WHERE { VALUES ?target { \"u0\" \"u1\" } " + + "?s ?name . FILTER(?name = ?target) }"; @Test void closeWritesEstimatorSnapshotAndReopensLazy(@TempDir File dataDir) throws Exception { @@ -76,6 +87,69 @@ void closeWritesEstimatorSnapshotAndReopensLazy(@TempDir File dataDir) throws Ex } } + @Test + void closeWritesFilterSelectivitySidecarAndReloadsItAfterRestart(@TempDir File dataDir) throws Exception { + Filter learnedFilter = firstFilter(LEARNED_FILTER_QUERY); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + SailRepository repository = new SailRepository(store); + repository.init(); + double learnedPassRatioBeforeShutdown; + try { + loadNameData(repository); + learnFilterPassRatio(repository); + + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + learnedPassRatioBeforeShutdown = statistics.estimateFilterPassRatio(learnedFilter); + assertTrue(learnedPassRatioBeforeShutdown > 0.0d && learnedPassRatioBeforeShutdown < 1.0d, + "Expected runtime evaluation to populate learned filter selectivity before shutdown"); + } finally { + repository.shutDown(); + } + + assertTrue(new File(dataDir, FILTER_SNAPSHOT_FILE).isFile(), + "Expected filter selectivity sidecar after LMDB shutdown"); + + LmdbStore reopened = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + reopened.init(); + try { + EvaluationStatistics statistics = reopened.getBackingStore().getEvaluationStatistics(); + assertEquals(learnedPassRatioBeforeShutdown, statistics.estimateFilterPassRatio(learnedFilter), 0.00001d, + "Expected learned filter selectivity to survive LMDB restart"); + } finally { + reopened.shutDown(); + } + } + + @Test + void ignoresFilterSelectivitySidecarWhenEstimatorSnapshotRevisionChanges(@TempDir File dataDir) throws Exception { + Filter learnedFilter = firstFilter(LEARNED_FILTER_QUERY); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + SailRepository repository = new SailRepository(store); + repository.init(); + try { + loadNameData(repository); + learnFilterPassRatio(repository); + } finally { + repository.shutDown(); + } + + Path snapshot = dataDir.toPath().resolve(SNAPSHOT_FILE); + FileTime originalTimestamp = Files.getLastModifiedTime(snapshot); + Files.setLastModifiedTime(snapshot, FileTime.fromMillis(originalTimestamp.toMillis() + 5_000L)); + + LmdbStore reopened = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + reopened.init(); + try { + EvaluationStatistics statistics = reopened.getBackingStore().getEvaluationStatistics(); + assertTrue(statistics.estimateFilterPassRatio(learnedFilter) < 0.0d, + "Expected mismatched estimator snapshot revision to invalidate persisted filter selectivity"); + } finally { + reopened.shutDown(); + } + } + @Test void commitPersistsWithLruEvictionsAndRemainsReadyAfterRestart(@TempDir File dataDir) throws Exception { var vf = SimpleValueFactory.getInstance(); @@ -311,6 +385,43 @@ private static void setSketchBudgetBytes(SketchBasedJoinEstimator estimator, lon maxField.setLong(estimator, maxBytes); } + private static void loadNameData(SailRepository repository) { + SimpleValueFactory vf = SimpleValueFactory.getInstance(); + IRI name = vf.createIRI("urn:test:name"); + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + for (int i = 0; i < 8; i++) { + connection.add(vf.createIRI("urn:test:user:" + i), name, vf.createLiteral("u" + i)); + } + connection.commit(); + } + } + + private static void learnFilterPassRatio(SailRepository repository) { + try (SailRepositoryConnection connection = repository.getConnection()) { + try (var result = connection.prepareTupleQuery(QueryLanguage.SPARQL, LEARNED_FILTER_QUERY).evaluate()) { + while (result.hasNext()) { + result.next(); + } + } + } + } + + private static Filter firstFilter(String query) { + ParsedTupleQuery parsed = QueryParserUtil.parseTupleQuery(QueryLanguage.SPARQL, query, null); + Filter[] found = new Filter[1]; + parsed.getTupleExpr().visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter node) { + if (found[0] == null) { + found[0] = node; + } + super.meet(node); + } + }); + return found[0]; + } + private static void writeLegacySnapshot(Path snapshot) throws Exception { Files.createDirectories(snapshot.getParent()); try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(snapshot))) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java index dd651580744..a6362277d1f 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java @@ -18,18 +18,28 @@ import java.util.ArrayList; import java.util.List; +import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; import org.eclipse.rdf4j.common.transaction.IsolationLevels; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.QueryModelNode; +import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; import org.eclipse.rdf4j.query.explanation.Explanation; import org.eclipse.rdf4j.repository.sail.SailRepository; import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.repository.util.RDFInserter; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -42,9 +52,16 @@ class LmdbSketchAwareFilterPlacementTest { private static final IRI COPY = VF.createIRI(LIBRARY, "Copy"); private static final IRI LOCATED_AT = VF.createIRI(LIBRARY, "locatedAt"); private static final IRI NAME = VF.createIRI(LIBRARY, "name"); + private static final String MEDICAL = "http://example.com/theme/medical/"; + private static final IRI MEDICAL_ENCOUNTER = VF.createIRI(MEDICAL, "Encounter"); + private static final IRI MEDICAL_HANDLED_BY = VF.createIRI(MEDICAL, "handledBy"); + private static final IRI MEDICAL_RECORDED_ON = VF.createIRI(MEDICAL, "recordedOn"); + private static final String MEDICAL_RECORDED_ON_FILTER = "recordedOn-filter"; + private static final String MEDICAL_HANDLED_BY_LABEL = "handledBy"; + private static final String MEDICAL_TYPE_LABEL = "encounter-type"; @Test - void optimizedQueryKeepsBranchNameFilterAboveSelectiveJoinWhenSketchesReady(@TempDir File dataDir) + void optimizedQueryPushesBranchNameFilterOntoLocalPatternWhenSketchesReady(@TempDir File dataDir) throws Exception { LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); SailRepository repository = new SailRepository(store); @@ -78,13 +95,143 @@ void optimizedQueryKeepsBranchNameFilterAboveSelectiveJoinWhenSketchesReady(@Tem Filter branchNameFilter = findBranchNameFilter(optimized); assertNotNull(branchNameFilter, "Expected optimized plan to retain the branch-name filter"); - assertTrue(branchNameFilter.getArg().getBindingNames().contains("copy"), - "Branch-name filter should stay above the selective copy join when sketch estimation is ready"); + assertTrue(branchNameFilter.getArg() instanceof org.eclipse.rdf4j.query.algebra.StatementPattern, + "Branch-name filter should be pushed onto its local statement pattern when sketch estimation is ready"); + assertTrue(branchNameFilter.getArg().getBindingNames().contains("branch"), + "Branch-name filter should stay attached to the branch pattern"); + assertTrue(!branchNameFilter.getArg().getBindingNames().contains("copy"), + "Branch-name filter should no longer sit above the copy join once local selectivity is known"); } finally { repository.shutDown(); } } + @Test + void filterCardinalityUsesLocalFilterSelectivityWithoutSketchesReady(@TempDir File dataDir) throws Exception { + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadLibraryData(repository); + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + + assertTrue(statistics.supportsFilterSelectivityCosting(), + "Expected LMDB to expose local filter selectivity costing before sketches are ready"); + + String query = String.join("\n", + "PREFIX lib: ", + "SELECT ?branch WHERE {", + " ?branch lib:name ?branchName .", + " FILTER ((?branchName = \"Branch 0\") || (?branchName = \"Branch 1\"))", + "}"); + + Filter filter; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + filter = findBranchNameFilter((TupleExpr) explanation.tupleExpr()); + } + + assertNotNull(filter, "Expected optimized plan to retain the branch-name filter"); + assertTrue(filter.getArg() instanceof StatementPattern, + "Expected the branch-name filter to remain attached to its statement pattern"); + + double passRatio = statistics.estimateFilterPassRatio(filter); + double baseRows = statistics.getCardinality(filter.getArg()); + double filteredRows = statistics.getCardinality(filter); + + assertTrue(passRatio > 0.0d && passRatio < 1.0d, + "Expected a selective pass ratio for the branch-name filter"); + assertTrue(filteredRows < baseRows, + "Expected filter cardinality to honor local selectivity without requiring sketch-ready join estimation"); + } finally { + repository.shutDown(); + } + } + + @Test + void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsWithoutSketchesReady( + @TempDir File dataDir) throws Exception { + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadThemeData(repository, Theme.MEDICAL_RECORDS); + String query = ThemeQueryCatalog.queryFor(Theme.MEDICAL_RECORDS, 2); + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + + assertTrue(statistics.supportsFilterSelectivityCosting(), + "Expected LMDB to expose local filter selectivity costing for q2"); + + TupleExpr coldOptimized; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + coldOptimized = (TupleExpr) explanation.tupleExpr(); + } + + assertRecordedOnMovesFirst(collectMandatoryLeafOrder(coldOptimized)); + + try (SailRepositoryConnection connection = repository.getConnection()) { + try (var result = connection.prepareTupleQuery(query).evaluate()) { + while (result.hasNext()) { + result.next(); + } + } + } + + TupleExpr optimized; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + optimized = (TupleExpr) explanation.tupleExpr(); + } + + assertRecordedOnMovesFirst(collectMandatoryLeafOrder(optimized)); + } finally { + repository.shutDown(); + } + } + + @Test + void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsInBenchmarkDataset( + @TempDir File dataDir) throws Exception { + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadAllThemeData(repository); + String query = ThemeQueryCatalog.queryFor(Theme.MEDICAL_RECORDS, 2); + EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); + + assertTrue(statistics.supportsFilterSelectivityCosting(), + "Expected LMDB to expose local filter selectivity costing for q2 in the mixed benchmark dataset"); + + TupleExpr optimized; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + optimized = (TupleExpr) explanation.tupleExpr(); + } + + assertRecordedOnMovesFirst(collectMandatoryLeafOrder(optimized)); + } finally { + repository.shutDown(); + } + } + + private static void assertRecordedOnMovesFirst(List mandatoryLeafOrder) { + int recordedOnIndex = mandatoryLeafOrder.indexOf(MEDICAL_RECORDED_ON_FILTER); + int handledByIndex = mandatoryLeafOrder.indexOf(MEDICAL_HANDLED_BY_LABEL); + int typeIndex = mandatoryLeafOrder.indexOf(MEDICAL_TYPE_LABEL); + + assertTrue(recordedOnIndex >= 0, + "Expected optimized q2 plan to keep the recordedOn filter attached to its local statement pattern"); + assertTrue(handledByIndex >= 0 && typeIndex >= 0, + "Expected optimized q2 plan to retain handledBy and rdf:type in the mandatory prefix"); + assertTrue(recordedOnIndex < handledByIndex && recordedOnIndex < typeIndex, + "Expected optimized q2 plan to place recordedOn + date filter before handledBy and rdf:type once learned/sample selectivity is available"); + } + private static Filter findBranchNameFilter(TupleExpr optimized) { List matches = new ArrayList<>(1); optimized.visit(new AbstractQueryModelVisitor() { @@ -125,4 +272,97 @@ private static void loadLibraryData(SailRepository repository) { connection.commit(); } } + + private static void loadThemeData(SailRepository repository, Theme theme) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + ThemeDataSetGenerator.generate(theme, new RDFInserter(connection)); + connection.commit(); + } + } + + private static void loadAllThemeData(SailRepository repository) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + var inserter = new RDFInserter(connection); + for (Theme theme : Theme.values()) { + ThemeDataSetGenerator.generate(theme, inserter); + } + connection.commit(); + } + } + + private static List collectMandatoryLeafOrder(TupleExpr optimized) { + ArrayList leaves = new ArrayList<>(); + TupleExpr mandatoryRoot = optimized; + LeftJoin leftJoin = findFirst(optimized, LeftJoin.class); + if (leftJoin != null) { + mandatoryRoot = leftJoin.getLeftArg(); + } + collectMandatoryLeafOrder(mandatoryRoot, leaves); + return leaves; + } + + private static void collectMandatoryLeafOrder(TupleExpr tupleExpr, List leaves) { + if (tupleExpr instanceof Join join) { + collectMandatoryLeafOrder(join.getLeftArg(), leaves); + collectMandatoryLeafOrder(join.getRightArg(), leaves); + return; + } + if (tupleExpr instanceof Filter filter) { + if (isRecordedOnFilter(filter)) { + leaves.add(MEDICAL_RECORDED_ON_FILTER); + return; + } + collectMandatoryLeafOrder(filter.getArg(), leaves); + return; + } + if (tupleExpr instanceof StatementPattern statementPattern) { + String label = labelFor(statementPattern); + if (label != null) { + leaves.add(label); + } + return; + } + if (tupleExpr instanceof UnaryTupleOperator unaryTupleOperator) { + collectMandatoryLeafOrder(unaryTupleOperator.getArg(), leaves); + } + } + + private static boolean isRecordedOnFilter(Filter filter) { + if (!(filter.getArg()instanceof StatementPattern statementPattern)) { + return false; + } + return MEDICAL_RECORDED_ON.equals(statementPattern.getPredicateVar().getValue()) + && VarNameCollector.process(filter.getCondition()).contains("date"); + } + + private static String labelFor(StatementPattern statementPattern) { + if (statementPattern.getPredicateVar() == null || !statementPattern.getPredicateVar().hasValue()) { + return null; + } + IRI predicate = (IRI) statementPattern.getPredicateVar().getValue(); + if (MEDICAL_HANDLED_BY.equals(predicate)) { + return MEDICAL_HANDLED_BY_LABEL; + } + if (RDF_TYPE.equals(predicate) && statementPattern.getObjectVar() != null + && MEDICAL_ENCOUNTER.equals(statementPattern.getObjectVar().getValue())) { + return MEDICAL_TYPE_LABEL; + } + return null; + } + + private static T findFirst(QueryModelNode root, Class type) { + List matches = new ArrayList<>(1); + root.visit(new AbstractQueryModelVisitor() { + @Override + protected void meetNode(QueryModelNode node) throws RuntimeException { + if (matches.isEmpty() && type.isInstance(node)) { + matches.add(type.cast(node)); + } + super.meetNode(node); + } + }); + return matches.isEmpty() ? null : matches.get(0); + } } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index 64e89d5d66f..b5f0e792485 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -18,6 +18,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.reflect.Method; import java.util.Properties; import java.util.concurrent.TimeUnit; @@ -35,6 +36,7 @@ import org.eclipse.rdf4j.query.TupleQuery; import org.eclipse.rdf4j.query.TupleQueryResult; import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; import org.eclipse.rdf4j.query.explanation.Explanation; import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; @@ -389,6 +391,26 @@ private String renderTupleExprWithIr(TupleExpr tupleExpr) { return new TupleExprIRRenderer(config).render(tupleExpr); } + TupleExpr explainOptimizedTupleExpr() { + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + return (TupleExpr) explanation.tupleExpr(); + } + } + + EvaluationStatistics evaluationStatistics() { + try { + Method getBackingStore = LmdbStore.class.getDeclaredMethod("getBackingStore"); + getBackingStore.setAccessible(true); + Object backingStore = getBackingStore.invoke(store); + Method getEvaluationStatistics = backingStore.getClass().getDeclaredMethod("getEvaluationStatistics"); + getEvaluationStatistics.setAccessible(true); + return (EvaluationStatistics) getEvaluationStatistics.invoke(backingStore); + } catch (ReflectiveOperationException e) { + throw new IllegalStateException("Unable to access benchmark evaluation statistics", e); + } + } + @TearDown(Level.Trial) public void tearDown() { // if (previousJoinOrderStrategy != null) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java index 9623e8436e4..93e4f95d39c 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmarkSmokeTest.java @@ -16,13 +16,31 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; import org.junit.jupiter.api.Test; class ThemeQueryBenchmarkSmokeTest { + private static final String MEDICAL = "http://example.com/theme/medical/"; + private static final String MEDICAL_RECORDED_ON = MEDICAL + "recordedOn"; + private static final String MEDICAL_RECORDED_ON_FILTER = "recordedOn-filter"; + private static final String MEDICAL_HANDLED_BY_LABEL = "handledBy"; + private static final String MEDICAL_TYPE_LABEL = "encounter-type"; + @Test void executeQueryReturnsExpectedCountForMedicalRecordsQueryTwo() throws Exception { ThemeQueryBenchmark benchmark = new ThemeQueryBenchmark(); @@ -88,4 +106,139 @@ void secondBenchmarkTrialReusesPersistedJoinEstimatorSnapshot() throws Exception assertEquals(sketchesLastModified, Files.getLastModifiedTime(sketches).toMillis(), "Second benchmark trial should reuse the persisted join-estimator sketches instead of rebuilding them"); } + + @Test + void explainQueryPlacesRecordedOnFilterFirstForMedicalRecordsQueryTwo() throws Exception { + ThemeQueryBenchmark benchmark = new ThemeQueryBenchmark(); + benchmark.themeName = Theme.MEDICAL_RECORDS.name(); + benchmark.z_queryIndex = 2; + + benchmark.setup(); + try { + TupleExpr optimized = benchmark.explainOptimizedTupleExpr(); + List mandatoryLeafOrder = collectMandatoryLeafOrder(optimized); + Filter recordedOnFilter = findRecordedOnFilter(optimized); + assertTrue(recordedOnFilter != null, + "Expected optimized q2 plan to retain the recordedOn filter as a local filter leaf"); + EvaluationStatistics statistics = benchmark.evaluationStatistics(); + double passRatio = statistics.estimateFilterPassRatio(recordedOnFilter); + double baseRows = statistics.getCardinality(recordedOnFilter.getArg()); + double filteredRows = statistics.getCardinality(recordedOnFilter); + assertRecordedOnMovesFirst(mandatoryLeafOrder, passRatio, baseRows, filteredRows); + } finally { + benchmark.tearDown(); + } + } + + private static void assertRecordedOnMovesFirst(List mandatoryLeafOrder, double passRatio, double baseRows, + double filteredRows) { + int recordedOnIndex = mandatoryLeafOrder.indexOf(MEDICAL_RECORDED_ON_FILTER); + int handledByIndex = mandatoryLeafOrder.indexOf(MEDICAL_HANDLED_BY_LABEL); + int typeIndex = mandatoryLeafOrder.indexOf(MEDICAL_TYPE_LABEL); + + assertTrue(recordedOnIndex >= 0, + "Expected optimized q2 plan to keep the recordedOn filter attached to its local statement pattern"); + assertTrue(handledByIndex >= 0 && typeIndex >= 0, + "Expected optimized q2 plan to retain handledBy and rdf:type in the mandatory prefix"); + assertTrue(recordedOnIndex < handledByIndex && recordedOnIndex < typeIndex, + "Expected optimized q2 plan to place recordedOn + date filter before handledBy and rdf:type; order=" + + mandatoryLeafOrder + ", passRatio=" + passRatio + ", baseRows=" + baseRows + + ", filteredRows=" + filteredRows); + } + + private static List collectMandatoryLeafOrder(TupleExpr optimized) { + ArrayList leaves = new ArrayList<>(); + TupleExpr mandatoryRoot = optimized; + LeftJoin leftJoin = findFirst(optimized, LeftJoin.class); + if (leftJoin != null) { + mandatoryRoot = leftJoin.getLeftArg(); + } + collectMandatoryLeafOrder(mandatoryRoot, leaves); + return leaves; + } + + private static void collectMandatoryLeafOrder(TupleExpr tupleExpr, List leaves) { + if (tupleExpr instanceof Join join) { + collectMandatoryLeafOrder(join.getLeftArg(), leaves); + collectMandatoryLeafOrder(join.getRightArg(), leaves); + return; + } + if (tupleExpr instanceof Filter filter) { + if (isRecordedOnFilter(filter)) { + leaves.add(MEDICAL_RECORDED_ON_FILTER); + return; + } + collectMandatoryLeafOrder(filter.getArg(), leaves); + return; + } + if (tupleExpr instanceof StatementPattern statementPattern) { + String label = labelFor(statementPattern); + if (label != null) { + leaves.add(label); + } + return; + } + if (tupleExpr instanceof UnaryTupleOperator unaryTupleOperator) { + collectMandatoryLeafOrder(unaryTupleOperator.getArg(), leaves); + } + } + + private static boolean isRecordedOnFilter(Filter filter) { + if (!(filter.getArg()instanceof StatementPattern statementPattern)) { + return false; + } + return MEDICAL_RECORDED_ON.equals(statementPattern.getPredicateVar().getValue().stringValue()) + && VarNameCollector.process(filter.getCondition()).contains("date"); + } + + private static Filter findRecordedOnFilter(TupleExpr optimized) { + List matches = new ArrayList<>(1); + optimized.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter node) { + if (matches.isEmpty() && isRecordedOnFilter(node)) { + matches.add(node); + } + super.meet(node); + } + }); + return matches.isEmpty() ? null : matches.get(0); + } + + private static String labelFor(StatementPattern statementPattern) { + if (statementPattern.getPredicateVar() == null || !statementPattern.getPredicateVar().hasValue()) { + return null; + } + + Value predicate = statementPattern.getPredicateVar().getValue(); + Value object = statementPattern.getObjectVar() != null ? statementPattern.getObjectVar().getValue() : null; + String predicateValue = predicate.stringValue(); + + if (MEDICAL_RECORDED_ON.equals(predicateValue)) { + return "recordedOn"; + } + if ((MEDICAL + "handledBy").equals(predicateValue)) { + return MEDICAL_HANDLED_BY_LABEL; + } + if ("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".equals(predicateValue) + && object != null + && (MEDICAL + "Encounter").equals(object.stringValue())) { + return MEDICAL_TYPE_LABEL; + } + return null; + } + + private static T findFirst(TupleExpr root, Class type) { + List matches = new ArrayList<>(1); + root.visit(new AbstractQueryModelVisitor() { + @Override + protected void meetNode(org.eclipse.rdf4j.query.algebra.QueryModelNode node) { + if (matches.isEmpty() && type.isInstance(node)) { + matches.add(type.cast(node)); + } + super.meetNode(node); + } + }); + return matches.isEmpty() ? null : matches.get(0); + } } From 965c62fc2d1a27e4cfdf5acb7f47ecbfc32aa48f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 22:19:10 +0200 Subject: [PATCH 12/43] learned --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7d9025b6c9d..514cf3b712c 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,4 @@ e2e/test-results .vscode /.codex/environments/environment.toml improved-optimizers-query-rewrite-sketch-based-lmdb-page-walking/ +/.m2_repo_linux_j25/ From 84325b151a100bbb2f05fc5bea34f9f42a938cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 22:24:29 +0200 Subject: [PATCH 13/43] learned --- scripts/run-single-benchmark-docker.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/run-single-benchmark-docker.sh b/scripts/run-single-benchmark-docker.sh index 786581d4b56..1f41095916f 100755 --- a/scripts/run-single-benchmark-docker.sh +++ b/scripts/run-single-benchmark-docker.sh @@ -7,14 +7,14 @@ Usage: $0 [existing run-single-benchmark.sh options] $0 [existing run-single-benchmark.sh options] $0 [flexible benchmark @Param values] -Runs the benchmark helper inside a Linux Java 25 container with JFR CPU time profiling enabled. +Runs the benchmark helper inside a Linux Java 26 container with JFR CPU time profiling enabled. Trailing benchmark parameter values are parsed flexibly. Examples: $0 org.example.Benchmark.test themeName:MEDICAL_RECORDS z_queryIndex:0 $0 org.example.Benchmark.test themeName = MEDICAL_RECORDS, z_queryIndex = 0 $0 org.example.Benchmark.test MEDICAL_RECORDS 0 Environment: - RDF4J_JMH_DOCKER_IMAGE Container image to use (default: maven:3.9.11-eclipse-temurin-25) + RDF4J_JMH_DOCKER_IMAGE Container image to use (default: maven:3.9.14-sapmachine-26) RDF4J_JMH_DOCKER_PLATFORM Optional docker platform override (for example linux/amd64) RDF4J_JMH_DOCKER_M2_REPO Maven local repo inside the container (default: /workspace/.m2_repo_linux_j25) USAGE @@ -22,7 +22,7 @@ USAGE SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)" -DOCKER_IMAGE="${RDF4J_JMH_DOCKER_IMAGE:-maven:3.9.11-eclipse-temurin-25}" +DOCKER_IMAGE="${RDF4J_JMH_DOCKER_IMAGE:-maven:3.9.14-sapmachine-26}" DOCKER_PLATFORM="${RDF4J_JMH_DOCKER_PLATFORM:-}" DOCKER_WORKDIR="/workspace" INNER_HOME="/tmp/home" From 1b8ba70b304dae57806b1fb85900c80b2bf53610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sat, 18 Apr 2026 23:00:20 +0200 Subject: [PATCH 14/43] skill --- .../skills/docker-jfr-benchmark-loop/SKILL.md | 90 +++ .../agents/openai.yaml | 4 + .../references/jfr-reading.md | 85 +++ .../references/perf-loop.md | 89 +++ .../scripts/run-docker-jfr-loop.sh | 157 +++++ .../theta/UpdateSketchAccess.java | 23 + .../sail/base/SketchBasedJoinEstimator.java | 563 ++++++++++-------- .../SketchEstimatorIngestionBenchmark.java | 258 ++++++++ scripts/run-single-benchmark-docker.sh | 88 ++- scripts/run-single-benchmark.sh | 27 +- .../test-run-single-benchmark-docker.sh | 44 ++ .../benchmark/test-run-single-benchmark.sh | 39 +- 12 files changed, 1213 insertions(+), 254 deletions(-) create mode 100644 .codex/skills/docker-jfr-benchmark-loop/SKILL.md create mode 100644 .codex/skills/docker-jfr-benchmark-loop/agents/openai.yaml create mode 100644 .codex/skills/docker-jfr-benchmark-loop/references/jfr-reading.md create mode 100644 .codex/skills/docker-jfr-benchmark-loop/references/perf-loop.md create mode 100755 .codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh create mode 100644 core/sail/base/src/main/java/org/apache/datasketches/theta/UpdateSketchAccess.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/SketchEstimatorIngestionBenchmark.java create mode 100644 testsuites/benchmark/test-run-single-benchmark-docker.sh diff --git a/.codex/skills/docker-jfr-benchmark-loop/SKILL.md b/.codex/skills/docker-jfr-benchmark-loop/SKILL.md new file mode 100644 index 00000000000..bf95e19e16e --- /dev/null +++ b/.codex/skills/docker-jfr-benchmark-loop/SKILL.md @@ -0,0 +1,90 @@ +--- +name: docker-jfr-benchmark-loop +description: Run a repeatable RDF4J performance loop against one JMH benchmark in Docker with Linux Java 26 and JFR CPU-time profiling. Use when working in this repo on benchmark-guided performance changes, hotspot triage, JFR reading, CPU bottleneck analysis, or repeated baseline, fix, and rerun loops. Trigger on requests mentioning benchmark, profiling, JFR, hotspot, perf loop, CPU bottleneck, or Docker benchmark runs in RDF4J. +--- + +# Docker JFR Benchmark Loop + +Use this skill for one-benchmark perf work in this repo. Default runner: `scripts/run-docker-jfr-loop.sh`, not ad hoc Maven or raw JMH commands. + +## Quick start + +Dry-run a known selector: + +```bash +.codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh \ + org.eclipse.rdf4j.model.benchmark.ValueCreationBenchmark.createBNode \ + --dry-run +``` + +Explicit selector plus params: + +```bash +.codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh \ + --module core/model \ + --class org.eclipse.rdf4j.model.benchmark.ValueCreationBenchmark \ + --method createBNode \ + --param samples=1000 +``` + +## Repo-grounded defaults + +- The wrapper calls repo helper `scripts/run-single-benchmark-docker.sh`. +- The Docker helper already forces Linux Java 26 plus `--enable-jfr --enable-jfr-cpu-times`. +- The inner helper already enforces: + - `settings=profile` + - `dumponexit=true` + - `duration=120s` + - `warmup=0` + - `measurement=10` iterations of `10s` + - `forks=1` + - `jdk.CPUTimeSample#enabled=true` + - `report-on-exit=cpu-time-hot-methods` +- This skill wrapper adds the missing fidelity flags: + - `-XX:FlightRecorderOptions=stackdepth=1024,samplethreads=true` + - `-XX:+UnlockDiagnosticVMOptions` + - `-XX:+DebugNonSafepoints` + +## Core loop + +1. Pick one benchmark selector. Keep selector, params, Docker image, and profiling flags constant for the whole comparison. +2. Capture a baseline run with `scripts/run-docker-jfr-loop.sh`. +3. Read the `.jfr` using [references/jfr-reading.md](references/jfr-reading.md). +4. Choose one candidate fix with material CPU share. Prefer the fix most likely to move total runtime, not just local self time. +5. Re-run the exact same selector and params. +6. Compare benchmark delta plus hotspot shift. +7. Repeat until: + - the hotspot shifts, + - CPU share falls below a meaningful threshold, + - or GC / locks / memory / I/O / JIT behavior dominates instead. + +## Operating rules + +- Route benchmark variation through `--param`. +- Route JVM tuning through `--jvm-arg`. +- Do not use raw `--jmh-arg` during JFR runs; the helper rejects extra JMH args when JFR is enabled. +- Do not switch to a second `StartFlightRecording`; stay aligned with repo helper behavior. +- Do not treat a small benchmark gain as proof the hotspot fix failed. First check whether another bottleneck surfaced and now caps the total speedup. +- If the run is not CPU-bound, say so and pivot to lock, GC, memory, I/O, or JIT evidence instead of forcing a CPU-only story. + +## Output contract + +Answers using this skill should usually include: + +- exact run command +- `.jfr` path +- top CPU hotspots +- confidence notes +- next-fix hypothesis +- whether a second bottleneck likely masks part of the gain + +## Escalate cleanly + +- Use [high-performance-java](../high-performance-java/SKILL.md) for algorithm, data-structure, and code-shape changes. +- Use [hotspot-jit-forensics](../hotspot-jit-forensics/SKILL.md) when inlining, tiering, C2, or codegen behavior is in question. +- Use [jmh-benchmark-compare](../jmh-benchmark-compare/SKILL.md) for multi-run diffs, history, and exported reports. + +## Reference map + +- Loop workflow: [references/perf-loop.md](references/perf-loop.md) +- JFR reading guide: [references/jfr-reading.md](references/jfr-reading.md) diff --git a/.codex/skills/docker-jfr-benchmark-loop/agents/openai.yaml b/.codex/skills/docker-jfr-benchmark-loop/agents/openai.yaml new file mode 100644 index 00000000000..a919b6167ad --- /dev/null +++ b/.codex/skills/docker-jfr-benchmark-loop/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Docker JFR Benchmark Loop" + short_description: "Iterative Docker JFR perf loop" + default_prompt: "Use $docker-jfr-benchmark-loop to run a Docker JFR benchmark baseline, read hotspots, compare reruns, and guide the next optimization loop." diff --git a/.codex/skills/docker-jfr-benchmark-loop/references/jfr-reading.md b/.codex/skills/docker-jfr-benchmark-loop/references/jfr-reading.md new file mode 100644 index 00000000000..d8ba489013f --- /dev/null +++ b/.codex/skills/docker-jfr-benchmark-loop/references/jfr-reading.md @@ -0,0 +1,85 @@ +# JFR Reading + +Use both CLI and JMC. CLI is fast for triage. JMC is better for shape recognition. + +## CLI + +Summary: + +```bash +jfr summary /path/to/profile.jfr +``` + +CPU-time hot methods: + +```bash +jfr view cpu-time-hot-methods /path/to/profile.jfr +``` + +CPU-time samples and lost samples: + +```bash +jfr print \ + --events jdk.CPUTimeSample,jdk.CPUTimeSamplesLost \ + --stack-depth 20 \ + /path/to/profile.jfr +``` + +Read these first: + +- total event counts +- whether `jdk.CPUTimeSamplesLost` appears +- hottest methods by CPU time +- recurring stack shapes + +## JMC + +Open the recording in JDK Mission Control and check: + +- Flame Graph: quickest view of dominant stack width and call shape +- Threads: whether one thread or many consume the CPU time +- Lock Instances: whether apparent slowness is actually contention +- Memory: whether allocation / GC pressure dominates instead +- Automated Analysis: quick sanity check for obvious JVM or application issues + +## Interpretation rules + +### Self vs inclusive cost + +- Hot leaf: usually best when it has real self cost and clear local waste. +- Wide parent: often better when many hot leaves share the same parent frame or repeated adapter layer. + +### Wide parents vs hot leaves + +- Prefer the parent when the stack fan-out is broad but the same wrapper, iterator, decode, or dispatch layer appears everywhere. +- Prefer the leaf when one method body clearly burns CPU on its own. + +### Thread concentration + +- One dominant thread: optimize that path first. +- Many similar hot threads: look for shared contention, shared allocations, or repeated framework overhead. + +### Lost-sample confidence + +- No lost-sample events: normal confidence. +- Some lost samples: lower confidence, but still useful if hotspot ranking is stable. +- Heavy lost samples: avoid strong conclusions from tiny deltas. + +### CPU-bound or not + +Say "not CPU-bound" when the recording points elsewhere: + +- Threads mostly waiting or blocked +- Lock views dominate +- GC / allocation pressure dominates memory views +- I/O wait or native wait dominates wall time + +In those cases pivot to the real limiter. + +### Amdahl discipline + +Even a perfect fix to a 10% hotspot cannot produce a large end-to-end gain. Estimate likely upside before over-investing. + +### Multiple bottlenecks + +Do not assume the first hotspot explains all lost time. Fixing one issue can surface another that previously hid behind it. Re-profile after each meaningful fix. diff --git a/.codex/skills/docker-jfr-benchmark-loop/references/perf-loop.md b/.codex/skills/docker-jfr-benchmark-loop/references/perf-loop.md new file mode 100644 index 00000000000..635ab2e2d23 --- /dev/null +++ b/.codex/skills/docker-jfr-benchmark-loop/references/perf-loop.md @@ -0,0 +1,89 @@ +# Perf Loop + +Use this loop when one benchmark should drive one optimization cycle. + +## 1. Baseline + +Run one selector with stable inputs: + +```bash +.codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh \ + \ + [--param name=value]... +``` + +Keep these fixed across baseline and candidate runs: + +- benchmark selector +- `--param` values +- Docker image / platform +- injected JFR fidelity flags +- any extra `--jvm-arg` + +## 2. Read the recording + +Open the emitted `.jfr` and identify: + +- hottest CPU paths +- whether cost is concentrated in one thread or spread across many +- whether samples are lost +- whether time is really CPU time, not blocked / waiting / lock / GC dominated + +Use [jfr-reading.md](jfr-reading.md) for CLI and JMC paths. + +## 3. Pick one candidate fix + +Choose one change with material total-cost share. + +Good candidates: + +- top hot leaf with meaningful self cost +- wide parent frame repeated across many hot leaves +- avoidable allocation or copying inside the hot path +- redundant dispatch / decoding / branching in the dominant path + +Bad candidates: + +- tiny leaf under 1% total share +- visually hot method that is mostly inherited inclusive cost +- code outside the dominant thread when one thread clearly dominates + +## 4. Re-run the same selector + +After the code change, rerun the exact same benchmark command shape. Do not change selector or parameters just to make the result look better. + +## 5. Compare both benchmark and profile + +Check both: + +- benchmark moved in the expected direction +- hotspot share moved in the expected direction + +Interpretation: + +- benchmark up, hotspot down: likely real win +- hotspot down, benchmark flat: another bottleneck may now dominate +- hotspot flat, benchmark flat: fix likely missed the real limiter +- benchmark down, hotspot shifted elsewhere: regression or measurement drift; inspect both runs + +## 6. Repeat until stop condition + +Stop when one of these is true: + +- hotspot shifts to a new dominant path +- CPU share of the original issue is no longer material +- the workload is no longer CPU-bound +- locks, GC, memory, I/O, or JIT behavior now dominate + +## 7. Report honestly + +Say: + +- exact command +- benchmark delta +- `.jfr` path +- top hotspot shift +- confidence +- next-fix hypothesis + +Remember: fixing one bottleneck often reveals the next one before the first fix shows its full end-to-end value. That is normal. Treat it as loop progress, not contradiction. diff --git a/.codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh b/.codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh new file mode 100755 index 00000000000..3e3720105f2 --- /dev/null +++ b/.codex/skills/docker-jfr-benchmark-loop/scripts/run-docker-jfr-loop.sh @@ -0,0 +1,157 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'USAGE' +Usage: + run-docker-jfr-loop.sh [options] + run-docker-jfr-loop.sh --module --class --method [options] + +Options: + --param Pass a benchmark @Param override + --jvm-arg Pass an extra JVM arg to the benchmark JVM + --jfr-output Override the JFR output path + --dry-run Print the effective docker helper command + --help Show this help + +Notes: + - This wrapper always uses scripts/run-single-benchmark-docker.sh. + - JFR CPU-time profiling is already enabled by the repo docker helper. + - This wrapper injects stackdepth/samplethreads plus DebugNonSafepoints fidelity flags. + - Raw JMH args are intentionally blocked. Use --param or --jvm-arg instead. +USAGE +} + +SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../../../.." && pwd)" +HELPER="${REPO_ROOT}/scripts/run-single-benchmark-docker.sh" + +benchmark_id="" +module="" +benchmark_class="" +benchmark_method="" +passthrough_args=() +user_jvm_args=() + +contains_exact() { + local needle="$1" + shift + local item + + for item in "$@"; do + if [[ "${item}" == "${needle}" ]]; then + return 0 + fi + done + + return 1 +} + +require_value() { + local option="$1" + + if [[ $# -lt 2 ]]; then + echo "Error: ${option} requires a value." >&2 + exit 1 + fi +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --help|-h) + usage + exit 0 + ;; + --module|-m) + require_value "$@" + module="$2" + passthrough_args+=("$1" "$2") + shift 2 + ;; + --class|-c) + require_value "$@" + benchmark_class="$2" + passthrough_args+=("$1" "$2") + shift 2 + ;; + --method|-b|--benchmark) + require_value "$@" + benchmark_method="$2" + passthrough_args+=("$1" "$2") + shift 2 + ;; + --param|--jfr-output|--jvm-arg) + require_value "$@" + passthrough_args+=("$1" "$2") + if [[ "$1" == "--jvm-arg" ]]; then + user_jvm_args+=("$2") + fi + shift 2 + ;; + --dry-run) + passthrough_args+=("$1") + shift + ;; + --enable-jfr|--enable-jfr-cpu-times) + echo "Error: ${1} is already handled by ${HELPER}." >&2 + exit 1 + ;; + --warmup-iterations|--measurement-iterations|--forks|--jmh-arg) + echo "Error: ${1} is blocked here to keep the JFR loop reproducible." >&2 + exit 1 + ;; + --) + echo "Error: raw JMH arguments are blocked here. Use --param or --jvm-arg." >&2 + exit 1 + ;; + -*) + echo "Error: Unsupported option ${1}." >&2 + exit 1 + ;; + *) + if [[ -n "${benchmark_id}" || -n "${module}" || -n "${benchmark_class}" || -n "${benchmark_method}" ]]; then + echo "Error: only one shorthand selector is allowed. Use --param for benchmark parameters." >&2 + exit 1 + fi + benchmark_id="$1" + shift + ;; + esac +done + +if [[ ! -x "${HELPER}" ]]; then + echo "Error: helper not found or not executable: ${HELPER}" >&2 + exit 1 +fi + +if [[ -n "${benchmark_id}" && ( -n "${module}" || -n "${benchmark_class}" || -n "${benchmark_method}" ) ]]; then + echo "Error: choose shorthand selector or --module/--class/--method, not both." >&2 + exit 1 +fi + +if [[ -z "${benchmark_id}" && ( -z "${module}" || -z "${benchmark_class}" || -z "${benchmark_method}" ) ]]; then + echo "Error: provide either or --module/--class/--method." >&2 + exit 1 +fi + +default_jvm_args=( + "-XX:FlightRecorderOptions=stackdepth=1024,samplethreads=true" + "-XX:+UnlockDiagnosticVMOptions" + "-XX:+DebugNonSafepoints" +) + +for arg in "${default_jvm_args[@]}"; do + if ! contains_exact "${arg}" "${user_jvm_args[@]}"; then + passthrough_args+=(--jvm-arg "${arg}") + fi +done + +cmd=("${HELPER}") + +if [[ -n "${benchmark_id}" ]]; then + cmd+=("${benchmark_id}") +fi + +cmd+=("${passthrough_args[@]}") + +exec "${cmd[@]}" diff --git a/core/sail/base/src/main/java/org/apache/datasketches/theta/UpdateSketchAccess.java b/core/sail/base/src/main/java/org/apache/datasketches/theta/UpdateSketchAccess.java new file mode 100644 index 00000000000..d57f8960bb8 --- /dev/null +++ b/core/sail/base/src/main/java/org/apache/datasketches/theta/UpdateSketchAccess.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + ******************************************************************************/ +// Some portions generated by Codex + +package org.apache.datasketches.theta; + +public final class UpdateSketchAccess { + + private UpdateSketchAccess() { + } + + public static void hashUpdate(UpdateSketch sketch, long hash) { + sketch.hashUpdate(hash); + } +} diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 0273298e846..5fee8495345 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -20,8 +20,6 @@ import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; @@ -56,12 +54,15 @@ import org.apache.datasketches.common.Family; import org.apache.datasketches.common.ResizeFactor; +import org.apache.datasketches.hash.MurmurHash3; import org.apache.datasketches.theta.AnotB; import org.apache.datasketches.theta.HashIterator; import org.apache.datasketches.theta.Intersection; import org.apache.datasketches.theta.SetOperation; import org.apache.datasketches.theta.Sketch; import org.apache.datasketches.theta.UpdateSketch; +import org.apache.datasketches.theta.UpdateSketchAccess; +import org.apache.datasketches.thetacommon.ThetaUtil; import org.eclipse.rdf4j.common.iteration.CloseableIteration; import org.eclipse.rdf4j.common.transaction.IsolationLevels; import org.eclipse.rdf4j.model.IRI; @@ -172,6 +173,10 @@ public class SketchBasedJoinEstimator { private static final long MIX64_C1 = 0xbf58476d1ce4e5b9L; private static final long MIX64_C2 = 0x94d049bb133111ebL; private static final long QUAD_SEED = 0x9e3779b97f4a7c15L; + private static final long THETA_UPDATE_SEED = ThetaUtil.DEFAULT_UPDATE_SEED; + private static final Component[] COMPONENT_VALUES = Component.values(); + private static final Pair[] PAIR_VALUES = Pair.values(); + private static final MemoryCategory[] MEMORY_CATEGORY_VALUES = MemoryCategory.values(); private static final double MIN_FILTER_MULTIPLIER = 0.05d; private static final double DISCONNECTED_JOIN_WORK_PENALTY = 16.0d; private static final int DEFAULT_ZERO_INTERSECTION_EXACT_DISTINCT_LIMIT = 64; @@ -383,7 +388,6 @@ enum SketchPlannerPath { private static final long MEMORY_OWNER_PERSISTENCE_REWRITE_WORKSPACE = -7L; private static final long MEMORY_OWNER_PERSISTENCE_REWRITE_IO_BUFFER = -8L; - private static final Method HASH_UPDATE_METHOD = resolveHashUpdateMethod(); private static final Field HEAP_ALPHA_THETA_LONG_FIELD = resolveHeapAlphaField("thetaLong_"); private static final Field HEAP_ALPHA_EMPTY_FIELD = resolveHeapAlphaField("empty_"); @@ -571,6 +575,8 @@ private static final class CacheDirectory { private int[] dirtyNextB; private int dirtyHeadB; private int dirtyTailB; + private long estimatedHeapBytesCache; + private int heapBytesVersion; private CacheDirectory() { initBuckets(256); @@ -602,6 +608,7 @@ private CacheDirectory() { dirtyTailA = NO_NODE; dirtyHeadB = NO_NODE; dirtyTailB = NO_NODE; + refreshEstimatedHeapBytes(); } private void initBuckets(int capacity) { @@ -736,6 +743,7 @@ private void ensureEntryCapacity(int minCapacity) { Arrays.fill(dirtyPrevB, previousLength, next, NO_NODE); dirtyNextB = Arrays.copyOf(dirtyNextB, next); Arrays.fill(dirtyNextB, previousLength, next, NO_NODE); + refreshEstimatedHeapBytes(); } private void rehash(int newCapacity) { @@ -751,6 +759,7 @@ private void rehash(int newCapacity) { } buckets[newSlot] = bucket; } + refreshEstimatedHeapBytes(); } private static byte recTypeFromPrefix(int keyPrefix) { @@ -1011,7 +1020,20 @@ private int x(int entryId) { return xs[entryId]; } + private int heapBytesVersion() { + return heapBytesVersion; + } + private long estimatedHeapBytes() { + return estimatedHeapBytesCache; + } + + private void refreshEstimatedHeapBytes() { + estimatedHeapBytesCache = computeEstimatedHeapBytes(); + heapBytesVersion++; + } + + private long computeEstimatedHeapBytes() { return align(OBJECT_HEADER_BYTES + 2L * INT_BYTES + 16L * REFERENCE_BYTES) + estimateLongArrayBytes(buckets.length) + estimateByteArrayBytes(flags.length) @@ -1042,6 +1064,8 @@ private static final class ResidentLru { private byte[] slots = new byte[256]; private long[] bytes = new long[256]; private boolean[] used = new boolean[256]; + private long estimatedHeapBytesCache; + private int heapBytesVersion; private int head = NO_NODE; private int tail = NO_NODE; @@ -1051,6 +1075,7 @@ private static final class ResidentLru { private ResidentLru() { Arrays.fill(prev, NO_NODE); Arrays.fill(next, NO_NODE); + refreshEstimatedHeapBytes(); } private void clear() { @@ -1181,9 +1206,23 @@ private void ensureNodeCapacity(int minCapacity) { slots = Arrays.copyOf(slots, nextCapacity); bytes = Arrays.copyOf(bytes, nextCapacity); used = Arrays.copyOf(used, nextCapacity); + refreshEstimatedHeapBytes(); + } + + private int heapBytesVersion() { + return heapBytesVersion; } private long estimatedHeapBytes() { + return estimatedHeapBytesCache; + } + + private void refreshEstimatedHeapBytes() { + estimatedHeapBytesCache = computeEstimatedHeapBytes(); + heapBytesVersion++; + } + + private long computeEstimatedHeapBytes() { return align(OBJECT_HEADER_BYTES + 5L * INT_BYTES + 6L * REFERENCE_BYTES) + estimateIntArrayBytes(prev.length) + estimateIntArrayBytes(next.length) @@ -1336,7 +1375,7 @@ private final class MemoryRegistry { private final EnumMap> labels = new EnumMap<>(MemoryCategory.class); private MemoryRegistry() { - for (MemoryCategory category : MemoryCategory.values()) { + for (MemoryCategory category : MEMORY_CATEGORY_VALUES) { ownerBytes.put(category, new LinkedHashMap<>()); totals.put(category, 0L); } @@ -1403,7 +1442,7 @@ private synchronized DebugMemorySnapshot snapshot() { EnumMap totalsSnapshot = new EnumMap<>(MemoryCategory.class); EnumMap> ownerSnapshot = new EnumMap<>(MemoryCategory.class); long total = 0L; - for (MemoryCategory category : MemoryCategory.values()) { + for (MemoryCategory category : MEMORY_CATEGORY_VALUES) { long categoryTotal = totals.getOrDefault(category, 0L); totalsSnapshot.put(category, categoryTotal); total = saturatingAdd(total, categoryTotal); @@ -1434,11 +1473,11 @@ private static final class IngestEvent { private final int pi; private final int oi; private final int ci; - private final long hs; - private final long hp; - private final long ho; - private final long hc; - private final long sig; + private final long thetaHs; + private final long thetaHp; + private final long thetaHo; + private final long thetaHc; + private final long thetaSig; private final long spKey; private final long soKey; private final long scKey; @@ -1446,18 +1485,18 @@ private static final class IngestEvent { private final long pcKey; private final long ocKey; - private IngestEvent(boolean isDelete, int si, int pi, int oi, int ci, long hs, long hp, long ho, long hc, - long sig, long spKey, long soKey, long scKey, long poKey, long pcKey, long ocKey) { + private IngestEvent(boolean isDelete, int si, int pi, int oi, int ci, long thetaHs, long thetaHp, long thetaHo, + long thetaHc, long thetaSig, long spKey, long soKey, long scKey, long poKey, long pcKey, long ocKey) { this.isDelete = isDelete; this.si = si; this.pi = pi; this.oi = oi; this.ci = ci; - this.hs = hs; - this.hp = hp; - this.ho = ho; - this.hc = hc; - this.sig = sig; + this.thetaHs = thetaHs; + this.thetaHp = thetaHp; + this.thetaHo = thetaHo; + this.thetaHc = thetaHc; + this.thetaSig = thetaSig; this.spKey = spKey; this.soKey = soKey; this.scKey = scKey; @@ -1638,6 +1677,8 @@ private void forEach(BatchUpdateConsumer consumer) { private final Object mappedChannelLock = new Object(); private final CacheDirectory cacheDirectory = new CacheDirectory(); private final ResidentLru residentLru = new ResidentLru(); + private int cacheDirectoryMetadataVersion = -1; + private int residentLruMetadataVersion = -1; private final MemoryRegistry memoryRegistry; private final Map blobStorages = new HashMap<>(); private final Path[] slotBlobBaseFiles = new Path[BufferSlot.values().length]; @@ -2130,11 +2171,18 @@ public synchronized long rebuildOnceSlow() { // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); rebuildBatchSize = 0; - System.out.println( - "RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + ", seen " - + seen / 1000 / 1000 + " million triples so far. Elapsed: " - + (System.currentTimeMillis() - l) / 1000 - + " s."); +// if (logger.isDebugEnabled()) { +// logger.debug( +// "RdfJoinEstimator: Rebuilding {}, seen {} million triples so far. Elapsed: {} s.", +// rebuildIntoA ? "bufA" : "bufB", +// seen / 1000 / 1000, +// (System.currentTimeMillis() - l) / 1000); +// } + + if (true) { + System.out.println("RdfJoinEstimator: Rebuilding "+(rebuildIntoA ? "bufA" : "bufB")+", seen "+seen / 1000 / 1000+" million triples so far. Elapsed: "+((System.currentTimeMillis() - l) / 1000)+" s."); + + } } // if (seen > 0 && seen % ROBUST_HEADROOM_CHECK_INTERVAL == 0 @@ -2270,32 +2318,33 @@ && hasSnapshotAvailable(persistenceFile)) { String p = str(st.getPredicate()); String o = str(st.getObject()); String c = str(st.getContext()); - String signature = sig(s, p, o, c); - churnSampler.recordAdd(signature, samplingInterval()); + churnSampler.recordAdd(s, p, o, c, samplingInterval()); seenTriples = approxStoreSize.incrementAndGet(); try { - ingestIncremental(s, p, o, c, false); - - while (true) { - long epoch = rebuildEpoch.get(); - if ((epoch & 1L) != 0L) { - synchronized (bufA) { - ingest(bufA, st, false); - } - synchronized (bufB) { - ingest(bufB, st, false); + IngestEvent event = toIngestEvent(s, p, o, c, false); + + if (event != null) { + while (true) { + long epoch = rebuildEpoch.get(); + if ((epoch & 1L) != 0L) { + synchronized (bufA) { + ingest(bufA, event); + } + synchronized (bufB) { + ingest(bufB, event); + } + break; } - break; - } - State target = current; - synchronized (target) { - if (rebuildEpoch.get() != epoch) { - continue; + State target = current; + synchronized (target) { + if (rebuildEpoch.get() != epoch) { + continue; + } + ingest(target, event); + break; } - ingest(target, st, false); - break; } } @@ -2331,8 +2380,7 @@ && hasSnapshotAvailable(persistenceFile)) { String p = str(st.getPredicate()); String o = str(st.getObject()); String c = str(st.getContext()); - String signature = sig(s, p, o, c); - churnSampler.recordDelete(signature, samplingInterval()); + churnSampler.recordDelete(s, p, o, c, samplingInterval()); seenTriples = approxStoreSize.updateAndGet(v -> Math.max(0, v - 1)); try { @@ -2353,10 +2401,10 @@ public void deleteStatement(Resource s, IRI p, Value o) { deleteStatement(s, p, o, null); } - private void ingestIncremental(String s, String p, String o, String c, boolean isDelete) { + private IngestEvent ingestIncremental(String s, String p, String o, String c, boolean isDelete) { IngestEvent event = toIngestEvent(s, p, o, c, isDelete); if (event == null) { - return; + return null; } IngestEvent[] batch = null; int batchSize = 0; @@ -2364,9 +2412,10 @@ private void ingestIncremental(String s, String p, String o, String c, boolean i ensureIncrementalBufferCapacity(incrementalBufferCount + 1); incrementalBuffer[incrementalBufferCount++] = event; if (incrementalBufferCount >= INCREMENTAL_BATCH_SIZE) { - System.out.println("RdfJoinEstimator: Flushing incremental batch of " + incrementalBufferCount - + " events. Seen triples: " - + seenTriples); + if (logger.isDebugEnabled()) { + logger.debug("RdfJoinEstimator: Flushing incremental batch of {} events. Seen triples: {}", + incrementalBufferCount, seenTriples); + } batch = drainIncrementalBufferLocked(); batchSize = batch.length; } @@ -2374,6 +2423,7 @@ private void ingestIncremental(String s, String p, String o, String c, boolean i if (batch != null) { applyIncrementalBatch(batch, batchSize); } + return event; } private IngestEvent toIngestEvent(String s, String p, String o, String c, boolean isDelete) { @@ -2388,14 +2438,19 @@ private IngestEvent toIngestEvent(String s, String p, String o, String c, boolea long ho = valueFingerprint(o); long hc = valueFingerprint(c); long sig = quadFingerprint(hs, hp, ho, hc); + long thetaHs = thetaHash(hs); + long thetaHp = thetaHash(hp); + long thetaHo = thetaHash(ho); + long thetaHc = thetaHash(hc); + long thetaSig = thetaHash(sig); long spKey = pairKey(si, pi); long soKey = pairKey(si, oi); long scKey = pairKey(si, ci); long poKey = pairKey(pi, oi); long pcKey = pairKey(pi, ci); long ocKey = pairKey(oi, ci); - return new IngestEvent(isDelete, si, pi, oi, ci, hs, hp, ho, hc, sig, spKey, soKey, scKey, poKey, pcKey, - ocKey); + return new IngestEvent(isDelete, si, pi, oi, ci, thetaHs, thetaHp, thetaHo, thetaHc, thetaSig, spKey, soKey, + scKey, poKey, pcKey, ocKey); } catch (NullPointerException npe) { return null; } @@ -2486,10 +2541,9 @@ private void applyGroupedUpdate(State state, byte recType, boolean isDelete, byt synchronized (sketchCacheLock) { entryId = cacheDirectory.findOrAdd(recType, isDelete, axisA, axisB, x, y); } - SketchAddress address = new SketchAddress(recType, isDelete, axisA, axisB, x, y); - UpdateSketch sketch = getSketchForWrite(state, address, entryId); + UpdateSketch sketch = getSketchForWrite(state, recType, isDelete, axisA, axisB, x, y, entryId); for (int i = 0; i < valueCount; i++) { - sketch.update(values[i]); + hashUpdateRaw(sketch, values[i]); } markDirty(state, entryId); touchResidentSketch(state, entryId, sketch, false); @@ -2501,39 +2555,51 @@ private void accumulateIngestEvent(BatchUpdateAccumulator updates, IngestEvent e int pi = event.pi; int oi = event.oi; int ci = event.ci; - long hs = event.hs; - long hp = event.hp; - long ho = event.ho; - long hc = event.hc; - long sig = event.sig; - - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.S.ordinal(), (byte) 0, si, 0, sig); - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.P.ordinal(), (byte) 0, pi, 0, sig); - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.O.ordinal(), (byte) 0, oi, 0, sig); - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.C.ordinal(), (byte) 0, ci, 0, sig); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.P.ordinal(), si, 0, hp); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.O.ordinal(), si, 0, ho); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.C.ordinal(), si, 0, hc); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.S.ordinal(), pi, 0, hs); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.O.ordinal(), pi, 0, ho); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.C.ordinal(), pi, 0, hc); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.S.ordinal(), oi, 0, hs); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.P.ordinal(), oi, 0, hp); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.C.ordinal(), oi, 0, hc); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.S.ordinal(), ci, 0, hs); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.P.ordinal(), ci, 0, hp); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.O.ordinal(), ci, 0, ho); - - accumulatePair(updates, Pair.SP, isDelete, event.spKey, sig, ho, hc); - accumulatePair(updates, Pair.SO, isDelete, event.soKey, sig, hp, hc); - accumulatePair(updates, Pair.SC, isDelete, event.scKey, sig, hp, ho); - accumulatePair(updates, Pair.PO, isDelete, event.poKey, sig, hs, hc); - accumulatePair(updates, Pair.PC, isDelete, event.pcKey, sig, hs, ho); - accumulatePair(updates, Pair.OC, isDelete, event.ocKey, sig, hs, hp); + long thetaHs = event.thetaHs; + long thetaHp = event.thetaHp; + long thetaHo = event.thetaHo; + long thetaHc = event.thetaHc; + long thetaSig = event.thetaSig; + + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.S.ordinal(), (byte) 0, si, 0, thetaSig); + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.P.ordinal(), (byte) 0, pi, 0, thetaSig); + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.O.ordinal(), (byte) 0, oi, 0, thetaSig); + updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.C.ordinal(), (byte) 0, ci, 0, thetaSig); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.P.ordinal(), si, 0, + thetaHp); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.O.ordinal(), si, 0, + thetaHo); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.C.ordinal(), si, 0, + thetaHc); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.S.ordinal(), pi, 0, + thetaHs); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.O.ordinal(), pi, 0, + thetaHo); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.C.ordinal(), pi, 0, + thetaHc); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.S.ordinal(), oi, 0, + thetaHs); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.P.ordinal(), oi, 0, + thetaHp); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.C.ordinal(), oi, 0, + thetaHc); + + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.S.ordinal(), ci, 0, + thetaHs); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.P.ordinal(), ci, 0, + thetaHp); + updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.O.ordinal(), ci, 0, + thetaHo); + + accumulatePair(updates, Pair.SP, isDelete, event.spKey, thetaSig, thetaHo, thetaHc); + accumulatePair(updates, Pair.SO, isDelete, event.soKey, thetaSig, thetaHp, thetaHc); + accumulatePair(updates, Pair.SC, isDelete, event.scKey, thetaSig, thetaHp, thetaHo); + accumulatePair(updates, Pair.PO, isDelete, event.poKey, thetaSig, thetaHs, thetaHc); + accumulatePair(updates, Pair.PC, isDelete, event.pcKey, thetaSig, thetaHs, thetaHo); + accumulatePair(updates, Pair.OC, isDelete, event.ocKey, thetaSig, thetaHs, thetaHp); } private static void accumulatePair(BatchUpdateAccumulator updates, Pair pair, boolean isDelete, long key, @@ -2549,80 +2615,72 @@ private static void accumulatePair(BatchUpdateAccumulator updates, Pair pair, bo /* ------------------------------------------------------------------ */ - /** - * Common ingestion path for both add and delete operations. - * - * @param t target {@code State} (one of the two buffers) - * @param st statement to ingest - * @param isDelete {@code false}=live sketch, {@code true}=tomb‑stone sketch - */ - private void ingest(State t, Statement st, boolean isDelete) { + private void ingest(State t, IngestEvent event) { try { - String s = str(st.getSubject()); - String p = str(st.getPredicate()); - String o = str(st.getObject()); - String c = str(st.getContext()); - - int si = hash(s), pi = hash(p), oi = hash(o), ci = hash(c); - long hs = valueFingerprint(s); - long hp = valueFingerprint(p); - long ho = valueFingerprint(o); - long hc = valueFingerprint(c); - long sig = quadFingerprint(hs, hp, ho, hc); - long spKey = pairKey(si, pi); - long soKey = pairKey(si, oi); - long scKey = pairKey(si, ci); - long poKey = pairKey(pi, oi); - long pcKey = pairKey(pi, ci); - long ocKey = pairKey(oi, ci); + boolean isDelete = event.isDelete; + int si = event.si; + int pi = event.pi; + int oi = event.oi; + int ci = event.ci; + long thetaHs = event.thetaHs; + long thetaHp = event.thetaHp; + long thetaHo = event.thetaHo; + long thetaHc = event.thetaHc; + long thetaSig = event.thetaSig; + long spKey = event.spKey; + long soKey = event.soKey; + long scKey = event.scKey; + long poKey = event.poKey; + long pcKey = event.pcKey; + long ocKey = event.ocKey; /* single‑component cardinalities */ - updateSketch(t, singleTripleAddress(isDelete, Component.S, si), sig); - updateSketch(t, singleTripleAddress(isDelete, Component.P, pi), sig); - updateSketch(t, singleTripleAddress(isDelete, Component.O, oi), sig); - updateSketch(t, singleTripleAddress(isDelete, Component.C, ci), sig); + updateSingleSketchRaw(t, isDelete, Component.S, si, thetaSig); + updateSingleSketchRaw(t, isDelete, Component.P, pi, thetaSig); + updateSingleSketchRaw(t, isDelete, Component.O, oi, thetaSig); + updateSingleSketchRaw(t, isDelete, Component.C, ci, thetaSig); /* complement sets for singles */ - updateSketch(t, singleComplementAddress(isDelete, Component.S, Component.P, si), hp); - updateSketch(t, singleComplementAddress(isDelete, Component.S, Component.O, si), ho); - updateSketch(t, singleComplementAddress(isDelete, Component.S, Component.C, si), hc); + updateComplementSketchRaw(t, isDelete, Component.S, Component.P, si, thetaHp); + updateComplementSketchRaw(t, isDelete, Component.S, Component.O, si, thetaHo); + updateComplementSketchRaw(t, isDelete, Component.S, Component.C, si, thetaHc); - updateSketch(t, singleComplementAddress(isDelete, Component.P, Component.S, pi), hs); - updateSketch(t, singleComplementAddress(isDelete, Component.P, Component.O, pi), ho); - updateSketch(t, singleComplementAddress(isDelete, Component.P, Component.C, pi), hc); + updateComplementSketchRaw(t, isDelete, Component.P, Component.S, pi, thetaHs); + updateComplementSketchRaw(t, isDelete, Component.P, Component.O, pi, thetaHo); + updateComplementSketchRaw(t, isDelete, Component.P, Component.C, pi, thetaHc); - updateSketch(t, singleComplementAddress(isDelete, Component.O, Component.S, oi), hs); - updateSketch(t, singleComplementAddress(isDelete, Component.O, Component.P, oi), hp); - updateSketch(t, singleComplementAddress(isDelete, Component.O, Component.C, oi), hc); + updateComplementSketchRaw(t, isDelete, Component.O, Component.S, oi, thetaHs); + updateComplementSketchRaw(t, isDelete, Component.O, Component.P, oi, thetaHp); + updateComplementSketchRaw(t, isDelete, Component.O, Component.C, oi, thetaHc); - updateSketch(t, singleComplementAddress(isDelete, Component.C, Component.S, ci), hs); - updateSketch(t, singleComplementAddress(isDelete, Component.C, Component.P, ci), hp); - updateSketch(t, singleComplementAddress(isDelete, Component.C, Component.O, ci), ho); + updateComplementSketchRaw(t, isDelete, Component.C, Component.S, ci, thetaHs); + updateComplementSketchRaw(t, isDelete, Component.C, Component.P, ci, thetaHp); + updateComplementSketchRaw(t, isDelete, Component.C, Component.O, ci, thetaHo); /* pairs (triples + complements) */ - updatePairSketch(t, isDelete, Pair.SP, REC_PAIR_TRIPLE, spKey, sig); - updatePairSketch(t, isDelete, Pair.SP, REC_PAIR_COMP1, spKey, ho); - updatePairSketch(t, isDelete, Pair.SP, REC_PAIR_COMP2, spKey, hc); + updatePairSketchRaw(t, isDelete, Pair.SP, REC_PAIR_TRIPLE, spKey, thetaSig); + updatePairSketchRaw(t, isDelete, Pair.SP, REC_PAIR_COMP1, spKey, thetaHo); + updatePairSketchRaw(t, isDelete, Pair.SP, REC_PAIR_COMP2, spKey, thetaHc); - updatePairSketch(t, isDelete, Pair.SO, REC_PAIR_TRIPLE, soKey, sig); - updatePairSketch(t, isDelete, Pair.SO, REC_PAIR_COMP1, soKey, hp); - updatePairSketch(t, isDelete, Pair.SO, REC_PAIR_COMP2, soKey, hc); + updatePairSketchRaw(t, isDelete, Pair.SO, REC_PAIR_TRIPLE, soKey, thetaSig); + updatePairSketchRaw(t, isDelete, Pair.SO, REC_PAIR_COMP1, soKey, thetaHp); + updatePairSketchRaw(t, isDelete, Pair.SO, REC_PAIR_COMP2, soKey, thetaHc); - updatePairSketch(t, isDelete, Pair.SC, REC_PAIR_TRIPLE, scKey, sig); - updatePairSketch(t, isDelete, Pair.SC, REC_PAIR_COMP1, scKey, hp); - updatePairSketch(t, isDelete, Pair.SC, REC_PAIR_COMP2, scKey, ho); + updatePairSketchRaw(t, isDelete, Pair.SC, REC_PAIR_TRIPLE, scKey, thetaSig); + updatePairSketchRaw(t, isDelete, Pair.SC, REC_PAIR_COMP1, scKey, thetaHp); + updatePairSketchRaw(t, isDelete, Pair.SC, REC_PAIR_COMP2, scKey, thetaHo); - updatePairSketch(t, isDelete, Pair.PO, REC_PAIR_TRIPLE, poKey, sig); - updatePairSketch(t, isDelete, Pair.PO, REC_PAIR_COMP1, poKey, hs); - updatePairSketch(t, isDelete, Pair.PO, REC_PAIR_COMP2, poKey, hc); + updatePairSketchRaw(t, isDelete, Pair.PO, REC_PAIR_TRIPLE, poKey, thetaSig); + updatePairSketchRaw(t, isDelete, Pair.PO, REC_PAIR_COMP1, poKey, thetaHs); + updatePairSketchRaw(t, isDelete, Pair.PO, REC_PAIR_COMP2, poKey, thetaHc); - updatePairSketch(t, isDelete, Pair.PC, REC_PAIR_TRIPLE, pcKey, sig); - updatePairSketch(t, isDelete, Pair.PC, REC_PAIR_COMP1, pcKey, hs); - updatePairSketch(t, isDelete, Pair.PC, REC_PAIR_COMP2, pcKey, ho); + updatePairSketchRaw(t, isDelete, Pair.PC, REC_PAIR_TRIPLE, pcKey, thetaSig); + updatePairSketchRaw(t, isDelete, Pair.PC, REC_PAIR_COMP1, pcKey, thetaHs); + updatePairSketchRaw(t, isDelete, Pair.PC, REC_PAIR_COMP2, pcKey, thetaHo); - updatePairSketch(t, isDelete, Pair.OC, REC_PAIR_TRIPLE, ocKey, sig); - updatePairSketch(t, isDelete, Pair.OC, REC_PAIR_COMP1, ocKey, hs); - updatePairSketch(t, isDelete, Pair.OC, REC_PAIR_COMP2, ocKey, hp); + updatePairSketchRaw(t, isDelete, Pair.OC, REC_PAIR_TRIPLE, ocKey, thetaSig); + updatePairSketchRaw(t, isDelete, Pair.OC, REC_PAIR_COMP1, ocKey, thetaHs); + updatePairSketchRaw(t, isDelete, Pair.OC, REC_PAIR_COMP2, ocKey, thetaHp); } catch (NullPointerException npe) { // ignore NPEs from null values (e.g. missing context) } finally { @@ -3348,7 +3406,7 @@ private static final class State { new SingleBuild(k, Component.O, buckets), new SingleBuild(k, Component.C, buckets)); - for (Pair p : Pair.values()) { + for (Pair p : PAIR_VALUES) { pairs.put(p, new PairBuild(k, buckets)); delPairs.put(p, new PairBuild(k, buckets)); } @@ -3378,7 +3436,7 @@ private static final class SingleBuild { SingleBuild(int k, Component fixed, int buckets) { this.k = k; this.buckets = buckets; - for (Component c : Component.values()) { + for (Component c : COMPONENT_VALUES) { if (c != fixed) { cmpl.put(c, new AtomicReferenceArray<>(buckets)); } @@ -3518,16 +3576,6 @@ private static UpdateSketch newSk(int k) { .build(); } - private static Method resolveHashUpdateMethod() { - try { - Method method = UpdateSketch.class.getDeclaredMethod("hashUpdate", long.class); - method.setAccessible(true); - return method; - } catch (NoSuchMethodException e) { - throw new ExceptionInInitializerError(e); - } - } - private static Field resolveHeapAlphaField(String fieldName) { try { Class heapAlphaClass = Class.forName("org.apache.datasketches.theta.HeapAlphaSketch"); @@ -3539,21 +3587,8 @@ private static Field resolveHeapAlphaField(String fieldName) { } } - private static void hashUpdateRaw(UpdateSketch sketch, long hash) throws IOException { - try { - HASH_UPDATE_METHOD.invoke(sketch, hash); - } catch (IllegalAccessException e) { - throw new IOException("Unable to apply raw sketch hash", e); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException) { - throw (RuntimeException) cause; - } - if (cause instanceof Error) { - throw (Error) cause; - } - throw new IOException("Unable to apply raw sketch hash", cause); - } + private static void hashUpdateRaw(UpdateSketch sketch, long hash) { + UpdateSketchAccess.hashUpdate(sketch, hash); } private static long align(long bytes) { @@ -3596,6 +3631,10 @@ private static long quadFingerprint(long s, long p, long o, long c) { return mix64(h ^ c); } + private static long thetaHash(long value) { + return MurmurHash3.hash(value, THETA_UPDATE_SEED)[0] >>> 1; + } + private static long mix64(long value) { long z = value; z = (z ^ (z >>> 30)) * MIX64_C1; @@ -3608,7 +3647,7 @@ private static long pairKey(int a, int b) { } private static Pair findPair(Component a, Component b) { - for (Pair p : Pair.values()) { + for (Pair p : PAIR_VALUES) { if ((p.x == a && p.y == b) || (p.x == b && p.y == a)) { return p; } @@ -4596,7 +4635,7 @@ private Long exactBoundPatternRows(StatementPattern pattern, String sharedVarNam private StatementPattern bindPatternVar(StatementPattern pattern, String sharedVarName, Value sharedValue) { StatementPattern boundPattern = pattern.clone(); - for (Component component : Component.values()) { + for (Component component : COMPONENT_VALUES) { Var var = varForComponent(boundPattern, component); if (var == null || var.hasValue() || var.getName() == null || !sharedVarName.equals(var.getName())) { continue; @@ -4650,7 +4689,7 @@ private Resource[] exactBoundContexts(Var contextVar) { private boolean statementMatchesPatternVariableEqualities(StatementPattern pattern, Statement statement) { Map seen = new HashMap<>(); - for (Component component : Component.values()) { + for (Component component : COMPONENT_VALUES) { Var var = varForComponent(pattern, component); if (var == null || var.hasValue() || var.getName() == null) { continue; @@ -4992,7 +5031,7 @@ private AccessShape buildAccessShape(StatementPattern pattern, Set curre private EnumSet collectPatternConstantComponents(StatementPattern pattern) { EnumSet components = EnumSet.noneOf(Component.class); - for (Component component : Component.values()) { + for (Component component : COMPONENT_VALUES) { Var var = varForComponent(pattern, component); if (var != null && var.hasValue()) { components.add(component); @@ -5007,7 +5046,7 @@ private EnumMap collectJoinBoundVarNames(StatementPattern pat if (currentlyBoundVars == null || currentlyBoundVars.isEmpty()) { return components; } - for (Component component : Component.values()) { + for (Component component : COMPONENT_VALUES) { Var var = varForComponent(pattern, component); if (var == null || var.hasValue() || var.getName() == null || !currentlyBoundVars.contains(var.getName())) { continue; @@ -5038,7 +5077,7 @@ private double estimateAccessRows(StatementPattern pattern, Map prefixComponents) { StatementPattern accessPattern = pattern.clone(); - for (Component component : Component.values()) { + for (Component component : COMPONENT_VALUES) { if (prefixComponents.contains(component)) { continue; } @@ -5638,7 +5677,7 @@ private boolean hasBoundValue(Var var) { } private Component findPatternComponentByVarName(StatementPattern pattern, String varName) { - for (Component component : Component.values()) { + for (Component component : COMPONENT_VALUES) { Var var = varForComponent(pattern, component); if (var != null && varName.equals(var.getName())) { return component; @@ -5724,15 +5763,15 @@ void reset() { eventsSinceLastSample = 0L; } - void recordAdd(String signature, long sampleEvery) { - record(signature, sampleEvery, true); + void recordAdd(String s, String p, String o, String c, long sampleEvery) { + record(s, p, o, c, sampleEvery, true); } - void recordDelete(String signature, long sampleEvery) { - record(signature, sampleEvery, false); + void recordDelete(String s, String p, String o, String c, long sampleEvery) { + record(s, p, o, c, sampleEvery, false); } - private void record(String signature, long sampleEvery, boolean isAdd) { + private void record(String s, String p, String o, String c, long sampleEvery, boolean isAdd) { if (sampleEvery <= 0) { return; } @@ -5741,6 +5780,7 @@ private void record(String signature, long sampleEvery, boolean isAdd) { return; } eventsSinceLastSample = 0L; + String signature = sig(s, p, o, c); samples.compute(signature, (sig, state) -> { if (state == null) { @@ -6195,8 +6235,15 @@ private static long percentToBytes(double fraction, long heapMaxBytes) { private void refreshCacheMetadataAccounting() { synchronized (sketchCacheLock) { + int cacheVersion = cacheDirectory.heapBytesVersion(); + int residentVersion = residentLru.heapBytesVersion(); + if (cacheVersion == cacheDirectoryMetadataVersion && residentVersion == residentLruMetadataVersion) { + return; + } long actualBytes = cacheDirectory.estimatedHeapBytes() + residentLru.estimatedHeapBytes(); long trackedBytes = Math.max(0L, actualBytes - baselineCacheMetadataBytes); + cacheDirectoryMetadataVersion = cacheVersion; + residentLruMetadataVersion = residentVersion; memoryRegistry.replace(MemoryCategory.CACHE_METADATA, MEMORY_OWNER_CACHE_METADATA, trackedBytes); } } @@ -6355,7 +6402,8 @@ private static SketchAddress pairAddress(byte recType, boolean isDelete, Pair pa } private UpdateSketch getSketchForRead(State state, SketchAddress address) { - UpdateSketch sketch = getResidentSketch(state, address); + UpdateSketch sketch = getResidentSketch(state, address.recType, address.isDelete, address.axisA, address.axisB, + address.x, address.y); if (sketch != null) { touchResidentSketch(state, address, sketch, false); return sketch; @@ -6364,37 +6412,43 @@ private UpdateSketch getSketchForRead(State state, SketchAddress address) { } private UpdateSketch getSketchForWrite(State state, SketchAddress address) { - UpdateSketch sketch = getResidentSketch(state, address); - if (sketch == null) { - sketch = loadPersistedSketch(state, address); - if (sketch != null) { - setResidentSketch(state, address, sketch); - } - } - if (sketch == null) { - ensureEstimatorCapacity(256L, true); - sketch = newSk(state.k); - setResidentSketch(state, address, sketch); - } - return sketch; + return getSketchForWrite(state, address.recType, address.isDelete, address.axisA, address.axisB, address.x, + address.y, -1); } private UpdateSketch getSketchForWrite(State state, SketchAddress address, int entryId) { - UpdateSketch sketch = getResidentSketch(state, address); + return getSketchForWrite(state, address.recType, address.isDelete, address.axisA, address.axisB, address.x, + address.y, entryId); + } + + private UpdateSketch getSketchForWrite(State state, byte recType, boolean isDelete, byte axisA, byte axisB, int x, + int y, int entryId) { + UpdateSketch sketch = getResidentSketch(state, recType, isDelete, axisA, axisB, x, y); if (sketch == null) { - sketch = loadPersistedSketch(state, address, entryId); + SketchAddress address = new SketchAddress(recType, isDelete, axisA, axisB, x, y); + sketch = entryId >= 0 ? loadPersistedSketch(state, address, entryId) : loadPersistedSketch(state, address); if (sketch != null) { - setResidentSketch(state, address, sketch); + setResidentSketch(state, recType, isDelete, axisA, axisB, x, y, sketch); } } if (sketch == null) { ensureEstimatorCapacity(256L, true); sketch = newSk(state.k); - setResidentSketch(state, address, sketch); + setResidentSketch(state, recType, isDelete, axisA, axisB, x, y, sketch); } return sketch; } + private void updateSingleSketchRaw(State state, boolean isDelete, Component component, int idx, long thetaHash) { + updateSketchRaw(state, REC_SINGLE_TRIPLE, isDelete, (byte) component.ordinal(), (byte) 0, idx, 0, thetaHash); + } + + private void updateComplementSketchRaw(State state, boolean isDelete, Component fixed, Component other, int idx, + long thetaHash) { + updateSketchRaw(state, REC_SINGLE_CPL, isDelete, (byte) fixed.ordinal(), (byte) other.ordinal(), idx, 0, + thetaHash); + } + private UpdateSketch loadPersistedSketch(State state, SketchAddress address) { int entryId; synchronized (sketchCacheLock) { @@ -6620,87 +6674,99 @@ private EvictionResult evictResidentSketch(int entryId, byte slotByte) { } private UpdateSketch getResidentSketch(State state, SketchAddress address) { - switch (address.recType) { + return getResidentSketch(state, address.recType, address.isDelete, address.axisA, address.axisB, address.x, + address.y); + } + + private UpdateSketch getResidentSketch(State state, byte recType, boolean isDelete, byte axisA, byte axisB, int x, + int y) { + switch (recType) { case REC_SINGLE_TRIPLE: { - Component component = Component.values()[address.axisA]; - AtomicReferenceArray arr = address.isDelete ? state.delSingleTriples.get(component) + Component component = COMPONENT_VALUES[axisA]; + AtomicReferenceArray arr = isDelete ? state.delSingleTriples.get(component) : state.singleTriples.get(component); - return arr.get(address.x); + return arr.get(x); } case REC_SINGLE_CPL: { - Component fixed = Component.values()[address.axisA]; - Component other = Component.values()[address.axisB]; - SingleBuild build = address.isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); + Component fixed = COMPONENT_VALUES[axisA]; + Component other = COMPONENT_VALUES[axisB]; + SingleBuild build = isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); AtomicReferenceArray arr = build.cmpl.get(other); - return arr == null ? null : arr.get(address.x); + return arr == null ? null : arr.get(x); } case REC_PAIR_TRIPLE: case REC_PAIR_COMP1: case REC_PAIR_COMP2: { - Pair pair = Pair.values()[address.axisA]; - PairBuild build = address.isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); - PairBuild.Row row = build.rows.get(address.x); + Pair pair = PAIR_VALUES[axisA]; + PairBuild build = isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); + PairBuild.Row row = build.rows.get(x); if (row == null) { return null; } - if (address.recType == REC_PAIR_TRIPLE) { - return row.triples.get(address.y); + if (recType == REC_PAIR_TRIPLE) { + return row.triples.get(y); } - if (address.recType == REC_PAIR_COMP1) { - return row.comp1.get(address.y); + if (recType == REC_PAIR_COMP1) { + return row.comp1.get(y); } - return row.comp2.get(address.y); + return row.comp2.get(y); } default: - throw new IllegalStateException("Unknown sketch record type: " + address.recType); + throw new IllegalStateException("Unknown sketch record type: " + recType); } } private void setResidentSketch(State state, SketchAddress address, UpdateSketch sketch) { - switch (address.recType) { + setResidentSketch(state, address.recType, address.isDelete, address.axisA, address.axisB, address.x, + address.y, sketch); + } + + private void setResidentSketch(State state, byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, + UpdateSketch sketch) { + switch (recType) { case REC_SINGLE_TRIPLE: { - Component component = Component.values()[address.axisA]; - AtomicReferenceArray arr = address.isDelete ? state.delSingleTriples.get(component) + Component component = COMPONENT_VALUES[axisA]; + AtomicReferenceArray arr = isDelete ? state.delSingleTriples.get(component) : state.singleTriples.get(component); - arr.set(address.x, sketch); + arr.set(x, sketch); return; } case REC_SINGLE_CPL: { - Component fixed = Component.values()[address.axisA]; - Component other = Component.values()[address.axisB]; - SingleBuild build = address.isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); + Component fixed = COMPONENT_VALUES[axisA]; + Component other = COMPONENT_VALUES[axisB]; + SingleBuild build = isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); AtomicReferenceArray arr = build.cmpl.get(other); if (arr != null) { - arr.set(address.x, sketch); + arr.set(x, sketch); } return; } case REC_PAIR_TRIPLE: case REC_PAIR_COMP1: case REC_PAIR_COMP2: { - Pair pair = Pair.values()[address.axisA]; - PairBuild build = address.isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); - PairBuild.Row row = build.getOrCreateRow(address.x); + Pair pair = PAIR_VALUES[axisA]; + PairBuild build = isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); + PairBuild.Row row = build.getOrCreateRow(x); Map target; - if (address.recType == REC_PAIR_TRIPLE) { + if (recType == REC_PAIR_TRIPLE) { target = row.triples; - } else if (address.recType == REC_PAIR_COMP1) { + } else if (recType == REC_PAIR_COMP1) { target = row.comp1; } else { target = row.comp2; } if (sketch == null) { - target.remove(address.y); + target.remove(y); if (row.triples.isEmpty() && row.comp1.isEmpty() && row.comp2.isEmpty()) { - build.rows.remove(address.x); + build.rows.remove(x); } } else { - target.put(address.y, sketch); + target.put(y, sketch); } return; } default: - throw new IllegalStateException("Unknown sketch record type: " + address.recType); + throw new IllegalStateException("Unknown sketch record type: " + recType); } } @@ -7724,20 +7790,35 @@ private static void clearArray(AtomicReferenceArray arr) { } private void updateSketch(State state, SketchAddress address, long value) { + updateSketchRaw(state, address, thetaHash(value)); + } + + private void updateSketchRaw(State state, SketchAddress address, long thetaHash) { + updateSketchRaw(state, address.recType, address.isDelete, address.axisA, address.axisB, address.x, address.y, + thetaHash); + } + + private void updateSketchRaw(State state, byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, + long thetaHash) { int entryId; synchronized (sketchCacheLock) { - entryId = cacheDirectory.findOrAdd(address); + entryId = cacheDirectory.findOrAdd(recType, isDelete, axisA, axisB, x, y); } - UpdateSketch sketch = getSketchForWrite(state, address, entryId); - sketch.update(value); + UpdateSketch sketch = getSketchForWrite(state, recType, isDelete, axisA, axisB, x, y, entryId); + hashUpdateRaw(sketch, thetaHash); markDirty(state, entryId); touchResidentSketch(state, entryId, sketch, false); } private void updatePairSketch(State state, boolean isDelete, Pair pair, byte recType, long key, long value) { + updatePairSketchRaw(state, isDelete, pair, recType, key, thetaHash(value)); + } + + private void updatePairSketchRaw(State state, boolean isDelete, Pair pair, byte recType, long key, + long thetaHash) { int x = (int) (key >>> 32); int y = (int) key; - updateSketch(state, pairAddress(recType, isDelete, pair, x, y), value); + updateSketchRaw(state, recType, isDelete, (byte) pair.ordinal(), (byte) 0, x, y, thetaHash); } private static void updateCell(AtomicReferenceArray arr, int idx, long value, int k) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/SketchEstimatorIngestionBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/SketchEstimatorIngestionBenchmark.java new file mode 100644 index 00000000000..aacae493c8a --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/SketchEstimatorIngestionBenchmark.java @@ -0,0 +1,258 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.benchmark; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.iteration.CloseableIteratorIteration; +import org.eclipse.rdf4j.common.transaction.IsolationLevel; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Namespace; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.sail.SailException; +import org.eclipse.rdf4j.sail.base.SailDataset; +import org.eclipse.rdf4j.sail.base.SailSink; +import org.eclipse.rdf4j.sail.base.SailSource; +import org.eclipse.rdf4j.sail.base.SailStore; +import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; + +/** + * Measures the pure estimator ingestion paths without LMDB I/O noise. + */ +@Warmup(iterations = 3, time = 200, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 5, time = 200, timeUnit = TimeUnit.MILLISECONDS) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +@Fork(value = 1, jvmArgs = { "-Xms1G", "-Xmx1G", "-XX:+UseG1GC" }) +public class SketchEstimatorIngestionBenchmark { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final SketchBasedJoinEstimator.Config CONFIG = SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(128) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + + @State(Scope.Thread) + public static class Fixture { + @Param({ "32768" }) + public int statementCount; + + List statements; + String predicateValue; + + @Setup(Level.Trial) + public void setupStatements() { + IRI predicate = VF.createIRI("urn:bench:p"); + Resource context = VF.createIRI("urn:bench:c"); + predicateValue = predicate.stringValue(); + statements = new ArrayList<>(statementCount); + for (int i = 0; i < statementCount; i++) { + statements.add(VF.createStatement( + VF.createIRI("urn:bench:s:" + i), + predicate, + VF.createIRI("urn:bench:o:" + (i % 97)), + context)); + } + } + } + + @State(Scope.Thread) + public static class IncrementalState extends Fixture { + SketchBasedJoinEstimator estimator; + + @Setup(Level.Invocation) + public void setupEstimator() { + estimator = new SketchBasedJoinEstimator(new BenchmarkSailStore(List.of()), CONFIG); + } + + @TearDown(Level.Invocation) + public void tearDownEstimator() { + estimator.close(); + } + } + + @State(Scope.Thread) + public static class RebuildState extends Fixture { + SketchBasedJoinEstimator estimator; + + @Setup(Level.Invocation) + public void setupEstimator() { + estimator = new SketchBasedJoinEstimator(new BenchmarkSailStore(statements), CONFIG); + } + + @TearDown(Level.Invocation) + public void tearDownEstimator() { + estimator.close(); + } + } + + @Benchmark + public double incrementalBatchFlush(IncrementalState state) { + for (Statement statement : state.statements) { + state.estimator.addStatement(statement); + } + return state.estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, state.predicateValue); + } + + @Benchmark + public long rebuildOnceSlow(RebuildState state) { + return state.estimator.rebuildOnceSlow(); + } + + private static final class BenchmarkSailStore implements SailStore { + private final List data; + + private BenchmarkSailStore(List data) { + this.data = List.copyOf(data); + } + + @Override + public ValueFactory getValueFactory() { + return VF; + } + + @Override + public EvaluationStatistics getEvaluationStatistics() { + return null; + } + + @Override + public SailSource getExplicitSailSource() { + return new BenchmarkSailSource(data); + } + + @Override + public SailSource getInferredSailSource() { + return null; + } + + @Override + public void close() throws SailException { + } + } + + private static final class BenchmarkSailSource implements SailSource { + private final List data; + + private BenchmarkSailSource(List data) { + this.data = data; + } + + @Override + public void close() { + } + + @Override + public SailSource fork() { + return null; + } + + @Override + public SailSink sink(IsolationLevel level) throws SailException { + return null; + } + + @Override + public SailDataset dataset(IsolationLevel level) throws SailException { + return new BenchmarkSailDataset(data); + } + + @Override + public void prepare() throws SailException { + } + + @Override + public void flush() throws SailException { + } + } + + private static final class BenchmarkSailDataset implements SailDataset { + private final List data; + + private BenchmarkSailDataset(List data) { + this.data = data; + } + + @Override + public void close() { + } + + @Override + public CloseableIteration getNamespaces() throws SailException { + return null; + } + + @Override + public String getNamespace(String prefix) throws SailException { + return null; + } + + @Override + public CloseableIteration getContextIDs() throws SailException { + return null; + } + + @Override + public CloseableIteration getStatements(Resource subj, IRI pred, Value obj, + Resource... contexts) throws SailException { + List matches = new ArrayList<>(data.size()); + for (Statement statement : data) { + if (subj != null && !subj.equals(statement.getSubject())) { + continue; + } + if (pred != null && !pred.equals(statement.getPredicate())) { + continue; + } + if (obj != null && !obj.equals(statement.getObject())) { + continue; + } + if (contexts != null && contexts.length > 0) { + boolean contextMatch = false; + for (Resource context : contexts) { + if (Objects.equals(context, statement.getContext())) { + contextMatch = true; + break; + } + } + if (!contextMatch) { + continue; + } + } + matches.add(statement); + } + return new CloseableIteratorIteration<>(matches.iterator()); + } + } +} diff --git a/scripts/run-single-benchmark-docker.sh b/scripts/run-single-benchmark-docker.sh index 1f41095916f..341aefac733 100755 --- a/scripts/run-single-benchmark-docker.sh +++ b/scripts/run-single-benchmark-docker.sh @@ -17,6 +17,7 @@ Environment: RDF4J_JMH_DOCKER_IMAGE Container image to use (default: maven:3.9.14-sapmachine-26) RDF4J_JMH_DOCKER_PLATFORM Optional docker platform override (for example linux/amd64) RDF4J_JMH_DOCKER_M2_REPO Maven local repo inside the container (default: /workspace/.m2_repo_linux_j25) + RDF4J_JMH_DOCKER_CONTAINER_NAME Optional reusable container name override USAGE } @@ -27,6 +28,7 @@ DOCKER_PLATFORM="${RDF4J_JMH_DOCKER_PLATFORM:-}" DOCKER_WORKDIR="/workspace" INNER_HOME="/tmp/home" CONTAINER_M2_REPO="${RDF4J_JMH_DOCKER_M2_REPO:-${DOCKER_WORKDIR}/.m2_repo_linux_j25}" +DOCKER_CONTAINER_NAME="${RDF4J_JMH_DOCKER_CONTAINER_NAME:-}" dry_run=false passthrough_args=() benchmark_id="" @@ -491,13 +493,62 @@ print_command() { printf '\n' } -docker_cmd=(docker run --rm) +sanitize_container_name_component() { + local value="$1" + + value="${value//[^A-Za-z0-9_.-]/-}" + value="${value##[-.]}" + value="${value%%[-.]}" + if [[ -z "${value}" ]]; then + value="repo" + fi + + printf '%s\n' "${value}" +} + +compute_container_name() { + local repo_component hash_input hash_value + + if [[ -n "${DOCKER_CONTAINER_NAME}" ]]; then + printf '%s\n' "${DOCKER_CONTAINER_NAME}" + return 0 + fi + + repo_component="$(sanitize_container_name_component "$(basename "${REPO_ROOT}")")" + hash_input="${REPO_ROOT}|${DOCKER_IMAGE}|${DOCKER_PLATFORM}|$(id -u)|${CONTAINER_M2_REPO}" + if command -v shasum >/dev/null 2>&1; then + hash_value="$(printf '%s' "${hash_input}" | shasum -a 256 | awk '{print substr($1, 1, 12)}')" + elif command -v sha256sum >/dev/null 2>&1; then + hash_value="$(printf '%s' "${hash_input}" | sha256sum | awk '{print substr($1, 1, 12)}')" + else + echo "Error: Need shasum or sha256sum to derive a reusable benchmark container name." >&2 + exit 1 + fi + + printf 'rdf4j-jmh-%s-%s\n' "${repo_component}" "${hash_value}" +} + +container_exists() { + local container_name="$1" + docker container inspect "${container_name}" >/dev/null 2>&1 +} + +container_running() { + local container_name="$1" + [[ "$(docker container inspect -f '{{.State.Running}}' "${container_name}" 2>/dev/null)" == "true" ]] +} + +docker_create_cmd=(docker create) +docker_start_cmd=() +docker_exec_cmd=() +container_name="$(compute_container_name)" if [[ -n "${DOCKER_PLATFORM}" ]]; then - docker_cmd+=(--platform "${DOCKER_PLATFORM}") + docker_create_cmd+=(--platform "${DOCKER_PLATFORM}") fi -docker_cmd+=( +docker_create_cmd+=( + --name "${container_name}" -v "${REPO_ROOT}:${DOCKER_WORKDIR}" -w "${DOCKER_WORKDIR}" -e "MAVEN_OPTS=-Dmaven.repo.local=${CONTAINER_M2_REPO} -Duser.home=${INNER_HOME}" @@ -505,16 +556,39 @@ docker_cmd+=( -e "MAVEN_CONFIG=${INNER_HOME}/.m2" --user "$(id -u):$(id -g)" "${DOCKER_IMAGE}" + sleep infinity +) + +docker_start_cmd=(docker start "${container_name}") +docker_exec_cmd=( + docker exec + -w "${DOCKER_WORKDIR}" + "${container_name}" bash -c "mkdir -p \"\$HOME\" \"\$HOME/.m2\" && exec scripts/run-single-benchmark.sh \"\$@\" --enable-jfr --enable-jfr-cpu-times" run-single-benchmark-docker.sh ) -docker_cmd+=("${passthrough_args[@]}") +docker_exec_cmd+=("${passthrough_args[@]}") if ${dry_run}; then - print_command "${docker_cmd[@]}" + echo "# Create reusable benchmark container if missing:" + print_command "${docker_create_cmd[@]}" + echo "# Start reusable benchmark container if stopped:" + print_command "${docker_start_cmd[@]}" + echo "# Run the benchmark inside the reusable container:" + print_command "${docker_exec_cmd[@]}" exit 0 fi -print_command "${docker_cmd[@]}" -"${docker_cmd[@]}" +if ! container_exists "${container_name}"; then + print_command "${docker_create_cmd[@]}" + "${docker_create_cmd[@]}" >/dev/null +fi + +if ! container_running "${container_name}"; then + print_command "${docker_start_cmd[@]}" + "${docker_start_cmd[@]}" >/dev/null +fi + +print_command "${docker_exec_cmd[@]}" +"${docker_exec_cmd[@]}" diff --git a/scripts/run-single-benchmark.sh b/scripts/run-single-benchmark.sh index 32300b2d5c2..830a3462a81 100755 --- a/scripts/run-single-benchmark.sh +++ b/scripts/run-single-benchmark.sh @@ -6,6 +6,7 @@ usage() { Usage: $0 --module --class --method [options] Options: + --clean Force a clean rebuild before packaging --dry-run Print the Maven and JMH commands without executing them --warmup-iterations Number of warmup iterations (default: 1) --measurement-iterations Number of measurement iterations (default: 3) @@ -26,6 +27,7 @@ REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)" module="" benchmark_class="" benchmark_method="" +clean_build=false dry_run=false warmup_iterations=1 measurement_iterations=3 @@ -41,9 +43,14 @@ warmup_overridden=false measurement_overridden=false forks_overridden=false jfr_notice="" +mvn_threads="${RDF4J_BENCHMARK_MVN_THREADS:-2C}" while [[ $# -gt 0 ]]; do case "$1" in + --clean) + clean_build=true + shift + ;; --module|-m) module="$2" shift 2 @@ -196,8 +203,24 @@ if ${enable_jfr}; then jfr_notice="JFR profiling enabled: enforcing warmup=0, measurement=10 iterations of 10s, forks=1. Recording will be written to ${jfr_output}." fi -mvn_cmd_parallel=(mvn "-T" "2C" "-pl" "${module}" "-am" "-P" "benchmarks,quick" "-DskipTests" clean package) -mvn_cmd_single_threaded=(mvn "-pl" "${module}" "-am" "-P" "benchmarks,quick" "-DskipTests" clean package) +mvn_common_args=( + "-Dmaven.repo.local=.m2_repo" + "-pl" "${module}" + "-am" + "-P" "benchmarks,quick" +) +mvn_goals=(package) +if ${clean_build}; then + mvn_goals=(clean package) +fi + +mvn_cmd_parallel=(mvn) +if [[ -n "${mvn_threads}" ]]; then + mvn_cmd_parallel+=("-T" "${mvn_threads}") +fi +mvn_cmd_parallel+=("${mvn_common_args[@]}" "${mvn_goals[@]}") + +mvn_cmd_single_threaded=(mvn "${mvn_common_args[@]}" "${mvn_goals[@]}") benchmark_pattern="${benchmark_class}.${benchmark_method}" jmh_args=(-wi "${warmup_iterations}" -i "${measurement_iterations}" -f "${forks}") diff --git a/testsuites/benchmark/test-run-single-benchmark-docker.sh b/testsuites/benchmark/test-run-single-benchmark-docker.sh new file mode 100644 index 00000000000..dc2554ad91b --- /dev/null +++ b/testsuites/benchmark/test-run-single-benchmark-docker.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)" +SCRIPT="${REPO_ROOT}/scripts/run-single-benchmark-docker.sh" + +set +e +OUTPUT="$(bash "${SCRIPT}" org.eclipse.rdf4j.benchmark.ReasoningBenchmark.forwardChainingSchemaCachingRDFSInferencer --dry-run 2>&1)" +STATUS=$? +set -e + +echo "${OUTPUT}" + +if [[ ${STATUS} -ne 0 ]]; then + exit ${STATUS} +fi + +if [[ "${OUTPUT}" != *"docker create"* ]]; then + echo "Expected reusable container creation command in dry-run output" >&2 + exit 1 +fi + +if [[ "${OUTPUT}" != *"sleep infinity"* ]]; then + echo "Expected reusable benchmark container to stay alive between runs" >&2 + exit 1 +fi + +if [[ "${OUTPUT}" != *"docker exec"* ]]; then + echo "Expected benchmark command to run via docker exec" >&2 + exit 1 +fi + +if [[ "${OUTPUT}" != *"-v ${REPO_ROOT}:/workspace"* ]]; then + echo "Expected repository bind mount in dry-run output" >&2 + exit 1 +fi + +if [[ "${OUTPUT}" != *"--enable-jfr"* || "${OUTPUT}" != *"--enable-jfr-cpu-times"* ]]; then + echo "Expected helper to keep JFR CPU time profiling flags enabled" >&2 + exit 1 +fi + +exit 0 diff --git a/testsuites/benchmark/test-run-single-benchmark.sh b/testsuites/benchmark/test-run-single-benchmark.sh index 92a3e12d10c..31bf8014084 100755 --- a/testsuites/benchmark/test-run-single-benchmark.sh +++ b/testsuites/benchmark/test-run-single-benchmark.sh @@ -16,8 +16,8 @@ if [[ ${STATUS} -ne 0 ]]; then exit ${STATUS} fi -if [[ "${OUTPUT}" != *"mvn -pl testsuites/benchmark -am -P benchmarks -DskipTests package"* ]]; then - echo "Expected Maven command not found in output" >&2 +if [[ "${OUTPUT}" != *"mvn -T 2C -Dmaven.repo.local=.m2_repo -pl testsuites/benchmark -am -P benchmarks\\,quick package"* ]]; then + echo "Expected optimized parallel Maven command not found in output" >&2 exit 1 fi @@ -26,6 +26,32 @@ if [[ "${OUTPUT}" != *"ReasoningBenchmark.forwardChainingSchemaCachingRDFSInfere exit 1 fi +if [[ "${OUTPUT}" == *" clean package"* ]]; then + echo "Did not expect a clean rebuild in the default fast path" >&2 + exit 1 +fi + +if [[ "${OUTPUT}" != *$'# On failure, reruns single-threaded:\nmvn -Dmaven.repo.local=.m2_repo -pl testsuites/benchmark -am -P benchmarks\\,quick package'* ]]; then + echo "Expected single-threaded fallback command not found in output" >&2 + exit 1 +fi + +set +e +CLEAN_OUTPUT="$(bash "${SCRIPT}" --dry-run --clean --module testsuites/benchmark --class org.eclipse.rdf4j.benchmark.ReasoningBenchmark --method forwardChainingSchemaCachingRDFSInferencer 2>&1)" +CLEAN_STATUS=$? +set -e + +echo "${CLEAN_OUTPUT}" + +if [[ ${CLEAN_STATUS} -ne 0 ]]; then + exit ${CLEAN_STATUS} +fi + +if [[ "${CLEAN_OUTPUT}" != *"mvn -T 2C -Dmaven.repo.local=.m2_repo -pl testsuites/benchmark -am -P benchmarks\\,quick clean package"* ]]; then + echo "Expected clean rebuild command not found in output" >&2 + exit 1 +fi + set +e JFR_OUTPUT="$(bash "${SCRIPT}" --dry-run --module testsuites/benchmark --class org.eclipse.rdf4j.benchmark.ReasoningBenchmark --method forwardChainingSchemaCachingRDFSInferencer --enable-jfr 2>&1)" JFR_STATUS=$? @@ -89,8 +115,13 @@ if [[ ${JFR_CPU_STATUS} -ne 0 ]]; then exit ${JFR_CPU_STATUS} fi -if [[ "${JFR_CPU_OUTPUT}" != *"-XX:FlightRecorderOptions=enableThreadCpuTime=true\\,enableProcessCpuTime=true"* ]]; then - echo "Expected CPU time options to be appended when requested" >&2 +if [[ "${JFR_CPU_OUTPUT}" != *"jdk.CPUTimeSample#enabled=true"* ]]; then + echo "Expected CPU time sampling to be enabled when requested" >&2 + exit 1 +fi + +if [[ "${JFR_CPU_OUTPUT}" != *"report-on-exit=cpu-time-hot-methods"* ]]; then + echo "Expected CPU time report to be enabled when requested" >&2 exit 1 fi From d01550d19faee40ec41e0f5a8a9e1b0681da7243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sun, 19 Apr 2026 00:14:00 +0200 Subject: [PATCH 15/43] fixes --- .../sail/base/SketchBasedJoinEstimator.java | 62 +++++++------------ .../rdf4j/sail/lmdb/LmdbSailStore.java | 19 +++++- .../eclipse/rdf4j/sail/lmdb/TripleStore.java | 49 ++++++++++++--- ...LmdbSailStoreEstimatorPersistenceTest.java | 28 +++++++++ 4 files changed, 108 insertions(+), 50 deletions(-) diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 5fee8495345..4a7de7dde32 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -2180,7 +2180,9 @@ public synchronized long rebuildOnceSlow() { // } if (true) { - System.out.println("RdfJoinEstimator: Rebuilding "+(rebuildIntoA ? "bufA" : "bufB")+", seen "+seen / 1000 / 1000+" million triples so far. Elapsed: "+((System.currentTimeMillis() - l) / 1000)+" s."); + System.out.println("RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") + + ", seen " + seen / 1000 / 1000 + " million triples so far. Elapsed: " + + ((System.currentTimeMillis() - l) / 1000) + " s."); } @@ -2322,31 +2324,7 @@ && hasSnapshotAvailable(persistenceFile)) { seenTriples = approxStoreSize.incrementAndGet(); try { - IngestEvent event = toIngestEvent(s, p, o, c, false); - - if (event != null) { - while (true) { - long epoch = rebuildEpoch.get(); - if ((epoch & 1L) != 0L) { - synchronized (bufA) { - ingest(bufA, event); - } - synchronized (bufB) { - ingest(bufB, event); - } - break; - } - - State target = current; - synchronized (target) { - if (rebuildEpoch.get() != epoch) { - continue; - } - ingest(target, event); - break; - } - } - } + ingestIncremental(s, p, o, c, false); } catch (MemoryPressureAbort | OutOfMemoryError oom) { logger.warn("Out of memory while applying incremental estimator update; unloading sketches", oom); @@ -6235,19 +6213,23 @@ private static long percentToBytes(double fraction, long heapMaxBytes) { private void refreshCacheMetadataAccounting() { synchronized (sketchCacheLock) { - int cacheVersion = cacheDirectory.heapBytesVersion(); - int residentVersion = residentLru.heapBytesVersion(); - if (cacheVersion == cacheDirectoryMetadataVersion && residentVersion == residentLruMetadataVersion) { - return; - } - long actualBytes = cacheDirectory.estimatedHeapBytes() + residentLru.estimatedHeapBytes(); - long trackedBytes = Math.max(0L, actualBytes - baselineCacheMetadataBytes); - cacheDirectoryMetadataVersion = cacheVersion; - residentLruMetadataVersion = residentVersion; - memoryRegistry.replace(MemoryCategory.CACHE_METADATA, MEMORY_OWNER_CACHE_METADATA, trackedBytes); + refreshCacheMetadataAccountingLocked(); } } + private void refreshCacheMetadataAccountingLocked() { + int cacheVersion = cacheDirectory.heapBytesVersion(); + int residentVersion = residentLru.heapBytesVersion(); + if (cacheVersion == cacheDirectoryMetadataVersion && residentVersion == residentLruMetadataVersion) { + return; + } + long actualBytes = cacheDirectory.estimatedHeapBytes() + residentLru.estimatedHeapBytes(); + long trackedBytes = Math.max(0L, actualBytes - baselineCacheMetadataBytes); + cacheDirectoryMetadataVersion = cacheVersion; + residentLruMetadataVersion = residentVersion; + memoryRegistry.replace(MemoryCategory.CACHE_METADATA, MEMORY_OWNER_CACHE_METADATA, trackedBytes); + } + DebugMemorySnapshot debugMemorySnapshot() { return memoryRegistry.snapshot(); } @@ -6503,20 +6485,24 @@ private void touchResidentSketch(State state, SketchAddress address, UpdateSketc private void touchResidentSketch(State state, int entryId, UpdateSketch sketch, boolean enforceBudget) { byte slot = slotByte(slotOf(state)); long bytes = estimatedSketchBytes(sketch); + boolean residentBytesChanged = true; synchronized (sketchCacheLock) { int nodeId = cacheDirectory.residentNode(entryId, slot); if (nodeId == -1) { int createdNodeId = residentLru.add(entryId, slot, bytes); cacheDirectory.setResidentNode(entryId, slot, createdNodeId); residentSketchBytes += bytes; + refreshCacheMetadataAccountingLocked(); } else { long previousBytes = residentLru.bytes(nodeId); residentLru.touch(nodeId, bytes); residentSketchBytes += (bytes - previousBytes); + residentBytesChanged = bytes != previousBytes; } } - replaceTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(slot, entryId), bytes); - refreshCacheMetadataAccounting(); + if (residentBytesChanged) { + replaceTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(slot, entryId), bytes); + } if (enforceBudget) { enforceSketchBudget(); } diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java index fbef3928669..5ed14b4c690 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java @@ -196,8 +196,10 @@ class BulkAddQuadsOperation implements Operation { final long[] predicates; final long[] objects; final long[] contexts; + final Statement[] statements; final boolean explicit; final int capacity; + Consumer estimatorCallback; int size; BulkAddQuadsOperation(boolean explicit) { @@ -207,6 +209,7 @@ class BulkAddQuadsOperation implements Operation { this.predicates = new long[capacity]; this.objects = new long[capacity]; this.contexts = new long[capacity]; + this.statements = new Statement[capacity]; } void add(long subject, long predicate, long object, long context) { @@ -240,11 +243,20 @@ public void execute() throws IOException { } if (size < capacity) { for (int i = 0; i < size; i++) { - tripleStore.storeTriple(subjects[i], predicates[i], objects[i], contexts[i], explicit); + boolean added = tripleStore.storeTriple(subjects[i], predicates[i], objects[i], contexts[i], + explicit); + if (added && explicit && estimatorCallback != null) { + estimatorCallback.accept(statements[i]); + } } return; } - tripleStore.storeTriplesAligned(subjects, predicates, objects, contexts, size, explicit); + tripleStore.storeTriplesAligned(subjects, predicates, objects, contexts, size, explicit, + statementIndex -> { + if (explicit && estimatorCallback != null) { + estimatorCallback.accept(statements[statementIndex]); + } + }); } } @@ -827,6 +839,7 @@ private void approveAllBulk(Set approved, Set approvedConte Resource previousSubject = null; long previousSubjectId = LmdbValue.UNKNOWN_ID; BulkAddQuadsOperation bulk = new BulkAddQuadsOperation(explicit); + bulk.estimatorCallback = this::queueEstimatorAdd; for (Statement statement : approved) { last = statement; @@ -856,6 +869,7 @@ private void approveAllBulk(Set approved, Set approvedConte } int batchIndex = bulk.size - 1; + bulk.statements[batchIndex] = valueStore.createStatement(subj, pred, obj, context); Long predicateId = predicateCache.get(pred); if (predicateId == null) { @@ -879,6 +893,7 @@ private void approveAllBulk(Set approved, Set approvedConte if (bulk.isFull()) { submitOperation(bulk); bulk = new BulkAddQuadsOperation(explicit); + bulk.estimatorCallback = this::queueEstimatorAdd; } } diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java index 5e4cb670a1d..29f1de05b3a 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/TripleStore.java @@ -86,6 +86,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; import java.util.function.Consumer; +import java.util.function.IntConsumer; import org.eclipse.collections.api.iterator.LongIterator; import org.eclipse.collections.impl.map.mutable.primitive.LongIntHashMap; @@ -1260,11 +1261,18 @@ public boolean storeTriple(long subj, long pred, long obj, long context, boolean @Experimental public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] context, int count, boolean explicit) throws IOException { + storeTriplesAligned(subj, pred, obj, context, count, explicit, null); + } + + @Experimental + public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] context, int count, boolean explicit, + IntConsumer addedIndexConsumer) + throws IOException { if (count == 0) { return; } if (count == 1 || count < subj.length || recordCache != null || requiresResize()) { - storeTriplesIndividually(subj, pred, obj, context, count, explicit); + storeTriplesIndividually(subj, pred, obj, context, count, explicit, addedIndexConsumer); return; } @@ -1302,6 +1310,9 @@ public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] con } if (rc == MDB_SUCCESS) { + if (addedIndexConsumer != null) { + addedIndexConsumer.accept(i); + } sortedIndices[addedCount++] = i; if (explicit) { promotedFromImplicit[i] = mdb_del(writeTxn, mainIndex.getDB(false), keyVal, @@ -1326,7 +1337,8 @@ public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] con throw e; } fallBackFromAlignedWrite(mainOrderIndices, addedCount, subj, pred, obj, context, - promotedFromImplicit, remainingStart, count, explicit, appliedContextIncrements); + promotedFromImplicit, remainingStart, count, explicit, appliedContextIncrements, + addedIndexConsumer); return; } @@ -1354,14 +1366,16 @@ public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] con } if (shouldFallBackFromAlignedWrite()) { fallBackFromAlignedWrite(mainOrderIndices, addedCount, subj, pred, obj, context, - promotedFromImplicit, remainingStart, count, explicit, contextIncrements); + promotedFromImplicit, remainingStart, count, explicit, contextIncrements, + addedIndexConsumer); return; } if (REUSE_SECONDARY_WRITE_CURSOR) { int rc = mdb_cursor_put(secondaryWriteCursor, keyVal, dataVal, 0); if (rc == MDB_MAP_FULL && autoGrow) { fallBackFromAlignedWrite(mainOrderIndices, addedCount, subj, pred, obj, context, - promotedFromImplicit, remainingStart, count, explicit, contextIncrements); + promotedFromImplicit, remainingStart, count, explicit, contextIncrements, + addedIndexConsumer); return; } E(rc); @@ -1369,7 +1383,8 @@ public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] con int rc = mdb_put(writeTxn, index.getDB(explicit), keyVal, dataVal, 0); if (rc == MDB_MAP_FULL && autoGrow) { fallBackFromAlignedWrite(mainOrderIndices, addedCount, subj, pred, obj, context, - promotedFromImplicit, remainingStart, count, explicit, contextIncrements); + promotedFromImplicit, remainingStart, count, explicit, contextIncrements, + addedIndexConsumer); return; } E(rc); @@ -1379,7 +1394,7 @@ public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] con } if (remainingStart < count) { - storeTriplesIndividually(subj, pred, obj, context, remainingStart, count, explicit); + storeTriplesIndividually(subj, pred, obj, context, remainingStart, count, explicit, addedIndexConsumer); } logAddedStatements(addedCount); @@ -1388,14 +1403,28 @@ public void storeTriplesAligned(long[] subj, long[] pred, long[] obj, long[] con private void storeTriplesIndividually(long[] subj, long[] pred, long[] obj, long[] context, int count, boolean explicit) throws IOException { - storeTriplesIndividually(subj, pred, obj, context, 0, count, explicit); + storeTriplesIndividually(subj, pred, obj, context, 0, count, explicit, null); + } + + private void storeTriplesIndividually(long[] subj, long[] pred, long[] obj, long[] context, int count, + boolean explicit, IntConsumer addedIndexConsumer) + throws IOException { + storeTriplesIndividually(subj, pred, obj, context, 0, count, explicit, addedIndexConsumer); } private void storeTriplesIndividually(long[] subj, long[] pred, long[] obj, long[] context, int startIndex, int count, boolean explicit) throws IOException { + storeTriplesIndividually(subj, pred, obj, context, startIndex, count, explicit, null); + } + + private void storeTriplesIndividually(long[] subj, long[] pred, long[] obj, long[] context, int startIndex, + int count, boolean explicit, IntConsumer addedIndexConsumer) + throws IOException { for (int i = startIndex; i < count; i++) { - storeTriple(subj[i], pred[i], obj[i], context[i], explicit); + if (storeTriple(subj[i], pred[i], obj[i], context[i], explicit) && addedIndexConsumer != null) { + addedIndexConsumer.accept(i); + } } } @@ -1405,7 +1434,7 @@ private boolean shouldFallBackFromAlignedWrite() { private void fallBackFromAlignedWrite(int[] addedStatementIndices, int addedCount, long[] subj, long[] pred, long[] obj, long[] context, boolean[] promotedFromImplicit, int remainingStart, int count, boolean explicit, - LongIntHashMap contextIncrementsToUndo) + LongIntHashMap contextIncrementsToUndo, IntConsumer addedIndexConsumer) throws IOException { undoContextIncrements(contextIncrementsToUndo); if (recordCache == null) { @@ -1428,7 +1457,7 @@ private void fallBackFromAlignedWrite(int[] addedStatementIndices, int addedCoun } } if (remainingStart < count) { - storeTriplesIndividually(subj, pred, obj, context, remainingStart, count, explicit); + storeTriplesIndividually(subj, pred, obj, context, remainingStart, count, explicit, addedIndexConsumer); } } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java index 838c1589b6d..550d9ca5208 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStoreEstimatorPersistenceTest.java @@ -311,6 +311,34 @@ void repeatedRepositoryInitShutdownKeepsPersistedSketchesLoadable(@TempDir File } } + @Test + void readCommittedCommitAppliesEstimatorUpdates(@TempDir File dataDir) throws Exception { + var vf = SimpleValueFactory.getInstance(); + var s = vf.createIRI("urn:rc:s"); + var p = vf.createIRI("urn:rc:p"); + var o = vf.createIRI("urn:rc:o"); + + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig("spoc")); + store.init(); + try { + LmdbSailStore backingStore = store.getBackingStore(); + SketchBasedJoinEstimator estimator = backingStore.getSketchBasedJoinEstimator(); + estimator.stop(); + estimator.setRebuildAllowedSupplier(() -> false); + + try (NotifyingSailConnection conn = store.getConnection()) { + conn.begin(IsolationLevels.READ_COMMITTED); + conn.addStatement(s, p, o); + conn.commit(); + } + + assertEquals(1.0d, estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, p.stringValue()), 0.0d, + "Estimator should track committed READ_COMMITTED additions"); + } finally { + store.shutDown(); + } + } + @Test void noneIsolationAppliesEstimatorUpdatesAcrossSinkFlushes(@TempDir File dataDir) throws Exception { var vf = SimpleValueFactory.getInstance(); From fb7d7e7ec11340e5a3523c6ca656ca2c1fca567c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sun, 19 Apr 2026 20:42:01 +0200 Subject: [PATCH 16/43] fixes --- .../sail/base/SketchBasedJoinEstimator.java | 554 +- ...etchBasedJoinEstimatorPersistenceTest.java | 116 +- .../sail/lmdb/benchmark/results-2026-04-19.md | 12284 ++++++++++++++++ 3 files changed, 12842 insertions(+), 112 deletions(-) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 4a7de7dde32..d6dfd6b507b 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -44,9 +44,16 @@ import java.util.Optional; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReferenceArray; import java.util.function.BooleanSupplier; import java.util.function.Consumer; @@ -396,6 +403,16 @@ enum SketchPlannerPath { private static final byte REC_PAIR_TRIPLE = 3; private static final byte REC_PAIR_COMP1 = 4; private static final byte REC_PAIR_COMP2 = 5; + private static final int DELETE_KEY_PREFIX_MASK = 1 << 8; + private static final int COMPONENT_S_INDEX = Component.S.ordinal(); + private static final int COMPONENT_P_INDEX = Component.P.ordinal(); + private static final int COMPONENT_O_INDEX = Component.O.ordinal(); + private static final int COMPONENT_C_INDEX = Component.C.ordinal(); + private static final int[] SINGLE_TRIPLE_KEY_PREFIXES = buildComponentKeyPrefixes(REC_SINGLE_TRIPLE); + private static final int[][] SINGLE_COMPLEMENT_KEY_PREFIXES = buildComponentPairKeyPrefixes(REC_SINGLE_CPL); + private static final int[] PAIR_TRIPLE_KEY_PREFIXES = buildPairKeyPrefixes(REC_PAIR_TRIPLE); + private static final int[] PAIR_COMP1_KEY_PREFIXES = buildPairKeyPrefixes(REC_PAIR_COMP1); + private static final int[] PAIR_COMP2_KEY_PREFIXES = buildPairKeyPrefixes(REC_PAIR_COMP2); private static int packKeyPrefix(byte recType, boolean isDelete, byte axisA, byte axisB) { int prefix = recType & 0xff; @@ -405,6 +422,33 @@ private static int packKeyPrefix(byte recType, boolean isDelete, byte axisA, byt return prefix; } + private static int[] buildComponentKeyPrefixes(byte recType) { + int[] prefixes = new int[COMPONENT_VALUES.length]; + for (Component component : COMPONENT_VALUES) { + prefixes[component.ordinal()] = packKeyPrefix(recType, false, (byte) component.ordinal(), (byte) 0); + } + return prefixes; + } + + private static int[][] buildComponentPairKeyPrefixes(byte recType) { + int[][] prefixes = new int[COMPONENT_VALUES.length][COMPONENT_VALUES.length]; + for (Component axisA : COMPONENT_VALUES) { + for (Component axisB : COMPONENT_VALUES) { + prefixes[axisA.ordinal()][axisB.ordinal()] = packKeyPrefix(recType, false, (byte) axisA.ordinal(), + (byte) axisB.ordinal()); + } + } + return prefixes; + } + + private static int[] buildPairKeyPrefixes(byte recType) { + int[] prefixes = new int[PAIR_VALUES.length]; + for (Pair pair : PAIR_VALUES) { + prefixes[pair.ordinal()] = packKeyPrefix(recType, false, (byte) pair.ordinal(), (byte) 0); + } + return prefixes; + } + private static int mixAddressHash(int keyPrefix, int x, int y) { int h = 31 * keyPrefix + x; h = 31 * h + y; @@ -657,11 +701,15 @@ private int findOrAdd(SketchAddress address) { } private int findOrAdd(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y) { + int keyPrefix = packKeyPrefix(recType, isDelete, axisA, axisB); + int keyHash = mixAddressHash(keyPrefix, x, y); + return findOrAdd(keyPrefix, keyHash, x, y); + } + + private int findOrAdd(int keyPrefix, int keyHash, int x, int y) { if ((size + 1) * 10 >= buckets.length * 7) { rehash(buckets.length << 1); } - int keyPrefix = packKeyPrefix(recType, isDelete, axisA, axisB); - int keyHash = mixAddressHash(keyPrefix, x, y); int slot = keyHash & bucketMask; while (true) { long bucket = buckets[slot]; @@ -1506,12 +1554,18 @@ private IngestEvent(boolean isDelete, int si, int pi, int oi, int ci, long theta } } - @FunctionalInterface - private interface BatchUpdateConsumer { - void accept(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, long[] values, - int valueCount); + private enum IngestPartition { + SINGLES, + SP, + SO, + SC, + PO, + PC, + OC } + private static final IngestPartition[] INGEST_PARTITIONS = IngestPartition.values(); + private static final class BatchUpdateAccumulator { private static final long EMPTY_BUCKET = 0L; @@ -1520,9 +1574,11 @@ private static final class BatchUpdateAccumulator { private int bucketMask; private int[] keyPrefixes; + private int[] keyHashes; private int[] xs; private int[] ys; - private long[][] values; + private long[] firstValues; + private long[][] overflowValues; private int[] valueCounts; private BatchUpdateAccumulator(int expectedUpdates) { @@ -1539,9 +1595,10 @@ private BatchUpdateAccumulator(int expectedUpdates) { entryCapacity <<= 1; } keyPrefixes = new int[entryCapacity]; + keyHashes = new int[entryCapacity]; xs = new int[entryCapacity]; ys = new int[entryCapacity]; - values = new long[entryCapacity][]; + firstValues = new long[entryCapacity]; valueCounts = new int[entryCapacity]; } @@ -1551,10 +1608,13 @@ private void initBuckets(int capacity) { } private void add(byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, long value) { + add(packKeyPrefix(recType, isDelete, axisA, axisB), x, y, value); + } + + private void add(int keyPrefix, int x, int y, long value) { if ((size + 1) * 10 >= buckets.length * 7) { rehash(buckets.length << 1); } - int keyPrefix = packKeyPrefix(recType, isDelete, axisA, axisB); int keyHash = mixAddressHash(keyPrefix, x, y); int slot = keyHash & bucketMask; while (true) { @@ -1564,11 +1624,11 @@ private void add(byte recType, boolean isDelete, byte axisA, byte axisB, int x, ensureEntryCapacity(size); buckets[slot] = encodeBucket(keyHash, entryId); keyPrefixes[entryId] = keyPrefix; + keyHashes[entryId] = keyHash; xs[entryId] = x; ys[entryId] = y; - values[entryId] = new long[8]; - valueCounts[entryId] = 0; - appendValue(entryId, value); + firstValues[entryId] = value; + valueCounts[entryId] = 1; return; } if (bucketHash(bucket) == keyHash) { @@ -1595,13 +1655,22 @@ private static int bucketEntryId(long bucket) { } private void appendValue(int entryId, long value) { - long[] entryValues = values[entryId]; int count = valueCounts[entryId]; - if (count == entryValues.length) { - entryValues = Arrays.copyOf(entryValues, count << 1); - values[entryId] = entryValues; - } - entryValues[count] = value; + long[][] allOverflowValues = overflowValues; + if (allOverflowValues == null) { + allOverflowValues = new long[keyPrefixes.length][]; + overflowValues = allOverflowValues; + } + long[] entryValues = allOverflowValues[entryId]; + int overflowIndex = count - 1; + if (entryValues == null) { + entryValues = new long[8]; + allOverflowValues[entryId] = entryValues; + } else if (overflowIndex == entryValues.length) { + entryValues = Arrays.copyOf(entryValues, overflowIndex << 1); + allOverflowValues[entryId] = entryValues; + } + entryValues[overflowIndex] = value; valueCounts[entryId] = count + 1; } @@ -1615,9 +1684,13 @@ private void ensureEntryCapacity(int minCapacity) { next <<= 1; } keyPrefixes = Arrays.copyOf(keyPrefixes, next); + keyHashes = Arrays.copyOf(keyHashes, next); xs = Arrays.copyOf(xs, next); ys = Arrays.copyOf(ys, next); - values = Arrays.copyOf(values, next); + firstValues = Arrays.copyOf(firstValues, next); + if (overflowValues != null) { + overflowValues = Arrays.copyOf(overflowValues, next); + } valueCounts = Arrays.copyOf(valueCounts, next); } @@ -1636,12 +1709,12 @@ private void rehash(int newCapacity) { } } - private void forEach(BatchUpdateConsumer consumer) { + private void applyTo(SketchBasedJoinEstimator estimator, State state, byte slot) { + long[][] allOverflowValues = overflowValues; for (int i = 0; i < size; i++) { - int keyPrefix = keyPrefixes[i]; - consumer.accept((byte) keyPrefix, ((keyPrefix >>> 8) & 1) != 0, (byte) (keyPrefix >>> 16), - (byte) (keyPrefix >>> 24), xs[i], ys[i], - values[i], + estimator.applyGroupedUpdate(state, slot, keyPrefixes[i], keyHashes[i], xs[i], ys[i], + firstValues[i], + allOverflowValues == null ? null : allOverflowValues[i], valueCounts[i]); } } @@ -1697,10 +1770,22 @@ private void forEach(BatchUpdateConsumer consumer) { private long residentSketchBytes; private static final int INCREMENTAL_BATCH_SIZE = 32 * 1024; - private static final int REBUILD_BATCH_SIZE = 4 * 1024 * 1024; + private static final int ASYNC_INCREMENTAL_QUEUE_CAPACITY = 8; + private static final long ASYNC_INCREMENTAL_QUEUE_OFFER_TIMEOUT_MILLIS = 10L; + private static final int PARALLEL_INGEST_MIN_BATCH_SIZE = INCREMENTAL_BATCH_SIZE; + private static final int PARALLEL_INGEST_MAX_BATCH_SIZE = INCREMENTAL_BATCH_SIZE * 2; + private static final int REBUILD_BATCH_SIZE = PARALLEL_INGEST_MAX_BATCH_SIZE; private final Object incrementalBufferLock = new Object(); + private final Object asyncIncrementalDrainLock = new Object(); + private final BlockingQueue asyncIncrementalBatches = new ArrayBlockingQueue<>( + ASYNC_INCREMENTAL_QUEUE_CAPACITY); + private final AtomicReference asyncIncrementalFailure = new AtomicReference<>(); + private final ExecutorService asyncIncrementalExecutor; + private final ExecutorService ingestPartitionExecutor; + private final Future asyncIncrementalWorker; private IngestEvent[] incrementalBuffer = new IngestEvent[INCREMENTAL_BATCH_SIZE * 2]; private int incrementalBufferCount; + private int asyncIncrementalBatchCount; // ────────────────────────────────────────────────────────────── // Staleness tracking (global, lock‑free reads) @@ -1847,6 +1932,11 @@ public SketchBasedJoinEstimator(SailStore sailStore, Config cfg) { this.robustRebuildEnableHeadroomBytes = enableHeadroom; this.robustRebuildGcProbeFloorBytes = Math.max(MIN_ROBUST_REBUILD_HEADROOM_BYTES / 2, disableHeadroom / 2); refreshCacheMetadataAccounting(); + this.asyncIncrementalExecutor = Executors + .newThreadPerTaskExecutor(Thread.ofVirtual().name("RdfJoinEstimator-Ingest-", 0).factory()); + this.ingestPartitionExecutor = Executors + .newThreadPerTaskExecutor(Thread.ofVirtual().name("RdfJoinEstimator-Partition-", 0).factory()); + this.asyncIncrementalWorker = asyncIncrementalExecutor.submit(this::runAsyncIncrementalIngest); } private static int resolveSketchK(int kProp, int kCfg, int buckets, int kMult) { @@ -2093,6 +2183,7 @@ public void close() { try { persistIfDirty(); } finally { + shutdownAsyncIncrementalIngest(); clearEstimateCache(); closeMappedChannels(); deleteTemporaryBlobBaseForSlot((byte) 0); @@ -2100,6 +2191,19 @@ public void close() { } } + private void shutdownAsyncIncrementalIngest() { + asyncIncrementalExecutor.shutdownNow(); + try { + asyncIncrementalWorker.get(1, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } catch (Exception e) { + logger.debug("Join estimator async ingestion worker stopped with an exception", e); + } finally { + ingestPartitionExecutor.shutdownNow(); + } + } + /* ────────────────────────────────────────────────────────────── */ /* Rebuild */ /* ────────────────────────────────────────────────────────────── */ @@ -2136,6 +2240,7 @@ public synchronized long rebuildOnceSlow() { rebuildEpoch.incrementAndGet(); // mark rebuild in progress (odd epoch) long seen = 0L; long l = System.currentTimeMillis(); + long lastLoggedRebuildMillion = -1L; lastRobustSynopsisSpillSegmentCount = 0; try { try ( @@ -2171,19 +2276,16 @@ public synchronized long rebuildOnceSlow() { // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); rebuildBatchSize = 0; -// if (logger.isDebugEnabled()) { -// logger.debug( -// "RdfJoinEstimator: Rebuilding {}, seen {} million triples so far. Elapsed: {} s.", -// rebuildIntoA ? "bufA" : "bufB", -// seen / 1000 / 1000, -// (System.currentTimeMillis() - l) / 1000); -// } - - if (true) { - System.out.println("RdfJoinEstimator: Rebuilding " + (rebuildIntoA ? "bufA" : "bufB") - + ", seen " + seen / 1000 / 1000 + " million triples so far. Elapsed: " - + ((System.currentTimeMillis() - l) / 1000) + " s."); - + if (logger.isDebugEnabled()) { + long seenMillion = seen / 1_000_000; + if (seenMillion != lastLoggedRebuildMillion) { + lastLoggedRebuildMillion = seenMillion; + logger.debug( + "RdfJoinEstimator: Rebuilding {}, seen {} million triples so far. Elapsed: {} s.", + rebuildIntoA ? "bufA" : "bufB", + seenMillion, + (System.currentTimeMillis() - l) / 1000); + } } } @@ -2380,12 +2482,12 @@ public void deleteStatement(Resource s, IRI p, Value o) { } private IngestEvent ingestIncremental(String s, String p, String o, String c, boolean isDelete) { + rethrowAsyncIncrementalFailure(); IngestEvent event = toIngestEvent(s, p, o, c, isDelete); if (event == null) { return null; } IngestEvent[] batch = null; - int batchSize = 0; synchronized (incrementalBufferLock) { ensureIncrementalBufferCapacity(incrementalBufferCount + 1); incrementalBuffer[incrementalBufferCount++] = event; @@ -2395,11 +2497,10 @@ private IngestEvent ingestIncremental(String s, String p, String o, String c, bo incrementalBufferCount, seenTriples); } batch = drainIncrementalBufferLocked(); - batchSize = batch.length; } } if (batch != null) { - applyIncrementalBatch(batch, batchSize); + enqueueIncrementalBatch(batch); } return event; } @@ -2456,18 +2557,116 @@ private IngestEvent[] drainIncrementalBufferLocked() { } private void flushPendingIncremental() { + rethrowAsyncIncrementalFailure(); + waitForAsyncIncrementalBatches(); while (true) { IngestEvent[] batch; - int batchSize; synchronized (incrementalBufferLock) { batch = drainIncrementalBufferLocked(); if (batch == null) { - return; + break; } - batchSize = batch.length; } - applyIncrementalBatch(batch, batchSize); + applyIncrementalBatch(batch, batch.length); + waitForAsyncIncrementalBatches(); } + rethrowAsyncIncrementalFailure(); + } + + private void enqueueIncrementalBatch(IngestEvent[] batch) { + if (batch.length == 0) { + return; + } + incrementAsyncIncrementalBatchCount(); + boolean queued = false; + try { + while (!queued) { + rethrowAsyncIncrementalFailure(); + queued = asyncIncrementalBatches.offer(batch, ASYNC_INCREMENTAL_QUEUE_OFFER_TIMEOUT_MILLIS, + TimeUnit.MILLISECONDS); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + recordAsyncIncrementalFailure(e); + throw new RuntimeException("Interrupted while queueing incremental join-estimator ingestion", e); + } finally { + if (!queued) { + completeAsyncIncrementalBatch(); + } + } + rethrowAsyncIncrementalFailure(); + } + + private void runAsyncIncrementalIngest() { + while (!Thread.currentThread().isInterrupted()) { + IngestEvent[] batch; + try { + batch = asyncIncrementalBatches.take(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + try { + applyIncrementalBatch(batch, batch.length); + } catch (Throwable t) { + recordAsyncIncrementalFailure(t); + return; + } finally { + completeAsyncIncrementalBatch(); + } + } + } + + private void incrementAsyncIncrementalBatchCount() { + synchronized (asyncIncrementalDrainLock) { + asyncIncrementalBatchCount++; + } + } + + private void completeAsyncIncrementalBatch() { + synchronized (asyncIncrementalDrainLock) { + asyncIncrementalBatchCount--; + asyncIncrementalDrainLock.notifyAll(); + } + } + + private void waitForAsyncIncrementalBatches() { + synchronized (asyncIncrementalDrainLock) { + while (asyncIncrementalBatchCount > 0) { + if (asyncIncrementalFailure.get() != null) { + break; + } + try { + asyncIncrementalDrainLock.wait(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + recordAsyncIncrementalFailure(e); + throw new RuntimeException("Interrupted while waiting for incremental join-estimator ingestion", e); + } + } + } + rethrowAsyncIncrementalFailure(); + } + + private void recordAsyncIncrementalFailure(Throwable failure) { + asyncIncrementalFailure.compareAndSet(null, failure); + synchronized (asyncIncrementalDrainLock) { + asyncIncrementalDrainLock.notifyAll(); + } + } + + private void rethrowAsyncIncrementalFailure() { + Throwable failure = asyncIncrementalFailure.get(); + if (failure == null) { + return; + } + if (failure instanceof Error) { + throw (Error) failure; + } + if (failure instanceof RuntimeException) { + throw (RuntimeException) failure; + } + throw new RuntimeException("Asynchronous incremental join-estimator ingestion failed", failure); } private void applyIncrementalBatch(IngestEvent[] batch, int batchSize) { @@ -2475,14 +2674,15 @@ private void applyIncrementalBatch(IngestEvent[] batch, int batchSize) { return; } + BatchUpdateAccumulator[] updates = buildBatchUpdates(batch, batchSize); while (true) { long epoch = rebuildEpoch.get(); if ((epoch & 1L) != 0L) { synchronized (bufA) { - ingestBatch(bufA, batch, batchSize); + applyBatchUpdates(bufA, updates); } synchronized (bufB) { - ingestBatch(bufB, batch, batchSize); + applyBatchUpdates(bufB, updates); } return; } @@ -2492,43 +2692,142 @@ private void applyIncrementalBatch(IngestEvent[] batch, int batchSize) { if (rebuildEpoch.get() != epoch) { continue; } - ingestBatch(target, batch, batchSize); + applyBatchUpdates(target, updates); return; } } } private void ingestBatch(State state, IngestEvent[] batch, int batchSize) { - BatchUpdateAccumulator updates = new BatchUpdateAccumulator(Math.max(64, batchSize << 5)); + applyBatchUpdates(state, buildBatchUpdates(batch, batchSize)); + } + + private void applyBatchUpdates(State state, BatchUpdateAccumulator[] batchUpdates) { + byte slot = slotByte(slotOf(state)); + for (BatchUpdateAccumulator updates : batchUpdates) { + updates.applyTo(this, state, slot); + } + enforceSketchBudget(); + } + + @SuppressWarnings("unchecked") + private BatchUpdateAccumulator[] buildBatchUpdates(IngestEvent[] batch, int batchSize) { + if (batchSize < PARALLEL_INGEST_MIN_BATCH_SIZE || batchSize > PARALLEL_INGEST_MAX_BATCH_SIZE) { + return new BatchUpdateAccumulator[] { buildBatchUpdates(batch, batchSize, null) }; + } + Future[] futures = new Future[INGEST_PARTITIONS.length]; + try { + for (IngestPartition partition : INGEST_PARTITIONS) { + futures[partition.ordinal()] = ingestPartitionExecutor.submit(() -> buildBatchUpdates(batch, batchSize, + partition)); + } + BatchUpdateAccumulator[] updates = new BatchUpdateAccumulator[futures.length]; + for (int i = 0; i < futures.length; i++) { + updates[i] = futures[i].get(); + } + return updates; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Interrupted while preparing incremental join-estimator batch", e); + } catch (ExecutionException e) { + throw new RuntimeException("Failed to prepare incremental join-estimator batch", e.getCause()); + } + } + + private BatchUpdateAccumulator buildBatchUpdates(IngestEvent[] batch, int batchSize, IngestPartition partition) { + BatchUpdateAccumulator updates = new BatchUpdateAccumulator(Math.max(64, expectedBatchUpdates(batchSize, + partition))); for (int i = 0; i < batchSize; i++) { IngestEvent event = batch[i]; if (event == null) { continue; } - accumulateIngestEvent(updates, event); + accumulateIngestEvent(updates, event, partition); } - updates.forEach( - (recType, isDelete, axisA, axisB, x, y, values, valueCount) -> applyGroupedUpdate(state, recType, - isDelete, axisA, axisB, x, y, values, valueCount)); - enforceSketchBudget(); + return updates; + } + + private int expectedBatchUpdates(int batchSize, IngestPartition partition) { + if (partition == null) { + return batchSize << 5; + } + if (partition == IngestPartition.SINGLES) { + return batchSize << 3; + } + return batchSize << 1; } - private void applyGroupedUpdate(State state, byte recType, boolean isDelete, byte axisA, byte axisB, int x, int y, - long[] values, int valueCount) { + private void applyGroupedUpdate(State state, byte slot, int keyPrefix, int keyHash, int x, int y, long firstValue, + long[] overflowValues, int valueCount) { + if (valueCount == 0) { + return; + } + byte recType = (byte) keyPrefix; + boolean isDelete = ((keyPrefix >>> 8) & 1) != 0; + byte axisA = (byte) (keyPrefix >>> 16); + byte axisB = (byte) (keyPrefix >>> 24); int entryId; synchronized (sketchCacheLock) { - entryId = cacheDirectory.findOrAdd(recType, isDelete, axisA, axisB, x, y); + entryId = cacheDirectory.findOrAdd(keyPrefix, keyHash, x, y); } UpdateSketch sketch = getSketchForWrite(state, recType, isDelete, axisA, axisB, x, y, entryId); - for (int i = 0; i < valueCount; i++) { - hashUpdateRaw(sketch, values[i]); + hashUpdateRaw(sketch, firstValue); + for (int i = 1; i < valueCount; i++) { + hashUpdateRaw(sketch, overflowValues[i - 1]); + } + markDirtyAndTouchResidentSketch(slot, entryId, sketch); + } + + private void accumulateIngestEvent(BatchUpdateAccumulator updates, IngestEvent event, IngestPartition partition) { + if (partition == null) { + accumulateSingleUpdates(updates, event); + accumulatePair(updates, Pair.SP, event.isDelete, event.spKey, event.thetaSig, event.thetaHo, + event.thetaHc); + accumulatePair(updates, Pair.SO, event.isDelete, event.soKey, event.thetaSig, event.thetaHp, + event.thetaHc); + accumulatePair(updates, Pair.SC, event.isDelete, event.scKey, event.thetaSig, event.thetaHp, + event.thetaHo); + accumulatePair(updates, Pair.PO, event.isDelete, event.poKey, event.thetaSig, event.thetaHs, + event.thetaHc); + accumulatePair(updates, Pair.PC, event.isDelete, event.pcKey, event.thetaSig, event.thetaHs, + event.thetaHo); + accumulatePair(updates, Pair.OC, event.isDelete, event.ocKey, event.thetaSig, event.thetaHs, + event.thetaHp); + return; + } + switch (partition) { + case SINGLES: + accumulateSingleUpdates(updates, event); + break; + case SP: + accumulatePair(updates, Pair.SP, event.isDelete, event.spKey, event.thetaSig, event.thetaHo, + event.thetaHc); + break; + case SO: + accumulatePair(updates, Pair.SO, event.isDelete, event.soKey, event.thetaSig, event.thetaHp, + event.thetaHc); + break; + case SC: + accumulatePair(updates, Pair.SC, event.isDelete, event.scKey, event.thetaSig, event.thetaHp, + event.thetaHo); + break; + case PO: + accumulatePair(updates, Pair.PO, event.isDelete, event.poKey, event.thetaSig, event.thetaHs, + event.thetaHc); + break; + case PC: + accumulatePair(updates, Pair.PC, event.isDelete, event.pcKey, event.thetaSig, event.thetaHs, + event.thetaHo); + break; + case OC: + accumulatePair(updates, Pair.OC, event.isDelete, event.ocKey, event.thetaSig, event.thetaHs, + event.thetaHp); + break; } - markDirty(state, entryId); - touchResidentSketch(state, entryId, sketch, false); } - private void accumulateIngestEvent(BatchUpdateAccumulator updates, IngestEvent event) { - boolean isDelete = event.isDelete; + private void accumulateSingleUpdates(BatchUpdateAccumulator updates, IngestEvent event) { + int deleteMask = event.isDelete ? DELETE_KEY_PREFIX_MASK : 0; int si = event.si; int pi = event.pi; int oi = event.oi; @@ -2539,45 +2838,26 @@ private void accumulateIngestEvent(BatchUpdateAccumulator updates, IngestEvent e long thetaHc = event.thetaHc; long thetaSig = event.thetaSig; - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.S.ordinal(), (byte) 0, si, 0, thetaSig); - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.P.ordinal(), (byte) 0, pi, 0, thetaSig); - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.O.ordinal(), (byte) 0, oi, 0, thetaSig); - updates.add(REC_SINGLE_TRIPLE, isDelete, (byte) Component.C.ordinal(), (byte) 0, ci, 0, thetaSig); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.P.ordinal(), si, 0, - thetaHp); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.O.ordinal(), si, 0, - thetaHo); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.S.ordinal(), (byte) Component.C.ordinal(), si, 0, - thetaHc); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.S.ordinal(), pi, 0, - thetaHs); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.O.ordinal(), pi, 0, - thetaHo); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.P.ordinal(), (byte) Component.C.ordinal(), pi, 0, - thetaHc); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.S.ordinal(), oi, 0, - thetaHs); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.P.ordinal(), oi, 0, - thetaHp); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.O.ordinal(), (byte) Component.C.ordinal(), oi, 0, - thetaHc); - - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.S.ordinal(), ci, 0, - thetaHs); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.P.ordinal(), ci, 0, - thetaHp); - updates.add(REC_SINGLE_CPL, isDelete, (byte) Component.C.ordinal(), (byte) Component.O.ordinal(), ci, 0, - thetaHo); - - accumulatePair(updates, Pair.SP, isDelete, event.spKey, thetaSig, thetaHo, thetaHc); - accumulatePair(updates, Pair.SO, isDelete, event.soKey, thetaSig, thetaHp, thetaHc); - accumulatePair(updates, Pair.SC, isDelete, event.scKey, thetaSig, thetaHp, thetaHo); - accumulatePair(updates, Pair.PO, isDelete, event.poKey, thetaSig, thetaHs, thetaHc); - accumulatePair(updates, Pair.PC, isDelete, event.pcKey, thetaSig, thetaHs, thetaHo); - accumulatePair(updates, Pair.OC, isDelete, event.ocKey, thetaSig, thetaHs, thetaHp); + updates.add(SINGLE_TRIPLE_KEY_PREFIXES[COMPONENT_S_INDEX] | deleteMask, si, 0, thetaSig); + updates.add(SINGLE_TRIPLE_KEY_PREFIXES[COMPONENT_P_INDEX] | deleteMask, pi, 0, thetaSig); + updates.add(SINGLE_TRIPLE_KEY_PREFIXES[COMPONENT_O_INDEX] | deleteMask, oi, 0, thetaSig); + updates.add(SINGLE_TRIPLE_KEY_PREFIXES[COMPONENT_C_INDEX] | deleteMask, ci, 0, thetaSig); + + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_S_INDEX][COMPONENT_P_INDEX] | deleteMask, si, 0, thetaHp); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_S_INDEX][COMPONENT_O_INDEX] | deleteMask, si, 0, thetaHo); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_S_INDEX][COMPONENT_C_INDEX] | deleteMask, si, 0, thetaHc); + + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_P_INDEX][COMPONENT_S_INDEX] | deleteMask, pi, 0, thetaHs); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_P_INDEX][COMPONENT_O_INDEX] | deleteMask, pi, 0, thetaHo); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_P_INDEX][COMPONENT_C_INDEX] | deleteMask, pi, 0, thetaHc); + + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_O_INDEX][COMPONENT_S_INDEX] | deleteMask, oi, 0, thetaHs); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_O_INDEX][COMPONENT_P_INDEX] | deleteMask, oi, 0, thetaHp); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_O_INDEX][COMPONENT_C_INDEX] | deleteMask, oi, 0, thetaHc); + + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_C_INDEX][COMPONENT_S_INDEX] | deleteMask, ci, 0, thetaHs); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_C_INDEX][COMPONENT_P_INDEX] | deleteMask, ci, 0, thetaHp); + updates.add(SINGLE_COMPLEMENT_KEY_PREFIXES[COMPONENT_C_INDEX][COMPONENT_O_INDEX] | deleteMask, ci, 0, thetaHo); } private static void accumulatePair(BatchUpdateAccumulator updates, Pair pair, boolean isDelete, long key, @@ -2585,10 +2865,11 @@ private static void accumulatePair(BatchUpdateAccumulator updates, Pair pair, bo long comp1, long comp2) { int x = (int) (key >>> 32); int y = (int) key; - byte axis = (byte) pair.ordinal(); - updates.add(REC_PAIR_TRIPLE, isDelete, axis, (byte) 0, x, y, triple); - updates.add(REC_PAIR_COMP1, isDelete, axis, (byte) 0, x, y, comp1); - updates.add(REC_PAIR_COMP2, isDelete, axis, (byte) 0, x, y, comp2); + int pairIndex = pair.ordinal(); + int deleteMask = isDelete ? DELETE_KEY_PREFIX_MASK : 0; + updates.add(PAIR_TRIPLE_KEY_PREFIXES[pairIndex] | deleteMask, x, y, triple); + updates.add(PAIR_COMP1_KEY_PREFIXES[pairIndex] | deleteMask, x, y, comp1); + updates.add(PAIR_COMP2_KEY_PREFIXES[pairIndex] | deleteMask, x, y, comp2); } /* ------------------------------------------------------------------ */ @@ -6020,10 +6301,7 @@ public void discardAndMarkForRebuild() { private void unloadInternal(boolean markRebuildRequired) { clearEstimateCache(); - synchronized (incrementalBufferLock) { - Arrays.fill(incrementalBuffer, 0, incrementalBufferCount, null); - incrementalBufferCount = 0; - } + discardPendingIncremental(); synchronized (bufA) { bufA.clear(); } @@ -6047,6 +6325,38 @@ private void unloadInternal(boolean markRebuildRequired) { } } + private void discardPendingIncremental() { + synchronized (incrementalBufferLock) { + Arrays.fill(incrementalBuffer, 0, incrementalBufferCount, null); + incrementalBufferCount = 0; + } + int discardedQueuedBatches = 0; + while (asyncIncrementalBatches.poll() != null) { + discardedQueuedBatches++; + } + if (discardedQueuedBatches > 0) { + synchronized (asyncIncrementalDrainLock) { + asyncIncrementalBatchCount = Math.max(0, asyncIncrementalBatchCount - discardedQueuedBatches); + asyncIncrementalDrainLock.notifyAll(); + } + } + waitForAsyncIncrementalBatchesIgnoringFailures(); + asyncIncrementalFailure.set(null); + } + + private void waitForAsyncIncrementalBatchesIgnoringFailures() { + synchronized (asyncIncrementalDrainLock) { + while (asyncIncrementalBatchCount > 0) { + try { + asyncIncrementalDrainLock.wait(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + } + } + } + private boolean tryLoadFromDisk() { if (!persistenceEnabled || persistenceFile == null) { return false; @@ -6508,6 +6818,30 @@ private void touchResidentSketch(State state, int entryId, UpdateSketch sketch, } } + private void markDirtyAndTouchResidentSketch(byte slot, int entryId, UpdateSketch sketch) { + long bytes = estimatedSketchBytes(sketch); + boolean residentBytesChanged = true; + synchronized (sketchCacheLock) { + cacheDirectory.markDirty(entryId, slot); + dirty.set(true); + int nodeId = cacheDirectory.residentNode(entryId, slot); + if (nodeId == -1) { + int createdNodeId = residentLru.add(entryId, slot, bytes); + cacheDirectory.setResidentNode(entryId, slot, createdNodeId); + residentSketchBytes += bytes; + refreshCacheMetadataAccountingLocked(); + } else { + long previousBytes = residentLru.bytes(nodeId); + residentLru.touch(nodeId, bytes); + residentSketchBytes += (bytes - previousBytes); + residentBytesChanged = bytes != previousBytes; + } + } + if (residentBytesChanged) { + replaceTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(slot, entryId), bytes); + } + } + private void removeResidentSketchTracking(State state, SketchAddress address) { byte slot = slotByte(slotOf(state)); int entryId; diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java index c70586c6ed7..1e83e625577 100644 --- a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java @@ -39,6 +39,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -374,7 +375,7 @@ void persistRolloverCreatesAdditionalBlobShardAndLazyLoads(@TempDir Path tempDir } @Test - void incrementalIngestBuffersFirst1024StatementsBeforeApplying(@TempDir Path tempDir) throws Exception { + void incrementalIngestBuffersUntilBatchThenFlushesOnDemand(@TempDir Path tempDir) throws Exception { IRI predicate = VF.createIRI("urn:p"); Path snapshot = tempDir.resolve("join-estimator.rjes"); SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); @@ -389,8 +390,119 @@ void incrementalIngestBuffersFirst1024StatementsBeforeApplying(@TempDir Path tem estimator.addStatement(st(VF.createIRI("urn:s" + (batchSize - 1)), predicate, VF.createIRI("urn:o" + (batchSize - 1)))); + assertEquals(0, estimator.debugPendingIncrementalCount(), + "Expected full incremental batch to leave the caller-side buffer"); + flushIncrementalBuffer(estimator); assertFalse(estimator.debugResidentSketches().isEmpty(), - "Expected incremental batch flush to apply updates when batch threshold is reached"); + "Expected incremental batch flush to apply queued updates when requested"); + } + + @Test + void fullIncrementalBatchDoesNotWaitForStateLock(@TempDir Path tempDir) throws Exception { + IRI predicate = VF.createIRI("urn:async:p"); + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(snapshot, false); + int batchSize = incrementalBatchSize(); + + for (int i = 0; i < batchSize - 1; i++) { + estimator.addStatement(st(VF.createIRI("urn:async:s" + i), predicate, VF.createIRI("urn:async:o" + i))); + } + + Object stateLock = privateFieldValue(estimator, "current"); + CountDownLatch stateLocked = new CountDownLatch(1); + CountDownLatch releaseStateLock = new CountDownLatch(1); + Thread stateHolder = new Thread(() -> { + synchronized (stateLock) { + stateLocked.countDown(); + awaitUninterruptibly(releaseStateLock); + } + }, "SketchEstimator-AsyncStateLockHolder"); + stateHolder.start(); + assertTrue(stateLocked.await(2, TimeUnit.SECONDS), "Expected state lock to be acquired by helper thread"); + + AtomicReference addFailure = new AtomicReference<>(); + CountDownLatch addReturned = new CountDownLatch(1); + Thread addThread = new Thread(() -> { + try { + estimator.addStatement(st(VF.createIRI("urn:async:s" + (batchSize - 1)), predicate, + VF.createIRI("urn:async:o" + (batchSize - 1)))); + } catch (Throwable t) { + addFailure.set(t); + } finally { + addReturned.countDown(); + } + }, "SketchEstimator-AsyncAdd"); + addThread.start(); + + boolean returnedWhileStateLocked; + try { + returnedWhileStateLocked = addReturned.await(250, TimeUnit.MILLISECONDS); + } finally { + releaseStateLock.countDown(); + stateHolder.join(TimeUnit.SECONDS.toMillis(2)); + addThread.join(TimeUnit.SECONDS.toMillis(2)); + } + + assertTrue(returnedWhileStateLocked, "Full incremental batches should be queued without waiting for sketches"); + assertNull(addFailure.get(), "Async queued add should not fail"); + flushIncrementalBuffer(estimator); + assertTrue(estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, predicate.stringValue()) > 0.0, + "Queued batch should be applied when the estimator is flushed for a read"); + } + + @SuppressWarnings("unchecked") + @Test + void fullQueueRechecksAsyncFailureWhileEnqueueing(@TempDir Path tempDir) throws Exception { + IRI predicate = VF.createIRI("urn:async:p"); + Path snapshot = tempDir.resolve("join-estimator.rjes"); + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + estimator.configurePersistence(snapshot, false); + int batchSize = incrementalBatchSize(); + + for (int i = 0; i < batchSize - 1; i++) { + estimator.addStatement(st(VF.createIRI("urn:async:s" + i), predicate, VF.createIRI("urn:async:o" + i))); + } + + ExecutorService asyncExecutor = (ExecutorService) privateFieldValue(estimator, "asyncIncrementalExecutor"); + Future asyncWorker = (Future) privateFieldValue(estimator, "asyncIncrementalWorker"); + asyncExecutor.shutdownNow(); + asyncWorker.get(2, TimeUnit.SECONDS); + + BlockingQueue asyncQueue = (BlockingQueue) privateFieldValue(estimator, + "asyncIncrementalBatches"); + while (asyncQueue.offer(new Object[0])) { + // Fill the bounded queue so the final add has to wait for capacity. + } + assertFalse(asyncQueue.offer(new Object[0]), "Expected async ingestion queue to be full"); + + AtomicReference asyncFailure = (AtomicReference) privateFieldValue(estimator, + "asyncIncrementalFailure"); + IllegalStateException failure = new IllegalStateException("forced async failure"); + AtomicReference addFailure = new AtomicReference<>(); + CountDownLatch addReturned = new CountDownLatch(1); + Thread addThread = new Thread(() -> { + try { + estimator.addStatement(st(VF.createIRI("urn:async:s" + (batchSize - 1)), predicate, + VF.createIRI("urn:async:o" + (batchSize - 1)))); + } catch (Throwable t) { + addFailure.set(t); + } finally { + addReturned.countDown(); + } + }, "SketchEstimator-FullQueueFailureAdd"); + addThread.start(); + + try { + Thread.sleep(50); + asyncFailure.set(failure); + assertTrue(addReturned.await(500, TimeUnit.MILLISECONDS), + "Full queue should not hide an async ingestion failure"); + assertSame(failure, addFailure.get(), "Expected queued add to surface the async ingestion failure"); + } finally { + asyncQueue.poll(); + addThread.join(TimeUnit.SECONDS.toMillis(2)); + } } @Test diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md new file mode 100644 index 00000000000..a2526bb9958 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md @@ -0,0 +1,12284 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 49.623 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 112.861 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 17.645 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 85.259 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 123.366 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 32.568 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 60.186 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 75.310 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.366 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 285.913 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 275.830 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1344.236 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 637.941 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.186 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 66.930 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.637 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.076 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 3.383 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 742.178 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.251 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 9.496 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 872.808 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 25.022 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 55.205 ms/op + + +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 677.210 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 165.350 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 19.513 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.474 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 346.673 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 7.194 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 29426.338 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 469.218 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 87.537 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 111.056 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 212.424 ms/op + + +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 230.859 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 157.730 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 2.115 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 130.605 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 57.736 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 3.225 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 240.274 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 5.727 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.916 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 8.156 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 2.705 ms/op + +ThemeQueryBenchmark.executeQuery ENGINEERING 12 avgt 39927.243 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 393.757 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1128.657 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 676.258 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 121.024 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 290.321 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 266.641 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1417.720 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 206.970 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1254.669 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1351.045 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 442.575 ms/op + + +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 36.441 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 47.138 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.305 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 151.778 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 165.053 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 16.784 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 107.321 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 40.595 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 141.632 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 230.034 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 197.122 ms/op + +ThemeQueryBenchmark.executeQuery TRAIN 12 avgt 1948.611 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 42.997 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 31.893 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 6.951 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 347.542 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.613 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 7.115 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 87.176 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 15.229 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.960 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 6.004 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 359.240 ms/op + +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 12 avgt 1617.271 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 17.684 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.163 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.585 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 25.054 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 32.669 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 9.363 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 9.416 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 31.869 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 27.061 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.800 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 253.627 ms/op + +ThemeQueryBenchmark.executeQuery PHARMA 12 avgt 143.646 ms/op +``` + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:26:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080010a88a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +Loading theme dataset: MEDICAL_RECORDS +Loading theme dataset: SOCIAL_MEDIA +Loading theme dataset: LIBRARY +Loading theme dataset: ENGINEERING +Loading theme dataset: HIGHLY_CONNECTED +Loading theme dataset: TRAIN +Loading theme dataset: ELECTRICAL_GRID +Loading theme dataset: PHARMA +68.108 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +49.623 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 49.623 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 0.96% complete, ETA 02:07:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +156.747 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=code) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] + │ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +112.861 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 112.861 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 1.92% complete, ETA 01:16:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +26.100 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_54334354e2796d1c4deca9bb6f231182c28201234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ │ ║ ├── Filter (costEstimate=420, resultSizeEstimate=1.3K) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ │ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_54334354e2796d1c4deca9bb6f231182c28201234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_54334354e2796d1c4deca9bb6f231182c28201234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + ?enc ?practitioner . + ?enc a . + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +17.645 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 17.645 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 2.88% complete, ETA 00:58:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +121.351 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_2175ae07dfd2b0a433ab97a95e8ba3d31c301, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_2175ae07dfd2b0a433ab97a95e8ba3d31c301, anonymous) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +85.259 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 85.259 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 3.85% complete, ETA 00:50:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff001120660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +179.116 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=33.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=31.7K) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=205, resultSizeEstimate=42.0K) [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="DX-200") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="DX-201") + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ │ ║ s: Var (name=cond) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ │ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + ?enc ?cond . + ?enc a . + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +123.366 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 123.366 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 4.81% complete, ETA 00:44:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +47.475 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K) [left] + │ ║ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ ║ │ ║ │ s: Var (name=obs) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ │ o: Var (name=enc) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] + │ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +32.568 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.568 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 5.77% complete, ETA 00:41:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000301120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +64.502 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_469c5a3509486e2414f8b150e4f1097d8b60123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_469c5a3509486e2414f8b150e4f1097d8b60123) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_469c5a3509486e2414f8b150e4f1097d8b60123) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +60.186 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 60.186 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 6.73% complete, ETA 00:38:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +107.853 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) + │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (costEstimate=236, resultSizeEstimate=55.9K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +75.310 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 75.310 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 7.69% complete, ETA 00:36:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +80.993 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_0701ef59161f03be4866bc81d5ea9bab8a55, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ ║ Var (name=patient) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_0701ef59161f03be4866bc81d5ea9bab8a55) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0701ef59161f03be4866bc81d5ea9bab8a55) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +56.366 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 56.366 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 8.65% complete, ETA 00:34:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +411.498 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.5K, joinType=Cartesian product) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.5K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ │ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.7K) [right] + │ ║ │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) + │ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc a . + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +285.913 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 285.913 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 9.62% complete, ETA 00:33:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +375.912 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (=) + │ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ │ │ ValueConstant (value="MED-1005") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.4K) + │ ║ │ ╠══ StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=m2) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ s: Var (name=m2) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +275.830 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 275.830 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 11) + +# Run progress: 10.58% complete, ETA 00:32:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a med:Patient ; + med:hasEncounter ?encounter . + ?encounter a med:Encounter ; + med:hasObservation ?observation . + OPTIONAL { + ?root med:name ?patientName . + OPTIONAL { + ?root med:hasMedication ?medication . + OPTIONAL { + ?medication med:code ?medicationCode . + OPTIONAL { ?medication med:dosage ?medicationDosage . } + } + } + } + OPTIONAL { + ?encounter med:recordedOn ?recordedOn . + OPTIONAL { + ?encounter med:handledBy ?practitioner . + OPTIONAL { ?practitioner med:name ?practitionerName . } + } + } + OPTIONAL { + ?encounter med:hasCondition ?condition . + OPTIONAL { + ?condition med:code ?conditionCode . + OPTIONAL { ?condition med:description ?conditionDescription . } + } + } + OPTIONAL { + ?observation med:value ?observationValue . + OPTIONAL { ?observation med:unit ?observationUnit . } + } +} +ORDER BY ?root ?encounter ?observation + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2119.874 ms/op +Iteration 1: ### Optimized Query ### +Reduced + Order + OrderElem (ASC) + Var (name=root) (bindingState=unbound) + OrderElem (ASC) + Var (name=encounter) (bindingState=unbound) + OrderElem (ASC) + Var (name=observation) (bindingState=unbound) + Projection + ╠══ ProjectionElemList + ║ ProjectionElem "root" + ║ ProjectionElem "encounter" + ║ ProjectionElem "observation" + ║ ProjectionElem "patientName" + ║ ProjectionElem "medication" + ║ ProjectionElem "medicationCode" + ║ ProjectionElem "medicationDosage" + ║ ProjectionElem "recordedOn" + ║ ProjectionElem "practitioner" + ║ ProjectionElem "practitionerName" + ║ ProjectionElem "condition" + ║ ProjectionElem "conditionCode" + ║ ProjectionElem "conditionDescription" + ║ ProjectionElem "observationValue" + ║ ProjectionElem "observationUnit" + ╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.4K) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.3K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=4.2K, resultSizeEstimate=8.3K, indexName=ospc) [left] + │ ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=53, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=encounter) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=21.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ │ │ o: Var (name=patientName) (bindingState=unbound) + │ ║ │ └── LeftJoin [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=16.7K) [left] + │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=medication) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=66.5K) [left] + │ ║ │ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ │ o: Var (name=medicationCode) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ │ o: Var (name=medicationDosage) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] + │ ║ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ ║ o: Var (name=recordedOn) (bindingState=unbound) + │ ║ ╚══ LeftJoin [right] + │ ║ ├── StatementPattern (resultSizeEstimate=25.0K) [left] + │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=practitioner) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=practitionerName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── StatementPattern (resultSizeEstimate=49.8K) [left] + │ │ s: Var (name=encounter) (bindingState=bound) + │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ │ o: Var (name=condition) (bindingState=unbound) + │ └── LeftJoin [right] + │ ╠══ StatementPattern (resultSizeEstimate=66.5K) [left] + │ ║ s: Var (name=condition) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=conditionCode) (bindingState=unbound) + │ ╚══ StatementPattern (resultSizeEstimate=0) [right] + │ s: Var (name=condition) (bindingState=bound) + │ p: Var (name=_const_25295cd4_uri, value=http://example.com/theme/medical/description, anonymous) + │ o: Var (name=conditionDescription) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=49.7K) [left] + ║ s: Var (name=observation) (bindingState=bound) + ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + ║ o: Var (name=observationValue) (bindingState=unbound) + ╚══ StatementPattern (resultSizeEstimate=0) [right] + s: Var (name=observation) (bindingState=bound) + p: Var (name=_const_996c3ac_uri, value=http://example.com/theme/medical/unit, anonymous) + o: Var (name=observationUnit) (bindingState=unbound) + +SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicationCode ?medicationDosage ?recordedOn ?practitioner ?practitionerName ?condition ?conditionCode ?conditionDescription ?observationValue ?observationUnit WHERE { + ?root a . + ?root ?encounter . + ?encounter a . + ?encounter ?observation . + OPTIONAL { + ?root ?patientName . + OPTIONAL { + ?root ?medication . + OPTIONAL { + ?medication ?medicationCode . + OPTIONAL { + ?medication ?medicationDosage . + } + } + } + } + OPTIONAL { + ?encounter ?recordedOn . + OPTIONAL { + ?encounter ?practitioner . + OPTIONAL { + ?practitioner ?practitionerName . + } + } + } + OPTIONAL { + ?encounter ?condition . + OPTIONAL { + ?condition ?conditionCode . + OPTIONAL { + ?condition ?conditionDescription . + } + } + } + OPTIONAL { + ?observation ?observationValue . + OPTIONAL { + ?observation ?observationUnit . + } + } +} +ORDER BY ?root ?encounter ?observation + +1344.236 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1344.236 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 12) + +# Run progress: 11.54% complete, ETA 00:31:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { ?root a med:Patient . } + UNION + { ?root a med:Encounter . } + OPTIONAL { + ?root med:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root med:hasEncounter ?optEncounter . + OPTIONAL { ?optEncounter med:recordedOn ?optDate . } + OPTIONAL { ?optEncounter med:handledBy ?optPractitioner . } + } + OPTIONAL { + ?root med:hasMedication ?optMedication . + OPTIONAL { ?optMedication med:code ?optMedicationCode . } + OPTIONAL { ?optMedication med:dosage ?optDosage . } + } + OPTIONAL { + ?root med:hasEncounter ?optEncounter2 . + ?optEncounter2 med:hasCondition ?optCondition . + OPTIONAL { ?optCondition med:code ?optConditionCode . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +915.929 ms/op +Iteration 1: ### Optimized Query ### +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optConditionCode" + │ ProjectionElem "optEncounter2" + │ ProjectionElem "optLabel" + │ ProjectionElem "optEncounter" + │ ProjectionElem "optPractitioner" + │ ProjectionElem "optMedicationCode" + │ ProjectionElem "optDosage" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── Union [left] + ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=25.0K, indexName=ospc) + ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + ║ │ ║ └── Extension [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=21.4K) + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ ╚══ ExtensionElem (optLabel) + ║ │ ║ Var (name=optName) (bindingState=bound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── LeftJoin [left] + ║ │ │ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] + ║ │ │ ║ s: Var (name=root) (bindingState=bound) + ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + ║ │ │ ║ o: Var (name=optEncounter) (bindingState=unbound) + ║ │ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + ║ │ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + ║ │ │ o: Var (name=optDate) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=25.0K) [right] + ║ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + ║ │ o: Var (name=optPractitioner) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ LeftJoin [left] + ║ ║ ├── StatementPattern (resultSizeEstimate=16.7K) [left] + ║ ║ │ s: Var (name=root) (bindingState=bound) + ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + ║ ║ │ o: Var (name=optMedication) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + ║ ║ s: Var (name=optMedication) (bindingState=bound) + ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + ║ ║ o: Var (name=optMedicationCode) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) [right] + ║ s: Var (name=optMedication) (bindingState=bound) + ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + ║ o: Var (name=optDosage) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Join (JoinIterator) (resultSizeEstimate=51.9K) [left] + │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ o: Var (name=optEncounter2) (bindingState=unbound) + │ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.8K) [right] + │ s: Var (name=optEncounter2) (bindingState=bound) + │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ o: Var (name=optCondition) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=66.5K) [right] + s: Var (name=optCondition) (bindingState=bound) + p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + o: Var (name=optConditionCode) (bindingState=unbound) + +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optEncounter . + OPTIONAL { + ?optEncounter ?optDate . + } + OPTIONAL { + ?optEncounter ?optPractitioner . + } + } + OPTIONAL { + ?root ?optMedication . + OPTIONAL { + ?optMedication ?optMedicationCode . + } + OPTIONAL { + ?optMedication ?optDosage . + } + } + OPTIONAL { + ?root ?optEncounter2 . + ?optEncounter2 ?optCondition . + OPTIONAL { + ?optCondition ?optConditionCode . + } + } +} + +637.941 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 637.941 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:30:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.197 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ │ Var (name=v) (bindingState=bound) + │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +2.186 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.186 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.46% complete, ETA 00:29:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +96.878 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ╠══ Or + │ ║ │ ║ ║ ├── Compare (=) + │ ║ │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ │ ValueConstant (value="user0") + │ ║ │ ║ ║ └── Compare (=) + │ ║ │ ║ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="user1") + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.4944290053978746E16M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.039617250604E11M) [left] + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=723222.1M) [left] + │ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=5.0M) [left] + │ ║ │ │ ║ │ ║ ├── Filter [left] + │ ║ │ │ ║ │ ║ │ ╠══ And + │ ║ │ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ └── Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.3M) + │ ║ │ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ║ │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ │ │ o: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ └── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ s: Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ o: Var (name=u1) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_0261279ccf5e29df466a97811b2897eaa955) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + VALUES ?u3 { } + FILTER ((?u2 != ?u3) && (?u1 != ?u3)) + ?u1 ?u3 . + ?u2 ?u1 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_0261279ccf5e29df466a97811b2897eaa955) + } +} + +66.930 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 66.930 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.42% complete, ETA 00:28:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.836 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ └── Exists + │ ║ ║ │ ║ StatementPattern + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +2.637 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.637 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.38% complete, ETA 00:28:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.024 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_57171ab84def858214d3a9d45494a1312ef9501234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_57171ab84def858214d3a9d45494a1312ef9501234) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_57171ab84def858214d3a9d45494a1312ef9501234) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +2.076 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.076 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 16.35% complete, ETA 00:27:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.768 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] + │ ║ ║ ╠══ Not + │ ║ ║ ║ Exists + │ ║ ║ ║ Extension + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_path_72341efce63411e554f0aa0b85d62106856fc0123456) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_72341efce63411e554f0aa0b85d62106856fc0123456) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +3.383 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.383 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 17.31% complete, ETA 00:26:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1038.688 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Join (HashJoinIteration) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union (new scope) [right] + │ ║ ║ ╠══ Extension (new scope) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ Extension (new scope) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ └── ExtensionElem (activity) + │ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { } + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post ?u . + BIND(?post AS ?activity) + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +742.178 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 742.178 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 18.27% complete, ETA 00:26:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.254 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_219519dfce2bc9d0d4877a0b56bea832e29be01, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.2M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_219519dfce2bc9d0d4877a0b56bea832e29be01) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_219519dfce2bc9d0d4877a0b56bea832e29be01) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +2.251 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.251 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 19.23% complete, ETA 00:25:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.848 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.2M) + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_452620cd3bdcfeec44df8896ac3be1ebdd130123) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_452620cd3bdcfeec44df8896ac3be1ebdd130123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +9.496 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.496 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 20.19% complete, ETA 00:25:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1199.885 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +872.808 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 872.808 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 21.15% complete, ETA 00:24:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +35.439 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=135.8M) + │ ║ ║ │ ├── Filter [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=945) + │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ │ │ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ │ │ ╚══ Filter [right] + │ ║ ║ │ │ │ ├── Compare (!=) + │ ║ ║ │ │ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ └── StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) + │ ║ ║ │ │ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ └── Filter [right] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +25.022 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.022 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 22.12% complete, ETA 00:24:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +79.131 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.67902065928E10M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=395067.8M) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=e) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=11130.4M) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=11130.4M) [left] + │ ║ ║ │ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=251.0M) + │ ║ ║ │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=251.0M) [left] + │ ║ ║ │ ║ ║ │ │ ╠══ Filter [left] + │ ║ ║ │ ║ ║ │ │ ║ ├── And + │ ║ ║ │ ║ ║ │ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ │ ╚══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=3.6M) + │ ║ ║ │ ║ ║ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.6M) [left] + │ ║ ║ │ ║ ║ │ │ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ │ │ ║ ║ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ │ │ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ╚══ BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ │ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ ╚══ BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?a != ?c) && (?b != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +55.205 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 55.205 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 11) + +# Run progress: 23.08% complete, ETA 00:23:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a social:User ; + social:follows ?followed . + ?post social:authored ?root . + OPTIONAL { + ?root social:name ?rootName . + OPTIONAL { + ?followed social:name ?followedName . + OPTIONAL { ?followed social:follows ?followedFollows . } + } + } + OPTIONAL { + ?post social:authored ?postAuthor . + OPTIONAL { + ?postAuthor social:name ?postAuthorName . + OPTIONAL { ?postAuthor social:follows ?postAuthorFollows . } + } + } +} +ORDER BY ?root ?followed ?post + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 12) + +# Run progress: 24.04% complete, ETA 00:38:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT DISTINCT * WHERE { + { ?root a social:User . } + UNION + { ?root a social:Post . } + OPTIONAL { + ?root social:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root social:follows ?optFollowed . + OPTIONAL { ?optFollowed social:name ?optFollowedName . } + } + OPTIONAL { + ?post social:authored ?root . + OPTIONAL { ?root social:follows ?optAuthorFollows . } + OPTIONAL { ?post social:authored ?optPostAuthor . } + } + OPTIONAL { + { ?optFollower social:follows ?root . } + UNION + { ?root social:follows ?optFollower . } + OPTIONAL { ?optFollower social:name ?optFollowerName . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000401120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:51:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +965.728 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) + │ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +677.210 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 677.210 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 25.96% complete, ETA 00:50:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +233.215 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] + │ ║ │ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +165.350 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 165.350 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 26.92% complete, ETA 00:48:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +28.143 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_6542f41789f523334c73a013275975c2b391012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] + │ ║ │ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Author 1") + │ ║ │ ║ │ ValueConstant (value="Author 2") + │ ║ │ ║ │ ValueConstant (value="Author 3") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=40.3K) [right] + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_6542f41789f523334c73a013275975c2b391012345) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_6542f41789f523334c73a013275975c2b391012345) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +19.513 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.513 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 27.88% complete, ETA 00:46:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +65.435 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ o: Var (name=member) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +45.474 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.474 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 28.85% complete, ETA 00:45:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +468.183 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter (costEstimate=361, resultSizeEstimate=130.6K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +346.673 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 346.673 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 29.81% complete, ETA 00:43:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.542 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=511, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=511) [left] + │ ║ ║ ├── Filter (costEstimate=1.5K, resultSizeEstimate=507) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +7.194 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.194 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 30.77% complete, ETA 00:42:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +32829.922 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5135e2a62660cb4ca489d6dcdc9aa0c34601234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) (bindingState=bound) + │ ║ │ Var (name=member) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) (bindingState=bound) + │ ║ GroupElem (_anon_having_5135e2a62660cb4ca489d6dcdc9aa0c34601234) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5135e2a62660cb4ca489d6dcdc9aa0c34601234) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan a . + ?loan ?member . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +29426.338 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 29426.338 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 31.73% complete, ETA 00:42:49 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +673.160 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Exists + │ ║ │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ║ ├── Or + │ ║ │ ║ ║ │ ╠══ Compare (=) + │ ║ │ ║ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ║ │ ║ ValueConstant (value="Branch 0") + │ ║ │ ║ ║ │ ╚══ Compare (=) + │ ║ │ ║ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ║ │ ValueConstant (value="Branch 1") + │ ║ │ ║ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ ║ o: Var (name=branchName) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=386.3K) [right] + │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +469.218 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 469.218 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 32.69% complete, ETA 00:41:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +122.831 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_9621bd94bcd0188d45acac7d5275109ed49e012345678, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.6K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] + │ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_9621bd94bcd0188d45acac7d5275109ed49e012345678) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_9621bd94bcd0188d45acac7d5275109ed49e012345678) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +87.537 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 87.537 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 33.65% complete, ETA 00:40:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +159.604 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="Author 3") + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=268.5K, joinType=Cartesian product) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=268.5K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=261.3K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.6K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=member) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ ║ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] + │ ║ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ │ o: Var (name=author) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ ║ ║ s: Var (name=author) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?loan ?member . + ?loan a . + ?loan ?copy . + ?member a . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +111.056 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 111.056 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 34.62% complete, ETA 00:39:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +297.934 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) + │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +212.424 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 212.424 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 11) + +# Run progress: 35.58% complete, ETA 00:37:55 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a lib:Loan ; + lib:borrowedBy ?member ; + lib:loanedCopy ?copy . + ?copy lib:locatedAt ?branch . + ?book a lib:Book ; + lib:hasCopy ?copy . + OPTIONAL { + ?member lib:name ?memberName . + OPTIONAL { + ?branch lib:name ?branchName . + OPTIONAL { ?book lib:title ?bookTitle . } + } + } + OPTIONAL { + ?book lib:writtenBy ?author . + OPTIONAL { + ?author lib:name ?authorName . + OPTIONAL { ?author lib:country ?authorCountry . } + } + } + OPTIONAL { + ?root lib:loanDate ?loanDate . + OPTIONAL { + ?root lib:dueDate ?dueDate . + OPTIONAL { ?root lib:returnedDate ?returnedDate . } + } + } +} +ORDER BY ?root ?member ?copy + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00002000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 12) + +# Run progress: 36.54% complete, ETA 00:45:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT DISTINCT * WHERE { + { ?root a lib:Book . } + UNION + { ?root a lib:Loan . } + OPTIONAL { + ?root lib:title ?optTitle . + BIND(?optTitle AS ?optLabel) + } + OPTIONAL { + ?root lib:hasCopy ?optCopy . + OPTIONAL { ?optCopy lib:locatedAt ?optBranch . } + OPTIONAL { ?optBranch lib:name ?optBranchName . } + } + OPTIONAL { + ?root lib:loanedCopy ?optLoanCopy . + OPTIONAL { ?root lib:borrowedBy ?optMember . } + OPTIONAL { ?optMember lib:name ?optMemberName . } + } + OPTIONAL { + { ?root lib:writtenBy ?optAuthor . } + UNION + { ?bookForAuthor lib:writtenBy ?optAuthor . ?bookForAuthor lib:hasCopy ?optCopy2 . } + OPTIONAL { ?optAuthor lib:name ?optAuthorName . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:51:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +245.267 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +230.859 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 230.859 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.46% complete, ETA 00:50:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff801121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +238.344 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] + │ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +157.730 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 157.730 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.42% complete, ETA 00:48:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.088 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_63422d4590ad9bba843fa8200164366087a2a012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=assemblyName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ ║ ValueConstant (value="Assembly 3") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_63422d4590ad9bba843fa8200164366087a2a012345) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_63422d4590ad9bba843fa8200164366087a2a012345) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +2.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.38% complete, ETA 00:47:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +186.664 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ o: Var (name=component) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +130.605 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 130.605 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 41.35% complete, ETA 00:45:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +78.907 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] + │ ║ ║ ├── Filter (costEstimate=3.4K, resultSizeEstimate=6.7K) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +57.736 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 57.736 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 42.31% complete, ETA 00:44:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.662 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=78, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ ├── Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.6K) [right] + │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +3.225 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.225 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 43.27% complete, ETA 00:42:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +350.957 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_552de842a80c1dd4891aa3a1a168e086fbb01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_552de842a80c1dd4891aa3a1a168e086fbb01234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_552de842a80c1dd4891aa3a1a168e086fbb01234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +240.274 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 240.274 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 44.23% complete, ETA 00:41:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.357 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) + │ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter (costEstimate=82, resultSizeEstimate=6.7K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (costEstimate=409.4K, resultSizeEstimate=3.1K) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +5.727 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.727 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 45.19% complete, ETA 00:40:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +7.224 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_24441ac7eefd86bf5467a8ae0aa8a75fac55e01, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_24441ac7eefd86bf5467a8ae0aa8a75fac55e01) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_24441ac7eefd86bf5467a8ae0aa8a75fac55e01) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?requirement a . + ?component a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +4.916 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.916 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 46.15% complete, ETA 00:38:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +11.538 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, joinType=Cartesian product) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +8.156 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.156 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 47.12% complete, ETA 00:37:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.056 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ │ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +2.705 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.705 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 11) + +# Run progress: 48.08% complete, ETA 00:36:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT DISTINCT * WHERE { + ?root a eng:Requirement ; + eng:satisfies ?component ; + eng:verifiedBy ?test . + ?component a eng:Component ; + eng:partOf ?assembly . + OPTIONAL { + ?root eng:name ?requirementName . + OPTIONAL { + ?component eng:name ?componentName . + OPTIONAL { ?assembly eng:name ?assemblyName . } + } + } + OPTIONAL { + ?component eng:dependsOn ?dependency . + OPTIONAL { + ?dependency eng:name ?dependencyName . + OPTIONAL { ?dependency eng:partOf ?dependencyAssembly . } + } + } + OPTIONAL { + ?test eng:verifiedBy ?measurement . + OPTIONAL { + ?measurement eng:measuredValue ?measuredValue . + OPTIONAL { ?measurement eng:measuredAt ?measuredAt . } + } + } +} +ORDER BY ?root ?component ?test + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 12) + +# Run progress: 49.04% complete, ETA 00:40:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT DISTINCT * WHERE { + { ?root a eng:Component . } + UNION + { ?root a eng:Requirement . } + OPTIONAL { + ?root eng:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root eng:partOf ?optAssembly . + OPTIONAL { ?optAssembly eng:name ?optAssemblyName . } + } + OPTIONAL { + ?root eng:dependsOn ?optDependency . + OPTIONAL { ?optDependency eng:name ?optDependencyName . } + } + OPTIONAL { + ?root eng:satisfies ?optSatisfiedComponent . + OPTIONAL { ?optSatisfiedComponent eng:partOf ?optSatisfiedAssembly . } + } + OPTIONAL { + { ?root eng:verifiedBy ?optVerification . } + UNION + { ?verificationOwner eng:verifiedBy ?optVerification . FILTER(?verificationOwner = ?root) } + OPTIONAL { ?optVerification eng:measuredValue ?optMeasuredValue . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +40112.349 ms/op +Iteration 1: ### Optimized Query ### +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optLabel" + │ ProjectionElem "optAssembly" + │ ProjectionElem "optAssemblyName" + │ ProjectionElem "optDependency" + │ ProjectionElem "optDependencyName" + │ ProjectionElem "optSatisfiedComponent" + │ ProjectionElem "optSatisfiedAssembly" + │ ProjectionElem "optVerification" + │ ProjectionElem "verificationOwner" + │ ProjectionElem "optMeasuredValue" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ║ │ ╠══ Union [left] + ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, indexName=ospc) + ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + ║ │ ║ │ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=520, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + ║ │ ║ │ ╚══ Extension [right] + ║ │ ║ │ ├── StatementPattern (resultSizeEstimate=134.1K) + ║ │ ║ │ │ s: Var (name=root) (bindingState=bound) + ║ │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ ║ │ │ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ │ └── ExtensionElem (optLabel) + ║ │ ║ │ Var (name=optName) (bindingState=bound) + ║ │ ║ └── LeftJoin [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=132.7K) [left] + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + ║ │ ║ ║ o: Var (name=optAssembly) (bindingState=unbound) + ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + ║ │ ║ s: Var (name=optAssembly) (bindingState=bound) + ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ ║ o: Var (name=optAssemblyName) (bindingState=unbound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + ║ │ │ s: Var (name=root) (bindingState=bound) + ║ │ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + ║ │ │ o: Var (name=optDependency) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=134.1K) [right] + ║ │ s: Var (name=optDependency) (bindingState=bound) + ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ o: Var (name=optDependencyName) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ StatementPattern (resultSizeEstimate=520) [left] + ║ ║ s: Var (name=root) (bindingState=bound) + ║ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + ║ ║ o: Var (name=optSatisfiedComponent) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + ║ s: Var (name=optSatisfiedComponent) (bindingState=bound) + ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + ║ o: Var (name=optSatisfiedAssembly) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Union [left] + │ ╠══ StatementPattern (new scope) (resultSizeEstimate=3.1K) + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=optVerification) (bindingState=unbound) + │ ╚══ Filter (new scope) + │ ├── Compare (=) + │ │ Var (name=verificationOwner) (bindingState=bound) + │ │ Var (name=root) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=3.1K) + │ s: Var (name=verificationOwner) (bindingState=unbound) + │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ o: Var (name=optVerification) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=1.6K) [right] + s: Var (name=optVerification) (bindingState=bound) + p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + o: Var (name=optMeasuredValue) (bindingState=unbound) + +SELECT DISTINCT ?root ?optName ?optLabel ?optAssembly ?optAssemblyName ?optDependency ?optDependencyName ?optSatisfiedComponent ?optSatisfiedAssembly ?optVerification ?verificationOwner ?optMeasuredValue WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optAssembly . + OPTIONAL { + ?optAssembly ?optAssemblyName . + } + } + OPTIONAL { + ?root ?optDependency . + OPTIONAL { + ?optDependency ?optDependencyName . + } + } + OPTIONAL { + ?root ?optSatisfiedComponent . + OPTIONAL { + ?optSatisfiedComponent ?optSatisfiedAssembly . + } + } + OPTIONAL { + { + ?root ?optVerification . + } + UNION + { + ?verificationOwner ?optVerification . + FILTER (?verificationOwner = ?root) + } + OPTIONAL { + ?optVerification ?optMeasuredValue . + } + } +} + +39927.243 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 39927.243 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:40:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +400.703 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +393.757 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 393.757 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 50.96% complete, ETA 00:39:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1669.858 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1128.657 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1128.657 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 51.92% complete, ETA 00:37:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +958.504 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_00148e3058594aa4ef8b5ddfb08304f4788, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.3K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=13.4K, resultSizeEstimate=40.3K) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.5K) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_00148e3058594aa4ef8b5ddfb08304f4788) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_00148e3058594aa4ef8b5ddfb08304f4788) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +676.258 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 676.258 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 52.88% complete, ETA 00:36:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +128.585 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +121.024 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 121.024 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 53.85% complete, ETA 00:35:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001120660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +391.096 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=212, resultSizeEstimate=45.0K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +290.321 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 290.321 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 54.81% complete, ETA 00:34:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +379.043 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.0K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.0K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +266.641 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 266.641 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 55.77% complete, ETA 00:33:12 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1895.945 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_55f62d18180eee4aa4a93e86ee02c63b3901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_55f62d18180eee4aa4a93e86ee02c63b3901234) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_55f62d18180eee4aa4a93e86ee02c63b3901234) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1417.720 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1417.720 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 56.73% complete, ETA 00:32:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +290.575 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) + │ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (costEstimate=213, resultSizeEstimate=45.2K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +206.970 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 206.970 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 57.69% complete, ETA 00:31:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1739.602 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1254.669 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1254.669 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 58.65% complete, ETA 00:30:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1483.961 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_848f1b8ebbb3f84f1088a196603cb30b0b01234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_848f1b8ebbb3f84f1088a196603cb30b0b01234567) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_848f1b8ebbb3f84f1088a196603cb30b0b01234567) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1351.045 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1351.045 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 59.62% complete, ETA 00:29:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +626.560 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=w2) (bindingState=bound) + │ ║ │ ║ │ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=528.1K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ ║ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=n2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=89.4K, joinType=Cartesian product) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=89.4K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter (costEstimate=300, resultSizeEstimate=90.0K) [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_471997d2613a4894b62898df299d5c399c80123) + │ ║ Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_471997d2613a4894b62898df299d5c399c80123) + } +} + +442.575 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 442.575 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 11) + +# Run progress: 60.58% complete, ETA 00:28:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT DISTINCT * WHERE { + ?root a conn:Node ; + conn:connectsTo ?neighbor . + ?neighbor conn:connectsTo ?neighbor2 . + OPTIONAL { + ?root conn:weight ?rootWeight . + OPTIONAL { + ?neighbor conn:weight ?neighborWeight . + OPTIONAL { ?neighbor2 conn:weight ?neighbor2Weight . } + } + } + OPTIONAL { + ?incoming conn:connectsTo ?root . + OPTIONAL { + ?incoming conn:weight ?incomingWeight . + OPTIONAL { ?incoming conn:connectsTo ?incomingNeighbor . } + } + } + OPTIONAL { + ?root conn:connectsTo ?optionalNeighbor . + OPTIONAL { + ?optionalNeighbor conn:connectsTo ?optionalNeighbor2 . + OPTIONAL { ?optionalNeighbor2 conn:weight ?optionalNeighbor2Weight . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000700011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + +Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "RdfJoinEstimator-Refresh" + + +java.lang.OutOfMemoryError: Java heap space + at org.eclipse.rdf4j.query.algebra.evaluation.impl.ArrayBindingBasedQueryEvaluationContext.createBindingSet(ArrayBindingBasedQueryEvaluationContext.java:127) + at org.eclipse.rdf4j.query.algebra.evaluation.impl.ArrayBindingBasedQueryEvaluationContext.createBindingSet(ArrayBindingBasedQueryEvaluationContext.java:55) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.ProjectionIterator$$Lambda/0x00000700011b9c00.get(Unknown Source) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.ProjectionIterator.convert(ProjectionIterator.java:143) + at org.eclipse.rdf4j.query.algebra.evaluation.iterator.ProjectionIterator.convert(ProjectionIterator.java:31) + at org.eclipse.rdf4j.common.iteration.ConvertingIteration.next(ConvertingIteration.java:84) + at org.eclipse.rdf4j.common.iteration.FilterIteration.findNextElement(FilterIteration.java:117) + at org.eclipse.rdf4j.common.iteration.FilterIteration.hasNext(FilterIteration.java:59) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.sail.base.SailClosingIteration.hasNext(SailClosingIteration.java:83) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.sail.helpers.SailBaseIteration.hasNext(SailBaseIteration.java:43) + at org.eclipse.rdf4j.sail.helpers.CleanerIteration.hasNext(CleanerIteration.java:42) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:51) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/java.lang.invoke.DirectMethodHandle$Holder.invokeSpecial(DirectMethodHandle$Holder) + at java.base/java.lang.invoke.LambdaForm$MH/0x0000070001054800.invoke(LambdaForm$MH) + at java.base/java.lang.invoke.LambdaForm$MH/0x0000070001054c00.invokeExact_MT(LambdaForm$MH) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:156) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 12) + +# Run progress: 61.54% complete, ETA 00:29:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT * WHERE { + { ?root a conn:Node . } + UNION + { ?root conn:connectsTo ?optUnionNeighbor . } + OPTIONAL { + ?root conn:connectsTo ?optNeighbor . + OPTIONAL { ?optNeighbor conn:weight ?optNeighborWeight . } + } + OPTIONAL { + ?root conn:weight ?optWeight . + BIND(?optWeight AS ?optNodeWeight) + } + OPTIONAL { + { ?optIncoming conn:connectsTo ?root . } + UNION + { ?root conn:connectsTo ?optIncoming . } + OPTIONAL { ?optIncoming conn:weight ?optIncomingWeight . } + } + FILTER(?optNodeWeight != 0 || !BOUND(?optNodeWeight)) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:45) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:31:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +38.453 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +36.441 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 36.441 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.46% complete, ETA 00:30:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +67.649 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] + │ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +47.138 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 47.138 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.42% complete, ETA 00:29:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +29.288 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_063288122b5da55844d2ad0484b53336b1a2, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ │ ╠══ Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=lineName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ║ │ ValueConstant (value="Line 2") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=lineName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_063288122b5da55844d2ad0484b53336b1a2) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_063288122b5da55844d2ad0484b53336b1a2) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + ?line a . + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +20.305 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.305 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.38% complete, ETA 00:28:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +215.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=line) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +151.778 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 151.778 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 66.35% complete, ETA 00:27:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +233.019 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ ║ ├── Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Line 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Line 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + ?line a . + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +165.053 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 165.053 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 67.31% complete, ETA 00:26:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +23.631 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.3K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ ║ ├── Filter (costEstimate=3.9K, resultSizeEstimate=1.3K) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=time) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ │ o: Var (name=time) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.6K) [right] + │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +16.784 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 16.784 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 68.27% complete, ETA 00:25:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +152.414 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_486aa6ca2e6d3c74984ba74d5a3392165a80123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_486aa6ca2e6d3c74984ba74d5a3392165a80123) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_486aa6ca2e6d3c74984ba74d5a3392165a80123) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service ?section . + ?section ?line . + ?service a . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +107.321 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 107.321 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 69.23% complete, ETA 00:24:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.412 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) + │ ║ │ ├── Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="OP 2") + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=29.9K) [right] + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + ?op a . + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +40.595 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 40.595 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 70.19% complete, ETA 00:23:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +193.005 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) + │ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?s1 . + ?s1 ?line . + ?service a . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +141.632 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 141.632 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 71.15% complete, ETA 00:22:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +328.079 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_072e79610be919541d18e746d32deda179b, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_072e79610be919541d18e746d32deda179b) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_072e79610be919541d18e746d32deda179b) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +230.034 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 230.034 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 72.12% complete, ETA 00:21:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00004000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +282.980 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +197.122 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 197.122 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 11) + +# Run progress: 73.08% complete, ETA 00:20:30 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a train:TrainService ; + train:runsOnSection ?section ; + train:passesThrough ?operationalPoint . + ?section train:partOfLine ?line ; + train:hasTrackSection ?track . + OPTIONAL { + ?root train:name ?serviceName . + OPTIONAL { + ?line train:name ?lineName . + OPTIONAL { ?operationalPoint train:name ?operationalPointName . } + } + } + OPTIONAL { + ?root train:scheduledTime ?scheduledTime . + OPTIONAL { + ?section train:connectsOperationalPoint ?sectionOperationalPoint . + OPTIONAL { ?sectionOperationalPoint train:name ?sectionOperationalPointName . } + } + } + OPTIONAL { + ?line train:connectsOperationalPoint ?lineOperationalPoint . + OPTIONAL { + ?lineOperationalPoint train:name ?lineOperationalPointName . + OPTIONAL { ?lineOperationalPoint train:code ?lineOperationalPointCode . } + } + } + OPTIONAL { + ?track train:length ?trackLength . + OPTIONAL { ?track train:trackType ?trackType . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 12) + +# Run progress: 74.04% complete, ETA 00:21:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT * WHERE { + { ?root a train:Line . } + UNION + { ?root a train:SectionOfLine . } + OPTIONAL { + ?root train:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root train:partOfLine ?optLine . + OPTIONAL { ?optLine train:name ?optLineName . } + } + OPTIONAL { + ?root train:connectsOperationalPoint ?optOperationalPoint . + OPTIONAL { ?optOperationalPoint train:name ?optOperationalPointName . } + } + OPTIONAL { + { ?service train:runsOnSection ?root . } + UNION + { ?service train:passesThrough ?optOperationalPoint2 . + ?root train:connectsOperationalPoint ?optOperationalPoint2 . } + OPTIONAL { ?service train:scheduledTime ?optScheduledTime . } + } + OPTIONAL { ?root train:hasTrackSection ?optTrackSection . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2659.022 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optLine" +║ ProjectionElem "optLineName" +║ ProjectionElem "optOperationalPoint" +║ ProjectionElem "optOperationalPointName" +║ ProjectionElem "service" +║ ProjectionElem "optOperationalPoint2" +║ ProjectionElem "optScheduledTime" +║ ProjectionElem "optTrackSection" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=67.4K, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=67.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=optLine) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ │ s: Var (name=optLine) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=optLineName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=134.8K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ ║ o: Var (name=optOperationalPoint) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=optOperationalPoint) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optOperationalPointName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── Union [left] + │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=25.9K) + │ │ ║ s: Var (name=service) (bindingState=unbound) + │ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ │ ║ o: Var (name=root) (bindingState=bound) + │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=117.0K) + │ │ ├── StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ │ │ s: Var (name=root) (bindingState=bound) + │ │ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ │ │ o: Var (name=optOperationalPoint2) (bindingState=unbound) + │ │ └── StatementPattern (costEstimate=161, resultSizeEstimate=25.9K) [right] + │ │ s: Var (name=service) (bindingState=unbound) + │ │ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ │ o: Var (name=optOperationalPoint2) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=25.8K) [right] + │ s: Var (name=service) (bindingState=bound) + │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ o: Var (name=optScheduledTime) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=67.4K) [right] + s: Var (name=root) (bindingState=bound) + p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + o: Var (name=optTrackSection) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optLine ?optLineName ?optOperationalPoint ?optOperationalPointName ?service ?optOperationalPoint2 ?optScheduledTime ?optTrackSection WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optLine . + OPTIONAL { + ?optLine ?optLineName . + } + } + OPTIONAL { + ?root ?optOperationalPoint . + OPTIONAL { + ?optOperationalPoint ?optOperationalPointName . + } + } + OPTIONAL { + { + ?service ?root . + } + UNION + { + ?root ?optOperationalPoint2 . + ?service ?optOperationalPoint2 . + } + OPTIONAL { + ?service ?optScheduledTime . + } + } + OPTIONAL { + ?root ?optTrackSection . + } +} + +1948.611 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1948.611 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:20:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +60.409 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +42.997 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 42.997 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 75.96% complete, ETA 00:19:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +46.222 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] + │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?substation . + ?substation ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +31.893 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.893 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 76.92% complete, ETA 00:18:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.259 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0948c92647589a5245119f880723e43fc50e, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8K) [left] + │ ║ │ ║ ├── Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_0948c92647589a5245119f880723e43fc50e) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0948c92647589a5245119f880723e43fc50e) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +6.951 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.951 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 77.88% complete, ETA 00:17:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +484.363 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) + │ ║ ╠══ StatementPattern (costEstimate=6278.4M, resultSizeEstimate=112.1K) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +347.542 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 347.542 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 78.85% complete, ETA 00:16:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.251 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +6.613 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.613 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 79.81% complete, ETA 00:15:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.031 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=469, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=469) [left] + │ ║ ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=470) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="700"^^) + │ ║ ║ │ ║ ValueConstant (value="800"^^) + │ ║ ║ │ ║ ValueConstant (value="900"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +7.115 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.115 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 80.77% complete, ETA 00:14:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +125.703 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4387ec39c4b5a874b2e9854eda0f08811640123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_4387ec39c4b5a874b2e9854eda0f08811640123) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4387ec39c4b5a874b2e9854eda0f08811640123) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +87.176 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 87.176 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 81.73% complete, ETA 00:14:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +22.368 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.8K) [left] + │ ║ │ │ ╠══ Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ │ │ ║ ├── Or + │ ║ │ │ ║ │ ╠══ Compare (=) + │ ║ │ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ │ ║ │ ╚══ Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +15.229 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 15.229 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 82.69% complete, ETA 00:13:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +20.103 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0924a67d53494d5e42008a67d1945a7fd88d, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) + │ ║ │ ║ Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_0924a67d53494d5e42008a67d1945a7fd88d) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0924a67d53494d5e42008a67d1945a7fd88d) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +13.960 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 13.960 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 83.65% complete, ETA 00:12:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.828 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + ?line a . + FILTER (?cap IN (500, 600, 700)) + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +6.004 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.004 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 84.62% complete, ETA 00:11:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +508.190 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +359.240 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 359.240 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 11) + +# Run progress: 85.58% complete, ETA 00:10:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT DISTINCT * WHERE { + ?root a grid:Transformer ; + grid:feeds ?substation ; + grid:hasMeter ?meter . + ?substation a grid:Substation . + ?meter grid:measures ?load . + OPTIONAL { + ?substation grid:name ?substationName . + OPTIONAL { + ?root grid:capacity ?transformerCapacity . + OPTIONAL { ?meter grid:serial ?meterSerial . } + } + } + OPTIONAL { + ?load grid:loadValue ?loadValue . + OPTIONAL { + ?load grid:loadType ?loadType . + OPTIONAL { ?load grid:unit ?loadUnit . } + } + } + OPTIONAL { + ?line grid:connectsTo ?substation . + OPTIONAL { + ?line grid:capacity ?lineCapacity . + OPTIONAL { ?line grid:name ?lineName . } + } + } + OPTIONAL { + ?generator grid:feeds ?substation . + OPTIONAL { + ?generator grid:capacity ?generatorCapacity . + OPTIONAL { ?generator grid:name ?generatorName . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 12) + +# Run progress: 86.54% complete, ETA 00:10:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT * WHERE { + { ?root a grid:Substation . } + UNION + { ?root a grid:Transformer . } + OPTIONAL { + ?root grid:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root grid:feeds ?optFed . + OPTIONAL { ?optFed grid:name ?optFedName . } + } + OPTIONAL { + { ?generator grid:feeds ?root . } + UNION + { ?root grid:feeds ?substation . ?generator grid:feeds ?substation . } + OPTIONAL { ?generator grid:capacity ?optGeneratorCapacity . } + } + OPTIONAL { + ?root grid:hasMeter ?optMeter . + OPTIONAL { ?optMeter grid:measures ?optLoad . } + OPTIONAL { ?optLoad grid:loadValue ?optLoadValue . } + } + OPTIONAL { + ?line grid:connectsTo ?root . + OPTIONAL { ?line grid:capacity ?optLineCapacity . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000401120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2181.314 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optFed" +║ ProjectionElem "optFedName" +║ ProjectionElem "generator" +║ ProjectionElem "substation" +║ ProjectionElem "optGeneratorCapacity" +║ ProjectionElem "optMeter" +║ ProjectionElem "optLoad" +║ ProjectionElem "optLoadValue" +║ ProjectionElem "line" +║ ProjectionElem "optLineCapacity" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=9.4K, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=28.0K, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=37.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=optFed) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ │ s: Var (name=optFed) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=optFedName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=37.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=root) (bindingState=bound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=141.3K) + │ ║ ║ ╠══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=optGeneratorCapacity) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) [left] + │ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ │ ║ o: Var (name=optMeter) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ │ s: Var (name=optMeter) (bindingState=bound) + │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ │ o: Var (name=optLoad) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ s: Var (name=optLoad) (bindingState=bound) + │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ o: Var (name=optLoadValue) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=37.5K) [left] + ║ s: Var (name=line) (bindingState=unbound) + ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] + s: Var (name=line) (bindingState=bound) + p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + o: Var (name=optLineCapacity) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optFed ?optFedName ?generator ?substation ?optGeneratorCapacity ?optMeter ?optLoad ?optLoadValue ?line ?optLineCapacity WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optFed . + OPTIONAL { + ?optFed ?optFedName . + } + } + OPTIONAL { + { + ?generator ?root . + } + UNION + { + ?root ?substation . + ?generator ?substation . + } + OPTIONAL { + ?generator ?optGeneratorCapacity . + } + } + OPTIONAL { + ?root ?optMeter . + OPTIONAL { + ?optMeter ?optLoad . + } + OPTIONAL { + ?optLoad ?optLoadValue . + } + } + OPTIONAL { + ?line ?root . + OPTIONAL { + ?line ?optLineCapacity . + } + } +} + +1617.271 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1617.271 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:09:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +25.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +17.684 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 17.684 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.46% complete, ETA 00:09:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.542 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_04722c1c5683c0fb140299bc350b37dab91f9, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=141) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=49, resultSizeEstimate=141) [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=477) [right] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_04722c1c5683c0fb140299bc350b37dab91f9) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_04722c1c5683c0fb140299bc350b37dab91f9) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo a . + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +3.163 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.163 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.42% complete, ETA 00:08:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c0001120660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +45.151 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_610350ff8b201cb447dca259c990b9b49413012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=224, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=26, resultSizeEstimate=666) [right] + │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_610350ff8b201cb447dca259c990b9b49413012345) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_610350ff8b201cb447dca259c990b9b49413012345) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +32.585 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.585 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.38% complete, ETA 00:07:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +35.785 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Filter [left] + ║ ├── Not + ║ │ Exists + ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ o: Var (name=disease) (bindingState=bound) + ║ └── Join (JoinIterator) (resultSizeEstimate=2.9K) + ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.1K) [left] + ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (costEstimate=320, resultSizeEstimate=955, indexName=ospc) [left] + ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=31, resultSizeEstimate=955) [right] + ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ ║ │ ║ │ o: Var (name=disease) (bindingState=unbound) + ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + ║ ║ │ ║ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + ║ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + ║ ║ │ s: Var (name=arm) (bindingState=bound) + ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ ║ │ o: Var (name=result) (bindingState=unbound) + ║ ║ └── Filter (costEstimate=34, resultSizeEstimate=1.1K) [right] + ║ ║ ╠══ Compare (>) + ║ ║ ║ Var (name=rate) (bindingState=bound) + ║ ║ ║ ValueConstant (value="0.6"^^) + ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + ║ ║ s: Var (name=result) (bindingState=bound) + ║ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ ║ o: Var (name=rate) (bindingState=unbound) + ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ s: Var (name=arm) (bindingState=bound) + ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ o: Var (name=drug) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) + +SELECT ?drug ?disease WHERE { + ?trial a . + ?trial ?disease . + ?trial ?arm . + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +25.054 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.054 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 91.35% complete, ETA 00:06:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f801121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +47.535 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + { + { + ?drug a . + ?drug ?mol . + } + } + ?mol ?class . + } + UNION + { + { + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + } + } + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +32.669 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.669 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 92.31% complete, ETA 00:05:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f8001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.796 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Filter (costEstimate=40, resultSizeEstimate=1.6K) [right] + │ ║ ║ │ ║ │ ├── Or + │ ║ ║ │ ║ │ │ ╠══ Compare (<) + │ ║ ║ │ ║ │ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ║ │ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ │ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ │ │ ValueConstant (value="0.05"^^) + │ ║ ║ │ ║ │ └── StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + ?arm ?result . + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +9.363 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.363 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 93.27% complete, ETA 00:05:06 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.762 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8800185dc876cce294d8493d90745619e57e601234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_8800185dc876cce294d8493d90745619e57e601234567) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8800185dc876cce294d8493d90745619e57e601234567) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +9.416 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.416 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 94.23% complete, ETA 00:04:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +46.991 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) + │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=12, resultSizeEstimate=144) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) (bindingState=bound) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +31.869 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.869 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 95.19% complete, ETA 00:03:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +39.128 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_51227b70efa506974e3d9cc5c04207a815ba01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_51227b70efa506974e3d9cc5c04207a815ba01234) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_51227b70efa506974e3d9cc5c04207a815ba01234) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +27.061 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 27.061 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 96.15% complete, ETA 00:02:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +29.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_8935fd717e0e8d79492abf9c1d7d8ea428be01234567, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_8935fd717e0e8d79492abf9c1d7d8ea428be01234567) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_8935fd717e0e8d79492abf9c1d7d8ea428be01234567) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +19.800 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.800 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 97.12% complete, ETA 00:02:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +353.782 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_004c8cc2c006d9f4161a74d2c6e72e0f40e, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, joinType=Cartesian product) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_004c8cc2c006d9f4161a74d2c6e72e0f40e) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_004c8cc2c006d9f4161a74d2c6e72e0f40e) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?drug a . + ?drug ?target . + ?target ?pathway . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +253.627 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 253.627 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 11) + +# Run progress: 98.08% complete, ETA 00:01:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT DISTINCT * WHERE { + ?root a pharma:ClinicalTrial ; + pharma:hasArm ?arm ; + pharma:studiesDisease ?disease . + ?arm pharma:armDrug ?drug ; + pharma:hasResult ?result . + OPTIONAL { + ?drug pharma:name ?drugName . + OPTIONAL { + ?disease pharma:name ?diseaseName . + OPTIONAL { ?root pharma:name ?trialName . } + } + } + OPTIONAL { + ?drug pharma:targets ?target . + OPTIONAL { + ?target pharma:inPathway ?pathway . + OPTIONAL { ?pathway pharma:name ?pathwayName . } + } + } + OPTIONAL { + ?result pharma:pValue ?pValue . + OPTIONAL { + ?result pharma:effectSize ?effectSize . + OPTIONAL { ?result pharma:responseRate ?responseRate . } + } + } + OPTIONAL { + ?drug pharma:hasMolecule ?molecule . + OPTIONAL { + ?molecule pharma:inClass ?drugClass . + OPTIONAL { ?drugClass pharma:name ?drugClassName . } + } + } + OPTIONAL { + ?drug pharma:indicatedFor ?indication . + OPTIONAL { + ?drug pharma:contraindicatedFor ?contraindication . + OPTIONAL { ?drug pharma:hasSideEffect ?sideEffect . } + } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + + + +org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long + at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) + at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) + at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) + at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) + at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) + at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) + at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) + at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) + at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + at java.base/java.lang.Thread.run(Thread.java:1474) + + + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 12) + +# Run progress: 99.04% complete, ETA 00:00:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT * WHERE { + { ?root a pharma:Drug . } + UNION + { ?root a pharma:ClinicalTrial . } + OPTIONAL { + ?root pharma:name ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root pharma:targets ?optTarget . + OPTIONAL { ?optTarget pharma:inPathway ?optPathway . } + } + OPTIONAL { + ?root pharma:indicatedFor ?optIndication . + OPTIONAL { ?root pharma:contraindicatedFor ?optContraindication . } + } + OPTIONAL { + { ?root pharma:hasArm ?optArm . } + UNION + { ?trial pharma:hasArm ?optArm . ?optArm pharma:armDrug ?root . } + OPTIONAL { ?optArm pharma:hasResult ?optResult . } + OPTIONAL { ?optResult pharma:pValue ?optPValue . } + OPTIONAL { ?optResult pharma:effectSize ?optEffectSize . } + } + OPTIONAL { + ?combo pharma:combinationOf ?root . + OPTIONAL { ?combo pharma:synergyScore ?optSynergy . } + } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +201.220 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optTarget" +║ ProjectionElem "optPathway" +║ ProjectionElem "optIndication" +║ ProjectionElem "optContraindication" +║ ProjectionElem "optArm" +║ ProjectionElem "trial" +║ ProjectionElem "optResult" +║ ProjectionElem "optPValue" +║ ProjectionElem "optEffectSize" +║ ProjectionElem "combo" +║ ProjectionElem "optSynergy" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.0K, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=955, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=20.0K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=optTarget) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=666) [right] + │ ║ │ s: Var (name=optTarget) (bindingState=bound) + │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ │ o: Var (name=optPathway) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=9.9K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ ║ o: Var (name=optIndication) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) [right] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=optContraindication) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ LeftJoin [left] + │ │ ║ ├── Union [left] + │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ ║ o: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=2.9K) + │ │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ │ ║ │ │ s: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ │ ║ │ │ o: Var (name=root) (bindingState=bound) + │ │ ║ │ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ o: Var (name=optArm) (bindingState=bound) + │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K) [right] + │ │ ║ s: Var (name=optArm) (bindingState=bound) + │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ │ ║ o: Var (name=optResult) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) [right] + │ │ s: Var (name=optResult) (bindingState=bound) + │ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ │ o: Var (name=optPValue) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=2.9K) [right] + │ s: Var (name=optResult) (bindingState=bound) + │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ o: Var (name=optEffectSize) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=949) [left] + ║ s: Var (name=combo) (bindingState=unbound) + ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=477) [right] + s: Var (name=combo) (bindingState=bound) + p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + o: Var (name=optSynergy) (bindingState=unbound) + +SELECT ?root ?optName ?optLabel ?optTarget ?optPathway ?optIndication ?optContraindication ?optArm ?trial ?optResult ?optPValue ?optEffectSize ?combo ?optSynergy WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optTarget . + OPTIONAL { + ?optTarget ?optPathway . + } + } + OPTIONAL { + ?root ?optIndication . + OPTIONAL { + ?root ?optContraindication . + } + } + OPTIONAL { + { + ?root ?optArm . + } + UNION + { + ?optArm ?root . + ?trial ?optArm . + } + OPTIONAL { + ?optArm ?optResult . + } + OPTIONAL { + ?optResult ?optPValue . + } + OPTIONAL { + ?optResult ?optEffectSize . + } + } + OPTIONAL { + ?combo ?root . + OPTIONAL { + ?combo ?optSynergy . + } + } +} + +143.646 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 143.646 ms/op + + +# Run complete. Total time: 01:17:16 +``` From cb1c672604a8ce59580be9c6477b4aab8e8f22bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sun, 19 Apr 2026 21:50:47 +0200 Subject: [PATCH 17/43] improved loading to 1 million statements per second --- .../sail/base/SketchBasedJoinEstimator.java | 267 ++++++++++++++- ...chBasedJoinEstimatorRebuildParityTest.java | 313 ++++++++++++++++++ .../lmdb/benchmark/ThemeQueryBenchmark.java | 4 +- 3 files changed, 579 insertions(+), 5 deletions(-) create mode 100644 core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorRebuildParityTest.java diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index d6dfd6b507b..edb1fa8c667 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -2271,7 +2271,7 @@ public synchronized long rebuildOnceSlow() { rebuildBatchSize++; if (rebuildBatchSize == rebuildBatch.length) { synchronized (tgt) { - ingestBatch(tgt, rebuildBatch, rebuildBatchSize); + ingestRebuildBatch(tgt, rebuildBatch, rebuildBatchSize); } // robustSpillBuffer.addStatements(robustQuadBatch, rebuildBatchSize); // Arrays.fill(rebuildBatch, 0, rebuildBatchSize, null); @@ -2324,7 +2324,7 @@ public synchronized long rebuildOnceSlow() { if (seen > 0) { if (rebuildBatchSize > 0) { synchronized (tgt) { - ingestBatch(tgt, rebuildBatch, rebuildBatchSize); + ingestRebuildBatch(tgt, rebuildBatch, rebuildBatchSize); } } } @@ -2333,6 +2333,9 @@ public synchronized long rebuildOnceSlow() { if (blobBaseForSlot(targetSlot) == null && persistenceBlobBaseFile != null) { setBlobBaseForSlot(targetSlot, persistenceBlobBaseFile); } + synchronized (tgt) { + rebuildResidentTrackingForSlot(tgt); + } current = tgt; // single volatile write → visible to all readers seenTriples = seen; approxStoreSize.set(seen); @@ -2702,6 +2705,46 @@ private void ingestBatch(State state, IngestEvent[] batch, int batchSize) { applyBatchUpdates(state, buildBatchUpdates(batch, batchSize)); } + private void ingestRebuildBatch(State state, IngestEvent[] batch, int batchSize) { + if (batchSize == 0) { + return; + } + if (batchSize < PARALLEL_INGEST_MIN_BATCH_SIZE) { + for (int i = 0; i < batchSize; i++) { + IngestEvent event = batch[i]; + if (event != null) { + applyRebuildIngestEvent(state, event, null); + } + } + return; + } + + Future[] futures = new Future[INGEST_PARTITIONS.length]; + try { + for (IngestPartition partition : INGEST_PARTITIONS) { + futures[partition.ordinal()] = ingestPartitionExecutor.submit(() -> applyRebuildPartition(state, batch, + batchSize, partition)); + } + for (Future future : futures) { + future.get(); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Interrupted while rebuilding join-estimator sketches", e); + } catch (ExecutionException e) { + throw new RuntimeException("Failed to rebuild join-estimator sketches", e.getCause()); + } + } + + private void applyRebuildPartition(State state, IngestEvent[] batch, int batchSize, IngestPartition partition) { + for (int i = 0; i < batchSize; i++) { + IngestEvent event = batch[i]; + if (event != null) { + applyRebuildIngestEvent(state, event, partition); + } + } + } + private void applyBatchUpdates(State state, BatchUpdateAccumulator[] batchUpdates) { byte slot = slotByte(slotOf(state)); for (BatchUpdateAccumulator updates : batchUpdates) { @@ -2778,6 +2821,134 @@ private void applyGroupedUpdate(State state, byte slot, int keyPrefix, int keyHa markDirtyAndTouchResidentSketch(slot, entryId, sketch); } + private void applyRebuildIngestEvent(State state, IngestEvent event, IngestPartition partition) { + if (partition == null) { + applyRebuildSingleUpdates(state, event); + applyRebuildPair(state, Pair.SP, event.isDelete, event.spKey, event.thetaSig, event.thetaHo, + event.thetaHc); + applyRebuildPair(state, Pair.SO, event.isDelete, event.soKey, event.thetaSig, event.thetaHp, + event.thetaHc); + applyRebuildPair(state, Pair.SC, event.isDelete, event.scKey, event.thetaSig, event.thetaHp, + event.thetaHo); + applyRebuildPair(state, Pair.PO, event.isDelete, event.poKey, event.thetaSig, event.thetaHs, + event.thetaHc); + applyRebuildPair(state, Pair.PC, event.isDelete, event.pcKey, event.thetaSig, event.thetaHs, + event.thetaHo); + applyRebuildPair(state, Pair.OC, event.isDelete, event.ocKey, event.thetaSig, event.thetaHs, + event.thetaHp); + return; + } + switch (partition) { + case SINGLES: + applyRebuildSingleUpdates(state, event); + break; + case SP: + applyRebuildPair(state, Pair.SP, event.isDelete, event.spKey, event.thetaSig, event.thetaHo, + event.thetaHc); + break; + case SO: + applyRebuildPair(state, Pair.SO, event.isDelete, event.soKey, event.thetaSig, event.thetaHp, + event.thetaHc); + break; + case SC: + applyRebuildPair(state, Pair.SC, event.isDelete, event.scKey, event.thetaSig, event.thetaHp, + event.thetaHo); + break; + case PO: + applyRebuildPair(state, Pair.PO, event.isDelete, event.poKey, event.thetaSig, event.thetaHs, + event.thetaHc); + break; + case PC: + applyRebuildPair(state, Pair.PC, event.isDelete, event.pcKey, event.thetaSig, event.thetaHs, + event.thetaHo); + break; + case OC: + applyRebuildPair(state, Pair.OC, event.isDelete, event.ocKey, event.thetaSig, event.thetaHs, + event.thetaHp); + break; + } + } + + private void applyRebuildSingleUpdates(State state, IngestEvent event) { + boolean isDelete = event.isDelete; + int si = event.si; + int pi = event.pi; + int oi = event.oi; + int ci = event.ci; + long thetaHs = event.thetaHs; + long thetaHp = event.thetaHp; + long thetaHo = event.thetaHo; + long thetaHc = event.thetaHc; + long thetaSig = event.thetaSig; + + applyRebuildSingleSketch(state, isDelete, Component.S, si, thetaSig); + applyRebuildSingleSketch(state, isDelete, Component.P, pi, thetaSig); + applyRebuildSingleSketch(state, isDelete, Component.O, oi, thetaSig); + applyRebuildSingleSketch(state, isDelete, Component.C, ci, thetaSig); + + applyRebuildComplementSketch(state, isDelete, Component.S, Component.P, si, thetaHp); + applyRebuildComplementSketch(state, isDelete, Component.S, Component.O, si, thetaHo); + applyRebuildComplementSketch(state, isDelete, Component.S, Component.C, si, thetaHc); + + applyRebuildComplementSketch(state, isDelete, Component.P, Component.S, pi, thetaHs); + applyRebuildComplementSketch(state, isDelete, Component.P, Component.O, pi, thetaHo); + applyRebuildComplementSketch(state, isDelete, Component.P, Component.C, pi, thetaHc); + + applyRebuildComplementSketch(state, isDelete, Component.O, Component.S, oi, thetaHs); + applyRebuildComplementSketch(state, isDelete, Component.O, Component.P, oi, thetaHp); + applyRebuildComplementSketch(state, isDelete, Component.O, Component.C, oi, thetaHc); + + applyRebuildComplementSketch(state, isDelete, Component.C, Component.S, ci, thetaHs); + applyRebuildComplementSketch(state, isDelete, Component.C, Component.P, ci, thetaHp); + applyRebuildComplementSketch(state, isDelete, Component.C, Component.O, ci, thetaHo); + } + + private void applyRebuildPair(State state, Pair pair, boolean isDelete, long key, long triple, long comp1, + long comp2) { + int x = (int) (key >>> 32); + int y = (int) key; + PairBuild build = isDelete ? state.delPairs.get(pair) : state.pairs.get(pair); + PairBuild.Row row = build.getOrCreateRow(x); + hashUpdateRaw(sketchForRebuildMap(row.triples, y, state.k), triple); + hashUpdateRaw(sketchForRebuildMap(row.comp1, y, state.k), comp1); + hashUpdateRaw(sketchForRebuildMap(row.comp2, y, state.k), comp2); + } + + private void applyRebuildSingleSketch(State state, boolean isDelete, Component component, int idx, long thetaHash) { + AtomicReferenceArray sketches = isDelete ? state.delSingleTriples.get(component) + : state.singleTriples.get(component); + UpdateSketch sketch = sketches.get(idx); + if (sketch == null) { + sketch = newSk(state.k); + sketches.set(idx, sketch); + } + hashUpdateRaw(sketch, thetaHash); + } + + private void applyRebuildComplementSketch(State state, boolean isDelete, Component fixed, Component other, int idx, + long thetaHash) { + SingleBuild build = isDelete ? state.delSingles.get(fixed) : state.singles.get(fixed); + AtomicReferenceArray sketches = build.cmpl.get(other); + if (sketches == null) { + return; + } + UpdateSketch sketch = sketches.get(idx); + if (sketch == null) { + sketch = newSk(state.k); + sketches.set(idx, sketch); + } + hashUpdateRaw(sketch, thetaHash); + } + + private static UpdateSketch sketchForRebuildMap(Map sketches, int idx, int k) { + UpdateSketch sketch = sketches.get(idx); + if (sketch == null) { + sketch = newSk(k); + sketches.put(idx, sketch); + } + return sketch; + } + private void accumulateIngestEvent(BatchUpdateAccumulator updates, IngestEvent event, IngestPartition partition) { if (partition == null) { accumulateSingleUpdates(updates, event); @@ -3974,7 +4145,8 @@ public double estimateFilterPassRatio(Filter filter) { if (pattern == null) { return -1.0d; } - return resolveFilterMultiplier(filter, pattern); + double knownMultiplier = estimateKnownFilterMultiplier(filter, pattern); + return knownMultiplier > 0.0d ? knownMultiplier : -1.0d; } private TuplePlanEstimate toPlannerTupleEstimate(TupleExpr tupleExpr, Set initiallyBoundVars) { @@ -6873,6 +7045,95 @@ private void clearResidentTrackingForSlot(BufferSlot slot) { refreshCacheMetadataAccounting(); } + private void rebuildResidentTrackingForSlot(State state) { + BufferSlot bufferSlot = slotOf(state); + byte slot = slotByte(bufferSlot); + clearResidentTrackingForSlot(bufferSlot); + synchronized (sketchCacheLock) { + cacheDirectory.clearDirtyForSlot(slot); + } + + for (Component component : COMPONENT_VALUES) { + trackRebuiltArray(slot, SINGLE_TRIPLE_KEY_PREFIXES[component.ordinal()], + state.singleTriples.get(component)); + trackRebuiltArray(slot, SINGLE_TRIPLE_KEY_PREFIXES[component.ordinal()] | DELETE_KEY_PREFIX_MASK, + state.delSingleTriples.get(component)); + } + trackRebuiltSingles(slot, state.singles, false); + trackRebuiltSingles(slot, state.delSingles, true); + trackRebuiltPairs(slot, state.pairs, false); + trackRebuiltPairs(slot, state.delPairs, true); + + dirty.set(true); + refreshCacheMetadataAccounting(); + enforceSketchBudget(); + } + + private void trackRebuiltSingles(byte slot, StateComponents singles, boolean isDelete) { + int deleteMask = isDelete ? DELETE_KEY_PREFIX_MASK : 0; + for (Component fixed : COMPONENT_VALUES) { + SingleBuild build = singles.get(fixed); + for (Map.Entry> entry : build.cmpl.entrySet()) { + int keyPrefix = SINGLE_COMPLEMENT_KEY_PREFIXES[fixed.ordinal()][entry.getKey().ordinal()] | deleteMask; + trackRebuiltArray(slot, keyPrefix, entry.getValue()); + } + } + } + + private void trackRebuiltPairs(byte slot, EnumMap pairs, boolean isDelete) { + int deleteMask = isDelete ? DELETE_KEY_PREFIX_MASK : 0; + for (Pair pair : PAIR_VALUES) { + PairBuild build = pairs.get(pair); + int pairIndex = pair.ordinal(); + int triplePrefix = PAIR_TRIPLE_KEY_PREFIXES[pairIndex] | deleteMask; + int comp1Prefix = PAIR_COMP1_KEY_PREFIXES[pairIndex] | deleteMask; + int comp2Prefix = PAIR_COMP2_KEY_PREFIXES[pairIndex] | deleteMask; + for (Map.Entry rowEntry : build.rows.entrySet()) { + int x = rowEntry.getKey(); + PairBuild.Row row = rowEntry.getValue(); + trackRebuiltMap(slot, triplePrefix, x, row.triples); + trackRebuiltMap(slot, comp1Prefix, x, row.comp1); + trackRebuiltMap(slot, comp2Prefix, x, row.comp2); + } + } + } + + private void trackRebuiltArray(byte slot, int keyPrefix, AtomicReferenceArray sketches) { + for (int x = 0; x < sketches.length(); x++) { + trackRebuiltSketch(slot, keyPrefix, x, 0, sketches.get(x)); + } + } + + private void trackRebuiltMap(byte slot, int keyPrefix, int x, Map sketches) { + for (Map.Entry entry : sketches.entrySet()) { + trackRebuiltSketch(slot, keyPrefix, x, entry.getKey(), entry.getValue()); + } + } + + private void trackRebuiltSketch(byte slot, int keyPrefix, int x, int y, UpdateSketch sketch) { + if (sketch == null) { + return; + } + long bytes = estimatedSketchBytes(sketch); + int keyHash = mixAddressHash(keyPrefix, x, y); + int entryId; + synchronized (sketchCacheLock) { + entryId = cacheDirectory.findOrAdd(keyPrefix, keyHash, x, y); + cacheDirectory.markDirty(entryId, slot); + int nodeId = cacheDirectory.residentNode(entryId, slot); + if (nodeId == -1) { + int createdNodeId = residentLru.add(entryId, slot, bytes); + cacheDirectory.setResidentNode(entryId, slot, createdNodeId); + residentSketchBytes += bytes; + } else { + long previousBytes = residentLru.bytes(nodeId); + residentLru.touch(nodeId, bytes); + residentSketchBytes += bytes - previousBytes; + } + } + replaceTrackedMemory(MemoryCategory.RESIDENT_SKETCHES, residentOwner(slot, entryId), bytes); + } + private void removeResidentSketchTracking(int entryId, byte slot) { int nodeId = cacheDirectory.residentNode(entryId, slot); if (nodeId == -1) { diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorRebuildParityTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorRebuildParityTest.java new file mode 100644 index 00000000000..2e3e19546e0 --- /dev/null +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorRebuildParityTest.java @@ -0,0 +1,313 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex + +package org.eclipse.rdf4j.sail.base; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.common.iteration.CloseableIteratorIteration; +import org.eclipse.rdf4j.common.transaction.IsolationLevel; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Namespace; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.sail.SailException; +import org.junit.jupiter.api.Test; + +class SketchBasedJoinEstimatorRebuildParityTest { + + private static final ValueFactory VF = SimpleValueFactory.getInstance(); + + private static SketchBasedJoinEstimator.Config config() { + return SketchBasedJoinEstimator.Config.defaults() + .withNominalEntries(128) + .withThrottleEveryN(1) + .withThrottleMillis(0) + .withRefreshSleepMillis(5); + } + + @Test + void rebuildMatchesIncrementalForSinglesPairsAndJoins() { + List statements = fixtureStatements(); + + StubSailStore rebuildStore = new StubSailStore(); + rebuildStore.addAll(statements); + SketchBasedJoinEstimator rebuilt = new SketchBasedJoinEstimator(rebuildStore, config()); + rebuilt.rebuildOnceSlow(); + + SketchBasedJoinEstimator incremental = new SketchBasedJoinEstimator(new StubSailStore(), config()); + for (Statement statement : statements) { + incremental.addStatement(statement); + } + incremental.debugFlushPendingIncremental(); + + assertEqualEstimate(rebuilt.cardinalitySingle(SketchBasedJoinEstimator.Component.P, "urn:p:group-a"), + incremental.cardinalitySingle(SketchBasedJoinEstimator.Component.P, "urn:p:group-a")); + assertEqualEstimate(rebuilt.cardinalitySingle(SketchBasedJoinEstimator.Component.O, "urn:o:shared-1"), + incremental.cardinalitySingle(SketchBasedJoinEstimator.Component.O, "urn:o:shared-1")); + assertEqualEstimate(rebuilt.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, "urn:p:group-a", + "urn:o:shared-1"), + incremental.cardinalityPair(SketchBasedJoinEstimator.Pair.PO, "urn:p:group-a", + "urn:o:shared-1")); + assertEqualEstimate(rebuilt.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Component.P, "urn:p:group-a", + SketchBasedJoinEstimator.Component.P, "urn:p:group-b"), + incremental.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Component.P, "urn:p:group-a", + SketchBasedJoinEstimator.Component.P, "urn:p:group-b")); + assertEqualEstimate(rebuilt.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Pair.PO, "urn:p:group-a", "urn:o:shared-1", + SketchBasedJoinEstimator.Pair.PO, "urn:p:group-b", "urn:o:shared-2"), + incremental.estimateJoinOn(SketchBasedJoinEstimator.Component.S, + SketchBasedJoinEstimator.Pair.PO, "urn:p:group-a", "urn:o:shared-1", + SketchBasedJoinEstimator.Pair.PO, "urn:p:group-b", "urn:o:shared-2")); + } + + @Test + void incrementalFlushDuringRebuildSurvivesPublish() throws Exception { + Statement base = statement("urn:s:base", "urn:p:base", "urn:o:base", "urn:c:base"); + Statement removed = statement("urn:s:removed", "urn:p:removed", "urn:o:removed", "urn:c:base"); + Statement added = statement("urn:s:added", "urn:p:added", "urn:o:added", "urn:c:base"); + BlockingSnapshotStore store = new BlockingSnapshotStore(); + store.add(base); + store.add(removed); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + CountDownLatch rebuildEnteredScan = store.blockAfterFirstStatement(); + AtomicReference rebuildFailure = new AtomicReference<>(); + Thread rebuildThread = new Thread(() -> { + try { + estimator.rebuildOnceSlow(); + } catch (Throwable t) { + rebuildFailure.set(t); + } + }, "SketchEstimator-RebuildParity"); + rebuildThread.start(); + + assertTrue(rebuildEnteredScan.await(2, TimeUnit.SECONDS), "Expected rebuild to enter dataset scan"); + store.add(added); + store.remove(removed); + estimator.addStatement(added); + estimator.deleteStatement(removed); + estimator.debugFlushPendingIncremental(); + + store.releaseScan(); + rebuildThread.join(TimeUnit.SECONDS.toMillis(2)); + assertEquals(null, rebuildFailure.get(), "Rebuild should complete without failure"); + assertTrue(!rebuildThread.isAlive(), "Rebuild should finish after releasing the scan"); + + assertTrue(estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, "urn:p:added") > 0.0, + "Incremental add flushed during rebuild must be present after publish"); + assertTrue(estimator.cardinalitySingle(SketchBasedJoinEstimator.Component.P, "urn:p:removed") < 0.5, + "Incremental delete flushed during rebuild must be present after publish"); + } + + private static List fixtureStatements() { + List statements = new ArrayList<>(); + for (int i = 0; i < 48; i++) { + statements.add(statement("urn:s:a-" + i, "urn:p:group-a", "urn:o:shared-" + (i % 4), + "urn:c:" + (i % 3))); + statements.add(statement("urn:s:b-" + i, "urn:p:group-b", "urn:o:shared-" + ((i + 1) % 4), + "urn:c:" + (i % 3))); + } + for (int i = 0; i < 16; i++) { + statements.add(statement("urn:s:cross-" + i, "urn:p:group-a", "urn:o:shared-1", "urn:c:cross")); + statements.add(statement("urn:s:cross-" + i, "urn:p:group-b", "urn:o:shared-2", "urn:c:cross")); + } + return statements; + } + + private static Statement statement(String subject, String predicate, String object, String context) { + return VF.createStatement(VF.createIRI(subject), VF.createIRI(predicate), VF.createIRI(object), + VF.createIRI(context)); + } + + private static void assertEqualEstimate(double expected, double actual) { + assertEquals(expected, actual, Math.max(0.000001d, Math.abs(expected) * 0.000001d)); + } + + private static final class BlockingSnapshotStore implements SailStore { + private final List data = new CopyOnWriteArrayList<>(); + private final CountDownLatch releaseScan = new CountDownLatch(1); + private volatile CountDownLatch blockAfterFirstStatement; + + void add(Statement statement) { + data.add(statement); + } + + void remove(Statement statement) { + data.remove(statement); + } + + CountDownLatch blockAfterFirstStatement() { + blockAfterFirstStatement = new CountDownLatch(1); + return blockAfterFirstStatement; + } + + void releaseScan() { + releaseScan.countDown(); + } + + @Override + public ValueFactory getValueFactory() { + return VF; + } + + @Override + public EvaluationStatistics getEvaluationStatistics() { + return null; + } + + @Override + public SailSource getExplicitSailSource() { + return new BlockingSailSource(); + } + + @Override + public SailSource getInferredSailSource() { + return null; + } + + @Override + public void close() throws SailException { + } + + private final class BlockingSailSource implements SailSource { + @Override + public void close() { + } + + @Override + public SailSource fork() { + return null; + } + + @Override + public SailSink sink(IsolationLevel level) throws SailException { + return null; + } + + @Override + public SailDataset dataset(IsolationLevel level) throws SailException { + List snapshot = new ArrayList<>(data); + return new BlockingSailDataset(snapshot); + } + + @Override + public void prepare() throws SailException { + } + + @Override + public void flush() throws SailException { + } + } + + private final class BlockingSailDataset implements SailDataset { + private final List snapshot; + + private BlockingSailDataset(List snapshot) { + this.snapshot = snapshot; + } + + @Override + public void close() { + } + + @Override + public CloseableIteration getNamespaces() throws SailException { + return null; + } + + @Override + public String getNamespace(String prefix) throws SailException { + return ""; + } + + @Override + public CloseableIteration getContextIDs() throws SailException { + return null; + } + + @Override + public CloseableIteration getStatements(Resource subj, IRI pred, Value obj, + Resource... contexts) throws SailException { + List matches = new ArrayList<>(); + for (Statement statement : snapshot) { + if (matches(subj, pred, obj, contexts, statement)) { + matches.add(statement); + } + } + return new BlockingIteration(matches); + } + } + + private final class BlockingIteration extends CloseableIteratorIteration { + private boolean blocked; + + private BlockingIteration(List matches) { + super(matches.iterator()); + } + + @Override + public Statement next() { + Statement next = super.next(); + CountDownLatch latch = blockAfterFirstStatement; + if (!blocked && latch != null) { + blocked = true; + latch.countDown(); + try { + assertTrue(releaseScan.await(2, TimeUnit.SECONDS), "Timed out waiting to release scan"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new AssertionError(e); + } + } + return next; + } + } + + private static boolean matches(Resource subj, IRI pred, Value obj, Resource[] contexts, Statement statement) { + if (subj != null && !subj.equals(statement.getSubject())) { + return false; + } + if (pred != null && !pred.equals(statement.getPredicate())) { + return false; + } + if (obj != null && !obj.equals(statement.getObject())) { + return false; + } + if (contexts == null || contexts.length == 0) { + return true; + } + for (Resource context : contexts) { + if (Objects.equals(context, statement.getContext())) { + return true; + } + } + return false; + } + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index b5f0e792485..ae8a3213c57 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -110,8 +110,8 @@ public class ThemeQueryBenchmark { "8", "9", "10", - "11", - "12" +// "11", +// "12" }) public int z_queryIndex; From 99a9de294f10dc927e8d50908e72a29fbae70a1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sun, 19 Apr 2026 22:14:52 +0200 Subject: [PATCH 18/43] improved loading to 1 million statements per second --- .../sail/lmdb/benchmark/results-2026-04-19.md | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md index a2526bb9958..3d3de6a9302 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md @@ -11,8 +11,6 @@ ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.366 ms/op ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 285.913 ms/op ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 275.830 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 11 avgt 1344.236 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 12 avgt 637.941 ms/op ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.186 ms/op ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 66.930 ms/op ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.637 ms/op @@ -24,8 +22,6 @@ ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 872.808 ms/op ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 25.022 ms/op ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 55.205 ms/op - - ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 677.210 ms/op ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 165.350 ms/op ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 19.513 ms/op @@ -37,21 +33,6 @@ ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 87.537 ms/op ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 111.056 ms/op ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 212.424 ms/op - - -ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 230.859 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 157.730 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 2.115 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 130.605 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 57.736 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 3.225 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 240.274 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 5.727 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.916 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 8.156 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 2.705 ms/op - -ThemeQueryBenchmark.executeQuery ENGINEERING 12 avgt 39927.243 ms/op ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 393.757 ms/op ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1128.657 ms/op ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 676.258 ms/op @@ -63,8 +44,6 @@ ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1254.669 ms/op ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1351.045 ms/op ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 442.575 ms/op - - ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 36.441 ms/op ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 47.138 ms/op ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.305 ms/op @@ -76,8 +55,6 @@ ThemeQueryBenchmark.executeQuery TRAIN 7 avgt ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 141.632 ms/op ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 230.034 ms/op ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 197.122 ms/op - -ThemeQueryBenchmark.executeQuery TRAIN 12 avgt 1948.611 ms/op ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 42.997 ms/op ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 31.893 ms/op ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 6.951 ms/op @@ -89,8 +66,6 @@ ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.960 ms/op ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 6.004 ms/op ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 359.240 ms/op - -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 12 avgt 1617.271 ms/op ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 17.684 ms/op ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.163 ms/op ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.585 ms/op @@ -102,8 +77,6 @@ ThemeQueryBenchmark.executeQuery PHARMA 7 avgt ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 27.061 ms/op ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.800 ms/op ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 253.627 ms/op - -ThemeQueryBenchmark.executeQuery PHARMA 12 avgt 143.646 ms/op ``` ``` From a6db343f08ea7e4e0da41ff4d518ed8502b9bd1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sun, 19 Apr 2026 22:17:21 +0200 Subject: [PATCH 19/43] improved loading to 1 million statements per second --- .../sail/lmdb/benchmark/results-2026-04-19.md | 3443 ++++------------- 1 file changed, 683 insertions(+), 2760 deletions(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md index 3d3de6a9302..b6df930cde5 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-19.md @@ -1,82 +1,94 @@ ``` Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 49.623 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 112.861 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 17.645 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 85.259 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 123.366 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 32.568 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 60.186 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 75.310 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.366 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 285.913 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 275.830 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.186 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 66.930 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.637 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.076 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 3.383 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 742.178 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.251 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 9.496 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 872.808 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 25.022 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 55.205 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 677.210 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 165.350 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 19.513 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.474 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 346.673 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 7.194 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 29426.338 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 469.218 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 87.537 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 111.056 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 212.424 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 393.757 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1128.657 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 676.258 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 121.024 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 290.321 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 266.641 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1417.720 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 206.970 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1254.669 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1351.045 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 442.575 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 36.441 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 47.138 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.305 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 151.778 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 165.053 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 16.784 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 107.321 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 40.595 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 141.632 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 230.034 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 197.122 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 42.997 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 31.893 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 6.951 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 347.542 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.613 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 7.115 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 87.176 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 15.229 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 13.960 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 6.004 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 359.240 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 17.684 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.163 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.585 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 25.054 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 32.669 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 9.363 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 9.416 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 31.869 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 27.061 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.800 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 253.627 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 55.256 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 120.961 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 18.391 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 92.607 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 127.652 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 33.326 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 65.502 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 83.912 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.223 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 297.461 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 278.110 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.179 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 63.236 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.404 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.107 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 3.585 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 767.601 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.264 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 9.298 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 940.004 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 25.026 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 53.381 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 725.098 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 174.088 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 20.261 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.923 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 349.613 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 7.371 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 32204.731 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 493.078 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 91.372 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 114.845 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 207.756 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 238.436 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 158.529 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 2.100 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 144.900 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 59.402 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 3.114 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 246.244 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 5.787 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.752 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 8.150 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 2.692 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 397.706 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1202.188 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 704.931 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 126.495 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 299.815 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 273.886 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1431.609 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 216.615 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1392.135 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1480.063 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 465.966 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 38.622 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 46.027 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.928 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 157.242 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 163.190 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 17.850 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 117.360 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 41.055 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 164.118 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 245.462 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 208.560 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.713 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 32.980 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 6.649 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 337.447 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.845 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 7.055 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 96.276 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 15.286 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.019 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.905 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 366.590 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 18.509 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 2.993 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 31.997 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 24.087 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 35.673 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 9.763 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 8.935 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 33.054 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 28.829 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.691 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 256.919 ms/op + ``` ``` @@ -93,7 +105,7 @@ ThemeQueryBenchmark.executeQuery PHARMA 10 avgt # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) -# Run progress: 0.00% complete, ETA 00:26:00 +# Run progress: 0.00% complete, ETA 00:22:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -115,19 +127,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080010a88a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -Loading theme dataset: MEDICAL_RECORDS -Loading theme dataset: SOCIAL_MEDIA -Loading theme dataset: LIBRARY -Loading theme dataset: ENGINEERING -Loading theme dataset: HIGHLY_CONNECTED -Loading theme dataset: TRAIN -Loading theme dataset: ELECTRICAL_GRID -Loading theme dataset: PHARMA -68.108 ms/op +70.667 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -180,11 +184,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -49.623 ms/op +55.256 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 49.623 ms/op + 55.256 ms/op # JMH version: 1.37 @@ -200,7 +204,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) -# Run progress: 0.96% complete, ETA 02:07:31 +# Run progress: 1.14% complete, ETA 00:22:25 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -220,11 +224,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -156.747 ms/op +170.031 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -309,11 +313,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -112.861 ms/op +120.961 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 112.861 ms/op + 120.961 ms/op # JMH version: 1.37 @@ -329,7 +333,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) -# Run progress: 1.92% complete, ETA 01:16:15 +# Run progress: 2.27% complete, ETA 00:22:11 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -348,11 +352,11 @@ GROUP BY ?practitioner HAVING(COUNT(?enc) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -26.100 ms/op +24.417 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -362,7 +366,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_54334354e2796d1c4deca9bb6f231182c28201234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0243ac56d94205774ad6bc85131e85622587, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (practitioner) │ ║ LeftJoin @@ -389,13 +393,13 @@ Projection │ ║ s: Var (name=enc) (bindingState=bound) │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ GroupElem (_anon_having_54334354e2796d1c4deca9bb6f231182c28201234) + │ ║ GroupElem (_anon_having_0243ac56d94205774ad6bc85131e85622587) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_54334354e2796d1c4deca9bb6f231182c28201234) + │ ╚══ ExtensionElem (_anon_having_0243ac56d94205774ad6bc85131e85622587) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -414,11 +418,11 @@ SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?practitioner HAVING (COUNT(?enc) > 0) -17.645 ms/op +18.391 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 17.645 ms/op + 18.391 ms/op # JMH version: 1.37 @@ -434,7 +438,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) -# Run progress: 2.88% complete, ETA 00:58:57 +# Run progress: 3.41% complete, ETA 00:21:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -456,11 +460,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -121.351 ms/op +118.535 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -483,9 +487,9 @@ Projection │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ ║ │ ║ o: Var (name=_anon_path_2175ae07dfd2b0a433ab97a95e8ba3d31c301, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_207d96867fdaaf94548a600cb9180d8bc5501, anonymous) (bindingState=unbound) │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] - │ ║ │ ║ │ s: Var (name=_anon_path_2175ae07dfd2b0a433ab97a95e8ba3d31c301, anonymous) (bindingState=bound) + │ ║ │ ║ │ s: Var (name=_anon_path_207d96867fdaaf94548a600cb9180d8bc5501, anonymous) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] @@ -525,11 +529,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -85.259 ms/op +92.607 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 85.259 ms/op + 92.607 ms/op # JMH version: 1.37 @@ -545,7 +549,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) -# Run progress: 3.85% complete, ETA 00:50:12 +# Run progress: 4.55% complete, ETA 00:21:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -564,11 +568,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff001120660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -179.116 ms/op +171.665 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -628,11 +632,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } } -123.366 ms/op +127.652 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 123.366 ms/op + 127.652 ms/op # JMH version: 1.37 @@ -648,7 +652,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) -# Run progress: 4.81% complete, ETA 00:44:51 +# Run progress: 5.68% complete, ETA 00:21:25 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -668,11 +672,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -47.475 ms/op +43.342 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -732,11 +736,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -32.568 ms/op +33.326 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 32.568 ms/op + 33.326 ms/op # JMH version: 1.37 @@ -752,7 +756,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) -# Run progress: 5.77% complete, ETA 00:41:11 +# Run progress: 6.82% complete, ETA 00:21:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -776,11 +780,11 @@ GROUP BY ?patient HAVING(COUNT(?med) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000301120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -64.502 ms/op +69.004 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -790,7 +794,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_469c5a3509486e2414f8b150e4f1097d8b60123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (patient) │ ║ Filter @@ -814,13 +818,13 @@ Projection │ ║ │ o: Var (name=med) (bindingState=unbound) │ ║ └── ExtensionElem (optMed) │ ║ Var (name=med) (bindingState=bound) - │ ║ GroupElem (_anon_having_469c5a3509486e2414f8b150e4f1097d8b60123) + │ ║ GroupElem (_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345) │ ║ Count │ ║ Var (name=med) (bindingState=bound) │ ║ GroupElem (medCount) │ ║ Count (Distinct) │ ║ Var (name=med) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_469c5a3509486e2414f8b150e4f1097d8b60123) + │ ╚══ ExtensionElem (_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345) │ Count │ Var (name=med) (bindingState=unbound) └── ExtensionElem (medCount) @@ -844,11 +848,11 @@ SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { GROUP BY ?patient HAVING (COUNT(?med) > 0) -60.186 ms/op +65.502 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 60.186 ms/op + 65.502 ms/op # JMH version: 1.37 @@ -864,7 +868,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) -# Run progress: 6.73% complete, ETA 00:38:30 +# Run progress: 7.95% complete, ETA 00:20:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -882,11 +886,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -107.853 ms/op +113.675 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -947,11 +951,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } } -75.310 ms/op +83.912 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 75.310 ms/op + 83.912 ms/op # JMH version: 1.37 @@ -967,7 +971,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) -# Run progress: 7.69% complete, ETA 00:36:25 +# Run progress: 9.09% complete, ETA 00:20:37 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -991,11 +995,11 @@ GROUP BY ?patient HAVING(COUNT(?enc) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -80.993 ms/op +78.805 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1005,7 +1009,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_0701ef59161f03be4866bc81d5ea9bab8a55, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_090152887b79502248e594363bbef59f0ff7, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (patient) │ ║ Filter @@ -1035,13 +1039,13 @@ Projection │ ║ │ o: Var (name=practitioner) (bindingState=unbound) │ ║ └── ExtensionElem (optPractitioner) │ ║ Var (name=practitioner) (bindingState=bound) - │ ║ GroupElem (_anon_having_0701ef59161f03be4866bc81d5ea9bab8a55) + │ ║ GroupElem (_anon_having_090152887b79502248e594363bbef59f0ff7) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0701ef59161f03be4866bc81d5ea9bab8a55) + │ ╚══ ExtensionElem (_anon_having_090152887b79502248e594363bbef59f0ff7) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -1060,11 +1064,11 @@ SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?patient HAVING (COUNT(?enc) >= 2) -56.366 ms/op +56.223 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 56.366 ms/op + 56.223 ms/op # JMH version: 1.37 @@ -1080,7 +1084,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) -# Run progress: 8.65% complete, ETA 00:34:44 +# Run progress: 10.23% complete, ETA 00:20:21 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1100,11 +1104,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -411.498 ms/op +410.572 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1113,14 +1117,14 @@ Projection ├── Group () │ ╠══ Difference │ ║ ├── LeftJoin - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.5K, joinType=Cartesian product) [left] - │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.5K) [left] - │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K, joinType=Cartesian product) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.6K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.4K) [left] │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ │ ║ │ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.7K) [right] + │ ║ │ ║ │ ║ └── Filter (costEstimate=259, resultSizeEstimate=66.9K) [right] │ ║ │ ║ │ ║ ╠══ ListMemberOperator │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") @@ -1179,11 +1183,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } } -285.913 ms/op +297.461 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 285.913 ms/op + 297.461 ms/op # JMH version: 1.37 @@ -1199,7 +1203,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) -# Run progress: 9.62% complete, ETA 00:33:24 +# Run progress: 11.36% complete, ETA 00:20:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1220,11 +1224,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f801121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -375.912 ms/op +372.416 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1304,409 +1308,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) } -275.830 ms/op - - -Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 275.830 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 11) - -# Run progress: 10.58% complete, ETA 00:32:16 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX med: -PREFIX xsd: -SELECT DISTINCT * WHERE { - ?root a med:Patient ; - med:hasEncounter ?encounter . - ?encounter a med:Encounter ; - med:hasObservation ?observation . - OPTIONAL { - ?root med:name ?patientName . - OPTIONAL { - ?root med:hasMedication ?medication . - OPTIONAL { - ?medication med:code ?medicationCode . - OPTIONAL { ?medication med:dosage ?medicationDosage . } - } - } - } - OPTIONAL { - ?encounter med:recordedOn ?recordedOn . - OPTIONAL { - ?encounter med:handledBy ?practitioner . - OPTIONAL { ?practitioner med:name ?practitionerName . } - } - } - OPTIONAL { - ?encounter med:hasCondition ?condition . - OPTIONAL { - ?condition med:code ?conditionCode . - OPTIONAL { ?condition med:description ?conditionDescription . } - } - } - OPTIONAL { - ?observation med:value ?observationValue . - OPTIONAL { ?observation med:unit ?observationUnit . } - } -} -ORDER BY ?root ?encounter ?observation - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -2119.874 ms/op -Iteration 1: ### Optimized Query ### -Reduced - Order - OrderElem (ASC) - Var (name=root) (bindingState=unbound) - OrderElem (ASC) - Var (name=encounter) (bindingState=unbound) - OrderElem (ASC) - Var (name=observation) (bindingState=unbound) - Projection - ╠══ ProjectionElemList - ║ ProjectionElem "root" - ║ ProjectionElem "encounter" - ║ ProjectionElem "observation" - ║ ProjectionElem "patientName" - ║ ProjectionElem "medication" - ║ ProjectionElem "medicationCode" - ║ ProjectionElem "medicationDosage" - ║ ProjectionElem "recordedOn" - ║ ProjectionElem "practitioner" - ║ ProjectionElem "practitionerName" - ║ ProjectionElem "condition" - ║ ProjectionElem "conditionCode" - ║ ProjectionElem "conditionDescription" - ║ ProjectionElem "observationValue" - ║ ProjectionElem "observationUnit" - ╚══ LeftJoin (LeftJoinIterator) - ├── LeftJoin (LeftJoinIterator) [left] - │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ ├── LeftJoin (LeftJoinIterator) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.4K) [left] - │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.3K) [left] - │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] - │ ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=4.2K, resultSizeEstimate=8.3K, indexName=ospc) [left] - │ ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=53, resultSizeEstimate=25.0K) [right] - │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=bound) - │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ ║ │ ║ o: Var (name=encounter) (bindingState=unbound) - │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] - │ ║ │ ║ │ s: Var (name=encounter) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] - │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) - │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=21.4K) [left] - │ ║ │ │ s: Var (name=root) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) - │ ║ │ │ o: Var (name=patientName) (bindingState=unbound) - │ ║ │ └── LeftJoin [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=16.7K) [left] - │ ║ │ ║ s: Var (name=root) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) - │ ║ │ ║ o: Var (name=medication) (bindingState=unbound) - │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=66.5K) [left] - │ ║ │ │ s: Var (name=medication) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ │ │ o: Var (name=medicationCode) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=16.7K) [right] - │ ║ │ s: Var (name=medication) (bindingState=bound) - │ ║ │ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) - │ ║ │ o: Var (name=medicationDosage) (bindingState=unbound) - │ ║ └── LeftJoin [right] - │ ║ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] - │ ║ ║ s: Var (name=encounter) (bindingState=bound) - │ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) - │ ║ ║ o: Var (name=recordedOn) (bindingState=unbound) - │ ║ ╚══ LeftJoin [right] - │ ║ ├── StatementPattern (resultSizeEstimate=25.0K) [left] - │ ║ │ s: Var (name=encounter) (bindingState=bound) - │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) - │ ║ │ o: Var (name=practitioner) (bindingState=unbound) - │ ║ └── StatementPattern (resultSizeEstimate=21.4K) [right] - │ ║ s: Var (name=practitioner) (bindingState=bound) - │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) - │ ║ o: Var (name=practitionerName) (bindingState=unbound) - │ ╚══ LeftJoin [right] - │ ├── StatementPattern (resultSizeEstimate=49.8K) [left] - │ │ s: Var (name=encounter) (bindingState=bound) - │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ │ o: Var (name=condition) (bindingState=unbound) - │ └── LeftJoin [right] - │ ╠══ StatementPattern (resultSizeEstimate=66.5K) [left] - │ ║ s: Var (name=condition) (bindingState=bound) - │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ o: Var (name=conditionCode) (bindingState=unbound) - │ ╚══ StatementPattern (resultSizeEstimate=0) [right] - │ s: Var (name=condition) (bindingState=bound) - │ p: Var (name=_const_25295cd4_uri, value=http://example.com/theme/medical/description, anonymous) - │ o: Var (name=conditionDescription) (bindingState=unbound) - └── LeftJoin [right] - ╠══ StatementPattern (resultSizeEstimate=49.7K) [left] - ║ s: Var (name=observation) (bindingState=bound) - ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) - ║ o: Var (name=observationValue) (bindingState=unbound) - ╚══ StatementPattern (resultSizeEstimate=0) [right] - s: Var (name=observation) (bindingState=bound) - p: Var (name=_const_996c3ac_uri, value=http://example.com/theme/medical/unit, anonymous) - o: Var (name=observationUnit) (bindingState=unbound) - -SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicationCode ?medicationDosage ?recordedOn ?practitioner ?practitionerName ?condition ?conditionCode ?conditionDescription ?observationValue ?observationUnit WHERE { - ?root a . - ?root ?encounter . - ?encounter a . - ?encounter ?observation . - OPTIONAL { - ?root ?patientName . - OPTIONAL { - ?root ?medication . - OPTIONAL { - ?medication ?medicationCode . - OPTIONAL { - ?medication ?medicationDosage . - } - } - } - } - OPTIONAL { - ?encounter ?recordedOn . - OPTIONAL { - ?encounter ?practitioner . - OPTIONAL { - ?practitioner ?practitionerName . - } - } - } - OPTIONAL { - ?encounter ?condition . - OPTIONAL { - ?condition ?conditionCode . - OPTIONAL { - ?condition ?conditionDescription . - } - } - } - OPTIONAL { - ?observation ?observationValue . - OPTIONAL { - ?observation ?observationUnit . - } - } -} -ORDER BY ?root ?encounter ?observation - -1344.236 ms/op - - -Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1344.236 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 12) - -# Run progress: 11.54% complete, ETA 00:31:21 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX med: -PREFIX xsd: -SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { - { ?root a med:Patient . } - UNION - { ?root a med:Encounter . } - OPTIONAL { - ?root med:name ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root med:hasEncounter ?optEncounter . - OPTIONAL { ?optEncounter med:recordedOn ?optDate . } - OPTIONAL { ?optEncounter med:handledBy ?optPractitioner . } - } - OPTIONAL { - ?root med:hasMedication ?optMedication . - OPTIONAL { ?optMedication med:code ?optMedicationCode . } - OPTIONAL { ?optMedication med:dosage ?optDosage . } - } - OPTIONAL { - ?root med:hasEncounter ?optEncounter2 . - ?optEncounter2 med:hasCondition ?optCondition . - OPTIONAL { ?optCondition med:code ?optConditionCode . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -915.929 ms/op -Iteration 1: ### Optimized Query ### -Distinct - Projection - ├── ProjectionElemList - │ ProjectionElem "root" - │ ProjectionElem "optName" - │ ProjectionElem "optConditionCode" - │ ProjectionElem "optEncounter2" - │ ProjectionElem "optLabel" - │ ProjectionElem "optEncounter" - │ ProjectionElem "optPractitioner" - │ ProjectionElem "optMedicationCode" - │ ProjectionElem "optDosage" - └── LeftJoin (LeftJoinIterator) - ╠══ LeftJoin (LeftJoinIterator) [left] - ║ ├── LeftJoin (LeftJoinIterator) [left] - ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] - ║ │ ║ ├── Union [left] - ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, indexName=ospc) - ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) - ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ │ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=25.0K, indexName=ospc) - ║ │ ║ │ s: Var (name=root) (bindingState=unbound) - ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - ║ │ ║ └── Extension [right] - ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=21.4K) - ║ │ ║ ║ s: Var (name=root) (bindingState=bound) - ║ │ ║ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) - ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) - ║ │ ║ ╚══ ExtensionElem (optLabel) - ║ │ ║ Var (name=optName) (bindingState=bound) - ║ │ ╚══ LeftJoin [right] - ║ │ ├── LeftJoin [left] - ║ │ │ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] - ║ │ │ ║ s: Var (name=root) (bindingState=bound) - ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - ║ │ │ ║ o: Var (name=optEncounter) (bindingState=unbound) - ║ │ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] - ║ │ │ s: Var (name=optEncounter) (bindingState=bound) - ║ │ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) - ║ │ │ o: Var (name=optDate) (bindingState=unbound) - ║ │ └── StatementPattern (resultSizeEstimate=25.0K) [right] - ║ │ s: Var (name=optEncounter) (bindingState=bound) - ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) - ║ │ o: Var (name=optPractitioner) (bindingState=unbound) - ║ └── LeftJoin [right] - ║ ╠══ LeftJoin [left] - ║ ║ ├── StatementPattern (resultSizeEstimate=16.7K) [left] - ║ ║ │ s: Var (name=root) (bindingState=bound) - ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) - ║ ║ │ o: Var (name=optMedication) (bindingState=unbound) - ║ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] - ║ ║ s: Var (name=optMedication) (bindingState=bound) - ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - ║ ║ o: Var (name=optMedicationCode) (bindingState=unbound) - ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) [right] - ║ s: Var (name=optMedication) (bindingState=bound) - ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) - ║ o: Var (name=optDosage) (bindingState=unbound) - ╚══ LeftJoin [right] - ├── Join (JoinIterator) (resultSizeEstimate=51.9K) [left] - │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] - │ ║ s: Var (name=root) (bindingState=bound) - │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ o: Var (name=optEncounter2) (bindingState=unbound) - │ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.8K) [right] - │ s: Var (name=optEncounter2) (bindingState=bound) - │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ o: Var (name=optCondition) (bindingState=unbound) - └── StatementPattern (resultSizeEstimate=66.5K) [right] - s: Var (name=optCondition) (bindingState=bound) - p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - o: Var (name=optConditionCode) (bindingState=unbound) - -SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { - { - ?root a . - } - UNION - { - ?root a . - } - OPTIONAL { - ?root ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root ?optEncounter . - OPTIONAL { - ?optEncounter ?optDate . - } - OPTIONAL { - ?optEncounter ?optPractitioner . - } - } - OPTIONAL { - ?root ?optMedication . - OPTIONAL { - ?optMedication ?optMedicationCode . - } - OPTIONAL { - ?optMedication ?optDosage . - } - } - OPTIONAL { - ?root ?optEncounter2 . - ?optEncounter2 ?optCondition . - OPTIONAL { - ?optCondition ?optConditionCode . - } - } -} - -637.941 ms/op +278.110 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 637.941 ms/op + 278.110 ms/op # JMH version: 1.37 @@ -1722,7 +1328,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) -# Run progress: 12.50% complete, ETA 00:30:26 +# Run progress: 12.50% complete, ETA 00:19:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1747,11 +1353,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.197 ms/op +3.053 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1816,11 +1422,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) } -2.186 ms/op +2.179 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.186 ms/op + 2.179 ms/op # JMH version: 1.37 @@ -1836,7 +1442,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) -# Run progress: 13.46% complete, ETA 00:29:35 +# Run progress: 13.64% complete, ETA 00:19:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1869,11 +1475,11 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -96.878 ms/op +80.161 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1896,10 +1502,10 @@ Projection │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.4944290053978746E16M) [left] - │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.039617250604E11M) [left] - │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=723222.1M) [left] - │ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=5.0M) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3364465105415278E17M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.297148555399E11M) [left] + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6467671.6M) [left] + │ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=45.0M) [left] │ ║ │ │ ║ │ ║ ├── Filter [left] │ ║ │ │ ║ │ ║ │ ╠══ And │ ║ │ │ ║ │ ║ │ ║ ├── Compare (!=) @@ -1947,7 +1553,7 @@ Projection │ ║ ║ s: Var (name=u1) (bindingState=unbound) │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ o: Var (name=u1) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_0261279ccf5e29df466a97811b2897eaa955) + │ ║ ╚══ ExtensionElem (_anon_path_45817ef2a195b893433a80fa43434c7124b00123) │ ║ Var (name=u1) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -1983,15 +1589,15 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } MINUS { ?u1 ?u1 . - BIND(?u1 AS ?_anon_path_0261279ccf5e29df466a97811b2897eaa955) + BIND(?u1 AS ?_anon_path_45817ef2a195b893433a80fa43434c7124b00123) } } -66.930 ms/op +63.236 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 66.930 ms/op + 63.236 ms/op # JMH version: 1.37 @@ -2007,7 +1613,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) -# Run progress: 14.42% complete, ETA 00:28:50 +# Run progress: 14.77% complete, ETA 00:19:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2034,11 +1640,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.836 ms/op +3.363 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2106,11 +1712,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName != "") } -2.637 ms/op +2.404 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.637 ms/op + 2.404 ms/op # JMH version: 1.37 @@ -2126,7 +1732,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) -# Run progress: 15.38% complete, ETA 00:28:08 +# Run progress: 15.91% complete, ETA 00:19:03 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2154,11 +1760,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.024 ms/op +2.783 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2168,7 +1774,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_57171ab84def858214d3a9d45494a1312ef9501234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (u) │ ║ Filter @@ -2198,13 +1804,13 @@ Projection │ ║ │ o: Var (name=optName) (bindingState=unbound) │ ║ └── ExtensionElem (optAlias) │ ║ Var (name=optName) (bindingState=bound) - │ ║ GroupElem (_anon_having_57171ab84def858214d3a9d45494a1312ef9501234) + │ ║ GroupElem (_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_57171ab84def858214d3a9d45494a1312ef9501234) + │ ╚══ ExtensionElem (_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (degree) @@ -2241,11 +1847,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 3) -2.076 ms/op +2.107 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.076 ms/op + 2.107 ms/op # JMH version: 1.37 @@ -2261,7 +1867,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) -# Run progress: 16.35% complete, ETA 00:27:30 +# Run progress: 17.05% complete, ETA 00:18:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2290,11 +1896,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.768 ms/op +4.698 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2325,7 +1931,7 @@ Projection │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_path_72341efce63411e554f0aa0b85d62106856fc0123456) + │ ║ ║ ║ └── ExtensionElem (_anon_path_701410582c3446f344b159fd0ded0c7fda1090123456) │ ║ ║ ║ Var (name=u) (bindingState=bound) │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] @@ -2346,7 +1952,7 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { VALUES ?u { } FILTER NOT EXISTS { ?u ?u . - BIND(?u AS ?_anon_path_72341efce63411e554f0aa0b85d62106856fc0123456) + BIND(?u AS ?_anon_path_701410582c3446f344b159fd0ded0c7fda1090123456) } OPTIONAL { ?v ?optName . @@ -2354,11 +1960,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName != "") } -3.383 ms/op +3.585 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.383 ms/op + 3.585 ms/op # JMH version: 1.37 @@ -2374,7 +1980,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) -# Run progress: 17.31% complete, ETA 00:26:53 +# Run progress: 18.18% complete, ETA 00:18:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2405,11 +2011,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1038.688 ms/op +1038.418 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2476,11 +2082,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) } -742.178 ms/op +767.601 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 742.178 ms/op + 767.601 ms/op # JMH version: 1.37 @@ -2496,7 +2102,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) -# Run progress: 18.27% complete, ETA 00:26:22 +# Run progress: 19.32% complete, ETA 00:18:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2528,11 +2134,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 5) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.254 ms/op +2.908 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2542,7 +2148,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_219519dfce2bc9d0d4877a0b56bea832e29be01, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="5"^^) │ ║ └── Group (u) │ ║ Filter @@ -2566,13 +2172,13 @@ Projection │ ║ s: Var (name=u) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_219519dfce2bc9d0d4877a0b56bea832e29be01) + │ ║ GroupElem (_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (connections) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_219519dfce2bc9d0d4877a0b56bea832e29be01) + │ ╚══ ExtensionElem (_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (connections) @@ -2628,11 +2234,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 5) -2.251 ms/op +2.264 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.251 ms/op + 2.264 ms/op # JMH version: 1.37 @@ -2648,7 +2254,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) -# Run progress: 19.23% complete, ETA 00:25:49 +# Run progress: 20.45% complete, ETA 00:18:03 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2680,11 +2286,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -13.848 ms/op +13.823 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2725,7 +2331,7 @@ Projection │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) - │ ║ ║ ╚══ ExtensionElem (_anon_path_452620cd3bdcfeec44df8896ac3be1ebdd130123) + │ ║ ║ ╚══ ExtensionElem (_anon_path_9136c0ff928e96324574a82809a0327e1ed1012345678) │ ║ ║ Var (name=v) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) @@ -2781,7 +2387,7 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { ?u ?v . MINUS { ?v ?v . - BIND(?v AS ?_anon_path_452620cd3bdcfeec44df8896ac3be1ebdd130123) + BIND(?v AS ?_anon_path_9136c0ff928e96324574a82809a0327e1ed1012345678) } OPTIONAL { ?v ?optName . @@ -2789,11 +2395,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) } -9.496 ms/op +9.298 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 9.496 ms/op + 9.298 ms/op # JMH version: 1.37 @@ -2809,7 +2415,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) -# Run progress: 20.19% complete, ETA 00:25:19 +# Run progress: 21.59% complete, ETA 00:17:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2829,11 +2435,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1199.885 ms/op +1199.690 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2848,7 +2454,7 @@ Projection │ ║ │ ValueConstant (value="user2") │ ║ └── LeftJoin │ ║ ╠══ Extension [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185314.6M) │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) @@ -2886,11 +2492,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optName IN ("user0", "user1", "user2")) } -872.808 ms/op +940.004 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 872.808 ms/op + 940.004 ms/op # JMH version: 1.37 @@ -2906,7 +2512,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) -# Run progress: 21.15% complete, ETA 00:24:53 +# Run progress: 22.73% complete, ETA 00:17:36 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2931,11 +2537,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -35.439 ms/op +35.496 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2947,7 +2553,7 @@ Projection │ ║ │ Var (name=optAlias) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=20595.2M) [left] │ ║ ║ ├── Filter [left] │ ║ ║ │ ╠══ Compare (!=) │ ║ ║ │ ║ Var (name=d) (bindingState=bound) @@ -3015,11 +2621,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optAlias != "") } -25.022 ms/op +25.026 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 25.022 ms/op + 25.026 ms/op # JMH version: 1.37 @@ -3035,7 +2641,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) -# Run progress: 22.12% complete, ETA 00:24:25 +# Run progress: 23.86% complete, ETA 00:17:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3084,11 +2690,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -79.131 ms/op +72.010 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3118,20 +2724,20 @@ Projection │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.67902065928E10M) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=395067.8M) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.67849993939E10M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=395031.6M) [left] │ ║ ║ │ ╠══ Filter [left] │ ║ ║ │ ║ ├── Compare (!=) │ ║ ║ │ ║ │ Var (name=d) (bindingState=bound) │ ║ ║ │ ║ │ Var (name=e) (bindingState=bound) - │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=11130.4M) - │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=11130.4M) [left] + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=11126.7M) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=11126.7M) [left] │ ║ ║ │ ║ ║ ├── Filter [left] │ ║ ║ │ ║ ║ │ ╠══ Compare (!=) │ ║ ║ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) │ ║ ║ │ ║ ║ │ ║ Var (name=d) (bindingState=bound) - │ ║ ║ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=251.0M) - │ ║ ║ │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=251.0M) [left] + │ ║ ║ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=250.8M) + │ ║ ║ │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=250.8M) [left] │ ║ ║ │ ║ ║ │ │ ╠══ Filter [left] │ ║ ║ │ ║ ║ │ │ ║ ├── And │ ║ ║ │ ║ ║ │ │ ║ │ ╠══ Compare (!=) @@ -3229,177 +2835,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) } -55.205 ms/op +53.381 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 55.205 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 11) - -# Run progress: 23.08% complete, ETA 00:23:58 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX social: -PREFIX xsd: -SELECT DISTINCT * WHERE { - ?root a social:User ; - social:follows ?followed . - ?post social:authored ?root . - OPTIONAL { - ?root social:name ?rootName . - OPTIONAL { - ?followed social:name ?followedName . - OPTIONAL { ?followed social:follows ?followedFollows . } - } - } - OPTIONAL { - ?post social:authored ?postAuthor . - OPTIONAL { - ?postAuthor social:name ?postAuthorName . - OPTIONAL { ?postAuthor social:follows ?postAuthorFollows . } - } - } -} -ORDER BY ?root ?followed ?post - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 12) - -# Run progress: 24.04% complete, ETA 00:38:46 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX social: -PREFIX xsd: -SELECT DISTINCT * WHERE { - { ?root a social:User . } - UNION - { ?root a social:Post . } - OPTIONAL { - ?root social:name ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root social:follows ?optFollowed . - OPTIONAL { ?optFollowed social:name ?optFollowedName . } - } - OPTIONAL { - ?post social:authored ?root . - OPTIONAL { ?root social:follows ?optAuthorFollows . } - OPTIONAL { ?post social:authored ?optPostAuthor . } - } - OPTIONAL { - { ?optFollower social:follows ?root . } - UNION - { ?root social:follows ?optFollower . } - OPTIONAL { ?optFollower social:name ?optFollowerName . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000401120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - + 53.381 ms/op # JMH version: 1.37 @@ -3415,7 +2855,7 @@ org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too lon # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 0) -# Run progress: 25.00% complete, ETA 00:51:53 +# Run progress: 25.00% complete, ETA 00:17:04 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3437,11 +2877,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -965.728 ms/op +891.712 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3494,11 +2934,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -677.210 ms/op +725.098 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 677.210 ms/op + 725.098 ms/op # JMH version: 1.37 @@ -3514,7 +2954,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 1) -# Run progress: 25.96% complete, ETA 00:50:06 +# Run progress: 26.14% complete, ETA 00:16:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3534,11 +2974,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -233.215 ms/op +219.939 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3623,11 +3063,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -165.350 ms/op +174.088 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 165.350 ms/op + 174.088 ms/op # JMH version: 1.37 @@ -3643,7 +3083,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 2) -# Run progress: 26.92% complete, ETA 00:48:23 +# Run progress: 27.27% complete, ETA 00:16:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3662,11 +3102,11 @@ GROUP BY ?author HAVING(COUNT(?book) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -28.143 ms/op +26.787 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3676,7 +3116,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_6542f41789f523334c73a013275975c2b391012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ LeftJoin @@ -3699,13 +3139,13 @@ Projection │ ║ s: Var (name=book) (bindingState=unbound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) │ ║ o: Var (name=author) (bindingState=bound) - │ ║ GroupElem (_anon_having_6542f41789f523334c73a013275975c2b391012345) + │ ║ GroupElem (_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567) │ ║ Count │ ║ Var (name=book) (bindingState=bound) │ ║ GroupElem (bookCount) │ ║ Count (Distinct) │ ║ Var (name=book) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_6542f41789f523334c73a013275975c2b391012345) + │ ╚══ ExtensionElem (_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567) │ Count │ Var (name=book) (bindingState=unbound) └── ExtensionElem (bookCount) @@ -3723,11 +3163,11 @@ SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { GROUP BY ?author HAVING (COUNT(?book) > 0) -19.513 ms/op +20.261 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 19.513 ms/op + 20.261 ms/op # JMH version: 1.37 @@ -3743,7 +3183,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 3) -# Run progress: 27.88% complete, ETA 00:46:46 +# Run progress: 28.41% complete, ETA 00:16:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3764,11 +3204,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -65.435 ms/op +62.966 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3828,11 +3268,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } } -45.474 ms/op +45.923 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 45.474 ms/op + 45.923 ms/op # JMH version: 1.37 @@ -3848,7 +3288,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 4) -# Run progress: 28.85% complete, ETA 00:45:14 +# Run progress: 29.55% complete, ETA 00:16:03 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3866,11 +3306,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -468.183 ms/op +445.634 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3924,11 +3364,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -346.673 ms/op +349.613 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 346.673 ms/op + 349.613 ms/op # JMH version: 1.37 @@ -3944,7 +3384,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 5) -# Run progress: 29.81% complete, ETA 00:43:48 +# Run progress: 30.68% complete, ETA 00:15:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3962,11 +3402,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.542 ms/op +10.226 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4018,11 +3458,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } } -7.194 ms/op +7.371 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 7.194 ms/op + 7.371 ms/op # JMH version: 1.37 @@ -4038,7 +3478,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 6) -# Run progress: 30.77% complete, ETA 00:42:26 +# Run progress: 31.82% complete, ETA 00:15:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4062,11 +3502,11 @@ GROUP BY ?member HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -32829.922 ms/op +33668.195 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4076,7 +3516,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5135e2a62660cb4ca489d6dcdc9aa0c34601234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_51cd5cef888879412abff09f76f00ca68401234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (member) │ ║ Filter @@ -4105,13 +3545,13 @@ Projection │ ║ │ o: Var (name=copy) (bindingState=unbound) │ ║ └── ExtensionElem (optCopy) │ ║ Var (name=copy) (bindingState=bound) - │ ║ GroupElem (_anon_having_5135e2a62660cb4ca489d6dcdc9aa0c34601234) + │ ║ GroupElem (_anon_having_51cd5cef888879412abff09f76f00ca68401234) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5135e2a62660cb4ca489d6dcdc9aa0c34601234) + │ ╚══ ExtensionElem (_anon_having_51cd5cef888879412abff09f76f00ca68401234) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -4136,11 +3576,11 @@ SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?member HAVING (COUNT(?loan) > 0) -29426.338 ms/op +32204.731 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 29426.338 ms/op + 32204.731 ms/op # JMH version: 1.37 @@ -4156,7 +3596,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 7) -# Run progress: 31.73% complete, ETA 00:42:49 +# Run progress: 32.95% complete, ETA 00:17:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4175,11 +3615,11 @@ SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -673.160 ms/op +686.701 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4245,11 +3685,11 @@ SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { } } -469.218 ms/op +493.078 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 469.218 ms/op + 493.078 ms/op # JMH version: 1.37 @@ -4265,7 +3705,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 8) -# Run progress: 32.69% complete, ETA 00:41:30 +# Run progress: 34.09% complete, ETA 00:16:40 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4286,11 +3726,11 @@ GROUP BY ?author HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -122.831 ms/op +119.142 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4300,7 +3740,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_9621bd94bcd0188d45acac7d5275109ed49e012345678, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ Filter @@ -4348,13 +3788,13 @@ Projection │ ║ s: Var (name=member) (bindingState=bound) │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_9621bd94bcd0188d45acac7d5275109ed49e012345678) + │ ║ GroupElem (_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_9621bd94bcd0188d45acac7d5275109ed49e012345678) + │ ╚══ ExtensionElem (_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -4377,11 +3817,11 @@ SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?author HAVING (COUNT(?loan) > 0) -87.537 ms/op +91.372 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 87.537 ms/op + 91.372 ms/op # JMH version: 1.37 @@ -4397,7 +3837,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 9) -# Run progress: 33.65% complete, ETA 00:40:15 +# Run progress: 35.23% complete, ETA 00:16:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4421,11 +3861,11 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00002000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -159.604 ms/op +155.205 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4519,11 +3959,11 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) } -111.056 ms/op +114.845 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 111.056 ms/op + 114.845 ms/op # JMH version: 1.37 @@ -4539,7 +3979,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 10) -# Run progress: 34.62% complete, ETA 00:39:03 +# Run progress: 36.36% complete, ETA 00:15:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4560,11 +4000,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -297.934 ms/op +279.247 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4635,11 +4075,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } } -212.424 ms/op +207.756 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 212.424 ms/op + 207.756 ms/op # JMH version: 1.37 @@ -4653,9 +4093,9 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = LIBRARY, z_queryIndex = 11) +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) -# Run progress: 35.58% complete, ETA 00:37:55 +# Run progress: 37.50% complete, ETA 00:15:40 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4663,197 +4103,20 @@ WARNING: Please consider reporting this to the maintainers of class org.openjdk. WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release # Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete ### Original Query ### -PREFIX lib: -PREFIX xsd: -SELECT DISTINCT * WHERE { - ?root a lib:Loan ; - lib:borrowedBy ?member ; - lib:loanedCopy ?copy . - ?copy lib:locatedAt ?branch . - ?book a lib:Book ; - lib:hasCopy ?copy . - OPTIONAL { - ?member lib:name ?memberName . - OPTIONAL { - ?branch lib:name ?branchName . - OPTIONAL { ?book lib:title ?bookTitle . } - } - } - OPTIONAL { - ?book lib:writtenBy ?author . - OPTIONAL { - ?author lib:name ?authorName . - OPTIONAL { ?author lib:country ?authorCountry . } - } - } - OPTIONAL { - ?root lib:loanDate ?loanDate . - OPTIONAL { - ?root lib:dueDate ?dueDate . - OPTIONAL { ?root lib:returnedDate ?returnedDate . } - } - } +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } } -ORDER BY ?root ?member ?copy WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00002000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = LIBRARY, z_queryIndex = 12) - -# Run progress: 36.54% complete, ETA 00:45:08 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX lib: -PREFIX xsd: -SELECT DISTINCT * WHERE { - { ?root a lib:Book . } - UNION - { ?root a lib:Loan . } - OPTIONAL { - ?root lib:title ?optTitle . - BIND(?optTitle AS ?optLabel) - } - OPTIONAL { - ?root lib:hasCopy ?optCopy . - OPTIONAL { ?optCopy lib:locatedAt ?optBranch . } - OPTIONAL { ?optBranch lib:name ?optBranchName . } - } - OPTIONAL { - ?root lib:loanedCopy ?optLoanCopy . - OPTIONAL { ?root lib:borrowedBy ?optMember . } - OPTIONAL { ?optMember lib:name ?optMemberName . } - } - OPTIONAL { - { ?root lib:writtenBy ?optAuthor . } - UNION - { ?bookForAuthor lib:writtenBy ?optAuthor . ?bookForAuthor lib:hasCopy ?optCopy2 . } - OPTIONAL { ?optAuthor lib:name ?optAuthorName . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) - -# Run progress: 37.50% complete, ETA 00:51:47 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX eng: -SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { - ?component a eng:Component . - OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } - FILTER(?optAssembly != ?component) - OPTIONAL { ?component eng:dependsOn ?dep . } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -245.267 ms/op +249.808 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4900,11 +4163,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -230.859 ms/op +238.436 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 230.859 ms/op + 238.436 ms/op # JMH version: 1.37 @@ -4920,7 +4183,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 1) -# Run progress: 38.46% complete, ETA 00:50:07 +# Run progress: 38.64% complete, ETA 00:15:21 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4939,11 +4202,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff801121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -238.344 ms/op +211.413 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5028,11 +4291,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -157.730 ms/op +158.529 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 157.730 ms/op + 158.529 ms/op # JMH version: 1.37 @@ -5048,7 +4311,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 2) -# Run progress: 39.42% complete, ETA 00:48:32 +# Run progress: 39.77% complete, ETA 00:15:01 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5066,11 +4329,11 @@ GROUP BY ?assembly HAVING(COUNT(?component) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.088 ms/op +2.940 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5080,7 +4343,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_63422d4590ad9bba843fa8200164366087a2a012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_44132b7f119773fec4674b9ba869ee58689290123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (assembly) │ ║ LeftJoin @@ -5103,13 +4366,13 @@ Projection │ ║ s: Var (name=component) (bindingState=unbound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ o: Var (name=assembly) (bindingState=bound) - │ ║ GroupElem (_anon_having_63422d4590ad9bba843fa8200164366087a2a012345) + │ ║ GroupElem (_anon_having_44132b7f119773fec4674b9ba869ee58689290123) │ ║ Count │ ║ Var (name=component) (bindingState=bound) │ ║ GroupElem (componentCount) │ ║ Count (Distinct) │ ║ Var (name=component) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_63422d4590ad9bba843fa8200164366087a2a012345) + │ ╚══ ExtensionElem (_anon_having_44132b7f119773fec4674b9ba869ee58689290123) │ Count │ Var (name=component) (bindingState=unbound) └── ExtensionElem (componentCount) @@ -5127,11 +4390,11 @@ SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { GROUP BY ?assembly HAVING (COUNT(?component) > 0) -2.115 ms/op +2.100 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.115 ms/op + 2.100 ms/op # JMH version: 1.37 @@ -5147,7 +4410,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 3) -# Run progress: 40.38% complete, ETA 00:47:00 +# Run progress: 40.91% complete, ETA 00:14:42 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5164,11 +4427,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000038001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -186.664 ms/op +204.221 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5227,11 +4490,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -130.605 ms/op +144.900 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 130.605 ms/op + 144.900 ms/op # JMH version: 1.37 @@ -5247,7 +4510,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 4) -# Run progress: 41.35% complete, ETA 00:45:32 +# Run progress: 42.05% complete, ETA 00:14:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5264,11 +4527,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -78.907 ms/op +75.584 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5322,11 +4585,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -57.736 ms/op +59.402 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 57.736 ms/op + 59.402 ms/op # JMH version: 1.37 @@ -5342,7 +4605,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 5) -# Run progress: 42.31% complete, ETA 00:44:07 +# Run progress: 43.18% complete, ETA 00:14:04 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5359,11 +4622,11 @@ SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.662 ms/op +4.342 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5415,11 +4678,11 @@ SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { } } -3.225 ms/op +3.114 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.225 ms/op + 3.114 ms/op # JMH version: 1.37 @@ -5435,7 +4698,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 6) -# Run progress: 43.27% complete, ETA 00:42:45 +# Run progress: 44.32% complete, ETA 00:13:45 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5455,11 +4718,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -350.957 ms/op +330.507 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5469,7 +4732,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_552de842a80c1dd4891aa3a1a168e086fbb01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_562c015adadd61145f7a5b0e308aecce3d201234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (component) │ ║ Filter @@ -5498,13 +4761,13 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_552de842a80c1dd4891aa3a1a168e086fbb01234) + │ ║ GroupElem (_anon_having_562c015adadd61145f7a5b0e308aecce3d201234) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_552de842a80c1dd4891aa3a1a168e086fbb01234) + │ ╚══ ExtensionElem (_anon_having_562c015adadd61145f7a5b0e308aecce3d201234) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -5529,11 +4792,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) > 0) -240.274 ms/op +246.244 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 240.274 ms/op + 246.244 ms/op # JMH version: 1.37 @@ -5549,7 +4812,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 7) -# Run progress: 44.23% complete, ETA 00:41:26 +# Run progress: 45.45% complete, ETA 00:13:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5566,11 +4829,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.357 ms/op +8.053 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5630,11 +4893,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -5.727 ms/op +5.787 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.727 ms/op + 5.787 ms/op # JMH version: 1.37 @@ -5650,7 +4913,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 8) -# Run progress: 45.19% complete, ETA 00:40:10 +# Run progress: 46.59% complete, ETA 00:13:08 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5669,11 +4932,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) >= 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -7.224 ms/op +6.739 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5683,7 +4946,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_24441ac7eefd86bf5467a8ae0aa8a75fac55e01, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_042510b137c97be6a4029a20676730fe31e49, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (component) │ ║ Filter @@ -5717,13 +4980,13 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_24441ac7eefd86bf5467a8ae0aa8a75fac55e01) + │ ║ GroupElem (_anon_having_042510b137c97be6a4029a20676730fe31e49) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_24441ac7eefd86bf5467a8ae0aa8a75fac55e01) + │ ╚══ ExtensionElem (_anon_having_042510b137c97be6a4029a20676730fe31e49) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -5744,11 +5007,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) >= 1) -4.916 ms/op +4.752 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.916 ms/op + 4.752 ms/op # JMH version: 1.37 @@ -5764,7 +5027,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 9) -# Run progress: 46.15% complete, ETA 00:38:56 +# Run progress: 47.73% complete, ETA 00:12:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5785,11 +5048,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -11.538 ms/op +11.210 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5858,11 +5121,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) } -8.156 ms/op +8.150 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 8.156 ms/op + 8.150 ms/op # JMH version: 1.37 @@ -5878,7 +5141,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 10) -# Run progress: 47.12% complete, ETA 00:37:45 +# Run progress: 48.86% complete, ETA 00:12:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5896,11 +5159,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.056 ms/op +3.594 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5962,291 +5225,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } } -2.705 ms/op - - -Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.705 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = ENGINEERING, z_queryIndex = 11) - -# Run progress: 48.08% complete, ETA 00:36:36 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX eng: -SELECT DISTINCT * WHERE { - ?root a eng:Requirement ; - eng:satisfies ?component ; - eng:verifiedBy ?test . - ?component a eng:Component ; - eng:partOf ?assembly . - OPTIONAL { - ?root eng:name ?requirementName . - OPTIONAL { - ?component eng:name ?componentName . - OPTIONAL { ?assembly eng:name ?assemblyName . } - } - } - OPTIONAL { - ?component eng:dependsOn ?dependency . - OPTIONAL { - ?dependency eng:name ?dependencyName . - OPTIONAL { ?dependency eng:partOf ?dependencyAssembly . } - } - } - OPTIONAL { - ?test eng:verifiedBy ?measurement . - OPTIONAL { - ?measurement eng:measuredValue ?measuredValue . - OPTIONAL { ?measurement eng:measuredAt ?measuredAt . } - } - } -} -ORDER BY ?root ?component ?test - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:55) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = ENGINEERING, z_queryIndex = 12) - -# Run progress: 49.04% complete, ETA 00:40:28 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX eng: -SELECT DISTINCT * WHERE { - { ?root a eng:Component . } - UNION - { ?root a eng:Requirement . } - OPTIONAL { - ?root eng:name ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root eng:partOf ?optAssembly . - OPTIONAL { ?optAssembly eng:name ?optAssemblyName . } - } - OPTIONAL { - ?root eng:dependsOn ?optDependency . - OPTIONAL { ?optDependency eng:name ?optDependencyName . } - } - OPTIONAL { - ?root eng:satisfies ?optSatisfiedComponent . - OPTIONAL { ?optSatisfiedComponent eng:partOf ?optSatisfiedAssembly . } - } - OPTIONAL { - { ?root eng:verifiedBy ?optVerification . } - UNION - { ?verificationOwner eng:verifiedBy ?optVerification . FILTER(?verificationOwner = ?root) } - OPTIONAL { ?optVerification eng:measuredValue ?optMeasuredValue . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -40112.349 ms/op -Iteration 1: ### Optimized Query ### -Distinct - Projection - ├── ProjectionElemList - │ ProjectionElem "root" - │ ProjectionElem "optName" - │ ProjectionElem "optLabel" - │ ProjectionElem "optAssembly" - │ ProjectionElem "optAssemblyName" - │ ProjectionElem "optDependency" - │ ProjectionElem "optDependencyName" - │ ProjectionElem "optSatisfiedComponent" - │ ProjectionElem "optSatisfiedAssembly" - │ ProjectionElem "optVerification" - │ ProjectionElem "verificationOwner" - │ ProjectionElem "optMeasuredValue" - └── LeftJoin (LeftJoinIterator) - ╠══ LeftJoin (LeftJoinIterator) [left] - ║ ├── LeftJoin (LeftJoinIterator) [left] - ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] - ║ │ ║ ├── LeftJoin (LeftJoinIterator) [left] - ║ │ ║ │ ╠══ Union [left] - ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, indexName=ospc) - ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) - ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ │ ║ │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - ║ │ ║ │ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=520, indexName=ospc) - ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) - ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ │ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - ║ │ ║ │ ╚══ Extension [right] - ║ │ ║ │ ├── StatementPattern (resultSizeEstimate=134.1K) - ║ │ ║ │ │ s: Var (name=root) (bindingState=bound) - ║ │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - ║ │ ║ │ │ o: Var (name=optName) (bindingState=unbound) - ║ │ ║ │ └── ExtensionElem (optLabel) - ║ │ ║ │ Var (name=optName) (bindingState=bound) - ║ │ ║ └── LeftJoin [right] - ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=132.7K) [left] - ║ │ ║ ║ s: Var (name=root) (bindingState=bound) - ║ │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) - ║ │ ║ ║ o: Var (name=optAssembly) (bindingState=unbound) - ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] - ║ │ ║ s: Var (name=optAssembly) (bindingState=bound) - ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - ║ │ ║ o: Var (name=optAssemblyName) (bindingState=unbound) - ║ │ ╚══ LeftJoin [right] - ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] - ║ │ │ s: Var (name=root) (bindingState=bound) - ║ │ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) - ║ │ │ o: Var (name=optDependency) (bindingState=unbound) - ║ │ └── StatementPattern (resultSizeEstimate=134.1K) [right] - ║ │ s: Var (name=optDependency) (bindingState=bound) - ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - ║ │ o: Var (name=optDependencyName) (bindingState=unbound) - ║ └── LeftJoin [right] - ║ ╠══ StatementPattern (resultSizeEstimate=520) [left] - ║ ║ s: Var (name=root) (bindingState=bound) - ║ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) - ║ ║ o: Var (name=optSatisfiedComponent) (bindingState=unbound) - ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] - ║ s: Var (name=optSatisfiedComponent) (bindingState=bound) - ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) - ║ o: Var (name=optSatisfiedAssembly) (bindingState=unbound) - ╚══ LeftJoin [right] - ├── Union [left] - │ ╠══ StatementPattern (new scope) (resultSizeEstimate=3.1K) - │ ║ s: Var (name=root) (bindingState=bound) - │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) - │ ║ o: Var (name=optVerification) (bindingState=unbound) - │ ╚══ Filter (new scope) - │ ├── Compare (=) - │ │ Var (name=verificationOwner) (bindingState=bound) - │ │ Var (name=root) (bindingState=bound) - │ └── StatementPattern (resultSizeEstimate=3.1K) - │ s: Var (name=verificationOwner) (bindingState=unbound) - │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) - │ o: Var (name=optVerification) (bindingState=unbound) - └── StatementPattern (resultSizeEstimate=1.6K) [right] - s: Var (name=optVerification) (bindingState=bound) - p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) - o: Var (name=optMeasuredValue) (bindingState=unbound) - -SELECT DISTINCT ?root ?optName ?optLabel ?optAssembly ?optAssemblyName ?optDependency ?optDependencyName ?optSatisfiedComponent ?optSatisfiedAssembly ?optVerification ?verificationOwner ?optMeasuredValue WHERE { - { - ?root a . - } - UNION - { - ?root a . - } - OPTIONAL { - ?root ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root ?optAssembly . - OPTIONAL { - ?optAssembly ?optAssemblyName . - } - } - OPTIONAL { - ?root ?optDependency . - OPTIONAL { - ?optDependency ?optDependencyName . - } - } - OPTIONAL { - ?root ?optSatisfiedComponent . - OPTIONAL { - ?optSatisfiedComponent ?optSatisfiedAssembly . - } - } - OPTIONAL { - { - ?root ?optVerification . - } - UNION - { - ?verificationOwner ?optVerification . - FILTER (?verificationOwner = ?root) - } - OPTIONAL { - ?optVerification ?optMeasuredValue . - } - } -} - -39927.243 ms/op +2.692 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 39927.243 ms/op + 2.692 ms/op # JMH version: 1.37 @@ -6262,7 +5245,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) -# Run progress: 50.00% complete, ETA 00:40:17 +# Run progress: 50.00% complete, ETA 00:12:14 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6279,11 +5262,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -400.703 ms/op +424.201 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6330,11 +5313,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -393.757 ms/op +397.706 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 393.757 ms/op + 397.706 ms/op # JMH version: 1.37 @@ -6350,7 +5333,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) -# Run progress: 50.96% complete, ETA 00:39:00 +# Run progress: 51.14% complete, ETA 00:11:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6369,11 +5352,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1669.858 ms/op +1561.192 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6432,11 +5415,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { FILTER ((?w = ?target) || (?w = 3)) } -1128.657 ms/op +1202.188 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1128.657 ms/op + 1202.188 ms/op # JMH version: 1.37 @@ -6452,7 +5435,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) -# Run progress: 51.92% complete, ETA 00:37:47 +# Run progress: 52.27% complete, ETA 00:11:40 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6471,11 +5454,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -958.504 ms/op +953.598 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6485,7 +5468,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_00148e3058594aa4ef8b5ddfb08304f4788, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0011badd9bd735a4483976a47f3e676b630, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ LeftJoin @@ -6513,13 +5496,13 @@ Projection │ ║ s: Var (name=neighbor) (bindingState=bound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=node) (bindingState=bound) - │ ║ GroupElem (_anon_having_00148e3058594aa4ef8b5ddfb08304f4788) + │ ║ GroupElem (_anon_having_0011badd9bd735a4483976a47f3e676b630) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_00148e3058594aa4ef8b5ddfb08304f4788) + │ ╚══ ExtensionElem (_anon_having_0011badd9bd735a4483976a47f3e676b630) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -6538,11 +5521,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -676.258 ms/op +704.931 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 676.258 ms/op + 704.931 ms/op # JMH version: 1.37 @@ -6558,7 +5541,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) -# Run progress: 52.88% complete, ETA 00:36:35 +# Run progress: 53.41% complete, ETA 00:11:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6575,11 +5558,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -128.585 ms/op +136.138 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6631,11 +5614,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -121.024 ms/op +126.495 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 121.024 ms/op + 126.495 ms/op # JMH version: 1.37 @@ -6651,7 +5634,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) -# Run progress: 53.85% complete, ETA 00:35:25 +# Run progress: 54.55% complete, ETA 00:11:05 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6668,11 +5651,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e0001120660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -391.096 ms/op +390.617 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6726,11 +5709,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -290.321 ms/op +299.815 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 290.321 ms/op + 299.815 ms/op # JMH version: 1.37 @@ -6746,7 +5729,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) -# Run progress: 54.81% complete, ETA 00:34:18 +# Run progress: 55.68% complete, ETA 00:10:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6763,11 +5746,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -379.043 ms/op +360.625 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6820,11 +5803,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -266.641 ms/op +273.886 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 266.641 ms/op + 273.886 ms/op # JMH version: 1.37 @@ -6840,7 +5823,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) -# Run progress: 55.77% complete, ETA 00:33:12 +# Run progress: 56.82% complete, ETA 00:10:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6860,11 +5843,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1895.945 ms/op +2114.005 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6874,7 +5857,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_55f62d18180eee4aa4a93e86ee02c63b3901234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_05cf33ce76df1e4d238ae94f175192c35f, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ Filter @@ -6903,13 +5886,13 @@ Projection │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_55f62d18180eee4aa4a93e86ee02c63b3901234) + │ ║ GroupElem (_anon_having_05cf33ce76df1e4d238ae94f175192c35f) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_55f62d18180eee4aa4a93e86ee02c63b3901234) + │ ╚══ ExtensionElem (_anon_having_05cf33ce76df1e4d238ae94f175192c35f) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -6934,11 +5917,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -1417.720 ms/op +1431.609 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1417.720 ms/op + 1431.609 ms/op # JMH version: 1.37 @@ -6954,7 +5937,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) -# Run progress: 56.73% complete, ETA 00:32:08 +# Run progress: 57.95% complete, ETA 00:10:14 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6971,11 +5954,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -290.575 ms/op +273.349 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7034,11 +6017,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -206.970 ms/op +216.615 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 206.970 ms/op + 216.615 ms/op # JMH version: 1.37 @@ -7054,7 +6037,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) -# Run progress: 57.69% complete, ETA 00:31:06 +# Run progress: 59.09% complete, ETA 00:09:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7072,11 +6055,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1739.602 ms/op +1789.045 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7134,11 +6117,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { FILTER (?optWeight IN (7, 8, 9)) } -1254.669 ms/op +1392.135 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1254.669 ms/op + 1392.135 ms/op # JMH version: 1.37 @@ -7154,7 +6137,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) -# Run progress: 58.65% complete, ETA 00:30:04 +# Run progress: 60.23% complete, ETA 00:09:40 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7174,11 +6157,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1483.961 ms/op +1594.530 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7188,7 +6171,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_848f1b8ebbb3f84f1088a196603cb30b0b01234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (node) │ ║ Filter @@ -7212,13 +6195,13 @@ Projection │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_848f1b8ebbb3f84f1088a196603cb30b0b01234567) + │ ║ GroupElem (_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_848f1b8ebbb3f84f1088a196603cb30b0b01234567) + │ ╚══ ExtensionElem (_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (degree) @@ -7236,11 +6219,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 1) -1351.045 ms/op +1480.063 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1351.045 ms/op + 1480.063 ms/op # JMH version: 1.37 @@ -7256,7 +6239,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) -# Run progress: 59.62% complete, ETA 00:29:05 +# Run progress: 61.36% complete, ETA 00:09:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7275,11 +6258,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -626.560 ms/op +600.781 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7326,7 +6309,7 @@ Projection │ ║ ║ s: Var (name=node) (bindingState=unbound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=node) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_471997d2613a4894b62898df299d5c399c80123) + │ ║ ╚══ ExtensionElem (_anon_path_4716c93cf0246c74faeba90d0d3882bc0b50123) │ ║ Var (name=node) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -7347,15 +6330,15 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } MINUS { ?node ?node . - BIND(?node AS ?_anon_path_471997d2613a4894b62898df299d5c399c80123) + BIND(?node AS ?_anon_path_4716c93cf0246c74faeba90d0d3882bc0b50123) } } -442.575 ms/op +465.966 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 442.575 ms/op + 465.966 ms/op # JMH version: 1.37 @@ -7369,9 +6352,9 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 11) +# Parameters: (themeName = TRAIN, z_queryIndex = 0) -# Run progress: 60.58% complete, ETA 00:28:07 +# Run progress: 62.50% complete, ETA 00:09:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7379,232 +6362,57 @@ WARNING: Please consider reporting this to the maintainers of class org.openjdk. WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release # Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete ### Original Query ### -PREFIX conn: -SELECT DISTINCT * WHERE { - ?root a conn:Node ; - conn:connectsTo ?neighbor . - ?neighbor conn:connectsTo ?neighbor2 . - OPTIONAL { - ?root conn:weight ?rootWeight . - OPTIONAL { - ?neighbor conn:weight ?neighborWeight . - OPTIONAL { ?neighbor2 conn:weight ?neighbor2Weight . } - } - } - OPTIONAL { - ?incoming conn:connectsTo ?root . - OPTIONAL { - ?incoming conn:weight ?incomingWeight . - OPTIONAL { ?incoming conn:connectsTo ?incomingNeighbor . } - } - } +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . OPTIONAL { - ?root conn:connectsTo ?optionalNeighbor . - OPTIONAL { - ?optionalNeighbor conn:connectsTo ?optionalNeighbor2 . - OPTIONAL { ?optionalNeighbor2 conn:weight ?optionalNeighbor2Weight . } - } + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000700011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f801120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "RdfJoinEstimator-Refresh" - - -java.lang.OutOfMemoryError: Java heap space - at org.eclipse.rdf4j.query.algebra.evaluation.impl.ArrayBindingBasedQueryEvaluationContext.createBindingSet(ArrayBindingBasedQueryEvaluationContext.java:127) - at org.eclipse.rdf4j.query.algebra.evaluation.impl.ArrayBindingBasedQueryEvaluationContext.createBindingSet(ArrayBindingBasedQueryEvaluationContext.java:55) - at org.eclipse.rdf4j.query.algebra.evaluation.iterator.ProjectionIterator$$Lambda/0x00000700011b9c00.get(Unknown Source) - at org.eclipse.rdf4j.query.algebra.evaluation.iterator.ProjectionIterator.convert(ProjectionIterator.java:143) - at org.eclipse.rdf4j.query.algebra.evaluation.iterator.ProjectionIterator.convert(ProjectionIterator.java:31) - at org.eclipse.rdf4j.common.iteration.ConvertingIteration.next(ConvertingIteration.java:84) - at org.eclipse.rdf4j.common.iteration.FilterIteration.findNextElement(FilterIteration.java:117) - at org.eclipse.rdf4j.common.iteration.FilterIteration.hasNext(FilterIteration.java:59) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.sail.base.SailClosingIteration.hasNext(SailClosingIteration.java:83) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.sail.helpers.SailBaseIteration.hasNext(SailBaseIteration.java:43) - at org.eclipse.rdf4j.sail.helpers.CleanerIteration.hasNext(CleanerIteration.java:42) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:51) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/java.lang.invoke.DirectMethodHandle$Holder.invokeSpecial(DirectMethodHandle$Holder) - at java.base/java.lang.invoke.LambdaForm$MH/0x0000070001054800.invoke(LambdaForm$MH) - at java.base/java.lang.invoke.LambdaForm$MH/0x0000070001054c00.invokeExact_MT(LambdaForm$MH) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:156) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 12) - -# Run progress: 61.54% complete, ETA 00:29:52 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX conn: -SELECT * WHERE { - { ?root a conn:Node . } - UNION - { ?root conn:connectsTo ?optUnionNeighbor . } - OPTIONAL { - ?root conn:connectsTo ?optNeighbor . - OPTIONAL { ?optNeighbor conn:weight ?optNeighborWeight . } - } - OPTIONAL { - ?root conn:weight ?optWeight . - BIND(?optWeight AS ?optNodeWeight) - } - OPTIONAL { - { ?optIncoming conn:connectsTo ?root . } - UNION - { ?root conn:connectsTo ?optIncoming . } - OPTIONAL { ?optIncoming conn:weight ?optIncomingWeight . } - } - FILTER(?optNodeWeight != 0 || !BOUND(?optNodeWeight)) -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:45) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = TRAIN, z_queryIndex = 0) - -# Run progress: 62.50% complete, ETA 00:31:41 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX train: -PREFIX xsd: -SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { - ?service a train:TrainService . - OPTIONAL { - ?service train:scheduledTime ?time . - BIND(?time AS ?optTime) - } - FILTER(?optTime > "08:00:00"^^xsd:time) - OPTIONAL { ?service train:name ?name . } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -38.453 ms/op -Iteration 1: ### Optimized Query ### -Projection -╠══ ProjectionElemList -║ ProjectionElem "count" -╚══ Extension - ├── Group () - │ ╠══ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ Compare (>) - │ ║ │ ║ Var (name=optTime) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="08:00:00"^^) - │ ║ │ ╚══ LeftJoin - │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] - │ ║ │ │ s: Var (name=service) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ │ └── Extension [right] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) - │ ║ │ ║ s: Var (name=service) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) - │ ║ │ ║ o: Var (name=time) (bindingState=unbound) - │ ║ │ ╚══ ExtensionElem (optTime) - │ ║ │ Var (name=time) (bindingState=bound) - │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] - │ ║ s: Var (name=service) (bindingState=bound) - │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ o: Var (name=name) (bindingState=unbound) - │ ╚══ GroupElem (count) - │ Count (Distinct) - │ Var (name=service) (bindingState=bound) - └── ExtensionElem (count) - Count (Distinct) - Var (name=service) (bindingState=unbound) +41.108 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { ?service a . @@ -7618,11 +6426,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } } -36.441 ms/op +38.622 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 36.441 ms/op + 38.622 ms/op # JMH version: 1.37 @@ -7638,7 +6446,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 1) -# Run progress: 63.46% complete, ETA 00:30:33 +# Run progress: 63.64% complete, ETA 00:08:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7658,11 +6466,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -67.649 ms/op +58.387 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7747,11 +6555,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -47.138 ms/op +46.027 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 47.138 ms/op + 46.027 ms/op # JMH version: 1.37 @@ -7767,7 +6575,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 2) -# Run progress: 64.42% complete, ETA 00:29:26 +# Run progress: 64.77% complete, ETA 00:08:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7786,11 +6594,11 @@ GROUP BY ?line HAVING(COUNT(?section) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f8001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -29.288 ms/op +27.599 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7800,7 +6608,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_063288122b5da55844d2ad0484b53336b1a2, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_6142c68cbc796351447ba97f7f653b74902e012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ LeftJoin @@ -7823,13 +6631,13 @@ Projection │ ║ s: Var (name=section) (bindingState=unbound) │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ o: Var (name=line) (bindingState=bound) - │ ║ GroupElem (_anon_having_063288122b5da55844d2ad0484b53336b1a2) + │ ║ GroupElem (_anon_having_6142c68cbc796351447ba97f7f653b74902e012345) │ ║ Count │ ║ Var (name=section) (bindingState=bound) │ ║ GroupElem (sectionCount) │ ║ Count (Distinct) │ ║ Var (name=section) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_063288122b5da55844d2ad0484b53336b1a2) + │ ╚══ ExtensionElem (_anon_having_6142c68cbc796351447ba97f7f653b74902e012345) │ Count │ Var (name=section) (bindingState=unbound) └── ExtensionElem (sectionCount) @@ -7847,11 +6655,11 @@ SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { GROUP BY ?line HAVING (COUNT(?section) > 0) -20.305 ms/op +20.928 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 20.305 ms/op + 20.928 ms/op # JMH version: 1.37 @@ -7867,7 +6675,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 3) -# Run progress: 65.38% complete, ETA 00:28:21 +# Run progress: 65.91% complete, ETA 00:08:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7885,11 +6693,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -215.614 ms/op +205.615 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7948,11 +6756,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } } -151.778 ms/op +157.242 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 151.778 ms/op + 157.242 ms/op # JMH version: 1.37 @@ -7968,7 +6776,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 4) -# Run progress: 66.35% complete, ETA 00:27:18 +# Run progress: 67.05% complete, ETA 00:07:58 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7986,11 +6794,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -233.019 ms/op +217.791 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8044,11 +6852,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -165.053 ms/op +163.190 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 165.053 ms/op + 163.190 ms/op # JMH version: 1.37 @@ -8064,7 +6872,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 5) -# Run progress: 67.31% complete, ETA 00:26:16 +# Run progress: 68.18% complete, ETA 00:07:41 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8082,11 +6890,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -23.631 ms/op +23.101 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8138,11 +6946,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } } -16.784 ms/op +17.850 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 16.784 ms/op + 17.850 ms/op # JMH version: 1.37 @@ -8158,7 +6966,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 6) -# Run progress: 68.27% complete, ETA 00:25:15 +# Run progress: 69.32% complete, ETA 00:07:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8180,11 +6988,11 @@ GROUP BY ?line HAVING(COUNT(?service) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -152.414 ms/op +162.557 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8194,7 +7002,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_486aa6ca2e6d3c74984ba74d5a3392165a80123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ Filter @@ -8225,13 +7033,13 @@ Projection │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_486aa6ca2e6d3c74984ba74d5a3392165a80123) + │ ║ GroupElem (_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345) │ ║ Count │ ║ Var (name=service) (bindingState=bound) │ ║ GroupElem (serviceCount) │ ║ Count (Distinct) │ ║ Var (name=service) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_486aa6ca2e6d3c74984ba74d5a3392165a80123) + │ ╚══ ExtensionElem (_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345) │ Count │ Var (name=service) (bindingState=unbound) └── ExtensionElem (serviceCount) @@ -8256,11 +7064,11 @@ SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { GROUP BY ?line HAVING (COUNT(?service) > 0) -107.321 ms/op +117.360 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 107.321 ms/op + 117.360 ms/op # JMH version: 1.37 @@ -8276,7 +7084,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 7) -# Run progress: 69.23% complete, ETA 00:24:16 +# Run progress: 70.45% complete, ETA 00:07:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8294,11 +7102,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -57.412 ms/op +53.027 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8359,11 +7167,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -40.595 ms/op +41.055 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 40.595 ms/op + 41.055 ms/op # JMH version: 1.37 @@ -8379,7 +7187,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 8) -# Run progress: 70.19% complete, ETA 00:23:17 +# Run progress: 71.59% complete, ETA 00:06:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8400,11 +7208,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -193.005 ms/op +195.164 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8475,11 +7283,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) } -141.632 ms/op +164.118 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 141.632 ms/op + 164.118 ms/op # JMH version: 1.37 @@ -8495,7 +7303,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 9) -# Run progress: 71.15% complete, ETA 00:22:20 +# Run progress: 72.73% complete, ETA 00:06:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8515,11 +7323,11 @@ GROUP BY ?section HAVING(COUNT(?track) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -328.079 ms/op +324.246 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8529,7 +7337,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_072e79610be919541d18e746d32deda179b, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (section) │ ║ Filter @@ -8559,13 +7367,13 @@ Projection │ ║ │ o: Var (name=op) (bindingState=unbound) │ ║ └── ExtensionElem (optOp) │ ║ Var (name=op) (bindingState=bound) - │ ║ GroupElem (_anon_having_072e79610be919541d18e746d32deda179b) + │ ║ GroupElem (_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234) │ ║ Count │ ║ Var (name=track) (bindingState=bound) │ ║ GroupElem (trackCount) │ ║ Count (Distinct) │ ║ Var (name=track) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_072e79610be919541d18e746d32deda179b) + │ ╚══ ExtensionElem (_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234) │ Count │ Var (name=track) (bindingState=unbound) └── ExtensionElem (trackCount) @@ -8587,11 +7395,11 @@ SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { GROUP BY ?section HAVING (COUNT(?track) > 0) -230.034 ms/op +245.462 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 230.034 ms/op + 245.462 ms/op # JMH version: 1.37 @@ -8607,7 +7415,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 10) -# Run progress: 72.12% complete, ETA 00:21:24 +# Run progress: 73.86% complete, ETA 00:06:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8627,11 +7435,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00004000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -282.980 ms/op +277.958 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8702,285 +7510,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -197.122 ms/op - - -Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 197.122 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = TRAIN, z_queryIndex = 11) - -# Run progress: 73.08% complete, ETA 00:20:30 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX train: -PREFIX xsd: -SELECT DISTINCT * WHERE { - ?root a train:TrainService ; - train:runsOnSection ?section ; - train:passesThrough ?operationalPoint . - ?section train:partOfLine ?line ; - train:hasTrackSection ?track . - OPTIONAL { - ?root train:name ?serviceName . - OPTIONAL { - ?line train:name ?lineName . - OPTIONAL { ?operationalPoint train:name ?operationalPointName . } - } - } - OPTIONAL { - ?root train:scheduledTime ?scheduledTime . - OPTIONAL { - ?section train:connectsOperationalPoint ?sectionOperationalPoint . - OPTIONAL { ?sectionOperationalPoint train:name ?sectionOperationalPointName . } - } - } - OPTIONAL { - ?line train:connectsOperationalPoint ?lineOperationalPoint . - OPTIONAL { - ?lineOperationalPoint train:name ?lineOperationalPointName . - OPTIONAL { ?lineOperationalPoint train:code ?lineOperationalPointCode . } - } - } - OPTIONAL { - ?track train:length ?trackLength . - OPTIONAL { ?track train:trackType ?trackType . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = TRAIN, z_queryIndex = 12) - -# Run progress: 74.04% complete, ETA 00:21:16 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX train: -PREFIX xsd: -SELECT * WHERE { - { ?root a train:Line . } - UNION - { ?root a train:SectionOfLine . } - OPTIONAL { - ?root train:name ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root train:partOfLine ?optLine . - OPTIONAL { ?optLine train:name ?optLineName . } - } - OPTIONAL { - ?root train:connectsOperationalPoint ?optOperationalPoint . - OPTIONAL { ?optOperationalPoint train:name ?optOperationalPointName . } - } - OPTIONAL { - { ?service train:runsOnSection ?root . } - UNION - { ?service train:passesThrough ?optOperationalPoint2 . - ?root train:connectsOperationalPoint ?optOperationalPoint2 . } - OPTIONAL { ?service train:scheduledTime ?optScheduledTime . } - } - OPTIONAL { ?root train:hasTrackSection ?optTrackSection . } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -2659.022 ms/op -Iteration 1: ### Optimized Query ### -Projection -╠══ ProjectionElemList -║ ProjectionElem "root" -║ ProjectionElem "optName" -║ ProjectionElem "optLabel" -║ ProjectionElem "optLine" -║ ProjectionElem "optLineName" -║ ProjectionElem "optOperationalPoint" -║ ProjectionElem "optOperationalPointName" -║ ProjectionElem "service" -║ ProjectionElem "optOperationalPoint2" -║ ProjectionElem "optScheduledTime" -║ ProjectionElem "optTrackSection" -╚══ LeftJoin (LeftJoinIterator) - ├── LeftJoin (LeftJoinIterator) [left] - │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ ├── LeftJoin (LeftJoinIterator) [left] - │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ │ ║ ├── Union [left] - │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, indexName=ospc) - │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=67.4K, indexName=ospc) - │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) - │ ║ │ ║ └── Extension [right] - │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=47.0K) - │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) - │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ │ ║ ╚══ ExtensionElem (optLabel) - │ ║ │ ║ Var (name=optName) (bindingState=bound) - │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=67.4K) [left] - │ ║ │ │ s: Var (name=root) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ │ │ o: Var (name=optLine) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) [right] - │ ║ │ s: Var (name=optLine) (bindingState=bound) - │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ │ o: Var (name=optLineName) (bindingState=unbound) - │ ║ └── LeftJoin [right] - │ ║ ╠══ StatementPattern (resultSizeEstimate=134.8K) [left] - │ ║ ║ s: Var (name=root) (bindingState=bound) - │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) - │ ║ ║ o: Var (name=optOperationalPoint) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] - │ ║ s: Var (name=optOperationalPoint) (bindingState=bound) - │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ o: Var (name=optOperationalPointName) (bindingState=unbound) - │ ╚══ LeftJoin [right] - │ ├── Union [left] - │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=25.9K) - │ │ ║ s: Var (name=service) (bindingState=unbound) - │ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) - │ │ ║ o: Var (name=root) (bindingState=bound) - │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=117.0K) - │ │ ├── StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] - │ │ │ s: Var (name=root) (bindingState=bound) - │ │ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) - │ │ │ o: Var (name=optOperationalPoint2) (bindingState=unbound) - │ │ └── StatementPattern (costEstimate=161, resultSizeEstimate=25.9K) [right] - │ │ s: Var (name=service) (bindingState=unbound) - │ │ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) - │ │ o: Var (name=optOperationalPoint2) (bindingState=bound) - │ └── StatementPattern (resultSizeEstimate=25.8K) [right] - │ s: Var (name=service) (bindingState=bound) - │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) - │ o: Var (name=optScheduledTime) (bindingState=unbound) - └── StatementPattern (resultSizeEstimate=67.4K) [right] - s: Var (name=root) (bindingState=bound) - p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) - o: Var (name=optTrackSection) (bindingState=unbound) - -SELECT ?root ?optName ?optLabel ?optLine ?optLineName ?optOperationalPoint ?optOperationalPointName ?service ?optOperationalPoint2 ?optScheduledTime ?optTrackSection WHERE { - { - ?root a . - } - UNION - { - ?root a . - } - OPTIONAL { - ?root ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root ?optLine . - OPTIONAL { - ?optLine ?optLineName . - } - } - OPTIONAL { - ?root ?optOperationalPoint . - OPTIONAL { - ?optOperationalPoint ?optOperationalPointName . - } - } - OPTIONAL { - { - ?service ?root . - } - UNION - { - ?root ?optOperationalPoint2 . - ?service ?optOperationalPoint2 . - } - OPTIONAL { - ?service ?optScheduledTime . - } - } - OPTIONAL { - ?root ?optTrackSection . - } -} - -1948.611 ms/op +208.560 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1948.611 ms/op + 208.560 ms/op # JMH version: 1.37 @@ -8996,7 +7530,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) -# Run progress: 75.00% complete, ETA 00:20:19 +# Run progress: 75.00% complete, ETA 00:06:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9013,11 +7547,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -60.409 ms/op +60.622 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9070,11 +7604,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } } -42.997 ms/op +46.713 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 42.997 ms/op + 46.713 ms/op # JMH version: 1.37 @@ -9090,7 +7624,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) -# Run progress: 75.96% complete, ETA 00:19:22 +# Run progress: 76.14% complete, ETA 00:05:44 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9109,11 +7643,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -46.222 ms/op +43.549 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9204,11 +7738,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -31.893 ms/op +32.980 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 31.893 ms/op + 32.980 ms/op # JMH version: 1.37 @@ -9224,7 +7758,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) -# Run progress: 76.92% complete, ETA 00:18:26 +# Run progress: 77.27% complete, ETA 00:05:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9243,11 +7777,11 @@ GROUP BY ?transformer HAVING(COUNT(?meter) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.259 ms/op +9.558 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9257,7 +7791,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0948c92647589a5245119f880723e43fc50e, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (transformer) │ ║ LeftJoin @@ -9285,13 +7819,13 @@ Projection │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ o: Var (name=meter) (bindingState=unbound) - │ ║ GroupElem (_anon_having_0948c92647589a5245119f880723e43fc50e) + │ ║ GroupElem (_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234) │ ║ Count │ ║ Var (name=meter) (bindingState=bound) │ ║ GroupElem (meterCount) │ ║ Count (Distinct) │ ║ Var (name=meter) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0948c92647589a5245119f880723e43fc50e) + │ ╚══ ExtensionElem (_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234) │ Count │ Var (name=meter) (bindingState=unbound) └── ExtensionElem (meterCount) @@ -9310,11 +7844,11 @@ SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { GROUP BY ?transformer HAVING (COUNT(?meter) > 0) -6.951 ms/op +6.649 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.951 ms/op + 6.649 ms/op # JMH version: 1.37 @@ -9330,7 +7864,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) -# Run progress: 77.88% complete, ETA 00:17:31 +# Run progress: 78.41% complete, ETA 00:05:10 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9347,11 +7881,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -484.363 ms/op +437.250 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9419,11 +7953,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } } -347.542 ms/op +337.447 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 347.542 ms/op + 337.447 ms/op # JMH version: 1.37 @@ -9439,7 +7973,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) -# Run progress: 78.85% complete, ETA 00:16:38 +# Run progress: 79.55% complete, ETA 00:04:54 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9457,11 +7991,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.251 ms/op +8.903 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9521,11 +8055,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -6.613 ms/op +6.845 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.613 ms/op + 6.845 ms/op # JMH version: 1.37 @@ -9541,7 +8075,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) -# Run progress: 79.81% complete, ETA 00:15:45 +# Run progress: 80.68% complete, ETA 00:04:37 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9558,11 +8092,11 @@ SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.031 ms/op +10.726 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9615,11 +8149,11 @@ SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { } } -7.115 ms/op +7.055 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 7.115 ms/op + 7.055 ms/op # JMH version: 1.37 @@ -9635,7 +8169,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) -# Run progress: 80.77% complete, ETA 00:14:53 +# Run progress: 81.82% complete, ETA 00:04:21 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9655,11 +8189,11 @@ GROUP BY ?substation HAVING(COUNT(?asset) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -125.703 ms/op +125.982 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9669,7 +8203,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_4387ec39c4b5a874b2e9854eda0f08811640123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) │ ║ Filter @@ -9703,13 +8237,13 @@ Projection │ ║ │ o: Var (name=substation) (bindingState=bound) │ ║ └── ExtensionElem (optSub) │ ║ Var (name=substation) (bindingState=bound) - │ ║ GroupElem (_anon_having_4387ec39c4b5a874b2e9854eda0f08811640123) + │ ║ GroupElem (_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123) │ ║ Count │ ║ Var (name=asset) (bindingState=bound) │ ║ GroupElem (assetCount) │ ║ Count (Distinct) │ ║ Var (name=asset) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_4387ec39c4b5a874b2e9854eda0f08811640123) + │ ╚══ ExtensionElem (_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123) │ Count │ Var (name=asset) (bindingState=unbound) └── ExtensionElem (assetCount) @@ -9735,11 +8269,11 @@ SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { GROUP BY ?substation HAVING (COUNT(?asset) > 0) -87.176 ms/op +96.276 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 87.176 ms/op + 96.276 ms/op # JMH version: 1.37 @@ -9755,7 +8289,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) -# Run progress: 81.73% complete, ETA 00:14:01 +# Run progress: 82.95% complete, ETA 00:04:04 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9773,11 +8307,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -22.368 ms/op +20.017 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9842,11 +8376,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } } -15.229 ms/op +15.286 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 15.229 ms/op + 15.286 ms/op # JMH version: 1.37 @@ -9862,7 +8396,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) -# Run progress: 82.69% complete, ETA 00:13:11 +# Run progress: 84.09% complete, ETA 00:03:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9881,11 +8415,11 @@ GROUP BY ?substation HAVING(COUNT(?transformer) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe01126000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -20.103 ms/op +17.967 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9895,7 +8429,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0924a67d53494d5e42008a67d1945a7fd88d, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0854c6327d0499ee40459923cd960c8ef603, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) │ ║ Filter @@ -9925,13 +8459,13 @@ Projection │ ║ │ o: Var (name=transformer) (bindingState=unbound) │ ║ └── ExtensionElem (optTransformer) │ ║ Var (name=transformer) (bindingState=bound) - │ ║ GroupElem (_anon_having_0924a67d53494d5e42008a67d1945a7fd88d) + │ ║ GroupElem (_anon_having_0854c6327d0499ee40459923cd960c8ef603) │ ║ Count │ ║ Var (name=transformer) (bindingState=bound) │ ║ GroupElem (transformerCount) │ ║ Count (Distinct) │ ║ Var (name=transformer) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0924a67d53494d5e42008a67d1945a7fd88d) + │ ╚══ ExtensionElem (_anon_having_0854c6327d0499ee40459923cd960c8ef603) │ Count │ Var (name=transformer) (bindingState=unbound) └── ExtensionElem (transformerCount) @@ -9950,11 +8484,11 @@ SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { GROUP BY ?substation HAVING (COUNT(?transformer) > 0) -13.960 ms/op +14.019 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 13.960 ms/op + 14.019 ms/op # JMH version: 1.37 @@ -9970,7 +8504,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) -# Run progress: 83.65% complete, ETA 00:12:22 +# Run progress: 85.23% complete, ETA 00:03:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9987,11 +8521,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.828 ms/op +7.938 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10047,11 +8581,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -6.004 ms/op +5.905 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.004 ms/op + 5.905 ms/op # JMH version: 1.37 @@ -10067,7 +8601,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) -# Run progress: 84.62% complete, ETA 00:11:33 +# Run progress: 86.36% complete, ETA 00:03:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10086,11 +8620,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -508.190 ms/op +458.901 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10165,307 +8699,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) } -359.240 ms/op +366.590 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 359.240 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 11) - -# Run progress: 85.58% complete, ETA 00:10:45 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX grid: -SELECT DISTINCT * WHERE { - ?root a grid:Transformer ; - grid:feeds ?substation ; - grid:hasMeter ?meter . - ?substation a grid:Substation . - ?meter grid:measures ?load . - OPTIONAL { - ?substation grid:name ?substationName . - OPTIONAL { - ?root grid:capacity ?transformerCapacity . - OPTIONAL { ?meter grid:serial ?meterSerial . } - } - } - OPTIONAL { - ?load grid:loadValue ?loadValue . - OPTIONAL { - ?load grid:loadType ?loadType . - OPTIONAL { ?load grid:unit ?loadUnit . } - } - } - OPTIONAL { - ?line grid:connectsTo ?substation . - OPTIONAL { - ?line grid:capacity ?lineCapacity . - OPTIONAL { ?line grid:name ?lineName . } - } - } - OPTIONAL { - ?generator grid:feeds ?substation . - OPTIONAL { - ?generator grid:capacity ?generatorCapacity . - OPTIONAL { ?generator grid:name ?generatorName . } - } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 12) - -# Run progress: 86.54% complete, ETA 00:10:42 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX grid: -SELECT * WHERE { - { ?root a grid:Substation . } - UNION - { ?root a grid:Transformer . } - OPTIONAL { - ?root grid:name ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root grid:feeds ?optFed . - OPTIONAL { ?optFed grid:name ?optFedName . } - } - OPTIONAL { - { ?generator grid:feeds ?root . } - UNION - { ?root grid:feeds ?substation . ?generator grid:feeds ?substation . } - OPTIONAL { ?generator grid:capacity ?optGeneratorCapacity . } - } - OPTIONAL { - ?root grid:hasMeter ?optMeter . - OPTIONAL { ?optMeter grid:measures ?optLoad . } - OPTIONAL { ?optLoad grid:loadValue ?optLoadValue . } - } - OPTIONAL { - ?line grid:connectsTo ?root . - OPTIONAL { ?line grid:capacity ?optLineCapacity . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000401120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -2181.314 ms/op -Iteration 1: ### Optimized Query ### -Projection -╠══ ProjectionElemList -║ ProjectionElem "root" -║ ProjectionElem "optName" -║ ProjectionElem "optLabel" -║ ProjectionElem "optFed" -║ ProjectionElem "optFedName" -║ ProjectionElem "generator" -║ ProjectionElem "substation" -║ ProjectionElem "optGeneratorCapacity" -║ ProjectionElem "optMeter" -║ ProjectionElem "optLoad" -║ ProjectionElem "optLoadValue" -║ ProjectionElem "line" -║ ProjectionElem "optLineCapacity" -╚══ LeftJoin (LeftJoinIterator) - ├── LeftJoin (LeftJoinIterator) [left] - │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ ├── LeftJoin (LeftJoinIterator) [left] - │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ │ ║ ├── Union [left] - │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=9.4K, indexName=ospc) - │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=28.0K, indexName=ospc) - │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ │ ║ └── Extension [right] - │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K) - │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) - │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ │ ║ ╚══ ExtensionElem (optLabel) - │ ║ │ ║ Var (name=optName) (bindingState=bound) - │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=37.4K) [left] - │ ║ │ │ s: Var (name=root) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ │ o: Var (name=optFed) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) [right] - │ ║ │ s: Var (name=optFed) (bindingState=bound) - │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ o: Var (name=optFedName) (bindingState=unbound) - │ ║ └── LeftJoin [right] - │ ║ ╠══ Union [left] - │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=37.4K) - │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ ║ │ o: Var (name=root) (bindingState=bound) - │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=141.3K) - │ ║ ║ ╠══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] - │ ║ ║ ║ s: Var (name=root) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ ║ ║ o: Var (name=substation) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] - │ ║ ║ s: Var (name=generator) (bindingState=unbound) - │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ ║ o: Var (name=substation) (bindingState=bound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] - │ ║ s: Var (name=generator) (bindingState=bound) - │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - │ ║ o: Var (name=optGeneratorCapacity) (bindingState=unbound) - │ ╚══ LeftJoin [right] - │ ├── LeftJoin [left] - │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) [left] - │ │ ║ s: Var (name=root) (bindingState=bound) - │ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) - │ │ ║ o: Var (name=optMeter) (bindingState=unbound) - │ │ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] - │ │ s: Var (name=optMeter) (bindingState=bound) - │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) - │ │ o: Var (name=optLoad) (bindingState=unbound) - │ └── StatementPattern (resultSizeEstimate=112.1K) [right] - │ s: Var (name=optLoad) (bindingState=bound) - │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) - │ o: Var (name=optLoadValue) (bindingState=unbound) - └── LeftJoin [right] - ╠══ StatementPattern (resultSizeEstimate=37.5K) [left] - ║ s: Var (name=line) (bindingState=unbound) - ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) - ║ o: Var (name=root) (bindingState=bound) - ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] - s: Var (name=line) (bindingState=bound) - p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - o: Var (name=optLineCapacity) (bindingState=unbound) - -SELECT ?root ?optName ?optLabel ?optFed ?optFedName ?generator ?substation ?optGeneratorCapacity ?optMeter ?optLoad ?optLoadValue ?line ?optLineCapacity WHERE { - { - ?root a . - } - UNION - { - ?root a . - } - OPTIONAL { - ?root ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root ?optFed . - OPTIONAL { - ?optFed ?optFedName . - } - } - OPTIONAL { - { - ?generator ?root . - } - UNION - { - ?root ?substation . - ?generator ?substation . - } - OPTIONAL { - ?generator ?optGeneratorCapacity . - } - } - OPTIONAL { - ?root ?optMeter . - OPTIONAL { - ?optMeter ?optLoad . - } - OPTIONAL { - ?optLoad ?optLoadValue . - } - } - OPTIONAL { - ?line ?root . - OPTIONAL { - ?line ?optLineCapacity . - } - } -} - -1617.271 ms/op - - -Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1617.271 ms/op + 366.590 ms/op # JMH version: 1.37 @@ -10481,7 +8719,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 0) -# Run progress: 87.50% complete, ETA 00:09:52 +# Run progress: 87.50% complete, ETA 00:02:58 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10503,11 +8741,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -25.614 ms/op +24.053 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10594,11 +8832,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER (?optMarker != ) } -17.684 ms/op +18.509 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 17.684 ms/op + 18.509 ms/op # JMH version: 1.37 @@ -10614,7 +8852,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 1) -# Run progress: 88.46% complete, ETA 00:09:03 +# Run progress: 88.64% complete, ETA 00:02:42 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10638,11 +8876,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?drug) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.542 ms/op +3.931 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10652,7 +8890,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_04722c1c5683c0fb140299bc350b37dab91f9, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (combo) │ ║ Filter @@ -10691,13 +8929,13 @@ Projection │ ║ │ o: Var (name=sev) (bindingState=unbound) │ ║ └── ExtensionElem (optSeverity) │ ║ Var (name=sev) (bindingState=bound) - │ ║ GroupElem (_anon_having_04722c1c5683c0fb140299bc350b37dab91f9) + │ ║ GroupElem (_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_04722c1c5683c0fb140299bc350b37dab91f9) + │ ╚══ ExtensionElem (_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -10719,11 +8957,11 @@ SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?drug) >= 2) -3.163 ms/op +2.993 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.163 ms/op + 2.993 ms/op # JMH version: 1.37 @@ -10739,7 +8977,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 2) -# Run progress: 89.42% complete, ETA 00:08:14 +# Run progress: 89.77% complete, ETA 00:02:26 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10761,11 +8999,11 @@ GROUP BY ?target HAVING(COUNT(DISTINCT ?drug) > 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c0001120660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -45.151 ms/op +40.851 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10775,7 +9013,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_610350ff8b201cb447dca259c990b9b49413012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_42239202f0707f214517b5e6d6080a9974820123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (target) │ ║ Filter @@ -10821,13 +9059,13 @@ Projection │ ║ │ o: Var (name=disease) (bindingState=unbound) │ ║ └── ExtensionElem (optDisease) │ ║ Var (name=disease) (bindingState=bound) - │ ║ GroupElem (_anon_having_610350ff8b201cb447dca259c990b9b49413012345) + │ ║ GroupElem (_anon_having_42239202f0707f214517b5e6d6080a9974820123) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_610350ff8b201cb447dca259c990b9b49413012345) + │ ╚══ ExtensionElem (_anon_having_42239202f0707f214517b5e6d6080a9974820123) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -10848,11 +9086,11 @@ SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?target HAVING (COUNT(DISTINCT ?drug) > 2) -32.585 ms/op +31.997 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 32.585 ms/op + 31.997 ms/op # JMH version: 1.37 @@ -10868,7 +9106,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 3) -# Run progress: 90.38% complete, ETA 00:07:26 +# Run progress: 90.91% complete, ETA 00:02:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10889,11 +9127,11 @@ SELECT ?drug ?disease WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -35.785 ms/op +31.730 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10970,11 +9208,11 @@ SELECT ?drug ?disease WHERE { FILTER (?optTarget != ) } -25.054 ms/op +24.087 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 25.054 ms/op + 24.087 ms/op # JMH version: 1.37 @@ -10990,7 +9228,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 4) -# Run progress: 91.35% complete, ETA 00:06:38 +# Run progress: 92.05% complete, ETA 00:01:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11014,11 +9252,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f801121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000380001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -47.535 ms/op +44.317 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11120,11 +9358,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } } -32.669 ms/op +35.673 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 32.669 ms/op + 35.673 ms/op # JMH version: 1.37 @@ -11140,7 +9378,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 5) -# Run progress: 92.31% complete, ETA 00:05:52 +# Run progress: 93.18% complete, ETA 00:01:37 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11163,11 +9401,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f8001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -13.796 ms/op +13.035 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11242,11 +9480,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { FILTER (?optEffect > 0.3) } -9.363 ms/op +9.763 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 9.363 ms/op + 9.763 ms/op # JMH version: 1.37 @@ -11262,7 +9500,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 6) -# Run progress: 93.27% complete, ETA 00:05:06 +# Run progress: 94.32% complete, ETA 00:01:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11285,11 +9523,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?target) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -13.762 ms/op +11.545 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11299,7 +9537,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_8800185dc876cce294d8493d90745619e57e601234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_23411109d689ff49b4881b74bf0f40aead89001, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (combo) │ ║ Filter @@ -11348,13 +9586,13 @@ Projection │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) │ ║ └── ExtensionElem (optSideEffect) │ ║ Var (name=sideEffect) (bindingState=bound) - │ ║ GroupElem (_anon_having_8800185dc876cce294d8493d90745619e57e601234567) + │ ║ GroupElem (_anon_having_23411109d689ff49b4881b74bf0f40aead89001) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (sharedTargets) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_8800185dc876cce294d8493d90745619e57e601234567) + │ ╚══ ExtensionElem (_anon_having_23411109d689ff49b4881b74bf0f40aead89001) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (sharedTargets) @@ -11377,11 +9615,11 @@ SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?target) > 1) -9.416 ms/op +8.935 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 9.416 ms/op + 8.935 ms/op # JMH version: 1.37 @@ -11397,7 +9635,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 7) -# Run progress: 94.23% complete, ETA 00:04:20 +# Run progress: 95.45% complete, ETA 00:01:04 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11419,11 +9657,11 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -46.991 ms/op +43.551 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11496,11 +9734,11 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) } -31.869 ms/op +33.054 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 31.869 ms/op + 33.054 ms/op # JMH version: 1.37 @@ -11516,7 +9754,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 8) -# Run progress: 95.19% complete, ETA 00:03:35 +# Run progress: 96.59% complete, ETA 00:00:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11538,11 +9776,11 @@ GROUP BY ?drug HAVING(COUNT(DISTINCT ?target) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -39.128 ms/op +40.234 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11552,7 +9790,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_51227b70efa506974e3d9cc5c04207a815ba01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0212ed57ac60ad9647a688adda29b35e2e59, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (drug) │ ║ Difference @@ -11594,13 +9832,13 @@ Projection │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) - │ ║ GroupElem (_anon_having_51227b70efa506974e3d9cc5c04207a815ba01234) + │ ║ GroupElem (_anon_having_0212ed57ac60ad9647a688adda29b35e2e59) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (targetCount) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_51227b70efa506974e3d9cc5c04207a815ba01234) + │ ╚══ ExtensionElem (_anon_having_0212ed57ac60ad9647a688adda29b35e2e59) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (targetCount) @@ -11630,11 +9868,11 @@ SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { GROUP BY ?drug HAVING (COUNT(DISTINCT ?target) >= 3) -27.061 ms/op +28.829 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 27.061 ms/op + 28.829 ms/op # JMH version: 1.37 @@ -11650,7 +9888,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 9) -# Run progress: 96.15% complete, ETA 00:02:51 +# Run progress: 97.73% complete, ETA 00:00:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11679,11 +9917,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -29.073 ms/op +26.643 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11710,7 +9948,7 @@ Projection │ ║ ║ ╠══ Extension │ ║ ║ ║ ├── Filter │ ║ ║ ║ │ ╠══ Compare (>) - │ ║ ║ ║ │ ║ Var (name=_anon_having_8935fd717e0e8d79492abf9c1d7d8ea428be01234567, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ Var (name=_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456, anonymous) (bindingState=bound) │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) │ ║ ║ ║ │ ╚══ Group (drug) │ ║ ║ ║ │ Filter @@ -11749,13 +9987,13 @@ Projection │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) - │ ║ ║ ║ │ GroupElem (_anon_having_8935fd717e0e8d79492abf9c1d7d8ea428be01234567) + │ ║ ║ ║ │ GroupElem (_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) │ ║ ║ ║ │ GroupElem (avgEffect) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_having_8935fd717e0e8d79492abf9c1d7d8ea428be01234567) + │ ║ ║ ║ └── ExtensionElem (_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456) │ ║ ║ ║ Avg │ ║ ║ ║ Var (name=effect) (bindingState=unbound) │ ║ ║ ╚══ ExtensionElem (avgEffect) @@ -11799,11 +10037,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) } -19.800 ms/op +19.691 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 19.800 ms/op + 19.691 ms/op # JMH version: 1.37 @@ -11819,7 +10057,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 10) -# Run progress: 97.12% complete, ETA 00:02:07 +# Run progress: 98.86% complete, ETA 00:00:16 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -11843,11 +10081,11 @@ GROUP BY ?pathway HAVING(COUNT(DISTINCT ?drug) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -353.782 ms/op +324.096 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -11857,7 +10095,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_004c8cc2c006d9f4161a74d2c6e72e0f40e, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_614d870109bb4594e749ae1752c64e3c19b012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (pathway) │ ║ Filter @@ -11904,13 +10142,13 @@ Projection │ ║ │ o: Var (name=trial) (bindingState=unbound) │ ║ └── ExtensionElem (optTrial) │ ║ Var (name=trial) (bindingState=bound) - │ ║ GroupElem (_anon_having_004c8cc2c006d9f4161a74d2c6e72e0f40e) + │ ║ GroupElem (_anon_having_614d870109bb4594e749ae1752c64e3c19b012345) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_004c8cc2c006d9f4161a74d2c6e72e0f40e) + │ ╚══ ExtensionElem (_anon_having_614d870109bb4594e749ae1752c64e3c19b012345) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -11931,327 +10169,12 @@ SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?pathway HAVING (COUNT(DISTINCT ?drug) > 1) -253.627 ms/op - - -Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 253.627 ms/op - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = PHARMA, z_queryIndex = 11) - -# Run progress: 98.08% complete, ETA 00:01:24 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX pharma: -PREFIX xsd: -SELECT DISTINCT * WHERE { - ?root a pharma:ClinicalTrial ; - pharma:hasArm ?arm ; - pharma:studiesDisease ?disease . - ?arm pharma:armDrug ?drug ; - pharma:hasResult ?result . - OPTIONAL { - ?drug pharma:name ?drugName . - OPTIONAL { - ?disease pharma:name ?diseaseName . - OPTIONAL { ?root pharma:name ?trialName . } - } - } - OPTIONAL { - ?drug pharma:targets ?target . - OPTIONAL { - ?target pharma:inPathway ?pathway . - OPTIONAL { ?pathway pharma:name ?pathwayName . } - } - } - OPTIONAL { - ?result pharma:pValue ?pValue . - OPTIONAL { - ?result pharma:effectSize ?effectSize . - OPTIONAL { ?result pharma:responseRate ?responseRate . } - } - } - OPTIONAL { - ?drug pharma:hasMolecule ?molecule . - OPTIONAL { - ?molecule pharma:inClass ?drugClass . - OPTIONAL { ?drugClass pharma:name ?drugClassName . } - } - } - OPTIONAL { - ?drug pharma:indicatedFor ?indication . - OPTIONAL { - ?drug pharma:contraindicatedFor ?contraindication . - OPTIONAL { ?drug pharma:hasSideEffect ?sideEffect . } - } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - - -org.eclipse.rdf4j.query.QueryInterruptedException: Query evaluation took too long - at org.eclipse.rdf4j.query.impl.AbstractParserQuery$QueryInterruptIteration.throwInterruptedException(AbstractParserQuery.java:77) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.checkInterrupted(TimeLimitIteration.java:105) - at org.eclipse.rdf4j.common.iteration.TimeLimitIteration.hasNext(TimeLimitIteration.java:52) - at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:67) - at org.eclipse.rdf4j.common.iteration.CloseableIterationSpliterator.forEachRemaining(CloseableIterationSpliterator.java:77) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) - at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:258) - at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) - at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:750) - at org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery(ThemeQueryBenchmark.java:182) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_avgt_jmhStub(ThemeQueryBenchmark_executeQuery_jmhTest.java:238) - at org.eclipse.rdf4j.sail.lmdb.benchmark.jmh_generated.ThemeQueryBenchmark_executeQuery_jmhTest.executeQuery_AverageTime(ThemeQueryBenchmark_executeQuery_jmhTest.java:177) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) - at java.base/java.lang.reflect.Method.invoke(Method.java:565) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527) - at org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) - at java.base/java.lang.Thread.run(Thread.java:1474) - - - - -# JMH version: 1.37 -# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS -# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java -# VM options: -Xms1G -Xmx32G -# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) -# Warmup: 1 iterations, 10 s each -# Measurement: 1 iterations, 5 s each -# Timeout: 10 min per iteration -# Threads: 1 thread, will synchronize iterations -# Benchmark mode: Average time, time/op -# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery -# Parameters: (themeName = PHARMA, z_queryIndex = 12) - -# Run progress: 99.04% complete, ETA 00:00:44 -# Fork: 1 of 1 -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) -WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils -WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release -# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete -### Original Query ### -PREFIX pharma: -PREFIX xsd: -SELECT * WHERE { - { ?root a pharma:Drug . } - UNION - { ?root a pharma:ClinicalTrial . } - OPTIONAL { - ?root pharma:name ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root pharma:targets ?optTarget . - OPTIONAL { ?optTarget pharma:inPathway ?optPathway . } - } - OPTIONAL { - ?root pharma:indicatedFor ?optIndication . - OPTIONAL { ?root pharma:contraindicatedFor ?optContraindication . } - } - OPTIONAL { - { ?root pharma:hasArm ?optArm . } - UNION - { ?trial pharma:hasArm ?optArm . ?optArm pharma:armDrug ?root . } - OPTIONAL { ?optArm pharma:hasResult ?optResult . } - OPTIONAL { ?optResult pharma:pValue ?optPValue . } - OPTIONAL { ?optResult pharma:effectSize ?optEffectSize . } - } - OPTIONAL { - ?combo pharma:combinationOf ?root . - OPTIONAL { ?combo pharma:synergyScore ?optSynergy . } - } -} - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -201.220 ms/op -Iteration 1: ### Optimized Query ### -Projection -╠══ ProjectionElemList -║ ProjectionElem "root" -║ ProjectionElem "optName" -║ ProjectionElem "optLabel" -║ ProjectionElem "optTarget" -║ ProjectionElem "optPathway" -║ ProjectionElem "optIndication" -║ ProjectionElem "optContraindication" -║ ProjectionElem "optArm" -║ ProjectionElem "trial" -║ ProjectionElem "optResult" -║ ProjectionElem "optPValue" -║ ProjectionElem "optEffectSize" -║ ProjectionElem "combo" -║ ProjectionElem "optSynergy" -╚══ LeftJoin (LeftJoinIterator) - ├── LeftJoin (LeftJoinIterator) [left] - │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ ├── LeftJoin (LeftJoinIterator) [left] - │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] - │ ║ │ ║ ├── Union [left] - │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.0K, indexName=ospc) - │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=955, indexName=ospc) - │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ │ ║ └── Extension [right] - │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=13.2K) - │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) - │ ║ │ ║ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) - │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ │ ║ ╚══ ExtensionElem (optLabel) - │ ║ │ ║ Var (name=optName) (bindingState=bound) - │ ║ │ ╚══ LeftJoin [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=20.0K) [left] - │ ║ │ │ s: Var (name=root) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ │ │ o: Var (name=optTarget) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=666) [right] - │ ║ │ s: Var (name=optTarget) (bindingState=bound) - │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) - │ ║ │ o: Var (name=optPathway) (bindingState=unbound) - │ ║ └── LeftJoin [right] - │ ║ ╠══ StatementPattern (resultSizeEstimate=9.9K) [left] - │ ║ ║ s: Var (name=root) (bindingState=bound) - │ ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) - │ ║ ║ o: Var (name=optIndication) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) [right] - │ ║ s: Var (name=root) (bindingState=bound) - │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) - │ ║ o: Var (name=optContraindication) (bindingState=unbound) - │ ╚══ LeftJoin [right] - │ ├── LeftJoin [left] - │ │ ╠══ LeftJoin [left] - │ │ ║ ├── Union [left] - │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) - │ │ ║ │ ║ s: Var (name=root) (bindingState=bound) - │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ │ ║ │ ║ o: Var (name=optArm) (bindingState=unbound) - │ │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=2.9K) - │ │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] - │ │ ║ │ │ s: Var (name=optArm) (bindingState=unbound) - │ │ ║ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ │ ║ │ │ o: Var (name=root) (bindingState=bound) - │ │ ║ │ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] - │ │ ║ │ s: Var (name=trial) (bindingState=unbound) - │ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ │ ║ │ o: Var (name=optArm) (bindingState=bound) - │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K) [right] - │ │ ║ s: Var (name=optArm) (bindingState=bound) - │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ │ ║ o: Var (name=optResult) (bindingState=unbound) - │ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) [right] - │ │ s: Var (name=optResult) (bindingState=bound) - │ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) - │ │ o: Var (name=optPValue) (bindingState=unbound) - │ └── StatementPattern (resultSizeEstimate=2.9K) [right] - │ s: Var (name=optResult) (bindingState=bound) - │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) - │ o: Var (name=optEffectSize) (bindingState=unbound) - └── LeftJoin [right] - ╠══ StatementPattern (resultSizeEstimate=949) [left] - ║ s: Var (name=combo) (bindingState=unbound) - ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - ║ o: Var (name=root) (bindingState=bound) - ╚══ StatementPattern (resultSizeEstimate=477) [right] - s: Var (name=combo) (bindingState=bound) - p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) - o: Var (name=optSynergy) (bindingState=unbound) - -SELECT ?root ?optName ?optLabel ?optTarget ?optPathway ?optIndication ?optContraindication ?optArm ?trial ?optResult ?optPValue ?optEffectSize ?combo ?optSynergy WHERE { - { - ?root a . - } - UNION - { - ?root a . - } - OPTIONAL { - ?root ?optName . - BIND(?optName AS ?optLabel) - } - OPTIONAL { - ?root ?optTarget . - OPTIONAL { - ?optTarget ?optPathway . - } - } - OPTIONAL { - ?root ?optIndication . - OPTIONAL { - ?root ?optContraindication . - } - } - OPTIONAL { - { - ?root ?optArm . - } - UNION - { - ?optArm ?root . - ?trial ?optArm . - } - OPTIONAL { - ?optArm ?optResult . - } - OPTIONAL { - ?optResult ?optPValue . - } - OPTIONAL { - ?optResult ?optEffectSize . - } - } - OPTIONAL { - ?combo ?root . - OPTIONAL { - ?combo ?optSynergy . - } - } -} - -143.646 ms/op +256.919 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 143.646 ms/op + 256.919 ms/op -# Run complete. Total time: 01:17:16 +# Run complete. Total time: 00:23:41 ``` From a82010056a88fa96abe093bfce580ce911ccc81f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 00:25:51 +0200 Subject: [PATCH 20/43] improvef query explanation --- .../query/explanation/GenericPlanNode.java | 55 ++- .../explanation/TelemetryMetricNames.java | 20 + .../explanation/GenericPlanNodeTest.java | 24 + .../optimizer/JoinOrderPlanner.java | 13 + .../optimizer/QueryJoinOptimizer.java | 262 ++++++++++ .../impl/QueryJoinOptimizerTest.java | 63 +++ .../query/algebra/AbstractQueryModelNode.java | 7 +- .../QueryModelTreeToGenericPlanNode.java | 49 ++ .../QueryModelTreeToGenericPlanNodeTest.java | 30 ++ .../sail/base/SketchJoinOrderPlanner.java | 100 ++-- .../sail/base/SketchJoinOrderReorderer.java | 27 +- .../SketchJoinOrderPlannerLoggingTest.java | 19 +- .../common/plan/QueryPlanCapture.java | 46 ++ .../common/plan/QueryPlanCaptureTest.java | 44 ++ ...95a5e90e0-20260419-203444424-68d84f6b.json | 449 ++++++++++++++++++ ...95a5e90e0-20260419-212848893-2a586cc5.json | 449 ++++++++++++++++++ ...95a5e90e0-20260419-204709897-0caa078a.json | 449 ++++++++++++++++++ ...95a5e90e0-20260419-211331607-68b37847.json | 449 ++++++++++++++++++ 18 files changed, 2487 insertions(+), 68 deletions(-) create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-203444424-68d84f6b.json create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-anchor-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-212848893-2a586cc5.json create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-final-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-204709897-0caa078a.json create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-right-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-211331607-68b37847.json diff --git a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java index 2f8b52ae11b..09dcaada665 100644 --- a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java +++ b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java @@ -435,7 +435,7 @@ public void setLongMetricsActual(Map longMetricsActual) { } public Long getLongMetricActual(String metricName) { - if (!runtimeTelemetryEnabled) { + if (!runtimeTelemetryEnabled && !TelemetryMetricNames.isOptimizerMetric(metricName)) { return null; } Long metricValue = longMetricsActual.get(metricName); @@ -454,10 +454,8 @@ public void setLongMetricActual(String metricName, Long metricValue) { } public Map getDoubleMetricsActual() { - if (!runtimeTelemetryEnabled || doubleMetricsActual.isEmpty()) { - return null; - } - return doubleMetricsActual; + Map visible = visibleDoubleMetricsActual(); + return visible == null || visible.isEmpty() ? null : visible; } public void setDoubleMetricsActual(Map doubleMetricsActual) { @@ -466,7 +464,7 @@ public void setDoubleMetricsActual(Map doubleMetricsActual) { } public Double getDoubleMetricActual(String metricName) { - if (!runtimeTelemetryEnabled) { + if (!runtimeTelemetryEnabled && !TelemetryMetricNames.isOptimizerMetric(metricName)) { return null; } return doubleMetricsActual.get(metricName); @@ -490,7 +488,7 @@ public void setStringMetricsActual(Map stringMetricsActual) { } public String getStringMetricActual(String metricName) { - if (!runtimeTelemetryEnabled && !isPreferredExplainAnnotationMetric(metricName)) { + if (!runtimeTelemetryEnabled && !isVisibleWithoutRuntimeTelemetry(metricName)) { return null; } String metricValue = stringMetricsActual.get(metricName); @@ -926,7 +924,7 @@ private void appendMapTelemetry(Map metrics) { for (Map.Entry entry : visibleLongMetrics.entrySet()) { String metricName = entry.getKey(); Long metricValue = entry.getValue(); - if (metricValue == null || metricValue <= 0) { + if (metricValue == null || metricValue <= 0 && !TelemetryMetricNames.isOptimizerMetric(metricName)) { continue; } if (!isMetricApplicableToNode(metricName) || metrics.containsKey(metricName)) { @@ -941,7 +939,7 @@ private void appendMapTelemetry(Map metrics) { for (Map.Entry entry : visibleDoubleMetrics.entrySet()) { String metricName = entry.getKey(); Double metricValue = entry.getValue(); - if (metricValue == null || metricValue <= 0) { + if (metricValue == null || metricValue <= 0 && !TelemetryMetricNames.isOptimizerMetric(metricName)) { continue; } if (!isMetricApplicableToNode(metricName) || metrics.containsKey(metricName)) { @@ -1012,6 +1010,13 @@ private Map visibleStringMetricsActual() { visible.put(metricName, metricValue); } } + for (Map.Entry entry : stringMetricsActual.entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey()) + && entry.getValue() != null + && !entry.getValue().isEmpty()) { + visible.put(entry.getKey(), entry.getValue()); + } + } return visible; } @@ -1020,9 +1025,12 @@ private static boolean hideStringMetric(String metricName, String metricValue) { } private Map visibleLongMetricsActual() { - if (!runtimeTelemetryEnabled || longMetricsActual.isEmpty()) { + if (longMetricsActual.isEmpty()) { return null; } + if (!runtimeTelemetryEnabled) { + return optimizerMetrics(longMetricsActual); + } Long outputRowsActual = longMetricsActual.get(TelemetryMetricNames.OUTPUT_ROWS_ACTUAL); if (!Objects.equals(outputRowsActual, getResultSizeActual())) { return longMetricsActual; @@ -1032,6 +1040,16 @@ private Map visibleLongMetricsActual() { return visible; } + private Map visibleDoubleMetricsActual() { + if (doubleMetricsActual.isEmpty()) { + return null; + } + if (runtimeTelemetryEnabled) { + return doubleMetricsActual; + } + return optimizerMetrics(doubleMetricsActual); + } + private static boolean isPreferredExplainAnnotationMetric(String metricName) { return TelemetryMetricNames.BINDING_STATE.equals(metricName) || TelemetryMetricNames.JOIN_TYPE.equals(metricName) @@ -1039,6 +1057,23 @@ private static boolean isPreferredExplainAnnotationMetric(String metricName) { || TelemetryMetricNames.INDEX_NAMES.equals(metricName); } + private static boolean isVisibleWithoutRuntimeTelemetry(String metricName) { + return isPreferredExplainAnnotationMetric(metricName) || TelemetryMetricNames.isOptimizerMetric(metricName); + } + + private static Map optimizerMetrics(Map metrics) { + if (metrics == null || metrics.isEmpty()) { + return null; + } + Map visible = new LinkedHashMap<>(); + for (Map.Entry entry : metrics.entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + visible.put(entry.getKey(), entry.getValue()); + } + } + return visible; + } + private void appendDerivedTelemetry(Map metrics, Long sourceRowsScanned, Long sourceRowsMatched, Long sourceRowsFiltered) { Long inputRows = totalInputRowsFromChildren(); diff --git a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java index 5ee8e999be2..9ff83773487 100644 --- a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java +++ b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java @@ -112,4 +112,24 @@ private TelemetryMetricNames() { public static final String CONFIDENCE_SCORE_ACTUAL = "confidenceScoreActual"; public static final String VARIANCE_ACTUAL = "varianceActual"; public static final String STDDEV_ACTUAL = "stddevActual"; + + public static final String OPTIMIZER_PREFIX = "optimizer."; + public static final String OPTIMIZER_STRATEGY = OPTIMIZER_PREFIX + "strategy"; + public static final String OPTIMIZER_CONFIGURED_STRATEGY = OPTIMIZER_PREFIX + "configuredStrategy"; + public static final String OPTIMIZER_THRESHOLDS = OPTIMIZER_PREFIX + "thresholds"; + public static final String OPTIMIZER_ORIGINAL_ORDER = OPTIMIZER_PREFIX + "originalOrder"; + public static final String OPTIMIZER_CHOSEN_ORDER = OPTIMIZER_PREFIX + "chosenOrder"; + public static final String OPTIMIZER_INITIALLY_BOUND_VARS = OPTIMIZER_PREFIX + "initiallyBoundVars"; + public static final String OPTIMIZER_SCOPE_BARRIERS = OPTIMIZER_PREFIX + "scopeBarriers"; + public static final String OPTIMIZER_DECISION = OPTIMIZER_PREFIX + "decision"; + public static final String OPTIMIZER_DECISION_TRACE = OPTIMIZER_PREFIX + "decisionTrace"; + public static final String OPTIMIZER_SCORE = OPTIMIZER_PREFIX + "score"; + public static final String OPTIMIZER_SCORE_COMPONENTS = OPTIMIZER_PREFIX + "scoreComponents"; + public static final String OPTIMIZER_CANDIDATE_COUNT = OPTIMIZER_PREFIX + "candidateCount"; + public static final String OPTIMIZER_REJECTION_REASON = OPTIMIZER_PREFIX + "rejectionReason"; + public static final String OPTIMIZER_ESTIMATE_SOURCE = OPTIMIZER_PREFIX + "estimateSource"; + + public static boolean isOptimizerMetric(String metricName) { + return metricName != null && metricName.startsWith(OPTIMIZER_PREFIX); + } } diff --git a/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java b/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java index bca91a5fea5..021219651e3 100644 --- a/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java +++ b/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java @@ -352,6 +352,30 @@ void toStringSuppressesTelemetryWhenRuntimeTelemetryDisabledButKeepsExplainAnnot assertTrue(actual.contains("indexName=spoc"), actual); } + @Test + void toStringSuppressesRuntimeTelemetryButKeepsOptimizerAnnotations() { + GenericPlanNode node = new GenericPlanNode("Join"); + node.setRuntimeTelemetryEnabled(false); + node.setSourceRowsScannedActual(7L); + node.setLongMetricActual("optimizer.candidateCount", 3L); + node.setDoubleMetricActual("optimizer.score", 12.5); + node.setStringMetricActual("optimizer.strategy", "greedy"); + node.setStringMetricActual("optimizer.thresholds", "DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8"); + + String actual = node.toString(); + + assertFalse(actual.contains("sourceRowsScannedActual="), actual); + assertTrue(actual.contains("optimizer.candidateCount=3"), actual); + assertTrue(actual.contains("optimizer.score="), actual); + assertTrue(actual.contains("optimizer.strategy=greedy"), actual); + assertTrue(actual.contains("optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8"), actual); + + String json = new ExplanationImpl(node, false, null).toJson(); + assertTrue(json.contains("\"optimizer.candidateCount\""), json); + assertTrue(json.contains("\"optimizer.score\""), json); + assertTrue(json.contains("\"optimizer.strategy\""), json); + } + @Test void explanationLevelHelpersExposeSharedVisibilityPolicy() { assertFalse(Explanation.Level.Unoptimized.includesEvaluationAnnotations()); diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java index e32fc62fc4d..6f2ba6a949a 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java @@ -33,11 +33,20 @@ final class JoinOrderPlan { private final List orderedArgs; private final double estimatedFinalRows; private final double estimatedTotalWork; + private final List diagnostics; public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, double estimatedTotalWork) { + this(orderedArgs, estimatedFinalRows, estimatedTotalWork, List.of()); + } + + public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, double estimatedTotalWork, + List diagnostics) { this.orderedArgs = Collections.unmodifiableList(new ArrayList<>(orderedArgs)); this.estimatedFinalRows = estimatedFinalRows; this.estimatedTotalWork = estimatedTotalWork; + this.diagnostics = diagnostics == null || diagnostics.isEmpty() + ? List.of() + : Collections.unmodifiableList(new ArrayList<>(diagnostics)); } public List getOrderedArgs() { @@ -51,6 +60,10 @@ public double getEstimatedFinalRows() { public double getEstimatedTotalWork() { return estimatedTotalWork; } + + public List getDiagnostics() { + return diagnostics; + } } Optional planJoinOrder(List args, Set initiallyBoundVars, Algorithm algorithm); diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index 8b46d0d1714..ca84807ce58 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -53,6 +53,7 @@ import org.eclipse.rdf4j.query.algebra.helpers.StatementPatternVisitor; import org.eclipse.rdf4j.query.algebra.helpers.TupleExprs; import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -690,9 +691,31 @@ private Join createJoinWithEstimatedResultSize(TupleExpr left, TupleExpr right) join.setResultSizeEstimate(Math.max(join.getResultSizeEstimate(), estimatedResultSize)); } } + copyOptimizerAnnotations(left, join); + if (join.getStringMetricActual(TelemetryMetricNames.OPTIMIZER_STRATEGY) == null) { + copyOptimizerAnnotations(right, join); + } return join; } + private void copyOptimizerAnnotations(TupleExpr source, TupleExpr target) { + for (Map.Entry entry : source.getLongMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + target.setLongMetricActual(entry.getKey(), entry.getValue()); + } + } + for (Map.Entry entry : source.getDoubleMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + target.setDoubleMetricActual(entry.getKey(), entry.getValue()); + } + } + for (Map.Entry entry : source.getStringMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + target.setStringMetricActual(entry.getKey(), entry.getValue()); + } + } + } + private Deque positionBindingSetAssignments(Deque orderedJoinArgs) { List originalOrder = new ArrayList<>(orderedJoinArgs); if (originalOrder.size() < 2) { @@ -838,10 +861,14 @@ private List greedyReorderByJoinCardinality(List segment, Set prefixBindingNames = new HashSet<>(outerBoundVars); boolean hasConnectedInitialPair = hasConnectedInitialPair(remaining); boolean hasAnchoredInitialPair = hasAnchoredInitialPair(remaining, outerBoundVars); + List decisionTrace = new ArrayList<>(); + int candidateCount = 0; int bestLeftIndex = 0; int bestRightIndex = 1; GreedyChoiceScore bestInitialScore = null; + GreedyChoiceCandidate bestInitialCandidate = null; + List initialCandidates = new ArrayList<>(); for (int leftIndex = 0; leftIndex < remaining.size() - 1; leftIndex++) { for (int rightIndex = leftIndex + 1; rightIndex < remaining.size(); rightIndex++) { TupleExpr left = remaining.get(leftIndex); @@ -850,14 +877,20 @@ private List greedyReorderByJoinCardinality(List segment, deferredFilters, cardinalityCache, hasConnectedInitialPair, hasAnchoredInitialPair); GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(left), originalOrder.get(right)); + GreedyChoiceCandidate candidate = new GreedyChoiceCandidate("initial", left, right, metrics, + score); + initialCandidates.add(candidate); + candidateCount++; traceGreedyChoice("initial", left, right, metrics, score); if (bestInitialScore == null || compareGreedyChoices(score, bestInitialScore) < 0) { bestInitialScore = score; + bestInitialCandidate = candidate; bestLeftIndex = leftIndex; bestRightIndex = rightIndex; } } } + recordGreedyCandidateTrace(decisionTrace, initialCandidates, bestInitialCandidate); TupleExpr left = remaining.remove(bestLeftIndex); TupleExpr right = remaining.remove(bestRightIndex > bestLeftIndex ? bestRightIndex - 1 : bestRightIndex); @@ -871,30 +904,42 @@ private List greedyReorderByJoinCardinality(List segment, prefixBindingNames.addAll(right.getBindingNames()); List pendingDeferredFilters = removeCompatibleFilters(deferredFilters, prefixBindingNames); TupleExpr prefixForEstimation = new Join(left.clone(), right.clone()); + GreedyChoiceCandidate chosenDecision = bestInitialCandidate; while (!remaining.isEmpty()) { TupleExpr bestCandidate = null; GreedyChoiceScore bestCandidateScore = null; + GreedyChoiceCandidate bestCandidateDecision = null; + List expandCandidates = new ArrayList<>(); boolean hasConnectedCandidate = hasConnectedCandidate(remaining, prefixBindingNames); for (TupleExpr candidate : remaining) { GreedyChoiceMetrics metrics = buildNextGreedyChoiceMetrics(prefixForEstimation, prefixBindingNames, candidate, pendingDeferredFilters, cardinalityCache, hasConnectedCandidate); GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(candidate), -1); + GreedyChoiceCandidate candidateDecision = new GreedyChoiceCandidate("expand", prefixForEstimation, + candidate, metrics, score); + expandCandidates.add(candidateDecision); + candidateCount++; traceGreedyChoice("expand", prefixForEstimation, candidate, metrics, score); if (bestCandidateScore == null || compareGreedyChoices(score, bestCandidateScore) < 0) { bestCandidateScore = score; bestCandidate = candidate; + bestCandidateDecision = candidateDecision; } } + recordGreedyCandidateTrace(decisionTrace, expandCandidates, bestCandidateDecision); if (bestCandidate == null) { bestCandidate = remaining.get(0); + decisionTrace.add("fallback reason=no-greedy-candidate candidate=" + + describeTupleExprForOptimizer(bestCandidate)); } remaining.remove(bestCandidate); ordered.addLast(bestCandidate); prefixBindingNames.addAll(bestCandidate.getBindingNames()); pendingDeferredFilters = removeCompatibleFilters(pendingDeferredFilters, prefixBindingNames); prefixForEstimation = new Join(prefixForEstimation, bestCandidate.clone()); + chosenDecision = bestCandidateDecision == null ? chosenDecision : bestCandidateDecision; } if (log.isTraceEnabled()) { @@ -902,9 +947,209 @@ private List greedyReorderByJoinCardinality(List segment, ordered.stream().map(t -> t.toString().trim()).toList()); } + annotateGreedyDiagnostics(ordered, segment, outerBoundVars, deferredFilters, decisionTrace, + chosenDecision, candidateCount); + return ordered; } + private void recordGreedyCandidateTrace(List decisionTrace, + List candidates, + GreedyChoiceCandidate chosen) { + for (GreedyChoiceCandidate candidate : candidates) { + boolean isChosen = candidate == chosen; + decisionTrace.add(formatGreedyCandidate(candidate, isChosen, + isChosen ? "chosen" : rejectionReason(candidate.score, chosen == null ? null : chosen.score))); + } + } + + private String formatGreedyCandidate(GreedyChoiceCandidate candidate, boolean chosen, String reason) { + return candidate.phase + + " candidate left=" + describeTupleExprForOptimizer(candidate.left) + + " right=" + describeTupleExprForOptimizer(candidate.right) + + " score=" + formatOptimizerNumber(candidate.score.adjustedCost) + + " rawRows=" + formatOptimizerNumber(candidate.metrics.rawJoinRows) + + " effectiveRows=" + formatOptimizerNumber(candidate.metrics.effectiveJoinRows) + + " sharedVars=" + candidate.metrics.sharedVarCount + + " boundAnchors=" + candidate.metrics.boundAnchorCount + + " cheapFilters=" + candidate.metrics.cheapFilterUnlockCount + + " expensiveFilters=" + candidate.metrics.expensiveFilterUnlockCount + + " filterPassRatio=" + formatOptimizerNumber(candidate.metrics.combinedUnlockedFilterPassRatio) + + " tieBreakerIndex=" + candidate.score.stableIndex + + " decision=" + (chosen ? "chosen" : "rejected") + + " reason=" + reason; + } + + private String rejectionReason(GreedyChoiceScore candidate, GreedyChoiceScore chosen) { + if (chosen == null) { + return "no chosen candidate"; + } + int adjustedCostComparison = Double.compare(candidate.adjustedCost, chosen.adjustedCost); + if (adjustedCostComparison > 0) { + return "higher adjusted cost"; + } + int rawCostComparison = Double.compare(candidate.rawCost, chosen.rawCost); + if (rawCostComparison > 0) { + return "higher raw rows"; + } + int stableIndexComparison = Integer.compare(candidate.stableIndex, chosen.stableIndex); + if (stableIndexComparison > 0) { + return "later tie-breaker index"; + } + int secondaryIndexComparison = Integer.compare(candidate.secondaryStableIndex, chosen.secondaryStableIndex); + if (secondaryIndexComparison > 0) { + return "later secondary tie-breaker index"; + } + return "not selected"; + } + + private void annotateGreedyDiagnostics(List ordered, List originalOrder, + Set outerBoundVars, List deferredFilters, List decisionTrace, + GreedyChoiceCandidate chosenDecision, int candidateCount) { + if (ordered.isEmpty()) { + return; + } + + TupleExpr target = ordered.get(0); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_STRATEGY, "greedy"); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_CONFIGURED_STRATEGY, + JOIN_ORDER_STRATEGY.name().toLowerCase()); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_THRESHOLDS, optimizerThresholds()); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_ORIGINAL_ORDER, + describeTupleExprOrderForOptimizer(originalOrder)); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_CHOSEN_ORDER, + describeTupleExprOrderForOptimizer(ordered)); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_INITIALLY_BOUND_VARS, + describeBindingNames(outerBoundVars)); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_SCOPE_BARRIERS, + "segment only; separator barriers preserved outside this segment"); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_ESTIMATE_SOURCE, + optimizerEstimateSource(deferredFilters)); + target.setLongMetricActual(TelemetryMetricNames.OPTIMIZER_CANDIDATE_COUNT, candidateCount); + if (!decisionTrace.isEmpty()) { + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_DECISION_TRACE, + String.join("; ", decisionTrace)); + } + if (chosenDecision != null) { + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_DECISION, + chosenDecision.phase + " chosen " + describeTupleExprForOptimizer(chosenDecision.right)); + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_SCORE_COMPONENTS, + scoreComponents(chosenDecision)); + if (Double.isFinite(chosenDecision.score.adjustedCost) && chosenDecision.score.adjustedCost >= 0.0d) { + target.setDoubleMetricActual(TelemetryMetricNames.OPTIMIZER_SCORE, + chosenDecision.score.adjustedCost); + } + } + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_REJECTION_REASON, + decisionTrace.stream() + .filter(line -> line.contains("decision=rejected")) + .findFirst() + .map(line -> line.substring(line.indexOf("reason=") + "reason=".length())) + .orElse("")); + } + + private String scoreComponents(GreedyChoiceCandidate chosenDecision) { + return "rawRows=" + formatOptimizerNumber(chosenDecision.metrics.rawJoinRows) + + ", effectiveRows=" + formatOptimizerNumber(chosenDecision.metrics.effectiveJoinRows) + + ", adjustedCost=" + formatOptimizerNumber(chosenDecision.score.adjustedCost) + + ", sharedVars=" + chosenDecision.metrics.sharedVarCount + + ", boundAnchors=" + chosenDecision.metrics.boundAnchorCount + + ", cheapFilters=" + chosenDecision.metrics.cheapFilterUnlockCount + + ", expensiveFilters=" + chosenDecision.metrics.expensiveFilterUnlockCount + + ", filterPassRatio=" + + formatOptimizerNumber(chosenDecision.metrics.combinedUnlockedFilterPassRatio) + + ", tieBreakerIndex=" + chosenDecision.score.stableIndex; + } + + private String optimizerThresholds() { + return "DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=" + DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT + + ", MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=" + + MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER + + ", AVOIDABLE_CROSS_JOIN_PENALTY=" + AVOIDABLE_CROSS_JOIN_PENALTY + + ", UNANCHORED_INITIAL_PAIR_PENALTY=" + UNANCHORED_INITIAL_PAIR_PENALTY + + ", SHARED_VAR_BONUS_PER_VAR=" + SHARED_VAR_BONUS_PER_VAR + + ", MAX_SHARED_VAR_BONUS=" + MAX_SHARED_VAR_BONUS + + ", BOUND_ANCHOR_BONUS_PER_VAR=" + BOUND_ANCHOR_BONUS_PER_VAR + + ", MAX_BOUND_ANCHOR_BONUS=" + MAX_BOUND_ANCHOR_BONUS + + ", CHEAP_FILTER_BONUS_PER_FILTER=" + CHEAP_FILTER_BONUS_PER_FILTER + + ", MAX_CHEAP_FILTER_BONUS=" + MAX_CHEAP_FILTER_BONUS + + ", EXPENSIVE_FILTER_BONUS_PER_FILTER=" + EXPENSIVE_FILTER_BONUS_PER_FILTER + + ", MAX_EXPENSIVE_FILTER_BONUS=" + MAX_EXPENSIVE_FILTER_BONUS + + ", MIN_UNLOCKED_FILTER_PASS_RATIO=" + MIN_UNLOCKED_FILTER_PASS_RATIO; + } + + private String optimizerEstimateSource(List deferredFilters) { + String statisticsName = statistics.getClass().getSimpleName().toLowerCase(); + if (statisticsName.contains("sketch")) { + return deferredFilters.isEmpty() ? "sketch" : "sketch+filter stats"; + } + if (!deferredFilters.isEmpty() && statistics.supportsFilterSelectivityCosting()) { + return "cardinality+learned filter stats"; + } + if (statistics.supportsJoinEstimation()) { + return "cardinality"; + } + return "heuristic"; + } + + private String describeTupleExprOrderForOptimizer(List tupleExprs) { + List labels = new ArrayList<>(tupleExprs.size()); + for (TupleExpr tupleExpr : tupleExprs) { + labels.add(describeTupleExprForOptimizer(tupleExpr)); + } + return labels.toString(); + } + + private String describeTupleExprForOptimizer(TupleExpr tupleExpr) { + if (tupleExpr instanceof StatementPattern) { + StatementPattern pattern = (StatementPattern) tupleExpr; + return "SP(" + describeVarForOptimizer(pattern.getSubjectVar()) + ' ' + + describeVarForOptimizer(pattern.getPredicateVar()) + ' ' + + describeVarForOptimizer(pattern.getObjectVar()) + ')'; + } + String signature = tupleExpr.getSignature().replace('\n', ' ').replaceAll("\\s+", " ").trim(); + return signature.length() <= 160 ? signature : signature.substring(0, 157) + "..."; + } + + private String describeVarForOptimizer(Var var) { + if (var == null) { + return "null"; + } + if (!var.hasValue()) { + return '?' + var.getName(); + } + Value value = var.getValue(); + if (value == null) { + return '?' + var.getName(); + } + if (value instanceof IRI) { + return ((IRI) value).getLocalName(); + } + return value.stringValue(); + } + + private String describeBindingNames(Set bindingNames) { + if (bindingNames == null || bindingNames.isEmpty()) { + return "[]"; + } + List sorted = new ArrayList<>(bindingNames); + Collections.sort(sorted); + return sorted.toString(); + } + + private String formatOptimizerNumber(double value) { + if (Double.isNaN(value)) { + return "NaN"; + } + if (value == Double.POSITIVE_INFINITY) { + return "Infinity"; + } + if (value == Double.NEGATIVE_INFINITY) { + return "-Infinity"; + } + return Double.toString(value); + } + private Set getAvailableVars(Set baseBindingNames, TupleExpr tupleExpr) { Set availableVars = new HashSet<>(baseBindingNames); availableVars.addAll(tupleExpr.getBindingNames()); @@ -1347,6 +1592,23 @@ private GreedyChoiceScore(double adjustedCost, double rawCost, int stableIndex, } } + private final class GreedyChoiceCandidate { + private final String phase; + private final TupleExpr left; + private final TupleExpr right; + private final GreedyChoiceMetrics metrics; + private final GreedyChoiceScore score; + + private GreedyChoiceCandidate(String phase, TupleExpr left, TupleExpr right, GreedyChoiceMetrics metrics, + GreedyChoiceScore score) { + this.phase = phase; + this.left = left; + this.right = right; + this.metrics = metrics; + this.score = score; + } + } + private interface OrderedJoinPlanItem { } diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java index 5008c3ae608..0e92c4fa809 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java @@ -200,6 +200,54 @@ public void optimizeKeepsBindExtensionGroupSeparateInsideScopedNestedJoin() { assertThat(predicates(scopedGroupLeaves.subList(1, 4))).containsExactly(ex("pF"), ex("pG"), ex("pE")); } + @Test + public void optimizerAnnotationsExposeGreedyDecisionDiagnostics() { + String query = String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:pA ?a .", + " ?a ex:pB ?b .", + " ?s ex:pC ?c .", + "}"); + + QueryRoot root = optimizeWithStatistics(query, + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(ex("pA"), ex("pB")), 100.0d, + pairKey(ex("pA"), ex("pC")), 80.0d, + pairKey(ex("pB"), ex("pC")), 5.0d))); + + List annotatedNodes = optimizerAnnotatedNodes(root); + assertThat(annotatedNodes).isNotEmpty(); + + QueryModelNode diagnostics = annotatedNodes.get(0); + assertThat(diagnostics.getStringMetricActual("optimizer.strategy")).isEqualTo("greedy"); + assertThat(diagnostics.getStringMetricActual("optimizer.thresholds")) + .contains("DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8") + .contains("MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10") + .contains("MIN_UNLOCKED_FILTER_PASS_RATIO=0.25"); + assertThat(diagnostics.getStringMetricActual("optimizer.originalOrder")) + .contains("pA") + .contains("pB") + .contains("pC"); + assertThat(diagnostics.getStringMetricActual("optimizer.chosenOrder")) + .contains("pB") + .contains("pC"); + assertThat(diagnostics.getStringMetricActual("optimizer.decisionTrace")) + .contains("candidate") + .contains("chosen") + .contains("score="); + assertThat(diagnostics.getStringMetricActual("optimizer.scoreComponents")) + .contains("rawRows=") + .contains("effectiveRows=") + .contains("adjustedCost=") + .contains("sharedVars=") + .contains("boundAnchors=") + .contains("filterPassRatio=") + .contains("tieBreakerIndex="); + assertThat(diagnostics.getStringMetricActual("optimizer.estimateSource")).isNotBlank(); + assertThat(diagnostics.getDoubleMetricActual("optimizer.score")).isGreaterThanOrEqualTo(0.0d); + } + @Test public void testValues() throws RDF4JException { String query = String.join("\n", "", @@ -682,6 +730,21 @@ private static QueryRoot optimizeWithStatistics(String query, EvaluationStatisti return root; } + private static List optimizerAnnotatedNodes(QueryModelNode root) { + List nodes = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + protected void meetNode(QueryModelNode node) throws RuntimeException { + if (node.getStringMetricActual("optimizer.strategy") != null + || node.getStringMetricActual("optimizer.decisionTrace") != null) { + nodes.add(node); + } + super.meetNode(node); + } + }); + return nodes; + } + private Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { Class joinVisitorClass = Class .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java index 67b2f2fe538..a4149634a11 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java @@ -19,6 +19,7 @@ import org.eclipse.rdf4j.common.annotation.Experimental; import org.eclipse.rdf4j.query.algebra.helpers.QueryModelTreePrinter; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -313,7 +314,7 @@ public long getLongMetricActual(String metricName) { @Override public void setLongMetricActual(String metricName, long metricValue) { - if (metricName == null || !runtimeTelemetryEnabled) { + if (metricName == null || !runtimeTelemetryEnabled && !TelemetryMetricNames.isOptimizerMetric(metricName)) { return; } if (longMetricsActual.isEmpty()) { @@ -334,7 +335,7 @@ public double getDoubleMetricActual(String metricName) { @Override public void setDoubleMetricActual(String metricName, double metricValue) { - if (metricName == null || !runtimeTelemetryEnabled) { + if (metricName == null || !runtimeTelemetryEnabled && !TelemetryMetricNames.isOptimizerMetric(metricName)) { return; } if (doubleMetricsActual.isEmpty()) { @@ -355,7 +356,7 @@ public String getStringMetricActual(String metricName) { @Override public void setStringMetricActual(String metricName, String metricValue) { - if (metricName == null || !runtimeTelemetryEnabled) { + if (metricName == null || !runtimeTelemetryEnabled && !TelemetryMetricNames.isOptimizerMetric(metricName)) { return; } if (stringMetricsActual.isEmpty()) { diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java index 01ddfc36c2d..0bb1225b6a1 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java @@ -16,6 +16,7 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.eclipse.rdf4j.common.annotation.Experimental; @@ -59,6 +60,7 @@ public class QueryModelTreeToGenericPlanNode extends AbstractQueryModelVisitor rootIncomingBindings; private final CartesianJoinExplainAnalyzer cartesianJoinExplainAnalyzer; @@ -73,10 +75,13 @@ public QueryModelTreeToGenericPlanNode(QueryModelNode topTupleExpr, Set public QueryModelTreeToGenericPlanNode(QueryModelNode topTupleExpr, Set rootIncomingBindings, Explanation.Level level) { + QueryModelNode optimizerMetricWrapper = null; if (topTupleExpr instanceof QueryRoot) { + optimizerMetricWrapper = topTupleExpr; topTupleExpr = ((QueryRoot) topTupleExpr).getArg(); } this.topTupleExpr = topTupleExpr; + this.optimizerMetricWrapper = optimizerMetricWrapper; this.level = level == null ? defaultExplanationLevel(topTupleExpr) : level; this.rootIncomingBindings = rootIncomingBindings == null ? Collections.emptySet() : Collections.unmodifiableSet(new LinkedHashSet<>(rootIncomingBindings)); @@ -126,6 +131,11 @@ private GenericPlanNode buildPlanNode(QueryModelNode node, Set incomingB genericPlanNode.setDoubleMetricsActual(new LinkedHashMap<>(node.getDoubleMetricsActual())); genericPlanNode.setStringMetricsActual(new LinkedHashMap<>(node.getStringMetricsActual())); applyVariableShapeMetrics(node, genericPlanNode); + } else if (level.includesEvaluationAnnotations()) { + copyOptimizerMetrics(node, genericPlanNode); + } + if (node == topTupleExpr && optimizerMetricWrapper != null) { + copyOptimizerMetricsIfAbsent(optimizerMetricWrapper, genericPlanNode); } if (level.includesEvaluationAnnotations()) { applyExplainAnnotations(node, genericPlanNode, incomingBindings); @@ -152,6 +162,45 @@ private long runtimeTelemetryMetric(long value) { return -1; } + private static void copyOptimizerMetrics(QueryModelNode node, GenericPlanNode genericPlanNode) { + for (Map.Entry entry : node.getLongMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + genericPlanNode.setLongMetricActual(entry.getKey(), entry.getValue()); + } + } + for (Map.Entry entry : node.getDoubleMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + genericPlanNode.setDoubleMetricActual(entry.getKey(), entry.getValue()); + } + } + for (Map.Entry entry : node.getStringMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + genericPlanNode.setStringMetricActual(entry.getKey(), entry.getValue()); + } + } + } + + private static void copyOptimizerMetricsIfAbsent(QueryModelNode node, GenericPlanNode genericPlanNode) { + for (Map.Entry entry : node.getLongMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey()) + && genericPlanNode.getLongMetricActual(entry.getKey()) == null) { + genericPlanNode.setLongMetricActual(entry.getKey(), entry.getValue()); + } + } + for (Map.Entry entry : node.getDoubleMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey()) + && genericPlanNode.getDoubleMetricActual(entry.getKey()) == null) { + genericPlanNode.setDoubleMetricActual(entry.getKey(), entry.getValue()); + } + } + for (Map.Entry entry : node.getStringMetricsActual().entrySet()) { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey()) + && genericPlanNode.getStringMetricActual(entry.getKey()) == null) { + genericPlanNode.setStringMetricActual(entry.getKey(), entry.getValue()); + } + } + } + private static Explanation.Level defaultExplanationLevel(QueryModelNode node) { return node != null && node.isRuntimeTelemetryEnabled() ? Explanation.Level.Telemetry diff --git a/core/queryalgebra/model/src/test/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNodeTest.java b/core/queryalgebra/model/src/test/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNodeTest.java index a5344ce1639..036c7323f39 100644 --- a/core/queryalgebra/model/src/test/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNodeTest.java +++ b/core/queryalgebra/model/src/test/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNodeTest.java @@ -316,6 +316,36 @@ public void respectsSharedExplanationLevelVisibilityPolicy() { assertThat(telemetry.toString()).contains("varianceActual="); } + @Test + public void copiesOptimizerMetricsAtOptimizedLevelWithoutRuntimeTelemetry() { + Join join = new Join( + new StatementPattern(Var.of("s"), Var.of("p"), Var.of("o")), + new StatementPattern(Var.of("s"), Var.of("p2"), Var.of("o2"))); + join.setRuntimeTelemetryEnabled(true); + join.setSourceRowsScannedActual(99); + join.setLongMetricActual("optimizer.candidateCount", 3L); + join.setDoubleMetricActual("optimizer.score", 12.5); + join.setStringMetricActual("optimizer.strategy", "greedy"); + join.setStringMetricActual("optimizer.thresholds", "DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8"); + join.setStringMetricActual(TelemetryMetricNames.METRIC_ORIGIN + ".selectivityActual", "runtime"); + + QueryModelTreeToGenericPlanNode converter = new QueryModelTreeToGenericPlanNode(join, null, + Explanation.Level.Optimized); + join.visit(converter); + + GenericPlanNode root = converter.getGenericPlanNode(); + assertThat(root.getSourceRowsScannedActual()).isNull(); + assertThat(root.getLongMetricsActual()).containsEntry("optimizer.candidateCount", 3L); + assertThat(root.getDoubleMetricsActual()).containsEntry("optimizer.score", 12.5); + assertThat(root.getStringMetricsActual()) + .containsEntry("optimizer.strategy", "greedy") + .containsEntry("optimizer.thresholds", "DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8") + .doesNotContainKey(TelemetryMetricNames.METRIC_ORIGIN + ".selectivityActual"); + assertThat(root.toString()) + .contains("optimizer.strategy=greedy") + .doesNotContain("sourceRowsScannedActual="); + } + private static GenericPlanNode statementPattern(GenericPlanNode join, int index) { return join.getPlans().get(index); } diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java index ed645fa58bf..cd2a792e31a 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java @@ -46,6 +46,7 @@ final class SketchJoinOrderPlanner { private final Map> variablesMemo = new HashMap<>(); private final SketchBasedJoinEstimator.SketchPlannerPath factorRejectionPath; private final TupleExpr rejectedFactor; + private final List diagnostics = new ArrayList<>(); SketchJoinOrderPlanner(SketchBasedJoinEstimator estimator, SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster, @@ -63,28 +64,31 @@ final class SketchJoinOrderPlanner { PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { if (factorRejectionPath != null) { - logger.debug("Sketch join reorder rejected: path={} factor={}", factorRejectionPath, - rejectedFactor == null ? "" : describeTupleExpr(rejectedFactor)); - return new PlanOutcome(Optional.empty(), factorRejectionPath); + recordDebug("rejected: path=" + factorRejectionPath + " factor=" + + (rejectedFactor == null ? "" : describeTupleExpr(rejectedFactor))); + return new PlanOutcome(Optional.empty(), factorRejectionPath, List.copyOf(diagnostics)); } if (factors.isEmpty()) { - return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + recordDebug("fallback reason=" + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE + + " factors=[]"); + return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, + List.copyOf(diagnostics)); } logFactorEstimates(); SketchBasedJoinEstimator.SketchPlannerPath classification = classifyGraph(); if (classification != null) { - logger.debug("Sketch join reorder rejected: path={} factors={}", classification, - describeFactorOrder(indices())); - return new PlanOutcome(Optional.empty(), classification); + recordDebug("rejected: path=" + classification + " factors=" + describeFactorOrder(indices())); + return new PlanOutcome(Optional.empty(), classification, List.copyOf(diagnostics)); } if (algorithm == JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING && factors.size() > MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS) { - logger.debug("Sketch join reorder rejected: path={} factorCount={} maxDynamicProgrammingArgs={}", - SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, factors.size(), - MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS); - return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + recordDebug("rejected: path=" + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE + + " factorCount=" + factors.size() + " maxDynamicProgrammingArgs=" + + MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS); + return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, + List.copyOf(diagnostics)); } StatePlan result = switch (algorithm) { @@ -93,20 +97,21 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { case GREEDY -> optimizeGreedy(); }; if (result == null) { - logger.debug("Sketch join reorder rejected: path={} factors={}", - SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, describeFactorOrder(indices())); - return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); + recordDebug("rejected: path=" + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE + + " factors=" + describeFactorOrder(indices())); + return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, + List.copyOf(diagnostics)); } List orderedArgs = new ArrayList<>(result.order().size()); for (Integer index : result.order()) { orderedArgs.add(factors.get(index.intValue()).tupleExpr()); } - logger.debug("Sketch join reorder result: order={} estimate={} totalWork={}", - describeExprOrder(orderedArgs), result.estimate().summary(), result.totalWork()); + recordDebug("result: order=" + describeExprOrder(orderedArgs) + " estimate=" + result.estimate().summary() + + " totalWork=" + result.totalWork()); return new PlanOutcome(Optional.of(new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), - result.estimate().outputRows(), result.totalWork())), - SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED); + result.estimate().outputRows(), result.totalWork(), List.copyOf(diagnostics))), + SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, List.copyOf(diagnostics)); } private FactorBuildResult buildFactors(List expressions) { @@ -192,10 +197,9 @@ private StatePlan optimizeGreedy() { for (int i = 0; i < factors.size(); i++) { PlanFactor factor = factors.get(i); double adjustedWorkRows = adjustedWorkRows(i, initiallyBoundVars, factor.estimate().outputRows()); - logger.debug( - "Sketch join reorder greedy seed candidate: factor={} estimate={} adjustedWorkRows={} boundVars={}", - describeFactor(i), factor.estimate().summary(), adjustedWorkRows, - new TreeSet<>(initiallyBoundVars)); + recordDebug("greedy seed candidate: factor=" + describeFactor(i) + " estimate=" + + factor.estimate().summary() + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" + + new TreeSet<>(initiallyBoundVars)); if (adjustedWorkRows < bestSeedWork || adjustedWorkRows == bestSeedWork && (factor.estimate().outputRows() < bestSeedRows @@ -214,8 +218,8 @@ private StatePlan optimizeGreedy() { List order = new ArrayList<>(); order.add(seed); SketchBasedJoinEstimator.TuplePlanEstimate currentEstimate = factors.get(seed).estimate(); - logger.debug("Sketch join reorder greedy seed: chosen={} estimate={} adjustedWorkRows={}", - describeFactor(seed), currentEstimate.summary(), bestSeedWork); + recordDebug("greedy seed: chosen=" + describeFactor(seed) + " estimate=" + currentEstimate.summary() + + " adjustedWorkRows=" + bestSeedWork); while (mask != allMask()) { int bestNext = -1; @@ -233,11 +237,10 @@ private StatePlan optimizeGreedy() { SketchBasedJoinEstimator.JoinStepEstimate step = estimator .estimateJoinStepForJoinOrdering(currentEstimate, candidateFactor.estimate()); double adjustedWorkRows = adjustedWorkRows(candidate, currentBoundVars, step.workRows()); - logger.debug( - "Sketch join reorder greedy candidate: prefixOrder={} candidate={} sharedVar={} step={} adjustedWorkRows={} boundVars={}", - describeFactorOrder(order), describeFactor(candidate), sharedVariable, step.summary(), - adjustedWorkRows, - new TreeSet<>(currentBoundVars)); + recordDebug("greedy candidate: prefixOrder=" + describeFactorOrder(order) + " candidate=" + + describeFactor(candidate) + " sharedVar=" + sharedVariable + " step=" + step.summary() + + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" + + new TreeSet<>(currentBoundVars)); if (adjustedWorkRows < bestAdjustedWorkRows || adjustedWorkRows == bestAdjustedWorkRows && (step.outputRows() < bestStepRows @@ -257,10 +260,10 @@ private StatePlan optimizeGreedy() { totalWork += bestAdjustedWorkRows; order.add(bestNext); currentEstimate = estimator.joinedPlanEstimate(bestStep); - logger.debug( - "Sketch join reorder greedy choose: order={} chosen={} sharedVar={} estimate={} adjustedWorkRows={} totalWork={}", - describeFactorOrder(order), describeFactor(bestNext), bestSharedVar, currentEstimate.summary(), - bestAdjustedWorkRows, totalWork); + recordDebug("greedy choose: order=" + describeFactorOrder(order) + " chosen=" + + describeFactor(bestNext) + " sharedVar=" + bestSharedVar + " estimate=" + + currentEstimate.summary() + " adjustedWorkRows=" + bestAdjustedWorkRows + " totalWork=" + + totalWork); } return new StatePlan(List.copyOf(order), currentEstimate, totalWork); @@ -276,8 +279,8 @@ private StatePlan optimizeDynamicProgramming() { StatePlan seedPlan = new StatePlan(List.of(i), factor.estimate(), adjustedWorkRows); bestByMask.put(bit(i), seedPlan); statesBySize.computeIfAbsent(1, ignored -> new LinkedHashSet<>()).add(bit(i)); - logger.debug("Sketch join reorder dp seed: factor={} estimate={} adjustedWorkRows={}", describeFactor(i), - factor.estimate().summary(), adjustedWorkRows); + recordDebug("dp seed: factor=" + describeFactor(i) + " estimate=" + factor.estimate().summary() + + " adjustedWorkRows=" + adjustedWorkRows); } for (int size = 1; size < factors.size(); size++) { @@ -302,17 +305,15 @@ private StatePlan optimizeDynamicProgramming() { StatePlan candidatePlan = new StatePlan(List.copyOf(nextOrder), estimator.joinedPlanEstimate(step), prefix.totalWork() + adjustedWorkRows); StatePlan incumbent = bestByMask.get(nextMask); - logger.debug( - "Sketch join reorder dp candidate: prefixOrder={} candidate={} sharedVar={} step={} adjustedWorkRows={} totalWork={}", - describeFactorOrder(prefix.order()), describeFactor(candidate), sharedVariable, - step.summary(), - adjustedWorkRows, candidatePlan.totalWork()); + recordDebug("dp candidate: prefixOrder=" + describeFactorOrder(prefix.order()) + " candidate=" + + describeFactor(candidate) + " sharedVar=" + sharedVariable + " step=" + + step.summary() + " adjustedWorkRows=" + adjustedWorkRows + " totalWork=" + + candidatePlan.totalWork()); if (isBetter(candidatePlan, incumbent)) { bestByMask.put(nextMask, candidatePlan); statesBySize.computeIfAbsent(size + 1, ignored -> new LinkedHashSet<>()).add(nextMask); - logger.debug("Sketch join reorder dp choose: order={} estimate={} totalWork={}", - describeFactorOrder(candidatePlan.order()), candidatePlan.estimate().summary(), - candidatePlan.totalWork()); + recordDebug("dp choose: order=" + describeFactorOrder(candidatePlan.order()) + " estimate=" + + candidatePlan.estimate().summary() + " totalWork=" + candidatePlan.totalWork()); } } } @@ -373,12 +374,16 @@ private List indices() { private void logFactorEstimates() { for (int i = 0; i < factors.size(); i++) { PlanFactor factor = factors.get(i); - logger.debug("Sketch join reorder factor[{}]: expr={} estimate={}", i, - describeTupleExpr(factor.tupleExpr()), - factor.estimate().summary()); + recordDebug("factor[" + i + "]: expr=" + describeTupleExpr(factor.tupleExpr()) + " estimate=" + + factor.estimate().summary()); } } + private void recordDebug(String message) { + diagnostics.add(message); + logger.debug("Sketch join reorder {}", message); + } + private String describeFactor(int index) { PlanFactor factor = factors.get(index); return factor.index() + ":" + describeTupleExpr(factor.tupleExpr()); @@ -496,7 +501,8 @@ private static String describeVar(Var var) { } record PlanOutcome(Optional plan, - SketchBasedJoinEstimator.SketchPlannerPath path) { + SketchBasedJoinEstimator.SketchPlannerPath path, + List diagnostics) { } private record PlanFactor(int index, TupleExpr tupleExpr, SketchBasedJoinEstimator.TuplePlanEstimate estimate) { diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java index fb0a54d5b21..f80ad8bb14e 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java @@ -61,6 +61,11 @@ Optional plan(List args, Set PlanningInputs planningInputs = promoteFilterLookupBindings(expressions, bound); List plannedExpressions = planningInputs.expressions(); Set plannedBound = planningInputs.boundVars(); + List inputDiagnostics = new ArrayList<>(); + inputDiagnostics.add("input: algorithm=" + algorithm + " initiallyBoundVars=" + bound + " originalOrder=" + + SketchJoinOrderPlanner.describeExprOrder(expressions) + " promotedPrefixes=" + + SketchJoinOrderPlanner.describeExprOrder(planningInputs.prefixExpressions()) + " plannedOrder=" + + SketchJoinOrderPlanner.describeExprOrder(plannedExpressions) + " plannedBoundVars=" + plannedBound); if (logger.isDebugEnabled()) { logger.debug( "Sketch join reorder input: algorithm={} initiallyBoundVars={} originalOrder={} promotedPrefixes={} plannedOrder={} plannedBoundVars={}", @@ -71,7 +76,7 @@ Optional plan(List args, Set if (plannedExpressions.isEmpty()) { JoinOrderPlanner.JoinOrderPlan plan = new JoinOrderPlanner.JoinOrderPlan(planningInputs.prefixExpressions(), - 0.0d, totalBindingRows(planningInputs.prefixExpressions())); + 0.0d, totalBindingRows(planningInputs.prefixExpressions()), inputDiagnostics); estimator.recordJoinOrderPlannerPath(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED); return Optional.of(plan); } @@ -80,7 +85,8 @@ Optional plan(List args, Set plannedExpressions, plannedBound) .plan(algorithm); estimator.recordJoinOrderPlannerPath(outcome.path()); - return outcome.plan().map(plan -> prependBindingPrefixes(plan, planningInputs.prefixExpressions())); + return outcome.plan() + .map(plan -> prependBindingPrefixes(plan, planningInputs.prefixExpressions(), inputDiagnostics)); } private PlanningInputs promoteFilterLookupBindings(List expressions, Set initiallyBoundVars) { @@ -166,15 +172,26 @@ private String singleBindingName(BindingSetAssignment assignment) { } private JoinOrderPlanner.JoinOrderPlan prependBindingPrefixes(JoinOrderPlanner.JoinOrderPlan plan, - List prefixExpressions) { + List prefixExpressions, List inputDiagnostics) { if (prefixExpressions.isEmpty()) { - return plan; + if (inputDiagnostics.isEmpty()) { + return plan; + } + List diagnostics = new ArrayList<>(inputDiagnostics.size() + plan.getDiagnostics().size()); + diagnostics.addAll(inputDiagnostics); + diagnostics.addAll(plan.getDiagnostics()); + return new JoinOrderPlanner.JoinOrderPlan(plan.getOrderedArgs(), plan.getEstimatedFinalRows(), + plan.getEstimatedTotalWork(), diagnostics); } List orderedArgs = new ArrayList<>(prefixExpressions.size() + plan.getOrderedArgs().size()); orderedArgs.addAll(prefixExpressions); orderedArgs.addAll(plan.getOrderedArgs()); + List diagnostics = new ArrayList<>(inputDiagnostics.size() + plan.getDiagnostics().size() + 1); + diagnostics.addAll(inputDiagnostics); + diagnostics.add("prefix promotion: prefixes=" + SketchJoinOrderPlanner.describeExprOrder(prefixExpressions)); + diagnostics.addAll(plan.getDiagnostics()); return new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), plan.getEstimatedFinalRows(), - plan.getEstimatedTotalWork() + totalBindingRows(prefixExpressions)); + plan.getEstimatedTotalWork() + totalBindingRows(prefixExpressions), diagnostics); } private double totalBindingRows(List prefixExpressions) { diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java index ba976d98337..71349b6ebaf 100644 --- a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java @@ -13,8 +13,8 @@ package org.eclipse.rdf4j.sail.base; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertTrue; +import java.lang.reflect.Method; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -70,7 +70,7 @@ void detachAppender() { } @Test - void debugLoggingExplainsGreedyReorderDecision() { + void debugLoggingExplainsGreedyReorderDecision() throws Exception { StubSailStore store = new StubSailStore(); IRI pA = VF.createIRI("urn:pA"); IRI pB = VF.createIRI("urn:pB"); @@ -90,7 +90,8 @@ void debugLoggingExplainsGreedyReorderDecision() { StatementPattern b = pattern("x", pB, "y"); List args = List.of(a, b); - assertTrue(estimator.planJoinOrder(args, Set.of(), JoinOrderPlanner.Algorithm.GREEDY).isPresent()); + JoinOrderPlanner.JoinOrderPlan plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY).orElseThrow(); String logOutput = listAppender.list.stream() .map(ILoggingEvent::getFormattedMessage) @@ -108,6 +109,18 @@ void debugLoggingExplainsGreedyReorderDecision() { .contains("outputRows=") .contains("workRows=") .contains("SP(?x urn:pB ?y)"); + + assertThat(diagnostics(plan)) + .anySatisfy(line -> assertThat(line).contains("greedy seed")) + .anySatisfy(line -> assertThat(line).contains("greedy candidate")) + .anySatisfy(line -> assertThat(line).contains("greedy choose")) + .anySatisfy(line -> assertThat(line).contains("result: order=")); + } + + @SuppressWarnings("unchecked") + private static List diagnostics(JoinOrderPlanner.JoinOrderPlan plan) throws Exception { + Method method = plan.getClass().getMethod("getDiagnostics"); + return (List) method.invoke(plan); } private static StatementPattern pattern(String subjVar, IRI predicate, String objVar) { diff --git a/testsuites/benchmark-common/src/main/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCapture.java b/testsuites/benchmark-common/src/main/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCapture.java index 1847a8b8809..9a563e57071 100644 --- a/testsuites/benchmark-common/src/main/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCapture.java +++ b/testsuites/benchmark-common/src/main/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCapture.java @@ -49,6 +49,7 @@ import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -290,6 +291,7 @@ public static Map extractDebugMetrics(String explanationJson) { DebugMetricAccumulator accumulator = new DebugMetricAccumulator(); appendDebugSignatures(root, 1, accumulator); + appendOptimizerDebugMetrics(root, metrics); String rootType = readText(root, "type"); String rootTypeNormalized = canonicalizeType(rootType); @@ -407,6 +409,50 @@ public static Map extractDebugMetrics(String explanationJson) { return metrics; } + private static void appendOptimizerDebugMetrics(JsonNode node, Map metrics) { + if (node == null || node.isNull()) { + return; + } + if (node.isArray()) { + for (JsonNode child : node) { + appendOptimizerDebugMetrics(child, metrics); + } + return; + } + if (!node.isObject()) { + return; + } + + node.fields().forEachRemaining(entry -> { + if (TelemetryMetricNames.isOptimizerMetric(entry.getKey())) { + mergeDebugMetric(metrics, entry.getKey(), debugMetricValue(entry.getValue())); + } + appendOptimizerDebugMetrics(entry.getValue(), metrics); + }); + } + + private static String debugMetricValue(JsonNode value) { + if (value == null || value.isNull()) { + return ""; + } + if (value.isValueNode()) { + return value.asText(); + } + return value.toString(); + } + + private static void mergeDebugMetric(Map metrics, String key, String value) { + if (value == null || value.isBlank()) { + return; + } + String existing = metrics.get(key); + if (existing == null || existing.isBlank()) { + metrics.put(key, value); + } else if (!existing.contains(value)) { + metrics.put(key, existing + " | " + value); + } + } + private static void appendIteratorTelemetry(TupleExpr tupleExpr, Map metrics) { if (tupleExpr == null || metrics == null) { return; diff --git a/testsuites/benchmark-common/src/test/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCaptureTest.java b/testsuites/benchmark-common/src/test/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCaptureTest.java index ace031de002..1ecc1a51001 100644 --- a/testsuites/benchmark-common/src/test/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCaptureTest.java +++ b/testsuites/benchmark-common/src/test/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCaptureTest.java @@ -201,6 +201,39 @@ void capturesPlanMetricsFieldsForPerformanceDebugging() throws IOException { assertTrue(snapshot.getMetadata().containsKey("optimizerInput.unoptimizedAnonymousTypeTokenCount")); } + @Test + void capturesOptimizerDiagnosticsInDebugMetrics() { + QueryPlanCapture capture = new QueryPlanCapture(); + String query = "SELECT ?s WHERE { ?s ?p ?o . ?s ?p2 ?o2 }"; + EnumMap explanations = new EnumMap<>(Explanation.Level.class); + for (Explanation.Level level : Explanation.Level.values()) { + TupleExpr tupleExpr = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr(); + if (level == Explanation.Level.Optimized) { + tupleExpr.setRuntimeTelemetryEnabled(true); + tupleExpr.setStringMetricActual("optimizer.strategy", "greedy"); + tupleExpr.setStringMetricActual("optimizer.decisionTrace", + "seed[0] candidate[1] rejected; seed[1] candidate[0] chosen"); + } + explanations.put(level, toExplanation(tupleExpr, level)); + } + + QueryPlanCaptureContext context = QueryPlanCaptureContext.builder() + .outputDirectory(tempDir) + .queryId("optimizer-diagnostics") + .queryString(query) + .benchmark("QueryPlanCaptureTest") + .build(); + + QueryPlanSnapshot snapshot = capture.capture(context, () -> stubTupleQueryFor(explanations)); + QueryPlanExplanation optimized = snapshot.getExplanations().get("optimized"); + assertNotNull(optimized); + assertTrue(optimized.getExplanationJson().contains("optimizer.decisionTrace"), + "Expected optimizer trace in persisted explanation JSON"); + assertEquals("greedy", optimized.getDebugMetrics().get("optimizer.strategy")); + assertEquals("seed[0] candidate[1] rejected; seed[1] candidate[0] chosen", + optimized.getDebugMetrics().get("optimizer.decisionTrace")); + } + @Test void capturesTelemetryLevelIntoTelemetrySnapshotSlot() { QueryPlanCapture capture = new QueryPlanCapture(); @@ -285,6 +318,10 @@ private static TupleQuery stubTupleQueryFor(String query) { explanations.put(level, toExplanation(tupleExpr)); } + return stubTupleQueryFor(explanations); + } + + private static TupleQuery stubTupleQueryFor(EnumMap explanations) { return (TupleQuery) Proxy.newProxyInstance( QueryPlanCaptureTest.class.getClassLoader(), new Class[] { TupleQuery.class }, @@ -303,7 +340,14 @@ private static TupleQuery stubTupleQueryFor(String query) { } private static Explanation toExplanation(TupleExpr tupleExpr) { + return toExplanation(tupleExpr, null); + } + + private static Explanation toExplanation(TupleExpr tupleExpr, Explanation.Level level) { QueryModelTreeToGenericPlanNode converter = new QueryModelTreeToGenericPlanNode(tupleExpr); + if (level != null) { + converter = new QueryModelTreeToGenericPlanNode(tupleExpr, null, level); + } tupleExpr.visit(converter); return new ExplanationImpl(converter.getGenericPlanNode(), false, tupleExpr); } diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-203444424-68d84f6b.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-203444424-68d84f6b.json new file mode 100644 index 00000000000..d842e837496 --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-203444424-68d84f6b.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-04-19T20:34:44.424428Z", + "queryId" : "pharma-q0-after", + "queryString" : "PREFIX pharma: \nPREFIX xsd: \nSELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { \n }\n ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm .\n ?arm pharma:armDrug ?drug ; pharma:hasResult ?result .\n ?result pharma:pValue ?p ; pharma:effectSize ?effect .\n OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) }\n FILTER(?optMarker != )\n FILTER(?p < 0.05 || ?effect > 0.7)\n}", + "unoptimizedFingerprint" : "7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0", + "metadata" : { + "store" : "lmdb", + "theme" : "PHARMA", + "querySource" : "theme-index", + "queryIndex" : "0", + "queryName" : "Pharma: trial drugs for diseases 0-1", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "60aeabe42586de97f294d7e5911bf41646bd3ed2a6c2dff2c462b43569658adc", + "queryString.normalizedWhitespaceSha256" : "d46242e97431d282ec8eab203813f57e57e9ce7a87e41319eb1243a6e54be19d", + "optimizerInput.unoptimizedStructureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "a6db343f08ea7e4e0da41ff4d518ed8502b9bd1c", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "26", + "queryString.charCount" : "667", + "queryString.lineCount" : "12", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.4.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "67", + "optimizerInput.unoptimizedJoinNodeCount" : "8", + "optimizerInput.unoptimizedFilterNodeCount" : "2", + "optimizerInput.unoptimizedStatementPatternCount" : "8", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=8", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "67", + "optimizerOutput.optimizedJoinNodeCount" : "8", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "8", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=7", + "optimizerOutput.optimizedStructureNormalizedSha256" : "4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "67", + "executionPlan.executedJoinNodeCount" : "8", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "8", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "executionPlan.executedStructureNormalizedSha256" : "789a3b7fe9a7c2bab0b585c7e5a2c4ec73685b8f65d996c69676006ba5021fe5", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "a95077f08f1a29217c00a15608753fd5150a3cc73d67d16e098e1de85ce237f0", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedModeledWorkUnits" : "662.0499999999999995", + "executionPlan.executedModeledInputRowsSum" : "412", + "executionPlan.executedModeledOutputRowsSum" : "387", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "304", + "executionPlan.executedModeledJoinOutputRowsSum" : "164", + "executionPlan.executedModeledFilterInputRowsSum" : "44", + "executionPlan.executedModeledFilterOutputRowsSum" : "36", + "executionPlan.executedModeledFilterPassRatio" : "0.818182", + "executionPlan.executedModeledFilterRejectRatio" : "0.181818", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=468;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=164;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=164;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=414;LeftJoinIterator=54", + "executionPlan.executedModeledWorkVector" : "workUnits=662.0499999999999995|barrierCount=4|joinInputRowsSum=304|joinOutputRowsSum=164|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=414;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=468;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "8eb91ff63cce7b4f66f6a2e43de49b8dca4c58e380ac95f67378cbd52565835b", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "0155b0385897431af9626ef9bc0f57475ec17aac5ebbd6cf9d82d81ad3bc19f6", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:414;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "executionPlan.executedEstimateActualComparableNodeCount" : "16", + "executionPlan.executedHasNextCallCountSum" : "409", + "executionPlan.executedHasNextTrueCountSum" : "243", + "executionPlan.executedHasNextTimeNanosSum" : "89918668", + "executionPlan.executedNextCallCountSum" : "242", + "executionPlan.executedNextTimeNanosSum" : "628292", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "280", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "180", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "328", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "1.822222", + "executionPlan.executedJoinTelemetryNodeCount" : "8", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.171429", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "35", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "22.5", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "41", + "executionPlan.executedSourceRowsScannedSum" : "432", + "executionPlan.executedSourceRowsMatchedSum" : "200", + "executionPlan.executedSourceRowsFilteredSum" : "232", + "executionPlan.executedSourceFilterOutRatio" : "0.537037", + "executionPlan.executedHasNextPerNextRatio" : "1.690083", + "executionPlan.executedHasNextTruePerNextRatio" : "1.004132", + "executionPlan.executedEstimateActualQErrorP95" : "160.277777777778", + "executionPlan.executedEstimateActualQErrorMax" : "160.277777777778", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "7", + "executionPlan.executedJoinEstimateActualQErrorP95" : "119.375", + "executionPlan.executedJoinEstimateActualQErrorMax" : "119.375", + "featureFlags.sha256" : "e8bb9b476eb3365edaa7abc5a6f07ad64f79e1508d14bedde30230a29395627f", + "planDeterminism.inputFingerprintSha256" : "4495e141256635cd408a47c45a3d627ae96c9278974ea1b1d61a2144020e36af", + "planDeterminism.environmentFingerprintSha256" : "9d98ea119192435e02b84b33ee90ebd1f24a5133d8989af430effa85ad205e6c", + "execution.runs" : "128", + "execution.resultCount" : "1", + "execution.totalMillis" : "3208", + "execution.averageMillis" : "25", + "execution.minMillis" : "16", + "execution.maxMillis" : "86", + "execution.stdDevMillis" : "13", + "execution.coefficientOfVariationPct" : "51.8795", + "execution.sampleMillis" : "86,56,63,64,44,44,50,66,45,41,40,40,41,34,61,39,36,36,40,37,35,37,34,43,42,38,39,54,18,19,20,19,20,20,19,19,17,18,19,19,21,18,18,18,18,19,18,18,18,18,20,53,17,19,19,19,18,18,18,18,19,19,19,17,18,18,19,19,17,18,19,17,18,17,18,19,18,20,18,17,18,18,17,18,17,18,19,18,18,19,19,19,18,18,16,20,18,17,18,18,17,18,17,17,18,18,17,19,20,19,18,19,19,18,18,18,18,18,18,17,19,17,18,17,17,18,18,18", + "execution.verificationStatus" : "max-runs-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3|b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "false", + "execution.maxRunsReached" : "true" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "PHARMA", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "2", + "cli.executionRepeatMaxRuns" : "128", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "0", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2889358551", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (<)\n │ ║ │ ║ Var (name=p)\n │ ║ │ ║ ValueConstant (value=\"0.05\"^^)\n │ ║ │ ╚══ Compare (>)\n │ ║ │ Var (name=effect)\n │ ║ │ ValueConstant (value=\"0.7\"^^)\n │ ║ └── Filter\n │ ║ ╠══ Compare (!=)\n │ ║ ║ Var (name=optMarker)\n │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ ╚══ LeftJoin\n │ ║ ├── Join [left]\n │ ║ │ ╠══ Join [left]\n │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) [left]\n │ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ │ ║ │ ║ │ ║ o: Var (name=disease)\n │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ │ ║ │ ║ │ o: Var (name=arm)\n │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ s: Var (name=arm)\n │ ║ │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ │ ║ │ ║ o: Var (name=drug)\n │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ s: Var (name=arm)\n │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ │ ║ │ o: Var (name=result)\n │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ s: Var (name=result)\n │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ │ ║ o: Var (name=p)\n │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ s: Var (name=result)\n │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ │ o: Var (name=effect)\n │ ║ └── Extension [right]\n │ ║ ╠══ StatementPattern\n │ ║ ║ s: Var (name=result)\n │ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ ║ o: Var (name=marker)\n │ ║ ╚══ ExtensionElem (optMarker)\n │ ║ Var (name=marker)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\"\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\"\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\"\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\"\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\"\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join\n Join\n Join\n Join\n Join\n Join\n Join\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\n StatementPattern\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n StatementPattern\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFnEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AGAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAccQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAfcQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIHEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AInEAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACoAAAABdwQAAAABcQB+ACl4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGXhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4ALHNxAH4AKgAAAAF3BAAAAAFxAH4AKXhwc3EAfgAwdXEAfgAzAAAAAXNxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABlMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAicQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAZTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIAQAAAAABcQB+AEpzcQB+ADUAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAEAAAAAAXEAfgBJc3EAfgA1AAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF81YTdiNTlmZF91cml0AAdkaXNlYXNlcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgAAAAAAABxAH4AXHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgBAAAAAAFxAH4AW3NxAH4ANQAAAAD/////dAAuaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9zdHVkaWVzRGlzZWFzZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFhxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACBxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF83M2MyZTQwYV91cml0AANhcm1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBmcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAEAAAAAAXEAfgBlc3EAfgA1AAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc0FybXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AANhcm10ABNfY29uc3RfYWVmZDMyNzRfdXJpdAAEZHJ1Z3Bwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAAAAAAAAcQB+AHFwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAQAAAAABcQB+AHBzcQB+ADUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYXJtRHJ1Z3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGxxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4Ab3QAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgB7cHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAEAAAAAAXEAfgB6c3EAfgA1AAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBjNzE5ODlfdXJpdAABcHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIZwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAQAAAAABcQB+AIVzcQB+ADUAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvcFZhbHVlcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHHEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgCEdAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAAAAAAAAcQB+AJBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAQAAAAABcQB+AI9zcQB+ADUAAAAA/////3QAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIxxAH4ACAAAAAAAAHEAfgCEcHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBhNjk3OWFfdXJpdAAGbWFya2VycHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AnHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgBAAAAAAFxAH4Am3NxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXJxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AmnBwc3EAfgAqAAAAAXcEAAAAAXNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbkVsZW31RFrwC9DoKAIAAkwABGV4cHJxAH4AFEwABG5hbWVxAH4AGXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKRxAH4ACAAAAAAAAHQABm1hcmtlcnB0AAlvcHRNYXJrZXJ4cHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHQACW9wdE1hcmtlcnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBMeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Aq3EAfgAIc3EAfgA1AAAAAP////90AC1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Jpb21hcmtlci85OTl+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBUdAACTkVzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHEAfgCqAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AtnEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIAAAAAAAAdAABcHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC3cQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABlMAAhsYW5ndWFnZXEAfgAZeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AVHQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGUwACW5hbWVzcGFjZXEAfgAZTAALc3RyaW5nVmFsdWVxAH4AGXhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cQB+ALJ0AAJMVHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMhxAH4ACAAAAAAAAHQABmVmZmVjdHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDIcQB+AAhzcQB+ALtxAH4AwXEAfgDEdAADMC43cH5xAH4AsnQAAkdUc3EAfgAmdwwAAAAQP0AAAAAAAAB4c3EAfgAqAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAZTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAqAAAAAXcEAAAAAXNxAH4AowAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN5xAH4ACAAAAAAAAHEAfgDbcAFxAH4A1XgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAxxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABlMAA9wcm9qZWN0aW9uQWxpYXNxAH4AGUwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACAFxAH4A1XBzcQB+AKMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgDqcQB+AAhxAH4A6QFzcQB+AOAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAh1cQB+AOMAAAABc3EAfgDlAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIAXEAfgDVcHEAfgDoc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AA54cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+ACoAAAABdwQAAAABcQB+AO54cQB+APNwcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+ABcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD2cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A93EAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APhxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+nEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APtxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD8cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIcHNxAH4AIwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AP5xAH4ACHEAfgAocQB+ACtzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD+cQB+AAhxAH4ARXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BAHEAfgAIAQAAAAABcQB+AEpxAH4ATnNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQBxAH4ACAEAAAAAAXEAfgBJcQB+AFFxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEAcQB+AAgAAAAAAABxAH4ASHBwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD9cQB+AAhxAH4AWXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAAAAAAAAcQB+AFxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAQAAAAABcQB+AFtxAH4AX3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQRxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APxxAH4ACHEAfgBjcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgAAAAAAABxAH4AZnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgBAAAAAAFxAH4AZXEAfgBpcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCHEAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+3EAfgAIcQB+AG1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAAAAAAAAHEAfgBxcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAEAAAAAAXEAfgBwcQB+AHRxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4Ab3BwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD6cQB+AAhxAH4AeHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAAAAAAAAcQB+AHtwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAQAAAAABcQB+AHpxAH4AfnEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARBxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHEAfgCCcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgAAAAAAABxAH4AhnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgBAAAAAAFxAH4AhXEAfgCJcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BFHEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIcQB+AI1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAAAAAAAAHEAfgCQcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAEAAAAAAXEAfgCPcQB+AJNxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEYcQB+AAgAAAAAAABxAH4AhHBwAABzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAhzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEccQB+AAhxAH4AmHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAAAAAAAAcQB+AJxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAQAAAAABcQB+AJtxAH4An3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AR1xAH4ACAAAAAAAAHEAfgCacHBzcQB+ACoAAAABdwQAAAABc3EAfgCjAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHHEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BInEAfgAIAAAAAAAAcQB+AKZwcQB+AKd4cHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACAAAAAAAAHEAfgCtcHNxAH4ArgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACHEAfgCwcQB+ALNzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+AKgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEncQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAgAAAAAAABxAH4AuXBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhxAH4Av3EAfgDGc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BJ3EAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIAAAAAAAAcQB+AMpwc3EAfgCuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIcQB+AMxxAH4AznNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AKgAAAAF3BAAAAAFzcQB+ANIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhxAH4A1XNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATFxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATJxAH4ACAAAAAAAAHEAfgDbcAF4c3EAfgAqAAAAAXcEAAAAAXEAfgDoeHEAfgAIc3EAfgDWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BNXEAfgAIAAAAAAAAcQB+ANtwAXEAfgDVc3EAfgAwcQB+AORw\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=8", + "structureSignatureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "structureSignatureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "joinAlgorithmSignatureSha256" : "03d7a2bdc493d7e3d2a3128c10a7cee6c2b544ef522375622a90b30277354e23", + "actualResultSizesSignatureSha256" : "d5b8cf9ddc61ba8386abf34a7830e54cf6aa27571adc5bc72f2b034926abfa64", + "estimatesSignatureSha256" : "498de055b200842ee050dc5f125412db50c04f878d73336815680b92a32e5c5f", + "joinAlgorithmMultisetSignatureSha256" : "f1261ab4cda229f34c0992b2b0dfc259d4ddedd7fc89eca0cbf33f21c11e2640", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "statementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ef8126388f21fb10c8e3ec78d3298eb9b09d0b60f6f9e370a99f8f84ad9a3e1e", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "c86090ebc22aefaaa8704580c73546de2eeb16e8e133697f9c2eee87105ea728", + "operatorWorkTopContributors" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;ExtensionElem (optMarker)[UNKNOWN]:0;Extension[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=optMarker) (bindingState=bound)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ └── LeftJoin\n │ ║ ╠══ Filter [left]\n │ ║ ║ ├── Or\n │ ║ ║ │ ╠══ Compare (<)\n │ ║ ║ │ ║ Var (name=p) (bindingState=bound)\n │ ║ ║ │ ║ ValueConstant (value=\"0.05\"^^)\n │ ║ ║ │ ╚══ Compare (>)\n │ ║ ║ │ Var (name=effect) (bindingState=bound)\n │ ║ ║ │ ValueConstant (value=\"0.7\"^^)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K)\n │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left]\n │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left]\n │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left]\n │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right]\n │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound)\n │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound)\n │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right]\n │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right]\n │ ║ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound)\n │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right]\n │ ║ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound)\n │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ ║ │ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ ║ ║ │ o: Var (name=drug) (bindingState=unbound)\n │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ ║ s: Var (name=result) (bindingState=bound)\n │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ ║ ║ o: Var (name=p) (bindingState=unbound)\n │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ s: Var (name=result) (bindingState=bound)\n │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ ║ o: Var (name=effect) (bindingState=unbound)\n │ ║ ╚══ Extension [right]\n │ ║ ├── StatementPattern (resultSizeEstimate=2.9K)\n │ ║ │ s: Var (name=result) (bindingState=bound)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ │ o: Var (name=marker) (bindingState=unbound)\n │ ║ └── ExtensionElem (optMarker)\n │ ║ Var (name=marker) (bindingState=bound)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug) (bindingState=bound)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug) (bindingState=unbound)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 3082.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 955.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=3.1K)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=955)\n Join (JoinIterator) (resultSizeEstimate=6.00)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern (resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=3.1K)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=955)\\n Join (JoinIterator) (resultSizeEstimate=6.00)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern (resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"1b53644ac1659b38f6a33a6d431d47bdd3fa7ef178a84af28416274153137aff\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QKgUAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHQADEpvaW5JdGVyYXRvcnNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABxxAH4ACHEAfgAdc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHnEAfgAIcQB+AB1zcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAfcQB+AAhxAH4AHXNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACBxAH4ACHEAfgAdc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9AjdgAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIXEAfgAIcQB+AB1zcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0AYAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAicQB+AAhxAH4AHXNyADRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmRpbmdTZXRBc3NpZ25tZW50N9Z2Fr6OiCMCAAJMAAxiaW5kaW5nTmFtZXNxAH4AEUwAC2JpbmRpbmdTZXRzdAAUTGphdmEvbGFuZy9JdGVyYWJsZTt4cQB+AAMAAAAAAAAAAQAAAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////z/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAjcQB+AAhzcgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACoAAAABdwQAAAABcQB+ACl4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4ALHNxAH4AKgAAAAF3BAAAAAFxAH4AKXhwc3EAfgAwdXEAfgAzAAAAAXNxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABhMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAUAkp+nLijSR////////////////////////////////AP///////////////////////////////////////////////////////////////0CN2AAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAjcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfNWE3YjU5ZmRfdXJpcQB+AClwcHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhckBD7rL6/vDHAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AGEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAAAAAAAAHEAfgApcHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAEAAAAAAXEAfgBJc3EAfgA1AAAAAAAAACB0AC5odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL3N0dWRpZXNEaXNlYXNlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAE/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9AjdgAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AInEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgBIdAATX2NvbnN0X2Y1ZTU1ODVhX3VyaXQAE19jb25zdF80Nzk1YmJmYl91cmlwcHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFVxAH4ACAEAAAAAAXEAfgBZc3EAfgA1AAAAAAAAACB0AC1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL0NsaW5pY2FsVHJpYWxzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBVcQB+AAgBAAAAAAFxAH4AWHNxAH4ANQAAAAD/////dAAvaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVxAH4AUnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBVcQB+AAgAAAAAAABxAH4ASHBwAABzcQB+AD8AAAAAAAAAAUAx62kpsACw////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAhcQB+AAhzcQB+AEN1cQB+AEYAAAADcQB+AEh0ABNfY29uc3RfNzNjMmU0MGFfdXJpdAADYXJtcHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBhcQB+AAgAAAAAAABxAH4AZXBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBhcQB+AAgBAAAAAAFxAH4AZHNxAH4ANQAAAAAAAAAgdAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9oYXNBcm1xAH4AUnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBhcQB+AAgAAAAAAABxAH4ASHBwAABzcQB+AD8AAAAAAAAAAUAx62kpsACw////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAgcQB+AAhzcQB+AEN1cQB+AEYAAAADcQB+AGV0ABNfY29uc3RfNjBmNmQ3YWZfdXJpdAAGcmVzdWx0cHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBrcQB+AAgAAAAAAABxAH4Ab3BzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBrcQB+AAgBAAAAAAFxAH4AbnNxAH4ANQAAAAAAAAAgdAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9oYXNSZXN1bHRxAH4AUnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBrcQB+AAgAAAAAAABxAH4AZXBwAABzcQB+AD8AAAAAAAAAAUBK4R2+iAEI////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAfcQB+AAhzcQB+AEN1cQB+AEYAAAADcQB+AGV0ABNfY29uc3RfYWVmZDMyNzRfdXJpdAAEZHJ1Z3Bwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AdXEAfgAIAAAAAAAAcQB+AHlwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AdXEAfgAIAQAAAAABcQB+AHhzcQB+ADUAAAAAAAAAIHQAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYXJtRHJ1Z3EAfgBScHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHVxAH4ACAAAAAAAAHEAfgBlcHAAAHNxAH4APwAAAAAAAAABQErhHb6IAQj///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4Ab3QAE19jb25zdF84MGM3MTk4OV91cml0AAFwcHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgAAAAAAABxAH4Ag3BzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgBAAAAAAFxAH4AgnNxAH4ANQAAAAAAAAAgdAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9wVmFsdWVxAH4AUnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgAAAAAAABxAH4Ab3BwAABzcQB+AD8AAAAAAAAAAUBK4R2+iAEI////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAccQB+AAhzcQB+AEN1cQB+AEYAAAADcQB+AG90ABNfY29uc3RfNjk5OWZiZGFfdXJpdAAGZWZmZWN0cHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCJcQB+AAgAAAAAAABxAH4AjXBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCJcQB+AAgBAAAAAAFxAH4AjHNxAH4ANQAAAAAAAAAgdAAqaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9lZmZlY3RTaXplcQB+AFJwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAAAAAAAAcQB+AG9wcAAAc3IAIm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuT3LR5OXLpGEC7wIAAHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVZhbHVlT3BlcmF0b3IKCpD35AAGagIAAkwAB2xlZnRBcmdxAH4AFEwACHJpZ2h0QXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAacQB+AAhzcgAnb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlb7VwlredKfoCAAFMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0NvbXBhcmUkQ29tcGFyZU9wO3hxAH4AlAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJVxAH4ACHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJhxAH4ACAAAAAAAAHEAfgCDcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AEt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCYcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABhMAAhsYW5ndWFnZXEAfgAYeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AUXQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGEwACW5hbWVzcGFjZXEAfgAYTAALc3RyaW5nVmFsdWVxAH4AGHhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBRdAACTFRzcQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCVcQB+AAhzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgAAAAAAABxAH4AjXBzcQB+AJoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAhzcQB+AJxxAH4AonEAfgCldAADMC43cH5xAH4Ap3QAAkdUc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsXEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgBvdAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnBwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+ALZwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAQAAAAABcQB+ALVzcQB+ADUAAAAAAAAAIHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AFJwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+AG9wcHNxAH4AKgAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABh4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCxcQB+AAhzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC+cQB+AAgAAAAAAABxAH4AtnB0AAlvcHRNYXJrZXJ4cHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgDAcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACHNxAH4ANQAAAAD/////dAAtaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXIvOTk5fnEAfgCndAACTkVzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hTZXTYbNdald0qHgIAAHhxAH4AJ3cMAAAAED9AAAAAAAAAeHNxAH4AKgAAAAF3BAAAAAFzcgApb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cEVsZW0cE1B2XvCgegIAAkwABG5hbWVxAH4AGEwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQWdncmVnYXRlT3BlcmF0b3I7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AEnEAfgAIdAAFY291bnRzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db3VudMMbpEw2mjeAAgAAeHIAOW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RBZ2dyZWdhdGVPcGVyYXRvcje77Y0bQTG9AgABWgAIZGlzdGluY3R4cgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5VbmFyeVZhbHVlT3BlcmF0b3KlmC9zIRViuAIAAUwAA2FyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AzXEAfgAIc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0nEAfgAIAAAAAAAAcQB+AHlwAXhzcQB+ACoAAAABdwQAAAABc3EAfgC9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIAAAAAAAAcQB+AHlwAXEAfgDOeAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2nEAfgAIAXEAfgDOcHNxAH4AvQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AOJxAH4ACHEAfgDhAXNxAH4A2AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACHVxAH4A2wAAAAFzcQB+AN0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDkcQB+AAgBcQB+AM5wcQB+AOBzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AKgAAAAF3BAAAAAFxAH4A5nhxAH4A63BxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOxxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO1xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO5xAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDvcQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8HEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDycQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APRxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhwc3EAfgAkAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9nEAfgAIc3EAfgDIdwwAAAACP0AAAAAAAAFxAH4AKXhxAH4AK3NxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHEAfgBYcQB+AFlwcHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACAEAAAAAAXEAfgBZcQB+AFtzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAgBAAAAAAFxAH4AWHEAfgBecQB+AFJwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+XEAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9XEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgBIcQB+AEl0AAdkaXNlYXNlcHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4BAnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4ASXEAfgBOcQB+AFJwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9HEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgBIcQB+AGRxAH4AZXBwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAAAAAAAAcQB+AGVwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAQAAAAABcQB+AGRxAH4AaHEAfgBScHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APNxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AANhcm1xAH4AeHEAfgB5cHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4AeXBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgBAAAAAAFxAH4AeHEAfgB8cQB+AFJwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BDHEAfgAIAAAAAAAAcQB+AQ9wcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8nEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgEPcQB+AG5xAH4Ab3Bwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAAAAAAAAcQB+AG9wc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAQAAAAABcQB+AG5xAH4AcnEAfgBScHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARNxAH4ACAAAAAAAAHEAfgEPcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHRxAH4AgnQAAXBwcHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAAAAAAAAHEAfgEdcHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAEAAAAAAXEAfgCCcQB+AIZxAH4AUnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEZcQB+AAgAAAAAAABxAH4BHHBwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDwcQB+AAhzcQB+AEN1cQB+AEYAAAADcQB+ARxxAH4AjHQABmVmZmVjdHBwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAAAAAAAAcQB+ASRwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAQAAAAABcQB+AIxxAH4AkHEAfgBScHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASFxAH4ACAAAAAAAAHEAfgEccHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AShxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHRxAH4AtXEAfgC2cHBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgAAAAAAABxAH4AtnBzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgBAAAAAAFxAH4AtXEAfgC5cQB+AFJwc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BKXEAfgAIAAAAAAAAcQB+ASxwcHNxAH4AKgAAAAF3BAAAAAFzcQB+AL0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgExcQB+AAgAAAAAAAB0AAZtYXJrZXJwdAAJb3B0TWFya2VyeHBzcQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDucQB+AAhzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAgAAAAAAABxAH4AwHBzcQB+AJoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAhxAH4AxHEAfgDGc3EAfgCTAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7XEAfgAIc3EAfgCWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOHEAfgAIc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIAAAAAAAAcQB+AINwc3EAfgCaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIcQB+AKBxAH4AqHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AThxAH4ACHNxAH4ASgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACAAAAAAAAHEAfgCNcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACHEAfgCtcQB+AK9zcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+ACoAAAABdwQAAAABc3EAfgDLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIcQB+AM5zcQB+AM8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFCcQB+AAhzcQB+AEoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFDcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAqAAAAAXcEAAAAAXEAfgDgeHEAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A4HEAfgAIc3EAfgBKAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BR3EAfgAIAAAAAAAAcQB+AUVwAXEAfgDOc3EAfgAwcQB+ANxw\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?arm ?drug .\n ?result ?p .\n ?result ?effect .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=7", + "structureSignatureRawSha256" : "4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3", + "structureSignatureNormalizedSha256" : "4af226fd8322bd3e8e2ef927dd5ea28f3acde20dd97dc6417b87e49cc62e94a3", + "joinAlgorithmSignatureSha256" : "4199069fdd57777a83c3a096e5ef30506e5f314f0a08e86c94df3a8ffbef3174", + "actualResultSizesSignatureSha256" : "f2b5af2e40e3c5fe7275ad99116eb02a3def522dd9b718a4b510a0a8dbee89e6", + "estimatesSignatureSha256" : "80d7f2eeaa4be34a35ec805782e3f835a568a82d76862b1b52f9a2d4fbe7b7c3", + "joinAlgorithmMultisetSignatureSha256" : "c8e859f2621c395ee698ca39815245bc13a43ba048d347833b6adff93b7c998b", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "b0ebc61e5a20a0a8f57b1a9097ec5adc966ec0c97cad3fe23c66fbb638dacf39", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "63640.2", + "modeledInputRowsSum" : "41523", + "modeledOutputRowsSum" : "34804", + "modeledJoinInputRowsSum" : "28837", + "modeledJoinOutputRowsSum" : "15583", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.2;filter=0;group=0;join=44420;projection=0;scan=19220;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=2886;filter=3082;group=0;join=16335;projection=0;scan=19220;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "3e884f04ed4daeb77c52f4888b883d1390224c6c9631ccdddf305fa10009bd38", + "modeledOutputRowsByCategory" : "distinct=0;extension=1;filter=0;group=0;join=15583;projection=0;scan=19220;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "c72964819c6e1aac1b36809f5f6f3508c66a60b228f6daaca37dee5ad5815d71", + "modeledFilterInputRowsSum" : "3082", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "1", + "modeledJoinWorkByAlgorithm" : "JoinIterator=44420;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "03c23cd808ec44a6b4f4a628d3c25143c4fc35157a26cfba96daefa4c874005b", + "modeledWorkVector" : "workUnits=63640.2|barrierCount=4|joinInputRowsSum=28837|joinOutputRowsSum=15583|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=44420;UNKNOWN=0|categories=distinct=0;extension=0.2;filter=0;group=0;join=44420;projection=0;scan=19220;unknown=0", + "modeledWorkVectorSignatureSha256" : "776b8f10d5c3872a6d5cc4e809606a0536582fc8fa57944220fd0fad51249b6d", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=2885|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=3082|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=44420|inputRows=16335|outputRows=15583|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=19220|inputRows=19220|outputRows=19220|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "d674233c59333772c32c0f45ab53d4e6b9202171dbbf1ebb90420882df0baeba", + "operatorWorkTopContributors" : "Join[JoinIterator]:44420;StatementPattern[UNKNOWN]:19220;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.2;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "34804", + "resultSizeEstimateMax" : "3082", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.1M, nextCallCountActual=1, nextTimeNanosActual=13.4K, firstRowTimeNanosActual=14.2M, openCountActual=1, lastRowTimeNanosActual=14.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.1M, avgNextNanosActual=13.4K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.1M, nextCallCountActual=1, nextTimeNanosActual=4.3K, firstRowTimeNanosActual=14.2M, openCountActual=1, lastRowTimeNanosActual=14.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.1M, avgNextNanosActual=4.3K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.1M, nextCallCountActual=1, nextTimeNanosActual=791, aggregateEvalCountActual=18, firstRowTimeNanosActual=14.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=14.3M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.1M, avgNextNanosActual=791)\n │ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=11.0M, nextCallCountActual=18, nextTimeNanosActual=5.0K, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, firstRowTimeNanosActual=2.8M, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=12.1M, closeCountActual=1, exprEvalTimeNanosActual=355.5K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=552.5K, avgNextNanosActual=278, filterRejectRateActual=0)\n │ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=233.9K, hasNextFalseCountActual=0)\n │ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=3.2K, hasNextFalseCountActual=0)\n │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=10.5M, nextCallCountActual=18, nextTimeNanosActual=3.9K, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=2.6M, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=11.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=557.0K, avgNextNanosActual=220, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0)\n │ ║ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=8.8M, nextCallCountActual=18, nextTimeNanosActual=7.4K, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, firstRowTimeNanosActual=2.5M, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=11.2M, closeCountActual=1, exprEvalTimeNanosActual=2.3M, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=464.8K, avgNextNanosActual=414, filterRejectRateActual=0.31) [left]\n │ ║ ║ ├── Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0)\n │ ║ ║ │ ╠══ Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ ValueConstant (value=\"0.05\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0)\n │ ║ ║ │ ╚══ Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=233.2K, hasNextFalseCountActual=0)\n │ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ValueConstant (value=\"0.7\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0K, hasNextFalseCountActual=0)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26)\n │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=26, inputRowsActual=34, rowsDroppedActual=8, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=18, stddevActual=4.21, confidenceScoreActual=0.28, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=8, inputRowsActual=16, rowsDroppedActual=8, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=3.5K, stddevActual=59, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=8) [left]\n │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=8, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=8, inputRowsActual=10, rowsDroppedActual=2, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=3.4K, stddevActual=59, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=8, avgRightRowsPerLeftActual=4.00, joinOutputPerLeftActual=4.00) [left]\n │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=16.8K, nextCallCountActual=2, nextTimeNanosActual=3.8K, firstRowTimeNanosActual=180.4K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=11.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=5.6K, avgNextNanosActual=1.9K) [left]\n │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=231.0K, nextCallCountActual=8, nextTimeNanosActual=104.9K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, firstRowTimeNanosActual=32.1K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=3.5M, closeCountActual=2, varsAddedActual=3, indexName=ospc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=23.1K, avgNextNanosActual=13.1K, indexHitRateActual=0.09) [right]\n │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=217.7K, nextCallCountActual=8, nextTimeNanosActual=18.8K, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, firstRowTimeNanosActual=20.1K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=733.6K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=13.6K, avgNextNanosActual=2.4K, indexHitRateActual=0.50) [right]\n │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=211.2K, nextCallCountActual=26, nextTimeNanosActual=72.7K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, firstRowTimeNanosActual=12.5K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=698.7K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=6.2K, avgNextNanosActual=2.8K, indexHitRateActual=0.76) [right]\n │ ║ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=371.0K, nextCallCountActual=26, nextTimeNanosActual=62.1K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=11.7K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=191.2K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.1K, avgNextNanosActual=2.4K, indexHitRateActual=0.50) [right]\n │ ║ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=217.2K, nextCallCountActual=26, nextTimeNanosActual=57.2K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=8.7K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=161.4K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.2K, avgNextNanosActual=2.2K, indexHitRateActual=0.50) [right]\n │ ║ ║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ║ └── StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=227.0K, nextCallCountActual=26, nextTimeNanosActual=49.7K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=6.5K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=137.6K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.4K, avgNextNanosActual=1.9K, indexHitRateActual=0.50) [right]\n │ ║ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=212.8K, nextCallCountActual=26, nextTimeNanosActual=53.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=5.6K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=117.5K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.1K, avgNextNanosActual=2.1K, indexHitRateActual=0.50) [right]\n │ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=774.9K, nextCallCountActual=18, nextTimeNanosActual=108.6K, firstRowTimeNanosActual=11.3K, openCountActual=18, lastRowTimeNanosActual=57.3K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=21.5K, avgNextNanosActual=6.0K) [right]\n │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=236.7K, nextCallCountActual=18, nextTimeNanosActual=47.5K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, firstRowTimeNanosActual=10.5K, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=47.7K, closeCountActual=18, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.6K, avgNextNanosActual=2.6K, indexHitRateActual=0.50)\n │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0)\n │ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 14189458,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 13417,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 14225791,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 14324750,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 14183917,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 4333,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 14235667,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 14332750,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 14173458,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 791,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 18,\n \"firstRowTimeNanosActual\" : 14236875,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 14328417,\n \"maxGroupSizeActual\" : 18,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 18.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 20,\n \"hasNextTrueCountActual\" : 19,\n \"hasNextTimeNanosActual\" : 11050498,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 5000,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 2810417,\n \"exprEvalCountActual\" : 18,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 12195333,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 355462.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18,\n \"exprTrueCountActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 233874.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 3208.0\n }\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 19,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 10582707,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 3956,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 2647042,\n \"leftRowsWithMatchActual\" : 18,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 11536500,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 19,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 8831584,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 7460,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 26,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 2582750,\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 11277959,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2251747.0\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 18,\n \"shortCircuitCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2064040.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 12,\n \"exprTrueCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1766254.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2191875.0\n }\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 12,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 4\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 233168.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 5000.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 3082.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 16834,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 3834,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 180417,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 11004750,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern [index: ospc] \",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 231001,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 104959,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 94,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 86,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 32167,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 3521375,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"ospc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=disease)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 16,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 217708,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 18833,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 16,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 20125,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 733667,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 34,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 211212,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 72792,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 34,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 12583,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 698708,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 371081,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 62165,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 11792,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 191209,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 217247,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 57292,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8791,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 161458,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 227086,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 49793,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 6542,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 137667,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 212836,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 53832,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 5666,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 117500,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 774957,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 108667,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 11375,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 57333,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 236751,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 47585,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 36,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 18,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 10541,\n \"indexLookupCountActual\" : 18,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 47708,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n Filter (resultSizeActual=18)\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\n Filter (resultSizeActual=18)\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8.00)\n Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=8.00)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension (resultSizeActual=18)\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n Filter (resultSizeActual=18)\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\\n Filter (resultSizeActual=18)\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8.00)\\n Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=8.00)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension (resultSizeActual=18)\\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"60fcbdb0e0db3938fc170875ed0ed889a4d3a1c05eff989479660b7a0bbfc9b3\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAA2Ib9AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA1DwAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAADZD7Z0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAAANqBV3hwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAANiDkgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAANGkAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAANkRf3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAANqUDnhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAANht7QAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEO0AAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAANk4E3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAANqzTnhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAANhFEgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAxcAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQDIAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAABJxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAANk8y3QAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAA2qJhdAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnQAK0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1ZhbHVlRXhwcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAABQAAAAAAKieAgAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAE4gAAAAAAAAAEr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAEv//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAAXZXhwckV2YWxUaW1lTmFub3NBY3R1YWxzcQB+ACdBFbIYAAAAAHhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3EAfgArcQB+AA9zcQB+AAwAAAAAACriMXQAE2V4cHJFdmFsQ291bnRBY3R1YWxxAH4AK3QAFGV4cHJGYWxzZUNvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAB0ABlwcmVkaWNhdGVFcnJvckNvdW50QWN0dWFscQB+ADpxAH4AEnEAfgAOdAATZXhwclRydWVDb3VudEFjdHVhbHEAfgArcQB+ABNzcQB+AAwAAAAAALoWBXEAfgARcQB+AA54cQB+ACRxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AMXhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAATAAAAAACherMAAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAA90AAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAoZAJ0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHEAfgArcQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAACwCHRxAH4AEXEAfgAOdAAZbWF4UmlnaHRSb3dzUGVyTGVmdEFjdHVhbHEAfgAOeHEAfgAycQB+AAh0ABBMZWZ0Sm9pbkl0ZXJhdG9yc3EAfgAwAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAATAAAAAACGwmAAAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAB0kAAAAAAAAABK/8AAAAAAAAAAAAAAAAAAACAAAAAAAAAASAAAAAAAAABr//////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQUEt8YAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAJcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAnaN5xAH4AOHNxAH4ADAAAAAAAAAAacQB+ADlzcQB+AAwAAAAAAAAACHEAfgA7cQB+ADpxAH4AEnEAfgAOcQB+ADxxAH4AK3EAfgATc3EAfgAMAAAAAACsFodxAH4AEXEAfgAOeHEAfgBBcQB+AAhzcgAkb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Kb2lulFnVr1+JugQCAAJaAAljYWNoZWFibGVaAAltZXJnZUpvaW54cQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAGv////////////////////8AAAAAAAAAGkCoFAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBIcQB+AAh0AAxKb2luSXRlcmF0b3JzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAGv////////////////////8AAAAAAAAAGkCmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBRcQB+AAhxAH4AUnNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAa/////////////////////wAAAAAAAAAaQKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFNxAH4ACHEAfgBSc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABr/////////////////////AAAAAAAAABpApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AVHEAfgAIcQB+AFJzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAAAAAAAAAAABoAAAAAAAAACP////////////////////8AAAAAAAAAGkCmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBVcQB+AAhxAH4AUnNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAI/////////////////////wAAAAAAAAAIQI3YAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFZxAH4ACHEAfgBSc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAL/////////////////////AAAAAAAAAAhAGAAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AV3EAfgAIcQB+AFJzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ACNMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAQcIAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA76AAAAAAAAAAI/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAAAAAnEAfgAPc3EAfgAMAAAAAAACwMFxAH4AEXEAfgAOcQB+ABJxAH4ADnQAFmJpbmRpbmdzUHJvdmlkZWRBY3R1YWxxAH4AXXEAfgATc3EAfgAMAAAAAACn6054cQB+AFhxAH4ACHNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAAAXQAB2Rpc2Vhc2V4c3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAJ3BAAAAAJzcgArb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuaW1wbC5MaXN0QmluZGluZ1NldNelYuv0tawhAgADTAAMYmluZGluZ05hbWVzcQB+AB1MABRiaW5kaW5nTmFtZXNTZXRDYWNoZXEAfgAjTAAGdmFsdWVzcQB+AB14cgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuQWJzdHJhY3RCaW5kaW5nU2V02//Sk443PUACAAB4cHNxAH4AZAAAAAF3BAAAAAFxAH4AY3hwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAmb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVJUkmaRSpDk2ZGbgIAAkkADGxvY2FsTmFtZUlkeEwACWlyaVN0cmluZ3EAfgBAeHIAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RJUklsPw86B5HwlgIAAUkADmNhY2hlZEhhc2hDb2RleHAAAAAAAAAAKHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZGlzZWFzZS8wc3EAfgBmc3EAfgBkAAAAAXcEAAAAAXEAfgBjeHBzcQB+AGp1cQB+AG0AAAABc3EAfgBvAAAAAAAAACh0AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMXhzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ACNMAApjb250ZXh0VmFycQB+ABdMAAlpbmRleE5hbWVxAH4AQEwACW9iamVjdFZhcnEAfgAXTAAMcHJlZGljYXRlVmFycQB+ABdMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AF0wAB3Zhckxpc3RxAH4AHXhxAH4AAwAAAAAAAAABQCSn6cuKNJEAAAAAAAAACgAAAAAAA4ZZAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAACAAAAAAAAAAgAAAAAAAGZ/wAAAAAAAAAIQI3YAAAAAAAAAAAAAAAAAFYAAAAAAAAACAAAAAAAAABe//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AE5xAH4AD3NxAH4ADAAAAAAAAH2ndAAWaW5kZXhMb29rdXBDb3VudEFjdHVhbHEAfgBdcQB+ABFxAH4AXXEAfgAScQB+AF1xAH4AE3NxAH4ADAAAAAAANbtfeHEAfgBYcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfNWE3YjU5ZmRfdXJpcQB+AGNwdAAEb3NwY3NyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhckBD7rL6/vDHAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AQEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHxxAH4ACAAAAAAAAHEAfgBjcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHxxAH4ACAEAAAAAAXEAfgCHc3EAfgBvAAAAAP////90AC5odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL3N0dWRpZXNEaXNlYXNlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfHEAfgAIAAAAAAAAcQB+AIZwcAAAc3EAfgB5AAAAAAAAAAE/8AAAAAAAAAAAAAAAAAAQAAAAAAADUmwAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAEmRAAAAAAAAAAhAjdgAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAABD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4ATnEAfgAPc3EAfgAMAAAAAAAATp1xAH4Af3EAfgBOcQB+ABFxAH4ATnEAfgAScQB+AE5xAH4AE3NxAH4ADAAAAAAACzHjeHEAfgBXcQB+AAhzcQB+AIF1cQB+AIQAAAADcQB+AIZ0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXB0AARzcG9jc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlHEAfgAIAQAAAAABcQB+AJtzcQB+AG8AAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAEAAAAAAXEAfgCac3EAfgBvAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZXEAfgCRcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJRxAH4ACAAAAAAAAHEAfgCGcHAAAHNxAH4AeQAAAAAAAAABQDHraSmwALAAAAAAAAAAIgAAAAAAAzkMAAAAAAAAABoAAAAAAAAAAAgAAAAAAAAAGgAAAAAAAAAIAAAAAAAAABoAAAAAAAEcWAAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAAAgAAAAAAAAAGgAAAAAAAAAi//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AE1xAH4AD3NxAH4ADAAAAAAAADEncQB+AH9xAH4ATnEAfgARcQB+AE5xAH4AEnEAfgBOcQB+ABNzcQB+AAwAAAAAAAqpVHhxAH4AVnEAfgAIc3EAfgCBdXEAfgCEAAAAA3EAfgCGdAATX2NvbnN0XzczYzJlNDBhX3VyaXQAA2FybXB0AARzcG9jc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ApHEAfgAIAAAAAAAAcQB+AKtwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ApHEAfgAIAQAAAAABcQB+AKpzcQB+AG8AAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvaGFzQXJtcQB+AJFwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ApHEAfgAIAAAAAAAAcQB+AIZwcAAAc3EAfgB5AAAAAAAAAAFAMetpKbAAsAAAAAAAAAA0AAAAAAAFqYkAAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAAPLVAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4ATXEAfgAPc3EAfgAMAAAAAAAALhBxAH4Af3EAfgBNcQB+ABFxAH4ATXEAfgAScQB+AE1xAH4AE3NxAH4ADAAAAAAAAurpeHEAfgBVcQB+AAhzcQB+AIF1cQB+AIQAAAADcQB+AKt0ABNfY29uc3RfNjBmNmQ3YWZfdXJpdAAGcmVzdWx0cHQABHNwb2NzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgAAAAAAABxAH4AuXBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgBAAAAAAFxAH4AuHNxAH4AbwAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9oYXNSZXN1bHRxAH4AkXBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCycQB+AAgAAAAAAABxAH4Aq3BwAABzcQB+AHkAAAAAAAAAAUBK4R2+iAEIAAAAAAAAADQAAAAAAANQnwAAAAAAAAAaAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAAAAaAAAAAAAA38wAAAAAAAAAGkCmigAAAAAAAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAANP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3EAfgBNcQB+AA9zcQB+AAwAAAAAAAAiV3EAfgB/cQB+AE1xAH4AEXEAfgBNcQB+ABJxAH4ATXEAfgATc3EAfgAMAAAAAAACdrJ4cQB+AFRxAH4ACHNxAH4AgXVxAH4AhAAAAANxAH4Aq3QAE19jb25zdF9hZWZkMzI3NF91cml0AARkcnVncHQABHNwb2NzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDAcQB+AAgAAAAAAABxAH4Ax3BzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDAcQB+AAgBAAAAAAFxAH4AxnNxAH4AbwAAAAD/////dAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9hcm1EcnVncQB+AJFwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AwHEAfgAIAAAAAAAAcQB+AKtwcAAAc3EAfgB5AAAAAAAAAAFASuEdvogBCAAAAAAAAAA0AAAAAAADdw4AAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAAMKBAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4ATXEAfgAPc3EAfgAMAAAAAAAAGY5xAH4Af3EAfgBNcQB+ABFxAH4ATXEAfgAScQB+AE1xAH4AE3NxAH4ADAAAAAAAAhnDeHEAfgBTcQB+AAhzcQB+AIF1cQB+AIQAAAADcQB+ALl0ABNfY29uc3RfODBjNzE5ODlfdXJpdAABcHB0AARzcG9jc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAAAAAAAAcQB+ANVwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAQAAAAABcQB+ANRzcQB+AG8AAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvcFZhbHVlcQB+AJFwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAAAAAAAAcQB+ALlwcAAAc3EAfgB5AAAAAAAAAAFASuEdvogBCAAAAAAAAAA0AAAAAAADP2QAAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAANJIAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4ATXEAfgAPc3EAfgAMAAAAAAAAFiJxAH4Af3EAfgBNcQB+ABFxAH4ATXEAfgAScQB+AE1xAH4AE3NxAH4ADAAAAAAAAcr8eHEAfgBRcQB+AAhzcQB+AIF1cQB+AIQAAAADcQB+ALl0ABNfY29uc3RfNjk5OWZiZGFfdXJpdAAGZWZmZWN0cHQABHNwb2NzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDccQB+AAgAAAAAAABxAH4A43BzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDccQB+AAgBAAAAAAFxAH4A4nNxAH4AbwAAAAD/////dAAqaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9lZmZlY3RTaXplcQB+AJFwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3HEAfgAIAAAAAAAAcQB+ALlwcAAAc3IAIm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuT3LR5OXLpGEC7wIAAHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVZhbHVlT3BlcmF0b3IKCpD35AAGagIAAkwAB2xlZnRBcmdxAH4AMUwACHJpZ2h0QXJncQB+ADF4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBP36oAAAAAHhzcQB+AAk/QAAAAAAABncIAAAACAAAAAR0ABdzaG9ydENpcmN1aXRDb3VudEFjdHVhbHNxAH4ADAAAAAAAAAAOcQB+ADhxAH4ATXEAfgA5cQB+AE5xAH4APHEAfgAreHEAfgBIcQB+AAhzcgAnb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlb7VwlredKfoCAAFMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0NvbXBhcmUkQ29tcGFyZU9wO3hxAH4A6wAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0E6824AAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAA3EAfgA4cQB+AE1xAH4AOXNxAH4ADAAAAAAAAAAMcQB+ADxxAH4A8XhxAH4A7HEAfgAIc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9HEAfgAIAAAAAAAAcQB+ANVwc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFsdWVDb25zdGFudDY0XwF1yivGAgABTAAFdmFsdWVxAH4AinhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0FAuQGAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+AA5xAH4APHEAfgAOeHEAfgD0cQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+AEBMAAhsYW5ndWFnZXEAfgBAeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AkHQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AQEwACW5hbWVzcGFjZXEAfgBATAALc3RyaW5nVmFsdWVxAH4AQHhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgCQdAACTFRzcQB+APIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBDHaAAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4AOHEAfgD4cQB+ADlxAH4ATnEAfgA8c3EAfgAMAAAAAAAAAAR4cQB+AOxxAH4ACHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ1xAH4ACAAAAAAAAHEAfgDjcHNxAH4A+gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0CziAAAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+AA5xAH4APHEAfgAOeHEAfgENcQB+AAhzcQB+AP9xAH4BBXEAfgEIdAADMC43cH5xAH4BCnQAAkdUc3EAfgAcAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAkAAAAAAAL0y0AAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAah7AAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAFcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAALG9xAH4AEXEAfgArcQB+ABJxAH4AK3EAfgATc3EAfgAMAAAAAAAA3/V4cQB+AEFxAH4ACHNxAH4AeQAAAAAAAAABv/AAAAAAAAAAAAAAAAAAJAAAAAAAA5zPAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAC54QAAAAAAAAASQKaKAAAAAAAAAAAAAAAAABIAAAAAAAAAEgAAAAAAAAAk//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ACtxAH4AD3NxAH4ADAAAAAAAACktcQB+AH9xAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAAC6XHhxAH4BG3EAfgAIc3EAfgCBdXEAfgCEAAAAA3EAfgC5dAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnB0AARzcG9jc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ASZwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAQAAAAABcQB+ASVzcQB+AG8AAAAA/////3QAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AJFwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ALlwcHNxAH4AZAAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+AEB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEbcQB+AAhzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEvcQB+AAgAAAAAAABxAH4BJnB0AAlvcHRNYXJrZXJ4cHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0EMjJAAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+ACtxAH4APHEAfgAreHEAfgAycQB+AAhzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEycQB+AAgAAAAAAABxAH4BMXBzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdAqRAAAAAAAHhzcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AOHEAfgAOeHEAfgEycQB+AAhzcQB+AG8AAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VyLzk5OX5xAH4BCnQAAk5Fc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cQB+AGF3DAAAABA/QAAAAAAAAHhzcQB+AGQAAAABdwQAAAABc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXBFbGVtHBNQdl7woHoCAAJMAARuYW1lcQB+AEBMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0FnZ3JlZ2F0ZU9wZXJhdG9yO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACRxAH4ACHQABWNvdW50c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ291bnTDG6RMNpo3gAIAAHhyADlvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkFic3RyYWN0QWdncmVnYXRlT3BlcmF0b3I3u+2NG0ExvQIAAVoACGRpc3RpbmN0eHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlWYWx1ZU9wZXJhdG9ypZgvcyEVYrgCAAFMAANhcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AURxAH4ACHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUlxAH4ACAAAAAAAAHEAfgDHcAF4c3EAfgBkAAAAAXcEAAAAAXNxAH4BLgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUxxAH4ACHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AU1xAH4ACAAAAAAAAHEAfgDHcAFxAH4BRXgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4AHXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABhxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+AEBMAA9wcm9qZWN0aW9uQWxpYXNxAH4AQEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVFxAH4ACAFxAH4BRXBzcQB+AS4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgFZcQB+AAhxAH4BWAFzcQB+AU8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAh1cQB+AVIAAAABc3EAfgFUAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAXEAfgFFcHEAfgFXc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AB14cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+AGQAAAABdwQAAAABcQB+AV14cQB+AWJwcQB+AAhzcQB+ACIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFYcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFjcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFkcQB+AAhzcQB+AD4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFlcQB+AAhwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZnEAfgAIcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWdxAH4ACHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaXEAfgAIcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACHBzcQB+AFAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFrcQB+AAhwc3EAfgBQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BbHEAfgAIcHNxAH4AWQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AW1xAH4ACHNxAH4BP3cMAAAAAj9AAAAAAAABcQB+AGN4cQB+AGVzcQB+AHkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFtcQB+AAhzcQB+AIF1cQB+AIQAAAADcQB+AIZxAH4AmnEAfgCbcHBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFwcQB+AAgBAAAAAAFxAH4Am3EAfgCec3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcHEAfgAIAQAAAAABcQB+AJpxAH4AoXEAfgCRcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXBxAH4ACAAAAAAAAHEAfgCGcHAAAHNxAH4AeQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWxxAH4ACHNxAH4AgXVxAH4AhAAAAANxAH4AhnEAfgCHdAAHZGlzZWFzZXBwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAAAAAAAAcQB+AXlwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAQAAAAABcQB+AIdxAH4AjXEAfgCRcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXZxAH4ACAAAAAAAAHEAfgCGcHAAAHNxAH4AeQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWtxAH4ACHNxAH4AgXVxAH4AhAAAAANxAH4AhnEAfgCqcQB+AKtwcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAAAAAAAAHEAfgCrcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAEAAAAAAXEAfgCqcQB+AK9xAH4AkXBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF9cQB+AAgAAAAAAABxAH4AhnBwAABzcQB+AHkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAhzcQB+AIF1cQB+AIQAAAADdAADYXJtcQB+AMZxAH4Ax3Bwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAAAAAAAAcQB+AMdwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAQAAAAABcQB+AMZxAH4Ay3EAfgCRcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYNxAH4ACAAAAAAAAHEAfgGGcHAAAHNxAH4AeQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AgXVxAH4AhAAAAANxAH4BhnEAfgC4cQB+ALlwcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHEAfgC5cHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAEAAAAAAXEAfgC4cQB+AL1xAH4AkXBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGKcQB+AAgAAAAAAABxAH4BhnBwAABzcQB+AHkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhzcQB+AIF1cQB+AIQAAAADdAAGcmVzdWx0cQB+ANR0AAFwcHBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgAAAAAAABxAH4BlHBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgBAAAAAAFxAH4A1HEAfgDZcQB+AJFwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BkHEAfgAIAAAAAAAAcQB+AZNwcAAAc3EAfgB5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZ3EAfgAIc3EAfgCBdXEAfgCEAAAAA3EAfgGTcQB+AOJ0AAZlZmZlY3RwcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAAAAAAAAHEAfgGbcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAEAAAAAAXEAfgDicQB+AOdxAH4AkXBzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGYcQB+AAgAAAAAAABxAH4Bk3BwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFmcQB+AAhzcQB+AHkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGfcQB+AAhzcQB+AIF1cQB+AIQAAAADdAAGcmVzdWx0cQB+ASVxAH4BJnBwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAAAAAAAAcQB+ASZwc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAQAAAAABcQB+ASVxAH4BKnEAfgCRcHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AaBxAH4ACAAAAAAAAHEAfgGjcHBzcQB+AGQAAAABdwQAAAABc3EAfgEuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bn3EAfgAIc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BqHEAfgAIAAAAAAAAdAAGbWFya2VycHQACW9wdE1hcmtlcnhwc3EAfgDyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZXEAfgAIc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIAAAAAAAAcQB+ATFwc3EAfgD6AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIcQB+ATtxAH4BPXNxAH4A6gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWRxAH4ACHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Aa9xAH4ACHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACAAAAAAAAHEAfgDVcHNxAH4A+gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACHEAfgEDcQB+AQtzcQB+APIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGvcQB+AAhzcQB+AIkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAgAAAAAAABxAH4A43BzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAhxAH4BF3EAfgEZc3IAEWphdmEudXRpbC5Db2xsU2VyV46rtjobqBEDAAFJAAN0YWd4cAAAAAJ3BAAAAAB4c3EAfgBkAAAAAXcEAAAAAXNxAH4BQgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWNxAH4ACHEAfgFFc3EAfgFGAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BuXEAfgAIc3EAfgCJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BunEAfgAIAAAAAAAAdAAEZHJ1Z3ABeHNxAH4AZAAAAAF3BAAAAAFxAH4BV3hxAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVdxAH4ACHNxAH4AiQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Ab5xAH4ACAAAAAAAAHEAfgG8cAFxAH4BRXNxAH4AanEAfgFTcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?arm ?drug .\n ?result ?p .\n ?result ?effect .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "structureSignatureRawSha256" : "789a3b7fe9a7c2bab0b585c7e5a2c4ec73685b8f65d996c69676006ba5021fe5", + "structureSignatureNormalizedSha256" : "789a3b7fe9a7c2bab0b585c7e5a2c4ec73685b8f65d996c69676006ba5021fe5", + "joinAlgorithmSignatureSha256" : "46533941422b732f96a9ef8d0cf95c500dacff6111571342a20834cd755f2584", + "actualResultSizesSignatureSha256" : "b37e9340f08f483ec16bb7d6d9ed86760bf198d9b5c30a62ce787186962d7af8", + "estimatesSignatureSha256" : "058b1e47de1b077ed35051cb649d776f40090e3da770f50684e65acf248986e9", + "joinAlgorithmMultisetSignatureSha256" : "af0a118c0eeef597b3b2bf40840b2241af5c3399d027e0f5aadf3654e49897b3", + "actualResultSizesMultisetSignatureSha256" : "e36af2b75237ac1debe73978708d049b1724d29538b1bacdbbe12bc0a06b85d5", + "estimatesMultisetSignatureSha256" : "a95077f08f1a29217c00a15608753fd5150a3cc73d67d16e098e1de85ce237f0", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "662.0499999999999995", + "modeledInputRowsSum" : "412", + "modeledOutputRowsSum" : "387", + "modeledJoinInputRowsSum" : "304", + "modeledJoinOutputRowsSum" : "164", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=468;projection=0.05;scan=164;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=164;projection=1;scan=164;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "d6df931857972e3eff2d805dc639e80277b215442dd83ce207d53b3fce268e28", + "modeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=164;projection=1;scan=164;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "2d0966192ea7e537a68381bdc2653ab2dec04a6719e5c718afe2bb23002a0b83", + "modeledFilterInputRowsSum" : "44", + "modeledFilterOutputRowsSum" : "36", + "modeledFilterPassRatio" : "0.818182", + "modeledFilterRejectRatio" : "0.181818", + "modeledJoinWorkByAlgorithm" : "JoinIterator=414;LeftJoinIterator=54", + "modeledJoinWorkByAlgorithmSignatureSha256" : "c4ca43371ba292d5c677917132ee19c2f5880c8da9aa5e127a8e3cc112fc2f24", + "modeledWorkVector" : "workUnits=662.0499999999999995|barrierCount=4|joinInputRowsSum=304|joinOutputRowsSum=164|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=414;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=468;projection=0.05;scan=164;unknown=0", + "modeledWorkVectorSignatureSha256" : "8eb91ff63cce7b4f66f6a2e43de49b8dca4c58e380ac95f67378cbd52565835b", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=3.8|inputRows=19|outputRows=19|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=13.1999999999999995|inputRows=44|outputRows=36|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=12.6|inputRows=18|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=414|inputRows=146|outputRows=146|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=54|inputRows=18|outputRows=18|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: ospc] [UNKNOWN]|nodes=1|workUnits=8|inputRows=8|outputRows=8|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: spoc] [UNKNOWN]|nodes=7|workUnits=156|inputRows=156|outputRows=156|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "0155b0385897431af9626ef9bc0f57475ec17aac5ebbd6cf9d82d81ad3bc19f6", + "operatorWorkTopContributors" : "Join[JoinIterator]:414;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "estimateActualComparableNodeCount" : "16", + "estimateActualAbsErrorSum" : "34498", + "estimateActualRelativeErrorMean" : "101.39656784188", + "estimateActualQErrorP50" : "110.961538461538", + "estimateActualQErrorP95" : "160.277777777778", + "estimateActualQErrorMax" : "160.277777777778", + "joinEstimateActualComparableNodeCount" : "7", + "joinEstimateActualQErrorP50" : "110.961538461538", + "joinEstimateActualQErrorP95" : "119.375", + "joinEstimateActualQErrorMax" : "119.375", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "34804", + "resultSizeEstimateMax" : "3082", + "resultSizeActualSum" : "387", + "resultSizeActualMax" : "26", + "modeledHasNextCallCountSum" : "409", + "modeledHasNextTrueCountSum" : "243", + "modeledHasNextTimeNanosSum" : "89918668", + "modeledNextCallCountSum" : "242", + "modeledNextTimeNanosSum" : "628292", + "modeledJoinRightIteratorCreateCountSum" : "280", + "modeledJoinLeftBindingSetConsumedCountSum" : "180", + "modeledJoinRightBindingSetConsumedCountSum" : "328", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "1.822222", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.171429", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "35", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "22.5", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "41", + "modeledSourceRowsScannedSum" : "432", + "modeledSourceRowsMatchedSum" : "200", + "modeledSourceRowsFilteredSum" : "232", + "modeledSourceFilterOutRatio" : "0.537037", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "89.918668", + "modeledNextTimeMillisSum" : "0.628292", + "modeledHasNextPerNextRatio" : "1.690083", + "modeledHasNextTruePerNextRatio" : "1.004132" + } + } + } +} \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-anchor-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-212848893-2a586cc5.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-anchor-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-212848893-2a586cc5.json new file mode 100644 index 00000000000..7b4174fef85 --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-anchor-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-212848893-2a586cc5.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-04-19T21:28:48.893054Z", + "queryId" : "pharma-q0-after-anchor", + "queryString" : "PREFIX pharma: \nPREFIX xsd: \nSELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { \n }\n ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm .\n ?arm pharma:armDrug ?drug ; pharma:hasResult ?result .\n ?result pharma:pValue ?p ; pharma:effectSize ?effect .\n OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) }\n FILTER(?optMarker != )\n FILTER(?p < 0.05 || ?effect > 0.7)\n}", + "unoptimizedFingerprint" : "7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0", + "metadata" : { + "store" : "lmdb", + "theme" : "PHARMA", + "querySource" : "theme-index", + "queryIndex" : "0", + "queryName" : "Pharma: trial drugs for diseases 0-1", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "60aeabe42586de97f294d7e5911bf41646bd3ed2a6c2dff2c462b43569658adc", + "queryString.normalizedWhitespaceSha256" : "d46242e97431d282ec8eab203813f57e57e9ce7a87e41319eb1243a6e54be19d", + "optimizerInput.unoptimizedStructureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "a6db343f08ea7e4e0da41ff4d518ed8502b9bd1c", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "26", + "queryString.charCount" : "667", + "queryString.lineCount" : "12", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.4.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "67", + "optimizerInput.unoptimizedJoinNodeCount" : "8", + "optimizerInput.unoptimizedFilterNodeCount" : "2", + "optimizerInput.unoptimizedStatementPatternCount" : "8", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=8", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "67", + "optimizerOutput.optimizedJoinNodeCount" : "8", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "8", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=7", + "optimizerOutput.optimizedStructureNormalizedSha256" : "ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "67", + "executionPlan.executedJoinNodeCount" : "8", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "8", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "executionPlan.executedStructureNormalizedSha256" : "ddbaae262b3610ead2e1078dc39a1c9b8a2b365504fd4d8eaad57e3777aa754d", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "ddddb26aab5325301cf80f13b39d58bf76cff418d2aaf16b02c0a933a8b192c3", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedModeledWorkUnits" : "654.0499999999999995", + "executionPlan.executedModeledInputRowsSum" : "408", + "executionPlan.executedModeledOutputRowsSum" : "383", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "300", + "executionPlan.executedModeledJoinOutputRowsSum" : "160", + "executionPlan.executedModeledFilterInputRowsSum" : "44", + "executionPlan.executedModeledFilterOutputRowsSum" : "36", + "executionPlan.executedModeledFilterPassRatio" : "0.818182", + "executionPlan.executedModeledFilterRejectRatio" : "0.181818", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=460;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=160;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=160;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=406;LeftJoinIterator=54", + "executionPlan.executedModeledWorkVector" : "workUnits=654.0499999999999995|barrierCount=4|joinInputRowsSum=300|joinOutputRowsSum=160|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=406;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=460;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "746948d9c96012d5a27bc1145e4b11e6835f809dff24ad5bd5c6ef6217010917", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "316921cef851f5fc4fd73f64219a4d727786cfeadfd20cc92a4c8e2aa1ccec86", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:406;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "executionPlan.executedEstimateActualComparableNodeCount" : "16", + "executionPlan.executedHasNextCallCountSum" : "434", + "executionPlan.executedHasNextTrueCountSum" : "243", + "executionPlan.executedHasNextTimeNanosSum" : "91409290", + "executionPlan.executedNextCallCountSum" : "242", + "executionPlan.executedNextTimeNanosSum" : "627716", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "140", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "350", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "124", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "0.354286", + "executionPlan.executedJoinTelemetryNodeCount" : "8", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "0.885714", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "17.5", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "43.75", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "15.5", + "executionPlan.executedSourceRowsScannedSum" : "432", + "executionPlan.executedSourceRowsMatchedSum" : "200", + "executionPlan.executedSourceRowsFilteredSum" : "232", + "executionPlan.executedSourceFilterOutRatio" : "0.537037", + "executionPlan.executedHasNextPerNextRatio" : "1.793388", + "executionPlan.executedHasNextTruePerNextRatio" : "1.004132", + "executionPlan.executedEstimateActualQErrorP95" : "3749987924740033333.333333333333", + "executionPlan.executedEstimateActualQErrorMax" : "3749987924740033333.333333333333", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "7", + "executionPlan.executedJoinEstimateActualQErrorP95" : "3749987924740033333.333333333333", + "executionPlan.executedJoinEstimateActualQErrorMax" : "3749987924740033333.333333333333", + "featureFlags.sha256" : "acc04d878713f98f79486b315c214a9125b548a25462e28a3bafc177fea8494b", + "planDeterminism.inputFingerprintSha256" : "7660656b319b5f6ce97a281b59b81aa62b06d9e27f43df84ac6a9f352d7232ba", + "planDeterminism.environmentFingerprintSha256" : "fbd1a40ac4edf3cadb877c5f1b5ac2e7862bb4fc5fe5b0d4c8d5a2849db0b2fa", + "execution.runs" : "5", + "execution.resultCount" : "1", + "execution.totalMillis" : "557", + "execution.averageMillis" : "111", + "execution.minMillis" : "96", + "execution.maxMillis" : "121", + "execution.stdDevMillis" : "9", + "execution.coefficientOfVariationPct" : "8.4358", + "execution.sampleMillis" : "117,121,105,117,96", + "execution.verificationStatus" : "max-runs-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3|519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3|519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3|519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3|519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3|519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3|519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "false", + "execution.maxRunsReached" : "true" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "PHARMA", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "3", + "cli.executionRepeatMaxRuns" : "5", + "cli.executionRepeatSoftLimitMillis" : "2000", + "cli.queryIndex" : "0", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2889358551", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (<)\n │ ║ │ ║ Var (name=p)\n │ ║ │ ║ ValueConstant (value=\"0.05\"^^)\n │ ║ │ ╚══ Compare (>)\n │ ║ │ Var (name=effect)\n │ ║ │ ValueConstant (value=\"0.7\"^^)\n │ ║ └── Filter\n │ ║ ╠══ Compare (!=)\n │ ║ ║ Var (name=optMarker)\n │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ ╚══ LeftJoin\n │ ║ ├── Join [left]\n │ ║ │ ╠══ Join [left]\n │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) [left]\n │ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ │ ║ │ ║ │ ║ o: Var (name=disease)\n │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ │ ║ │ ║ │ o: Var (name=arm)\n │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ s: Var (name=arm)\n │ ║ │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ │ ║ │ ║ o: Var (name=drug)\n │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ s: Var (name=arm)\n │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ │ ║ │ o: Var (name=result)\n │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ s: Var (name=result)\n │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ │ ║ o: Var (name=p)\n │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ s: Var (name=result)\n │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ │ o: Var (name=effect)\n │ ║ └── Extension [right]\n │ ║ ╠══ StatementPattern\n │ ║ ║ s: Var (name=result)\n │ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ ║ o: Var (name=marker)\n │ ║ ╚══ ExtensionElem (optMarker)\n │ ║ Var (name=marker)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\"\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\"\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\"\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\"\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\"\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join\n Join\n Join\n Join\n Join\n Join\n Join\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\n StatementPattern\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n StatementPattern\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFnEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AGAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAccQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAfcQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIHEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AInEAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACoAAAABdwQAAAABcQB+ACl4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGXhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4ALHNxAH4AKgAAAAF3BAAAAAFxAH4AKXhwc3EAfgAwdXEAfgAzAAAAAXNxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABlMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAicQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAZTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIAQAAAAABcQB+AEpzcQB+ADUAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAEAAAAAAXEAfgBJc3EAfgA1AAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF81YTdiNTlmZF91cml0AAdkaXNlYXNlcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgAAAAAAABxAH4AXHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgBAAAAAAFxAH4AW3NxAH4ANQAAAAD/////dAAuaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9zdHVkaWVzRGlzZWFzZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFhxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACBxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF83M2MyZTQwYV91cml0AANhcm1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBmcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAEAAAAAAXEAfgBlc3EAfgA1AAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc0FybXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AANhcm10ABNfY29uc3RfYWVmZDMyNzRfdXJpdAAEZHJ1Z3Bwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAAAAAAAAcQB+AHFwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAQAAAAABcQB+AHBzcQB+ADUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYXJtRHJ1Z3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGxxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4Ab3QAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgB7cHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAEAAAAAAXEAfgB6c3EAfgA1AAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBjNzE5ODlfdXJpdAABcHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIZwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAQAAAAABcQB+AIVzcQB+ADUAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvcFZhbHVlcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHHEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgCEdAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAAAAAAAAcQB+AJBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAQAAAAABcQB+AI9zcQB+ADUAAAAA/////3QAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIxxAH4ACAAAAAAAAHEAfgCEcHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBhNjk3OWFfdXJpdAAGbWFya2VycHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AnHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgBAAAAAAFxAH4Am3NxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXJxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AmnBwc3EAfgAqAAAAAXcEAAAAAXNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbkVsZW31RFrwC9DoKAIAAkwABGV4cHJxAH4AFEwABG5hbWVxAH4AGXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKRxAH4ACAAAAAAAAHQABm1hcmtlcnB0AAlvcHRNYXJrZXJ4cHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHQACW9wdE1hcmtlcnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBMeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Aq3EAfgAIc3EAfgA1AAAAAP////90AC1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Jpb21hcmtlci85OTl+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBUdAACTkVzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHEAfgCqAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AtnEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIAAAAAAAAdAABcHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC3cQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABlMAAhsYW5ndWFnZXEAfgAZeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AVHQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGUwACW5hbWVzcGFjZXEAfgAZTAALc3RyaW5nVmFsdWVxAH4AGXhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cQB+ALJ0AAJMVHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMhxAH4ACAAAAAAAAHQABmVmZmVjdHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDIcQB+AAhzcQB+ALtxAH4AwXEAfgDEdAADMC43cH5xAH4AsnQAAkdUc3EAfgAmdwwAAAAQP0AAAAAAAAB4c3EAfgAqAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAZTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAqAAAAAXcEAAAAAXNxAH4AowAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN5xAH4ACAAAAAAAAHEAfgDbcAFxAH4A1XgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAxxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABlMAA9wcm9qZWN0aW9uQWxpYXNxAH4AGUwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACAFxAH4A1XBzcQB+AKMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgDqcQB+AAhxAH4A6QFzcQB+AOAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAh1cQB+AOMAAAABc3EAfgDlAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIAXEAfgDVcHEAfgDoc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AA54cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+ACoAAAABdwQAAAABcQB+AO54cQB+APNwcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+ABcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD2cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A93EAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APhxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+nEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APtxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD8cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIcHNxAH4AIwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AP5xAH4ACHEAfgAocQB+ACtzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD+cQB+AAhxAH4ARXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BAHEAfgAIAQAAAAABcQB+AEpxAH4ATnNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQBxAH4ACAEAAAAAAXEAfgBJcQB+AFFxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEAcQB+AAgAAAAAAABxAH4ASHBwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD9cQB+AAhxAH4AWXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAAAAAAAAcQB+AFxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAQAAAAABcQB+AFtxAH4AX3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQRxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APxxAH4ACHEAfgBjcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgAAAAAAABxAH4AZnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgBAAAAAAFxAH4AZXEAfgBpcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCHEAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+3EAfgAIcQB+AG1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAAAAAAAAHEAfgBxcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAEAAAAAAXEAfgBwcQB+AHRxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4Ab3BwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD6cQB+AAhxAH4AeHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAAAAAAAAcQB+AHtwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAQAAAAABcQB+AHpxAH4AfnEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARBxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHEAfgCCcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgAAAAAAABxAH4AhnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgBAAAAAAFxAH4AhXEAfgCJcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BFHEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIcQB+AI1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAAAAAAAAHEAfgCQcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAEAAAAAAXEAfgCPcQB+AJNxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEYcQB+AAgAAAAAAABxAH4AhHBwAABzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAhzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEccQB+AAhxAH4AmHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAAAAAAAAcQB+AJxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAQAAAAABcQB+AJtxAH4An3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AR1xAH4ACAAAAAAAAHEAfgCacHBzcQB+ACoAAAABdwQAAAABc3EAfgCjAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHHEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BInEAfgAIAAAAAAAAcQB+AKZwcQB+AKd4cHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACAAAAAAAAHEAfgCtcHNxAH4ArgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACHEAfgCwcQB+ALNzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+AKgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEncQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAgAAAAAAABxAH4AuXBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhxAH4Av3EAfgDGc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BJ3EAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIAAAAAAAAcQB+AMpwc3EAfgCuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIcQB+AMxxAH4AznNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AKgAAAAF3BAAAAAFzcQB+ANIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhxAH4A1XNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATFxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATJxAH4ACAAAAAAAAHEAfgDbcAF4c3EAfgAqAAAAAXcEAAAAAXEAfgDoeHEAfgAIc3EAfgDWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BNXEAfgAIAAAAAAAAcQB+ANtwAXEAfgDVc3EAfgAwcQB+AORw\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=8", + "structureSignatureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "structureSignatureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "joinAlgorithmSignatureSha256" : "03d7a2bdc493d7e3d2a3128c10a7cee6c2b544ef522375622a90b30277354e23", + "actualResultSizesSignatureSha256" : "d5b8cf9ddc61ba8386abf34a7830e54cf6aa27571adc5bc72f2b034926abfa64", + "estimatesSignatureSha256" : "498de055b200842ee050dc5f125412db50c04f878d73336815680b92a32e5c5f", + "joinAlgorithmMultisetSignatureSha256" : "f1261ab4cda229f34c0992b2b0dfc259d4ddedd7fc89eca0cbf33f21c11e2640", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "statementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ef8126388f21fb10c8e3ec78d3298eb9b09d0b60f6f9e370a99f8f84ad9a3e1e", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "c86090ebc22aefaaa8704580c73546de2eeb16e8e133697f9c2eee87105ea728", + "operatorWorkTopContributors" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;ExtensionElem (optMarker)[UNKNOWN]:0;Extension[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=optMarker) (bindingState=bound)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ └── LeftJoin\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M) [left]\n │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left]\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M) [right]\n │ ║ ║ ╠══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound)\n │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ ║ ║ o: Var (name=disease) (bindingState=bound)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=7.06804006757E10M) [right]\n │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [left]\n │ ║ ║ │ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=7.40108908E7M) [right]\n │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=25653.7M) [right]\n │ ║ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ ║ │ o: Var (name=result) (bindingState=unbound)\n │ ║ ║ └── Filter [right]\n │ ║ ║ ╠══ Or\n │ ║ ║ ║ ├── Compare (<)\n │ ║ ║ ║ │ Var (name=p) (bindingState=bound)\n │ ║ ║ ║ │ ValueConstant (value=\"0.05\"^^)\n │ ║ ║ ║ └── Compare (>)\n │ ║ ║ ║ Var (name=effect) (bindingState=bound)\n │ ║ ║ ║ ValueConstant (value=\"0.7\"^^)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=24012.5M)\n │ ║ ║ ├── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ s: Var (name=result) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ ║ │ o: Var (name=p) (bindingState=unbound)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.3M) [right]\n │ ║ ║ ╠══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ s: Var (name=result) (bindingState=bound)\n │ ║ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ ║ ║ o: Var (name=effect) (bindingState=unbound)\n │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ ║ o: Var (name=drug) (bindingState=unbound)\n │ ║ ╚══ Extension [right]\n │ ║ ├── StatementPattern (resultSizeEstimate=2.9K)\n │ ║ │ s: Var (name=result) (bindingState=bound)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ │ o: Var (name=marker) (bindingState=unbound)\n │ ║ └── ExtensionElem (optMarker)\n │ ║ Var (name=marker) (bindingState=bound)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug) (bindingState=bound)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug) (bindingState=unbound)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.74997826453206E19,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.74997826453206E19,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.0680400675728376E16,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.4010890759925E13,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2.5653688305E10,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2.4012504125E10,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 8323225.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M)\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n Join (JoinIterator) (resultSizeEstimate=7.06804006757E10M)\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n Join (JoinIterator) (resultSizeEstimate=7.40108908E7M)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n Join (JoinIterator) (resultSizeEstimate=25653.7M)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=24012.5M)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n Join (JoinIterator) (resultSizeEstimate=8.3M)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n Extension\n StatementPattern (resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M)\\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n Join (JoinIterator) (resultSizeEstimate=7.06804006757E10M)\\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n Join (JoinIterator) (resultSizeEstimate=7.40108908E7M)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n Join (JoinIterator) (resultSizeEstimate=25653.7M)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=24012.5M)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n Join (JoinIterator) (resultSizeEstimate=8.3M)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n Extension\\n StatementPattern (resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"ed141704eb9e8e587440075ea78a9d44769798e63babd59895b09c70be1e4b08\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////RA1F+zV+c0oA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHQADEpvaW5JdGVyYXRvcnNyADRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmRpbmdTZXRBc3NpZ25tZW50N9Z2Fr6OiCMCAAJMAAxiaW5kaW5nTmFtZXNxAH4AEUwAC2JpbmRpbmdTZXRzdAAUTGphdmEvbGFuZy9JdGVyYWJsZTt4cQB+AAMAAAAAAAAAAQAAAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////z/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAbcQB+AAhzcgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACMAAAABdwQAAAABcQB+ACJ4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4AJXNxAH4AIwAAAAF3BAAAAAFxAH4AInhwc3EAfgApdXEAfgAsAAAAAXNxAH4ALgAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9EDUX7NX5zSgD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIcQB+ABxzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AGEwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABQCSn6cuKNJH///////////////////////////////8A////////////////////////////////////////////////////////////////QI3YAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADhxAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAV0cmlhbHQAE19jb25zdF81YTdiNTlmZF91cmlxAH4AInBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAYTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4APHEAfgAIAAAAAAAAcQB+ACJwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4APHEAfgAIAQAAAAABcQB+AENzcQB+AC4AAAAAAAAAIHQALmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvc3R1ZGllc0Rpc2Vhc2V+cgA2b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAQREVGQVVMVF9DT05URVhUU3BzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA8cQB+AAgAAAAAAABxAH4AQnBwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9Db2NuZdt9fwD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AOHEAfgAIcQB+ABxzcQB+ADkAAAAAAAAAAT/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0CN2AAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBPcQB+AAhzcQB+AD11cQB+AEAAAAADcQB+AEJ0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AUHEAfgAIAQAAAAABcQB+AFRzcQB+AC4AAAAAAAAAIHQALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFBxAH4ACAEAAAAAAXEAfgBTc3EAfgAuAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZXEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFBxAH4ACAAAAAAAAHEAfgBCcHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0LQ1AA2m71AAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBPcQB+AAhxAH4AHHNxAH4AOQAAAAAAAAABQDHraSmwALD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFxxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AQnQAE19jb25zdF83M2MyZTQwYV91cml0AANhcm1wcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBhcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAEAAAAAAXEAfgBgc3EAfgAuAAAAAAAAACB0ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc0FybXEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBCcHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0IX5FDfxAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBccQB+AAhxAH4AHHNxAH4AOQAAAAAAAAABQDHraSmwALD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AYXQAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGhxAH4ACAAAAAAAAHEAfgBscHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGhxAH4ACAEAAAAAAXEAfgBrc3EAfgAuAAAAAAAAACB0AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGhxAH4ACAAAAAAAAHEAfgBhcHBzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBncQB+AAhzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0IWXQbw9AAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBycQB+AAhxAH4AHHNxAH4AOQAAAAAAAAABQErhHb6IAQj///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHNxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AbHQAE19jb25zdF84MGM3MTk4OV91cml0AAFwcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB0cQB+AAgAAAAAAABxAH4AeHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB0cQB+AAgBAAAAAAFxAH4Ad3NxAH4ALgAAAAAAAAAgdAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9wVmFsdWVxAH4ATHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB0cQB+AAgAAAAAAABxAH4AbHBwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9BX8AmQAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIcQB+ABxzcQB+ADkAAAAAAAAAAUBK4R2+iAEI////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB+cQB+AAhzcQB+AD11cQB+AEAAAAADcQB+AGx0ABNfY29uc3RfNjk5OWZiZGFfdXJpdAAGZWZmZWN0cHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgAAAAAAABxAH4Ag3BzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgBAAAAAAFxAH4AgnNxAH4ALgAAAAAAAAAgdAAqaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9lZmZlY3RTaXplcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Af3EAfgAIAAAAAAAAcQB+AGxwcHNxAH4AOQAAAAAAAAABQErhHb6IAQj///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH5xAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AYXQAE19jb25zdF9hZWZkMzI3NF91cml0AARkcnVncHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCJcQB+AAgAAAAAAABxAH4AjXBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCJcQB+AAgBAAAAAAFxAH4AjHNxAH4ALgAAAAAAAAAgdAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9hcm1EcnVncQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAAAAAAAAcQB+AGFwcAAAAABzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHJxAH4ACHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHEAfgCUAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlXEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmHEAfgAIAAAAAAAAcQB+AHhwc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFsdWVDb25zdGFudDY0XwF1yivGAgABTAAFdmFsdWVxAH4ARXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJhxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AGEwACGxhbmd1YWdlcQB+ABh4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHEAfgBLdAAHREVDSU1BTHNyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkludGVybmVkSVJJAllGAIULdQcDAARJAAhoYXNoQ29kZUwACWxvY2FsTmFtZXEAfgAYTAAJbmFtZXNwYWNlcQB+ABhMAAtzdHJpbmdWYWx1ZXEAfgAYeHB3MEcAjSoAIWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIwAHZGVjaW1hbHh0AAQwLjA1cH5yADFvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmUkQ29tcGFyZU9wAAAAAAAAAAASAAB4cQB+AEt0AAJMVHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJVxAH4ACHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKpxAH4ACAAAAAAAAHEAfgCDcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKpxAH4ACHNxAH4AnHEAfgCicQB+AKV0AAMwLjdwfnEAfgCndAACR1QAAAAAAAAAAAAAc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsXEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBsdAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+ALZwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAQAAAAABcQB+ALVzcQB+AC4AAAAAAAAAIHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+AGxwcHNxAH4AIwAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABh4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCxcQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC+cQB+AAgAAAAAAABxAH4AtnB0AAlvcHRNYXJrZXJ4cHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgDAcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACHNxAH4ALgAAAAD/////dAAtaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXIvOTk5fnEAfgCndAACTkVzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hTZXTYbNdald0qHgIAAHhxAH4AIHcMAAAAED9AAAAAAAAAeHNxAH4AIwAAAAF3BAAAAAFzcgApb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cEVsZW0cE1B2XvCgegIAAkwABG5hbWVxAH4AGEwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQWdncmVnYXRlT3BlcmF0b3I7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AEnEAfgAIdAAFY291bnRzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db3VudMMbpEw2mjeAAgAAeHIAOW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RBZ2dyZWdhdGVPcGVyYXRvcje77Y0bQTG9AgABWgAIZGlzdGluY3R4cgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5VbmFyeVZhbHVlT3BlcmF0b3KlmC9zIRViuAIAAUwAA2FyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AzXEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0nEAfgAIAAAAAAAAcQB+AI1wAXhzcQB+ACMAAAABdwQAAAABc3EAfgC9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIAAAAAAAAcQB+AI1wAXEAfgDOeAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2nEAfgAIAXEAfgDOcHNxAH4AvQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AOJxAH4ACHEAfgDhAXNxAH4A2AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACHVxAH4A2wAAAAFzcQB+AN0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDkcQB+AAgBcQB+AM5wcQB+AOBzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AIwAAAAF3BAAAAAFxAH4A5nhxAH4A63BxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOxxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO1xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO5xAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDvcQB+AAhwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8HEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDycQB+AAhwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APRxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhwc3EAfgAdAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9nEAfgAIc3EAfgDIdwwAAAACP0AAAAAAAAFxAH4AInhxAH4AJHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AQnEAfgBTcQB+AFRwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACAEAAAAAAXEAfgBUcQB+AFZzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAgBAAAAAAFxAH4AU3EAfgBZcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+XEAfgAIAAAAAAAAcQB+AEJwcAAAc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9XEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBCcQB+AEN0AAdkaXNlYXNlcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4BAnBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4AQ3EAfgBIcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AEJwcAAAc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9HEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBCcQB+AGBxAH4AYXBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAAAAAAAAcQB+AGFwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAQAAAAABcQB+AGBxAH4AZHEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACAAAAAAAAHEAfgBCcHAAAHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APNxAH4ACHNxAH4APXVxAH4AQAAAAAN0AANhcm1xAH4AjHEAfgCNcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4AjXBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgBAAAAAAFxAH4AjHEAfgCQcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BDHEAfgAIAAAAAAAAcQB+AQ9wcAAAc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8nEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgEPcQB+AGtxAH4AbHBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAAAAAAAAcQB+AGxwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAQAAAAABcQB+AGtxAH4Ab3EAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARNxAH4ACAAAAAAAAHEAfgEPcHAAAHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHNxAH4APXVxAH4AQAAAAAN0AAZyZXN1bHRxAH4Ad3QAAXBwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAAAAAAAAHEAfgEdcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAEAAAAAAXEAfgB3cQB+AHtxAH4ATHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEZcQB+AAgAAAAAAABxAH4BHHBwAABzcQB+ADkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDwcQB+AAhzcQB+AD11cQB+AEAAAAADcQB+ARxxAH4AgnQABmVmZmVjdHBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAAAAAAAAcQB+ASRwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAQAAAAABcQB+AIJxAH4AhnEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASFxAH4ACAAAAAAAAHEAfgEccHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AShxAH4ACHNxAH4APXVxAH4AQAAAAAN0AAZyZXN1bHRxAH4AtXEAfgC2cHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgAAAAAAABxAH4AtnBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgBAAAAAAFxAH4AtXEAfgC5cQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BKXEAfgAIAAAAAAAAcQB+ASxwcHNxAH4AIwAAAAF3BAAAAAFzcQB+AL0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgExcQB+AAgAAAAAAAB0AAZtYXJrZXJwdAAJb3B0TWFya2VyeHBzcQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDucQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAgAAAAAAABxAH4AwHBzcQB+AJoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAhxAH4AxHEAfgDGc3EAfgCTAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7XEAfgAIc3EAfgCWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOHEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIAAAAAAAAcQB+AHhwc3EAfgCaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIcQB+AKBxAH4AqHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AThxAH4ACHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACAAAAAAAAHEAfgCDcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACHEAfgCtcQB+AK9zcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+ACMAAAABdwQAAAABc3EAfgDLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIcQB+AM5zcQB+AM8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFCcQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFDcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAjAAAAAXcEAAAAAXEAfgDgeHEAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A4HEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BR3EAfgAIAAAAAAAAcQB+AUVwAXEAfgDOc3EAfgApcQB+ANxw\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?result ?p .\n ?result ?effect .\n ?arm ?drug .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=7", + "structureSignatureRawSha256" : "ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3", + "structureSignatureNormalizedSha256" : "ed5e9e2629f770eb41cc6e0b19b232acbb1fe0ce6ea024f26b7505b965745af3", + "joinAlgorithmSignatureSha256" : "c5c9f161073419e79d1f30b6aac571d6092838b899099fb51ab5f7c0e0b787d5", + "actualResultSizesSignatureSha256" : "9ef2f59b5f676bba344a3fb6c7cfd93a1fd446796c49819a915e5d028b0201bf", + "estimatesSignatureSha256" : "63535db636a1f0a0b70881a33b7c871d6a3655e7c00201cb6fb25ff7a5f0d455", + "joinAlgorithmMultisetSignatureSha256" : "c8e859f2621c395ee698ca39815245bc13a43ba048d347833b6adff93b7c998b", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "519e64d91e7fcce937083f91ad63997a3c309b38bacbf5c3fee7874c0644cc13", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "202640856834431330011.2", + "modeledInputRowsSum" : "135070319751882231832", + "modeledOutputRowsSum" : "135070319751882223177", + "modeledJoinInputRowsSum" : "135070319727869716167", + "modeledJoinOutputRowsSum" : "135070319751882203956", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.2;filter=0;group=0;join=202640856834431310791;projection=0;scan=19220;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=2886;filter=24012504125;group=0;join=135070319727869705601;projection=0;scan=19220;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "2fec249cb83b20936f869631a11641961a890ec5088eade0ddf70a060cdfc36f", + "modeledOutputRowsByCategory" : "distinct=0;extension=1;filter=0;group=0;join=135070319751882203956;projection=0;scan=19220;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "d92816a8110aa75d77f0c795ba1a257a3b8f3adc677449799091b717ff6f469a", + "modeledFilterInputRowsSum" : "24012504125", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "1", + "modeledJoinWorkByAlgorithm" : "JoinIterator=202640856834431310791;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "3b927545bee9e7fed34fe985744080fbb74a8758f058c21e39dc90b1915ae9f1", + "modeledWorkVector" : "workUnits=202640856834431330011.2|barrierCount=4|joinInputRowsSum=135070319727869716167|joinOutputRowsSum=135070319751882203956|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=202640856834431310791;UNKNOWN=0|categories=distinct=0;extension=0.2;filter=0;group=0;join=202640856834431310791;projection=0;scan=19220;unknown=0", + "modeledWorkVectorSignatureSha256" : "d32c181f3fb9d04d8f87ed09e00ec8308c541b6b7ee7c2e689ab2a1acbd68dac", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=2885|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=24012504125|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=202640856834431310791|inputRows=67570537082549105601|outputRows=135070319751882203956|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=67499782645320600000|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=19220|inputRows=19220|outputRows=19220|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "cae330ceebbad288f8275706edd75d19c41e4ac563877c0d580d6515f81e0e29", + "operatorWorkTopContributors" : "Join[JoinIterator]:202640856834431310791;StatementPattern[UNKNOWN]:19220;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.2;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "135070319751882223177", + "resultSizeEstimateMax" : "67499782645320600000", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.2M, nextCallCountActual=1, nextTimeNanosActual=16.0K, firstRowTimeNanosActual=15.2M, openCountActual=1, lastRowTimeNanosActual=15.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.6M, avgNextNanosActual=16.0K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.2M, nextCallCountActual=1, nextTimeNanosActual=5.5K, firstRowTimeNanosActual=15.2M, openCountActual=1, lastRowTimeNanosActual=15.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.6M, avgNextNanosActual=5.5K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.1M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=18, firstRowTimeNanosActual=15.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=15.3M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.6M, avgNextNanosActual=1.1K)\n │ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=11.9M, nextCallCountActual=18, nextTimeNanosActual=4.7K, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, firstRowTimeNanosActual=3.7M, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=13.1M, closeCountActual=1, exprEvalTimeNanosActual=343.9K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=596.1K, avgNextNanosActual=264, filterRejectRateActual=0)\n │ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=226.2K, hasNextFalseCountActual=0)\n │ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=2.1K, hasNextFalseCountActual=0)\n │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=11.4M, nextCallCountActual=18, nextTimeNanosActual=3.4K, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=3.5M, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=12.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=602.2K, avgNextNanosActual=190, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0)\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M, resultSizeActual=18, joinLeftBindingsConsumedActual=20, inputRowsActual=20, rowsDroppedActual=2, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=1.87499396237E12M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.90) [left]\n │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=21.4K, nextCallCountActual=2, nextTimeNanosActual=3.6K, firstRowTimeNanosActual=186.3K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=12.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=7.1K, avgNextNanosActual=1.8K) [left]\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M, resultSizeActual=18, joinLeftBindingsConsumedActual=8, inputRowsActual=26, rowsDroppedActual=8, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=1.9633444632E9M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.25) [right]\n │ ║ ║ ╠══ StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=264.4K, nextCallCountActual=8, nextTimeNanosActual=100.5K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, firstRowTimeNanosActual=34.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=3.7M, closeCountActual=2, varsAddedActual=3, indexName=ospc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=26.4K, avgNextNanosActual=12.6K, indexHitRateActual=0.09) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=7.06804006757E10M, resultSizeActual=18, joinLeftBindingsConsumedActual=8, inputRowsActual=26, rowsDroppedActual=8, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=2055858.1M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.25) [right]\n │ ║ ║ ├── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=260.4K, nextCallCountActual=8, nextTimeNanosActual=25.9K, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, firstRowTimeNanosActual=13.6K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=649.4K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=16.3K, avgNextNanosActual=3.2K, indexHitRateActual=0.50) [left]\n │ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=7.40108908E7M, resultSizeActual=18, joinLeftBindingsConsumedActual=26, inputRowsActual=44, rowsDroppedActual=26, expansionFactorActual=0.41, sampleCountActual=2, varianceActual=5.078021768314E11M, stddevActual=712.6M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.69) [right]\n │ ║ ║ ╠══ StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=205.9K, nextCallCountActual=26, nextTimeNanosActual=78.4K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, firstRowTimeNanosActual=8.0K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=621.8K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=6.1K, avgNextNanosActual=3.0K, indexHitRateActual=0.76) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=25653.7M, resultSizeActual=18, joinRightIteratorsCreatedActual=26, joinLeftBindingsConsumedActual=26, joinRightBindingsConsumedActual=18, inputRowsActual=44, rowsDroppedActual=26, expansionFactorActual=0.41, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=18, avgRightRowsPerLeftActual=0.69, joinOutputPerLeftActual=0.69) [right]\n │ ║ ║ ├── StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=286.9K, nextCallCountActual=26, nextTimeNanosActual=68.3K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=8.5K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=179.5K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.5K, avgNextNanosActual=2.6K, indexHitRateActual=0.50) [left]\n │ ║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ └── Filter (resultSizeActual=18, hasNextCallCountActual=44, hasNextTrueCountActual=18, hasNextTimeNanosActual=4.4M, nextCallCountActual=18, nextTimeNanosActual=7.2K, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, firstRowTimeNanosActual=58.2K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=26, exprTrueCountActual=18, lastRowTimeNanosActual=138.3K, closeCountActual=26, exprEvalTimeNanosActual=2.2M, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=100.7K, avgNextNanosActual=400, filterRejectRateActual=0.31) [right]\n │ ║ ║ ╠══ Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0)\n │ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ValueConstant (value=\"0.05\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0)\n │ ║ ║ ║ └── Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=191.2K, hasNextFalseCountActual=0)\n │ ║ ║ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ ValueConstant (value=\"0.7\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0K, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=24012.5M, resultSizeActual=26, joinLeftBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=25602.1M, stddevActual=160.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00)\n │ ║ ║ ├── StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=206.3K, nextCallCountActual=26, nextTimeNanosActual=60.0K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=8.2K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=129.8K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.0K, avgNextNanosActual=2.3K, indexHitRateActual=0.50) [left]\n │ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.3M, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinLeftBindingsConsumedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=26, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right]\n │ ║ ║ ╠══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=185.7K, nextCallCountActual=26, nextTimeNanosActual=59.7K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=7.0K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=109.0K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.6K, avgNextNanosActual=2.3K, indexHitRateActual=0.50) [left]\n │ ║ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=202.7K, nextCallCountActual=26, nextTimeNanosActual=47.9K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=4.9K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=91.0K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.9K, avgNextNanosActual=1.8K, indexHitRateActual=0.50) [right]\n │ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=833.5K, nextCallCountActual=18, nextTimeNanosActual=87.5K, firstRowTimeNanosActual=9.6K, openCountActual=18, lastRowTimeNanosActual=42.9K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=23.2K, avgNextNanosActual=4.9K) [right]\n │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=195.4K, nextCallCountActual=18, nextTimeNanosActual=41.3K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, firstRowTimeNanosActual=9.0K, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=39.1K, closeCountActual=18, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.4K, avgNextNanosActual=2.3K, indexHitRateActual=0.50)\n │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0)\n │ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15255417,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 16000,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 15253000,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15386625,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15247167,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 5500,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 15263875,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15396250,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15194458,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 1125,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 18,\n \"firstRowTimeNanosActual\" : 15263000,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15349959,\n \"maxGroupSizeActual\" : 18,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 18.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 20,\n \"hasNextTrueCountActual\" : 19,\n \"hasNextTimeNanosActual\" : 11921414,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 4751,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 3750458,\n \"exprEvalCountActual\" : 18,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 13141583,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 343874.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18,\n \"exprTrueCountActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 226171.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2083.0\n }\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 19,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 11441460,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 3416,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 3591333,\n \"leftRowsWithMatchActual\" : 18,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 12449500,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.74997826453206E19,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 20,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 21416,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 3667,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 186375,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 12577500,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.74997826453206E19,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: ospc] \",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 264460,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 100501,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 94,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 86,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 34625,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 3742833,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"ospc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=disease)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.0680400675728376E16,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 16,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 260456,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 25918,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 16,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 13666,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 649458,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.4010890759925E13,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 34,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 205916,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 78418,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 34,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8084,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 621875,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2.5653688305E10,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 286919,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 68372,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8583,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 179541,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 44,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 4430167,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 7208,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 26,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 58208,\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 26,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 138333,\n \"closeCountActual\" : 26\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2211459.0\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 18,\n \"shortCircuitCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2069917.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 12,\n \"exprTrueCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1812915.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1828542.0\n }\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 12,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 4\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 191207.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 5041.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2.4012504125E10,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 206376,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 60089,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8250,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 129875,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 8323225.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 185707,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 59708,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 7000,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 109041,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 202792,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 47959,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 4959,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 91000,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 833582,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 87583,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 9666,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 42916,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 195417,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 41334,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 36,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 18,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 9000,\n \"indexLookupCountActual\" : 18,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 39167,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n Filter (resultSizeActual=18)\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M, resultSizeActual=18)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M, resultSizeActual=18)\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n Join (JoinIterator) (resultSizeEstimate=7.06804006757E10M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n Join (JoinIterator) (resultSizeEstimate=7.40108908E7M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n Join (JoinIterator) (resultSizeEstimate=25653.7M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n Filter (resultSizeActual=18)\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=24012.5M, resultSizeActual=26)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n Join (JoinIterator) (resultSizeEstimate=8.3M, resultSizeActual=26)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n Extension (resultSizeActual=18)\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n Filter (resultSizeActual=18)\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M, resultSizeActual=18)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n Join (JoinIterator) (resultSizeEstimate=6.74997826453206E13M, resultSizeActual=18)\\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n Join (JoinIterator) (resultSizeEstimate=7.06804006757E10M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n Join (JoinIterator) (resultSizeEstimate=7.40108908E7M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n Join (JoinIterator) (resultSizeEstimate=25653.7M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n Filter (resultSizeActual=18)\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=24012.5M, resultSizeActual=26)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n Join (JoinIterator) (resultSizeEstimate=8.3M, resultSizeActual=26)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n Extension (resultSizeActual=18)\\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"492d92b7ef84650f3b04b403d1adb936e74ccdd8081bf014bf7e291b5049ae8d\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAA6MpmAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA/JwAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAADovLp0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAAAOq+E3hwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAOjHeQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAPoAAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAOi+CHEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAOrIAXhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAOinPwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAFXwAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAOjog3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAOrtmnhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAOfZWgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAABGUAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQDIAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAABJxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAOjlGHQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAA6jjHdAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnQAK0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1ZhbHVlRXhwcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAABQAAAAAALXoBgAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAEo8AAAAAAAAAEr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAEv//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAAXZXhwckV2YWxUaW1lTmFub3NBY3R1YWxzcQB+ACdBFP0IAAAAAHhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3EAfgArcQB+AA9zcQB+AAwAAAAAADk6OnQAE2V4cHJFdmFsQ291bnRBY3R1YWxxAH4AK3QAFGV4cHJGYWxzZUNvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAB0ABlwcmVkaWNhdGVFcnJvckNvdW50QWN0dWFscQB+ADpxAH4AEnEAfgAOdAATZXhwclRydWVDb3VudEFjdHVhbHEAfgArcQB+ABNzcQB+AAwAAAAAAMiGT3EAfgARcQB+AA54cQB+ACRxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AMXhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAATAAAAAACulTQAAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAA1YAAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAA2zKV0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHEAfgArcQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAAC99txxAH4AEXEAfgAOdAAZbWF4UmlnaHRSb3dzUGVyTGVmdEFjdHVhbHEAfgAOeHEAfgAycQB+AAh0ABBMZWZ0Sm9pbkl0ZXJhdG9yc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAD/////////////////////AAAAAAAAABJEDUX7NX5zSgD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQXEAfgAIdAAMSm9pbkl0ZXJhdG9yc3IANG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluZGluZ1NldEFzc2lnbm1lbnQ31nYWvo6IIwIAAkwADGJpbmRpbmdOYW1lc3EAfgAjTAALYmluZGluZ1NldHN0ABRMamF2YS9sYW5nL0l0ZXJhYmxlO3hxAH4AAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAFOoAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAOUwAAAAAAAAACP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAAAJxAH4AD3NxAH4ADAAAAAAAAtgHcQB+ABFxAH4ADnEAfgAScQB+AA50ABZiaW5kaW5nc1Byb3ZpZGVkQWN0dWFscQB+AE9xAH4AE3NxAH4ADAAAAAAAv+rceHEAfgBJcQB+AAhzcgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAdTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AI0wABnZhbHVlc3EAfgAdeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+AFYAAAABdwQAAAABcQB+AFV4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AQHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAAAAACh0AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4AWHNxAH4AVgAAAAF3BAAAAAFxAH4AVXhwc3EAfgBcdXEAfgBfAAAAAXNxAH4AYQAAAAAAAAAodAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAD/////////////////////AAAAAAAAABJEDUX7NX5zSgD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ASXEAfgAIcQB+AEpzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ACNMAApjb250ZXh0VmFycQB+ABdMAAlpbmRleE5hbWVxAH4AQEwACW9iamVjdFZhcnEAfgAXTAAMcHJlZGljYXRlVmFycQB+ABdMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AF0wAB3Zhckxpc3RxAH4AHXhxAH4AAwAAAAAAAAABQCSn6cuKNJEAAAAAAAAACgAAAAAABAkMAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAGIlQAAAAAAAAAIQI3YAAAAAAAAAAAAAAAAAFYAAAAAAAAACAAAAAAAAABe//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAAAhxAH4AD3NxAH4ADAAAAAAAAIdBdAAWaW5kZXhMb29rdXBDb3VudEFjdHVhbHEAfgBPcQB+ABFxAH4AT3EAfgAScQB+AE9xAH4AE3NxAH4ADAAAAAAAORxxeHEAfgBrcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfNWE3YjU5ZmRfdXJpcQB+AFVwdAAEb3NwY3NyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhckBD7rL6/vDHAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AQEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AG9xAH4ACAAAAAAAAHEAfgBVcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AG9xAH4ACAEAAAAAAXEAfgB7c3EAfgBhAAAAAP////90AC5odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL3N0dWRpZXNEaXNlYXNlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ab3EAfgAIAAAAAAAAcQB+AHpwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAA/////////////////////wAAAAAAAAASQ29jbmXbfX8A//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGtxAH4ACHEAfgBKc3EAfgBsAAAAAAAAAAE/8AAAAAAAAAAAAAAAAAAQAAAAAAAD+WgAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGU+AAAAAAAAAAhAjdgAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAABD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AcXEAfgAPc3EAfgAMAAAAAAAANWJxAH4Ac3EAfgBxcQB+ABFxAH4AcXEAfgAScQB+AHFxAH4AE3NxAH4ADAAAAAAACejyeHEAfgCIcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+AHp0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAQAAAAABcQB+AJBzcQB+AGEAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIlxAH4ACAEAAAAAAXEAfgCPc3EAfgBhAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZXEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIlxAH4ACAAAAAAAAHEAfgB6cHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAEkLQ1AA2m71AAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCIcQB+AAhxAH4ASnNxAH4AbAAAAAAAAAABQDHraSmwALAAAAAAAAAAIgAAAAAAAyRcAAAAAAAAABoAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAEyUgAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAAAgAAAAAAAAAGgAAAAAAAAAi//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAABpxAH4AD3NxAH4ADAAAAAAAAB+UcQB+AHNxAH4AcXEAfgARcQB+AHFxAH4AEnEAfgBxcQB+ABNzcQB+AAwAAAAAAAl9M3hxAH4AmXEAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgB6dAATX2NvbnN0XzczYzJlNDBhX3VyaXQAA2FybXB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AKJwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAQAAAAABcQB+AKFzcQB+AGEAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvaGFzQXJtcQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AHpwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAABoAAAAAAAAAEgAAAAAAAAAa/////////////////////wAAAAAAAAASQhfkUN/EAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJlxAH4ACHEAfgBKc3EAfgBsAAAAAAAAAAFAMetpKbAAsAAAAAAAAAA0AAAAAAAEYMcAAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAQsUAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AnHEAfgAPc3EAfgAMAAAAAAAAIYdxAH4Ac3EAfgCccQB+ABFxAH4AnHEAfgAScQB+AJxxAH4AE3NxAH4ADAAAAAAAAr1VeHEAfgCpcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+AKJ0ABNfY29uc3RfNjBmNmQ3YWZfdXJpdAAGcmVzdWx0cHQABHNwb2NzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgAAAAAAABxAH4AsXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgBAAAAAAFxAH4AsHNxAH4AYQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9oYXNSZXN1bHRxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgAAAAAAABxAH4AonBwc3EAfgAwAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAsAAAAAABDmVcAAAAAAAAAEgAAAAAAAAAAGgAAAAAAAAASAAAAAAAAABoAAAAAAAAAEgAAAAAAABwoAAAAAAAAABK/8AAAAAAAAAAAAAAAAAAACAAAAAAAAAASAAAAAAAAABr//////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQUDfQYAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAJcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAA42BxAH4AOHEAfgCccQB+ADlxAH4AcXEAfgA7cQB+ADpxAH4AEnEAfgCccQB+ADxxAH4AK3EAfgATc3EAfgAMAAAAAAACHF1xAH4AEXEAfgCceHEAfgCpcQB+AAhzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAGkIWXQbw9AAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC4cQB+AAhxAH4ASnNxAH4AbAAAAAAAAAABQErhHb6IAQgAAAAAAAAANAAAAAAAAyYoAAAAAAAAABoAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAADquQAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAABoAAAAAAAAAGgAAAAAAAAA0//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AJxxAH4AD3NxAH4ADAAAAAAAACA6cQB+AHNxAH4AnHEAfgARcQB+AJxxAH4AEnEAfgCccQB+ABNzcQB+AAwAAAAAAAH7U3hxAH4AvnEAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgCxdAATX2NvbnN0XzgwYzcxOTg5X3VyaXQAAXBwdAAEc3BvY3NxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AL9xAH4ACAAAAAAAAHEAfgDGcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AL9xAH4ACAEAAAAAAXEAfgDFc3EAfgBhAAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL3BWYWx1ZXEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AL9xAH4ACAAAAAAAAHEAfgCxcHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGv////////////////////8AAAAAAAAAGkFfwCZAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC+cQB+AAhxAH4ASnNxAH4AbAAAAAAAAAABQErhHb6IAQgAAAAAAAAANAAAAAAAAtVrAAAAAAAAABoAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAADpPAAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAABoAAAAAAAAAGgAAAAAAAAA0//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AJxxAH4AD3NxAH4ADAAAAAAAABtYcQB+AHNxAH4AnHEAfgARcQB+AJxxAH4AEnEAfgCccQB+ABNzcQB+AAwAAAAAAAGp8XhxAH4AzXEAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgCxdAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAAAAAAAAcQB+ANVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAQAAAAABcQB+ANRzcQB+AGEAAAAA/////3QAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AM5xAH4ACAAAAAAAAHEAfgCxcHBzcQB+AGwAAAAAAAAAAUBK4R2+iAEIAAAAAAAAADQAAAAAAAMYKAAAAAAAAAAaAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAAAAaAAAAAAAAu1cAAAAAAAAAGkCmigAAAAAAAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAANP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3EAfgCccQB+AA9zcQB+AAwAAAAAAAATX3EAfgBzcQB+AJxxAH4AEXEAfgCccQB+ABJxAH4AnHEAfgATc3EAfgAMAAAAAAABY3h4cQB+AM1xAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AonQAE19jb25zdF9hZWZkMzI3NF91cml0AARkcnVncHQABHNwb2NzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDccQB+AAgAAAAAAABxAH4A43BzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDccQB+AAgBAAAAAAFxAH4A4nNxAH4AYQAAAAD/////dAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9hcm1EcnVncQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3HEAfgAIAAAAAAAAcQB+AKJwcAAAAABzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAxTAAIcmlnaHRBcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0E/lZ0AAAAAeHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABHQAF3Nob3J0Q2lyY3VpdENvdW50QWN0dWFsc3EAfgAMAAAAAAAAAA5xAH4AOHEAfgCccQB+ADlxAH4AcXEAfgA8cQB+ACt4cQB+ALhxAH4ACHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHEAfgDrAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQTupswAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+ADhxAH4AnHEAfgA5c3EAfgAMAAAAAAAAAAxxAH4APHEAfgDxeHEAfgDscQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAgAAAAAAABxAH4AxnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgB+eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQTvmvgAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAACcQB+ADhxAH4ADnEAfgA8cQB+AA54cQB+APRxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AQEwACGxhbmd1YWdlcQB+AEB4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHEAfgCEdAAHREVDSU1BTHNyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkludGVybmVkSVJJAllGAIULdQcDAARJAAhoYXNoQ29kZUwACWxvY2FsTmFtZXEAfgBATAAJbmFtZXNwYWNlcQB+AEBMAAtzdHJpbmdWYWx1ZXEAfgBAeHB3MEcAjSoAIWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIwAHZGVjaW1hbHh0AAQwLjA1cH5yADFvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmUkQ29tcGFyZU9wAAAAAAAAAAASAAB4cQB+AIR0AAJMVHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0EHVzgAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAA3EAfgA4cQB+APhxAH4AOXEAfgBxcQB+ADxzcQB+AAwAAAAAAAAABHhxAH4A7HEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BDXEAfgAIAAAAAAAAcQB+ANVwc3EAfgD6AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQLOxAAAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAACcQB+ADhxAH4ADnEAfgA8cQB+AA54cQB+AQ1xAH4ACHNxAH4A/3EAfgEFcQB+AQh0AAMwLjdwfnEAfgEKdAACR1QAAAAAAAAAAAAAc3EAfgAcAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAkAAAAAAAMuC4AAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAVYfAAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAFcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAAJcJxAH4AEXEAfgArcQB+ABJxAH4AK3EAfgATc3EAfgAMAAAAAAAAp6R4cQB+AEFxAH4ACHNxAH4AbAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAJAAAAAAAAvtZAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAChdgAAAAAAAAASQKaKAAAAAAAAAAAAAAAAABIAAAAAAAAAEgAAAAAAAAAk//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ACtxAH4AD3NxAH4ADAAAAAAAACMocQB+AHNxAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAACY/3hxAH4BG3EAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgCxdAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ASZwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAQAAAAABcQB+ASVzcQB+AGEAAAAA/////3QAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ALFwcHNxAH4AVgAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+AEB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEbcQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEvcQB+AAgAAAAAAABxAH4BJnB0AAlvcHRNYXJrZXJ4cHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0ELm9gAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+ACtxAH4APHEAfgAreHEAfgAycQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEycQB+AAgAAAAAAABxAH4BMXBzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdAoEYAAAAAAHhzcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AOHEAfgAOeHEAfgEycQB+AAhzcQB+AGEAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VyLzk5OX5xAH4BCnQAAk5Fc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cQB+AFN3DAAAABA/QAAAAAAAAHhzcQB+AFYAAAABdwQAAAABc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXBFbGVtHBNQdl7woHoCAAJMAARuYW1lcQB+AEBMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0FnZ3JlZ2F0ZU9wZXJhdG9yO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACRxAH4ACHQABWNvdW50c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ291bnTDG6RMNpo3gAIAAHhyADlvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkFic3RyYWN0QWdncmVnYXRlT3BlcmF0b3I3u+2NG0ExvQIAAVoACGRpc3RpbmN0eHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlWYWx1ZU9wZXJhdG9ypZgvcyEVYrgCAAFMAANhcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AURxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUlxAH4ACAAAAAAAAHEAfgDjcAF4c3EAfgBWAAAAAXcEAAAAAXNxAH4BLgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUxxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AU1xAH4ACAAAAAAAAHEAfgDjcAFxAH4BRXgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4AHXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABhxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+AEBMAA9wcm9qZWN0aW9uQWxpYXNxAH4AQEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVFxAH4ACAFxAH4BRXBzcQB+AS4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgFZcQB+AAhxAH4BWAFzcQB+AU8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAh1cQB+AVIAAAABc3EAfgFUAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAXEAfgFFcHEAfgFXc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AB14cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+AFYAAAABdwQAAAABcQB+AV14cQB+AWJwcQB+AAhzcQB+ACIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFYcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFjcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFkcQB+AAhzcQB+AD4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFlcQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZnEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWdxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaXEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFrcQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BbHEAfgAIcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AW1xAH4ACHNxAH4BP3cMAAAAAj9AAAAAAAABcQB+AFV4cQB+AFdzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFtcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+AHpxAH4Aj3EAfgCQcHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFwcQB+AAgBAAAAAAFxAH4AkHEAfgCTc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcHEAfgAIAQAAAAABcQB+AI9xAH4AlnEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXBxAH4ACAAAAAAAAHEAfgB6cHAAAHNxAH4AbAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWxxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AenEAfgB7dAAHZGlzZWFzZXBwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAAAAAAAAcQB+AXlwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAQAAAAABcQB+AHtxAH4AgXEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXZxAH4ACAAAAAAAAHEAfgB6cHAAAHNxAH4AbAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWtxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AenEAfgChcQB+AKJwcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAAAAAAAAHEAfgCicHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAEAAAAAAXEAfgChcQB+AKZxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF9cQB+AAgAAAAAAABxAH4AenBwAABzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAhzcQB+AHV1cQB+AHgAAAADdAADYXJtcQB+AOJxAH4A43Bwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAAAAAAAAcQB+AONwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAQAAAAABcQB+AOJxAH4A53EAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYNxAH4ACAAAAAAAAHEAfgGGcHAAAHNxAH4AbAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4BhnEAfgCwcQB+ALFwcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHEAfgCxcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAEAAAAAAXEAfgCwcQB+ALVxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGKcQB+AAgAAAAAAABxAH4BhnBwAABzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhzcQB+AHV1cQB+AHgAAAADdAAGcmVzdWx0cQB+AMV0AAFwcHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgAAAAAAABxAH4BlHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgBAAAAAAFxAH4AxXEAfgDKcQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BkHEAfgAIAAAAAAAAcQB+AZNwcAAAc3EAfgBsAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZ3EAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgGTcQB+ANR0AAZlZmZlY3RwcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAAAAAAAAHEAfgGbcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAEAAAAAAXEAfgDUcQB+ANlxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGYcQB+AAgAAAAAAABxAH4Bk3BwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFmcQB+AAhzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGfcQB+AAhzcQB+AHV1cQB+AHgAAAADdAAGcmVzdWx0cQB+ASVxAH4BJnBwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAAAAAAAAcQB+ASZwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAQAAAAABcQB+ASVxAH4BKnEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AaBxAH4ACAAAAAAAAHEAfgGjcHBzcQB+AFYAAAABdwQAAAABc3EAfgEuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bn3EAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BqHEAfgAIAAAAAAAAdAAGbWFya2VycHQACW9wdE1hcmtlcnhwc3EAfgDyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZXEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIAAAAAAAAcQB+ATFwc3EAfgD6AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIcQB+ATtxAH4BPXNxAH4A6gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWRxAH4ACHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Aa9xAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACAAAAAAAAHEAfgDGcHNxAH4A+gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACHEAfgEDcQB+AQtzcQB+APIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGvcQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAgAAAAAAABxAH4A1XBzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAhxAH4BF3EAfgEZc3IAEWphdmEudXRpbC5Db2xsU2VyV46rtjobqBEDAAFJAAN0YWd4cAAAAAJ3BAAAAAB4c3EAfgBWAAAAAXcEAAAAAXNxAH4BQgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWNxAH4ACHEAfgFFc3EAfgFGAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BuXEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BunEAfgAIAAAAAAAAdAAEZHJ1Z3ABeHNxAH4AVgAAAAF3BAAAAAFxAH4BV3hxAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVdxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Ab5xAH4ACAAAAAAAAHEAfgG8cAFxAH4BRXNxAH4AXHEAfgFTcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?result ?p .\n ?result ?effect .\n ?arm ?drug .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "structureSignatureRawSha256" : "ddbaae262b3610ead2e1078dc39a1c9b8a2b365504fd4d8eaad57e3777aa754d", + "structureSignatureNormalizedSha256" : "ddbaae262b3610ead2e1078dc39a1c9b8a2b365504fd4d8eaad57e3777aa754d", + "joinAlgorithmSignatureSha256" : "69b036eca3ba8b860cc558cbebe3d1cb849dd24013e51f3ce3d49fc8b0bacc69", + "actualResultSizesSignatureSha256" : "98583b9c52aebed6bdda1da403c2422d9a4018eabe541ca9f233486af7d92787", + "estimatesSignatureSha256" : "c6a092447567a6970d3bb06797cbcbb588dcbb755896a62b229fc34e01d02c53", + "joinAlgorithmMultisetSignatureSha256" : "af0a118c0eeef597b3b2bf40840b2241af5c3399d027e0f5aadf3654e49897b3", + "actualResultSizesMultisetSignatureSha256" : "2a4686f5458301254a7423dca3b094e277eb2a987e54507492f5cf27d4a5b0b9", + "estimatesMultisetSignatureSha256" : "ddddb26aab5325301cf80f13b39d58bf76cff418d2aaf16b02c0a933a8b192c3", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "654.0499999999999995", + "modeledInputRowsSum" : "408", + "modeledOutputRowsSum" : "383", + "modeledJoinInputRowsSum" : "300", + "modeledJoinOutputRowsSum" : "160", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=460;projection=0.05;scan=164;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=160;projection=1;scan=164;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "749d63f1e9aab0b26b399bc43a037603cc5c230575aa693e5a29f2b810f5cad8", + "modeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=160;projection=1;scan=164;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "89368870a39866800c0a2033d1728f3131e314291f609039b7c8c10092148f27", + "modeledFilterInputRowsSum" : "44", + "modeledFilterOutputRowsSum" : "36", + "modeledFilterPassRatio" : "0.818182", + "modeledFilterRejectRatio" : "0.181818", + "modeledJoinWorkByAlgorithm" : "JoinIterator=406;LeftJoinIterator=54", + "modeledJoinWorkByAlgorithmSignatureSha256" : "566da27673be5f55bf76532b26484bae7f8daca7078f6ff75b448d697ce3b39d", + "modeledWorkVector" : "workUnits=654.0499999999999995|barrierCount=4|joinInputRowsSum=300|joinOutputRowsSum=160|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=406;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=460;projection=0.05;scan=164;unknown=0", + "modeledWorkVectorSignatureSha256" : "746948d9c96012d5a27bc1145e4b11e6835f809dff24ad5bd5c6ef6217010917", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=3.8|inputRows=19|outputRows=19|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=13.1999999999999995|inputRows=44|outputRows=36|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=12.6|inputRows=18|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=406|inputRows=142|outputRows=142|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=54|inputRows=18|outputRows=18|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: ospc] [UNKNOWN]|nodes=1|workUnits=8|inputRows=8|outputRows=8|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: spoc] [UNKNOWN]|nodes=7|workUnits=156|inputRows=156|outputRows=156|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "316921cef851f5fc4fd73f64219a4d727786cfeadfd20cc92a4c8e2aa1ccec86", + "operatorWorkTopContributors" : "Join[JoinIterator]:406;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "estimateActualComparableNodeCount" : "16", + "estimateActualAbsErrorSum" : "135070319751882222871", + "estimateActualRelativeErrorMean" : "468994165779483323.139022435897", + "estimateActualQErrorP50" : "119.375", + "estimateActualQErrorP95" : "3749987924740033333.333333333333", + "estimateActualQErrorMax" : "3749987924740033333.333333333333", + "joinEstimateActualComparableNodeCount" : "7", + "joinEstimateActualQErrorP50" : "4111716153329.166666666667", + "joinEstimateActualQErrorP95" : "3749987924740033333.333333333333", + "joinEstimateActualQErrorMax" : "3749987924740033333.333333333333", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "135070319751882223177", + "resultSizeEstimateMax" : "67499782645320600000", + "resultSizeActualSum" : "383", + "resultSizeActualMax" : "26", + "modeledHasNextCallCountSum" : "434", + "modeledHasNextTrueCountSum" : "243", + "modeledHasNextTimeNanosSum" : "91409290", + "modeledNextCallCountSum" : "242", + "modeledNextTimeNanosSum" : "627716", + "modeledJoinRightIteratorCreateCountSum" : "140", + "modeledJoinLeftBindingSetConsumedCountSum" : "350", + "modeledJoinRightBindingSetConsumedCountSum" : "124", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0.354286", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0.885714", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "17.5", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "43.75", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "15.5", + "modeledSourceRowsScannedSum" : "432", + "modeledSourceRowsMatchedSum" : "200", + "modeledSourceRowsFilteredSum" : "232", + "modeledSourceFilterOutRatio" : "0.537037", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "91.40929", + "modeledNextTimeMillisSum" : "0.627716", + "modeledHasNextPerNextRatio" : "1.793388", + "modeledHasNextTruePerNextRatio" : "1.004132" + } + } + } +} \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-final-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-204709897-0caa078a.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-final-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-204709897-0caa078a.json new file mode 100644 index 00000000000..3e283b173ae --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-final-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-204709897-0caa078a.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-04-19T20:47:09.897647Z", + "queryId" : "pharma-q0-after-final", + "queryString" : "PREFIX pharma: \nPREFIX xsd: \nSELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { \n }\n ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm .\n ?arm pharma:armDrug ?drug ; pharma:hasResult ?result .\n ?result pharma:pValue ?p ; pharma:effectSize ?effect .\n OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) }\n FILTER(?optMarker != )\n FILTER(?p < 0.05 || ?effect > 0.7)\n}", + "unoptimizedFingerprint" : "7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0", + "metadata" : { + "store" : "lmdb", + "theme" : "PHARMA", + "querySource" : "theme-index", + "queryIndex" : "0", + "queryName" : "Pharma: trial drugs for diseases 0-1", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "60aeabe42586de97f294d7e5911bf41646bd3ed2a6c2dff2c462b43569658adc", + "queryString.normalizedWhitespaceSha256" : "d46242e97431d282ec8eab203813f57e57e9ce7a87e41319eb1243a6e54be19d", + "optimizerInput.unoptimizedStructureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "a6db343f08ea7e4e0da41ff4d518ed8502b9bd1c", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "26", + "queryString.charCount" : "667", + "queryString.lineCount" : "12", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.4.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "67", + "optimizerInput.unoptimizedJoinNodeCount" : "8", + "optimizerInput.unoptimizedFilterNodeCount" : "2", + "optimizerInput.unoptimizedStatementPatternCount" : "8", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=8", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "67", + "optimizerOutput.optimizedJoinNodeCount" : "8", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "8", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=7", + "optimizerOutput.optimizedStructureNormalizedSha256" : "12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "67", + "executionPlan.executedJoinNodeCount" : "8", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "8", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "executionPlan.executedStructureNormalizedSha256" : "02caea518a2497dfaacb1ed066eb2ad102748541f87b8860562545246efa248e", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "a0ae892de31e537fdb7af8eb28e581657d7bbcd8cd1db283dbdc36b855b3dc5f", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedModeledWorkUnits" : "646.0499999999999995", + "executionPlan.executedModeledInputRowsSum" : "404", + "executionPlan.executedModeledOutputRowsSum" : "379", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "296", + "executionPlan.executedModeledJoinOutputRowsSum" : "156", + "executionPlan.executedModeledFilterInputRowsSum" : "44", + "executionPlan.executedModeledFilterOutputRowsSum" : "36", + "executionPlan.executedModeledFilterPassRatio" : "0.818182", + "executionPlan.executedModeledFilterRejectRatio" : "0.181818", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=452;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=156;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=156;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=398;LeftJoinIterator=54", + "executionPlan.executedModeledWorkVector" : "workUnits=646.0499999999999995|barrierCount=4|joinInputRowsSum=296|joinOutputRowsSum=156|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=398;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=452;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "b32381b907c721719d0f57688970a0781024d6d4007161bc182e8b80624837bb", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "f0555b705e33fbcd6439c3f38a2a18814d789ec463ea870b33f5eff00d57b0e5", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:398;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "executionPlan.executedEstimateActualComparableNodeCount" : "16", + "executionPlan.executedHasNextCallCountSum" : "434", + "executionPlan.executedHasNextTrueCountSum" : "243", + "executionPlan.executedHasNextTimeNanosSum" : "93637875", + "executionPlan.executedNextCallCountSum" : "242", + "executionPlan.executedNextTimeNanosSum" : "615964", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "280", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "232", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "312", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "1.344828", + "executionPlan.executedJoinTelemetryNodeCount" : "8", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.114286", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "35", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "29", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "39", + "executionPlan.executedSourceRowsScannedSum" : "432", + "executionPlan.executedSourceRowsMatchedSum" : "200", + "executionPlan.executedSourceRowsFilteredSum" : "232", + "executionPlan.executedSourceFilterOutRatio" : "0.537037", + "executionPlan.executedHasNextPerNextRatio" : "1.793388", + "executionPlan.executedHasNextTruePerNextRatio" : "1.004132", + "executionPlan.executedEstimateActualQErrorP95" : "493976.111111111111", + "executionPlan.executedEstimateActualQErrorMax" : "493976.111111111111", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "7", + "executionPlan.executedJoinEstimateActualQErrorP95" : "493976.111111111111", + "executionPlan.executedJoinEstimateActualQErrorMax" : "493976.111111111111", + "featureFlags.sha256" : "e8bb9b476eb3365edaa7abc5a6f07ad64f79e1508d14bedde30230a29395627f", + "planDeterminism.inputFingerprintSha256" : "4495e141256635cd408a47c45a3d627ae96c9278974ea1b1d61a2144020e36af", + "planDeterminism.environmentFingerprintSha256" : "9d98ea119192435e02b84b33ee90ebd1f24a5133d8989af430effa85ad205e6c", + "execution.runs" : "128", + "execution.resultCount" : "1", + "execution.totalMillis" : "5959", + "execution.averageMillis" : "46", + "execution.minMillis" : "38", + "execution.maxMillis" : "97", + "execution.stdDevMillis" : "14", + "execution.coefficientOfVariationPct" : "30.6507", + "execution.sampleMillis" : "92,94,97,89,79,80,76,78,82,74,78,75,80,64,71,42,44,44,43,42,41,41,41,42,40,43,43,40,41,75,40,40,41,39,40,42,41,44,41,72,40,42,38,41,40,41,40,39,42,45,40,39,38,41,42,40,39,39,40,42,40,40,41,39,39,38,40,38,40,38,40,74,41,38,39,42,38,39,38,39,39,41,74,38,38,39,40,39,38,42,41,40,42,40,41,41,43,39,40,40,40,39,39,38,39,40,39,40,39,40,40,43,39,40,42,39,41,39,40,40,42,38,42,39,40,41,40,39", + "execution.verificationStatus" : "max-runs-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4|32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "false", + "execution.maxRunsReached" : "true" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "PHARMA", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "2", + "cli.executionRepeatMaxRuns" : "128", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "0", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2889358551", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (<)\n │ ║ │ ║ Var (name=p)\n │ ║ │ ║ ValueConstant (value=\"0.05\"^^)\n │ ║ │ ╚══ Compare (>)\n │ ║ │ Var (name=effect)\n │ ║ │ ValueConstant (value=\"0.7\"^^)\n │ ║ └── Filter\n │ ║ ╠══ Compare (!=)\n │ ║ ║ Var (name=optMarker)\n │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ ╚══ LeftJoin\n │ ║ ├── Join [left]\n │ ║ │ ╠══ Join [left]\n │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) [left]\n │ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ │ ║ │ ║ │ ║ o: Var (name=disease)\n │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ │ ║ │ ║ │ o: Var (name=arm)\n │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ s: Var (name=arm)\n │ ║ │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ │ ║ │ ║ o: Var (name=drug)\n │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ s: Var (name=arm)\n │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ │ ║ │ o: Var (name=result)\n │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ s: Var (name=result)\n │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ │ ║ o: Var (name=p)\n │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ s: Var (name=result)\n │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ │ o: Var (name=effect)\n │ ║ └── Extension [right]\n │ ║ ╠══ StatementPattern\n │ ║ ║ s: Var (name=result)\n │ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ ║ o: Var (name=marker)\n │ ║ ╚══ ExtensionElem (optMarker)\n │ ║ Var (name=marker)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\"\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\"\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\"\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\"\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\"\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join\n Join\n Join\n Join\n Join\n Join\n Join\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\n StatementPattern\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n StatementPattern\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFnEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AGAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAccQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAfcQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIHEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AInEAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACoAAAABdwQAAAABcQB+ACl4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGXhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4ALHNxAH4AKgAAAAF3BAAAAAFxAH4AKXhwc3EAfgAwdXEAfgAzAAAAAXNxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABlMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAicQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAZTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIAQAAAAABcQB+AEpzcQB+ADUAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAEAAAAAAXEAfgBJc3EAfgA1AAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF81YTdiNTlmZF91cml0AAdkaXNlYXNlcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgAAAAAAABxAH4AXHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgBAAAAAAFxAH4AW3NxAH4ANQAAAAD/////dAAuaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9zdHVkaWVzRGlzZWFzZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFhxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACBxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF83M2MyZTQwYV91cml0AANhcm1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBmcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAEAAAAAAXEAfgBlc3EAfgA1AAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc0FybXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AANhcm10ABNfY29uc3RfYWVmZDMyNzRfdXJpdAAEZHJ1Z3Bwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAAAAAAAAcQB+AHFwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAQAAAAABcQB+AHBzcQB+ADUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYXJtRHJ1Z3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGxxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4Ab3QAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgB7cHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAEAAAAAAXEAfgB6c3EAfgA1AAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBjNzE5ODlfdXJpdAABcHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIZwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAQAAAAABcQB+AIVzcQB+ADUAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvcFZhbHVlcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHHEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgCEdAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAAAAAAAAcQB+AJBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAQAAAAABcQB+AI9zcQB+ADUAAAAA/////3QAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIxxAH4ACAAAAAAAAHEAfgCEcHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBhNjk3OWFfdXJpdAAGbWFya2VycHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AnHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgBAAAAAAFxAH4Am3NxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXJxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AmnBwc3EAfgAqAAAAAXcEAAAAAXNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbkVsZW31RFrwC9DoKAIAAkwABGV4cHJxAH4AFEwABG5hbWVxAH4AGXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKRxAH4ACAAAAAAAAHQABm1hcmtlcnB0AAlvcHRNYXJrZXJ4cHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHQACW9wdE1hcmtlcnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBMeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Aq3EAfgAIc3EAfgA1AAAAAP////90AC1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Jpb21hcmtlci85OTl+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBUdAACTkVzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHEAfgCqAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AtnEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIAAAAAAAAdAABcHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC3cQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABlMAAhsYW5ndWFnZXEAfgAZeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AVHQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGUwACW5hbWVzcGFjZXEAfgAZTAALc3RyaW5nVmFsdWVxAH4AGXhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cQB+ALJ0AAJMVHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMhxAH4ACAAAAAAAAHQABmVmZmVjdHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDIcQB+AAhzcQB+ALtxAH4AwXEAfgDEdAADMC43cH5xAH4AsnQAAkdUc3EAfgAmdwwAAAAQP0AAAAAAAAB4c3EAfgAqAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAZTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAqAAAAAXcEAAAAAXNxAH4AowAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN5xAH4ACAAAAAAAAHEAfgDbcAFxAH4A1XgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAxxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABlMAA9wcm9qZWN0aW9uQWxpYXNxAH4AGUwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACAFxAH4A1XBzcQB+AKMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgDqcQB+AAhxAH4A6QFzcQB+AOAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAh1cQB+AOMAAAABc3EAfgDlAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIAXEAfgDVcHEAfgDoc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AA54cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+ACoAAAABdwQAAAABcQB+AO54cQB+APNwcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+ABcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD2cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A93EAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APhxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+nEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APtxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD8cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIcHNxAH4AIwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AP5xAH4ACHEAfgAocQB+ACtzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD+cQB+AAhxAH4ARXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BAHEAfgAIAQAAAAABcQB+AEpxAH4ATnNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQBxAH4ACAEAAAAAAXEAfgBJcQB+AFFxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEAcQB+AAgAAAAAAABxAH4ASHBwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD9cQB+AAhxAH4AWXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAAAAAAAAcQB+AFxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAQAAAAABcQB+AFtxAH4AX3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQRxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APxxAH4ACHEAfgBjcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgAAAAAAABxAH4AZnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgBAAAAAAFxAH4AZXEAfgBpcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCHEAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+3EAfgAIcQB+AG1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAAAAAAAAHEAfgBxcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAEAAAAAAXEAfgBwcQB+AHRxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4Ab3BwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD6cQB+AAhxAH4AeHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAAAAAAAAcQB+AHtwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAQAAAAABcQB+AHpxAH4AfnEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARBxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHEAfgCCcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgAAAAAAABxAH4AhnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgBAAAAAAFxAH4AhXEAfgCJcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BFHEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIcQB+AI1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAAAAAAAAHEAfgCQcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAEAAAAAAXEAfgCPcQB+AJNxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEYcQB+AAgAAAAAAABxAH4AhHBwAABzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAhzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEccQB+AAhxAH4AmHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAAAAAAAAcQB+AJxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAQAAAAABcQB+AJtxAH4An3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AR1xAH4ACAAAAAAAAHEAfgCacHBzcQB+ACoAAAABdwQAAAABc3EAfgCjAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHHEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BInEAfgAIAAAAAAAAcQB+AKZwcQB+AKd4cHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACAAAAAAAAHEAfgCtcHNxAH4ArgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACHEAfgCwcQB+ALNzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+AKgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEncQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAgAAAAAAABxAH4AuXBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhxAH4Av3EAfgDGc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BJ3EAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIAAAAAAAAcQB+AMpwc3EAfgCuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIcQB+AMxxAH4AznNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AKgAAAAF3BAAAAAFzcQB+ANIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhxAH4A1XNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATFxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATJxAH4ACAAAAAAAAHEAfgDbcAF4c3EAfgAqAAAAAXcEAAAAAXEAfgDoeHEAfgAIc3EAfgDWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BNXEAfgAIAAAAAAAAcQB+ANtwAXEAfgDVc3EAfgAwcQB+AORw\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=8", + "structureSignatureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "structureSignatureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "joinAlgorithmSignatureSha256" : "03d7a2bdc493d7e3d2a3128c10a7cee6c2b544ef522375622a90b30277354e23", + "actualResultSizesSignatureSha256" : "d5b8cf9ddc61ba8386abf34a7830e54cf6aa27571adc5bc72f2b034926abfa64", + "estimatesSignatureSha256" : "498de055b200842ee050dc5f125412db50c04f878d73336815680b92a32e5c5f", + "joinAlgorithmMultisetSignatureSha256" : "f1261ab4cda229f34c0992b2b0dfc259d4ddedd7fc89eca0cbf33f21c11e2640", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "statementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ef8126388f21fb10c8e3ec78d3298eb9b09d0b60f6f9e370a99f8f84ad9a3e1e", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "c86090ebc22aefaaa8704580c73546de2eeb16e8e133697f9c2eee87105ea728", + "operatorWorkTopContributors" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;ExtensionElem (optMarker)[UNKNOWN]:0;Extension[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=optMarker) (bindingState=bound)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ └── LeftJoin\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9M) [left]\n │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left]\n │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left]\n │ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left]\n │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right]\n │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound)\n │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound)\n │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right]\n │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right]\n │ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound)\n │ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right]\n │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound)\n │ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ │ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ ║ │ o: Var (name=drug) (bindingState=unbound)\n │ ║ ║ └── Filter [right]\n │ ║ ║ ╠══ Or\n │ ║ ║ ║ ├── Compare (<)\n │ ║ ║ ║ │ Var (name=p) (bindingState=bound)\n │ ║ ║ ║ │ ValueConstant (value=\"0.05\"^^)\n │ ║ ║ ║ └── Compare (>)\n │ ║ ║ ║ Var (name=effect) (bindingState=bound)\n │ ║ ║ ║ ValueConstant (value=\"0.7\"^^)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K)\n │ ║ ║ ├── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ s: Var (name=result) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ ║ │ o: Var (name=p) (bindingState=unbound)\n │ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ s: Var (name=result) (bindingState=bound)\n │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ ║ o: Var (name=effect) (bindingState=unbound)\n │ ║ ╚══ Extension [right]\n │ ║ ├── StatementPattern (resultSizeEstimate=2.9K)\n │ ║ │ s: Var (name=result) (bindingState=bound)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ │ o: Var (name=marker) (bindingState=unbound)\n │ ║ └── ExtensionElem (optMarker)\n │ ║ Var (name=marker) (bindingState=bound)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug) (bindingState=bound)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug) (bindingState=unbound)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 8891570.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 955.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 3082.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join (JoinIterator) (resultSizeEstimate=8.9M)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=2.9K)\n Join (JoinIterator) (resultSizeEstimate=955)\n Join (JoinIterator) (resultSizeEstimate=6.00)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=3.1K)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern (resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join (JoinIterator) (resultSizeEstimate=8.9M)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=2.9K)\\n Join (JoinIterator) (resultSizeEstimate=955)\\n Join (JoinIterator) (resultSizeEstimate=6.00)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=3.1K)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern (resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"e52c56d2a9001b5d374f638643f6b164bf491063f81b2afe5f91f13cae3d7c4d\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QWD1lkAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHQADEpvaW5JdGVyYXRvcnNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABtxAH4ACHEAfgAcc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcQB+ABxzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAecQB+AAhxAH4AHHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QI3YAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHEAfgAcc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9AGAAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIHEAfgAIcQB+ABxzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAEAAAAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////8/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIXEAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAAHZGlzZWFzZXhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAncEAAAAAnNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4ADkwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ABFMAAZ2YWx1ZXNxAH4ADnhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgAoAAAAAXcEAAAAAXEAfgAneHBzcgAaamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3TZpDy+zYgG0gIAAVsAAWF0ABNbTGphdmEvbGFuZy9PYmplY3Q7eHB1cgAgW0xvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5WYWx1ZTvQ6xK0h0h51gIAAHhwAAAAAXNyACZvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUlSSZpFKkOTZkZuAgACSQAMbG9jYWxOYW1lSWR4TAAJaXJpU3RyaW5ncQB+ABh4cgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdElSSWw/DzoHkfCWAgABSQAOY2FjaGVkSGFzaENvZGV4cAAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzBzcQB+ACpzcQB+ACgAAAABdwQAAAABcQB+ACd4cHNxAH4ALnVxAH4AMQAAAAFzcQB+ADMAAAAA/////3QAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZGlzZWFzZS8xeHNyADBvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm418/6mbe73UgIACUwAE2Fzc3VyZWRCaW5kaW5nTmFtZXNxAH4AEUwACmNvbnRleHRWYXJxAH4AC0wACWluZGV4TmFtZXEAfgAYTAAJb2JqZWN0VmFycQB+AAtMAAxwcmVkaWNhdGVWYXJxAH4AC0wABXNjb3BldAA4TG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvU3RhdGVtZW50UGF0dGVybiRTY29wZTtMAA5zdGF0ZW1lbnRPcmRlcnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9jb21tb24vb3JkZXIvU3RhdGVtZW50T3JkZXI7TAAKc3ViamVjdFZhcnEAfgALTAAHdmFyTGlzdHEAfgAOeHEAfgADAAAAAAAAAAFAJKfpy4o0kf///////////////////////////////wD///////////////////////////////////////////////////////////////9AjdgAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIXEAfgAIc3IAP29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTbWFsbFN0cmluZ1NldHm8SKeF/XlAAgABWwAGdmFsdWVzdAATW0xqYXZhL2xhbmcvU3RyaW5nO3hwdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAA3QABXRyaWFsdAATX2NvbnN0XzVhN2I1OWZkX3VyaXEAfgAncHBzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYXJAQ+6y+v7wxwIABVoACWFub255bW91c0kADmNhY2hlZEhhc2hDb2RlWgAIY29uc3RhbnRMAARuYW1lcQB+ABhMAAV2YWx1ZXQAH0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9WYWx1ZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBAcQB+AAgAAAAAAABxAH4AJ3BzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBAcQB+AAgBAAAAAAFxAH4AR3NxAH4AMwAAAAAAAAAgdAAuaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9zdHVkaWVzRGlzZWFzZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEBxAH4ACAAAAAAAAHEAfgBGcHAAAHNxAH4APQAAAAAAAAABP/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QI3YAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACBxAH4ACHNxAH4AQXVxAH4ARAAAAANxAH4ARnQAE19jb25zdF9mNWU1NTg1YV91cml0ABNfY29uc3RfNDc5NWJiZmJfdXJpcHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBTcQB+AAgBAAAAAAFxAH4AV3NxAH4AMwAAAAAAAAAgdAAtaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9DbGluaWNhbFRyaWFsc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AU3EAfgAIAQAAAAABcQB+AFZzcQB+ADMAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlcQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AU3EAfgAIAAAAAAAAcQB+AEZwcAAAc3EAfgA9AAAAAAAAAAFAMetpKbAAsP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AH3EAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBGdAATX2NvbnN0XzczYzJlNDBhX3VyaXQAA2FybXBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AX3EAfgAIAAAAAAAAcQB+AGNwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AX3EAfgAIAQAAAAABcQB+AGJzcQB+ADMAAAAAAAAAIHQAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvaGFzQXJtcQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AX3EAfgAIAAAAAAAAcQB+AEZwcAAAc3EAfgA9AAAAAAAAAAFAMetpKbAAsP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHnEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBjdAATX2NvbnN0XzYwZjZkN2FmX3VyaXQABnJlc3VsdHBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaXEAfgAIAAAAAAAAcQB+AG1wc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaXEAfgAIAQAAAAABcQB+AGxzcQB+ADMAAAAAAAAAIHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvaGFzUmVzdWx0cQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AaXEAfgAIAAAAAAAAcQB+AGNwcAAAc3EAfgA9AAAAAAAAAAFASuEdvogBCP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBjdAATX2NvbnN0X2FlZmQzMjc0X3VyaXQABGRydWdwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHNxAH4ACAAAAAAAAHEAfgB3cHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHNxAH4ACAEAAAAAAXEAfgB2c3EAfgAzAAAAAAAAACB0ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2FybURydWdxAH4AUHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgAAAAAAABxAH4AY3BwAABzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAbcQB+AAhzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0CoFAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB9cQB+AAhxAH4AHHNxAH4APQAAAAAAAAABQErhHb6IAQj///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH5xAH4ACHNxAH4AQXVxAH4ARAAAAANxAH4AbXQAE19jb25zdF84MGM3MTk4OV91cml0AAFwcHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgAAAAAAABxAH4Ag3BzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgBAAAAAAFxAH4AgnNxAH4AMwAAAAAAAAAgdAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9wVmFsdWVxAH4AUHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB/cQB+AAgAAAAAAABxAH4AbXBwc3EAfgA9AAAAAAAAAAFASuEdvogBCP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfnEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBtdAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAAAAAAAAcQB+AI1wc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAQAAAAABcQB+AIxzcQB+ADMAAAAAAAAAIHQAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgBQcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIlxAH4ACAAAAAAAAHEAfgBtcHAAAHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfXEAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AJQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCVcQB+AAhzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCYcQB+AAgAAAAAAABxAH4Ag3BzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBJeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlTGl0ZXJhbOkbizOYhsbxAgAETAAMY29yZURhdGF0eXBldAArTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL2Jhc2UvQ29yZURhdGF0eXBlO0wACGRhdGF0eXBldAAdTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL0lSSTtMAAVsYWJlbHEAfgAYTAAIbGFuZ3VhZ2VxAH4AGHhyACxvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0TGl0ZXJhbO4lVi6FByRNAgAAeHB+cgAtb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5Db3JlRGF0YXR5cGUkWFNEAAAAAAAAAAASAAB4cQB+AE90AAdERUNJTUFMc3IAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuSW50ZXJuZWRJUkkCWUYAhQt1BwMABEkACGhhc2hDb2RlTAAJbG9jYWxOYW1lcQB+ABhMAAluYW1lc3BhY2VxAH4AGEwAC3N0cmluZ1ZhbHVlcQB+ABh4cHcwRwCNKgAhaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjAAdkZWNpbWFseHQABDAuMDVwfnIAMW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZSRDb21wYXJlT3AAAAAAAAAAABIAAHhxAH4AT3QAAkxUc3EAfgCWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AlXEAfgAIc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AqnEAfgAIAAAAAAAAcQB+AI1wc3EAfgCaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AqnEAfgAIc3EAfgCccQB+AKJxAH4ApXQAAzAuN3B+cQB+AKd0AAJHVAAAc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsXEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBtdAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+ALZwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAQAAAAABcQB+ALVzcQB+ADMAAAAAAAAAIHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+AG1wcHNxAH4AKAAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABh4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCxcQB+AAhzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC+cQB+AAgAAAAAAABxAH4AtnB0AAlvcHRNYXJrZXJ4cHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgDAcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACHNxAH4AMwAAAAD/////dAAtaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXIvOTk5fnEAfgCndAACTkVzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hTZXTYbNdald0qHgIAAHhxAH4AJXcMAAAAED9AAAAAAAAAeHNxAH4AKAAAAAF3BAAAAAFzcgApb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cEVsZW0cE1B2XvCgegIAAkwABG5hbWVxAH4AGEwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQWdncmVnYXRlT3BlcmF0b3I7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AEnEAfgAIdAAFY291bnRzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db3VudMMbpEw2mjeAAgAAeHIAOW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RBZ2dyZWdhdGVPcGVyYXRvcje77Y0bQTG9AgABWgAIZGlzdGluY3R4cgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5VbmFyeVZhbHVlT3BlcmF0b3KlmC9zIRViuAIAAUwAA2FyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AzXEAfgAIc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0nEAfgAIAAAAAAAAcQB+AHdwAXhzcQB+ACgAAAABdwQAAAABc3EAfgC9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIAAAAAAAAcQB+AHdwAXEAfgDOeAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2nEAfgAIAXEAfgDOcHNxAH4AvQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AOJxAH4ACHEAfgDhAXNxAH4A2AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACHVxAH4A2wAAAAFzcQB+AN0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDkcQB+AAgBcQB+AM5wcQB+AOBzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AKAAAAAF3BAAAAAFxAH4A5nhxAH4A63BxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOxxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO1xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO5xAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDvcQB+AAhwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8HEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDycQB+AAhwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APRxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhwc3EAfgAiAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9nEAfgAIc3EAfgDIdwwAAAACP0AAAAAAAAFxAH4AJ3hxAH4AKXNxAH4APQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4AQXVxAH4ARAAAAANxAH4ARnEAfgBWcQB+AFdwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACAEAAAAAAXEAfgBXcQB+AFlzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAgBAAAAAAFxAH4AVnEAfgBccQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+XEAfgAIAAAAAAAAcQB+AEZwcAAAc3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9XEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBGcQB+AEd0AAdkaXNlYXNlcHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4BAnBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4AR3EAfgBMcQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AEZwcAAAc3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9HEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgBGcQB+AGJxAH4AY3Bwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAAAAAAAAcQB+AGNwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAQAAAAABcQB+AGJxAH4AZnEAfgBQcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACAAAAAAAAHEAfgBGcHAAAHNxAH4APQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APNxAH4ACHNxAH4AQXVxAH4ARAAAAAN0AANhcm1xAH4AdnEAfgB3cHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4Ad3BzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgBAAAAAAFxAH4AdnEAfgB6cQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BDHEAfgAIAAAAAAAAcQB+AQ9wcAAAc3EAfgA9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8nEAfgAIc3EAfgBBdXEAfgBEAAAAA3EAfgEPcQB+AGxxAH4AbXBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAAAAAAAAcQB+AG1wc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAQAAAAABcQB+AGxxAH4AcHEAfgBQcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARNxAH4ACAAAAAAAAHEAfgEPcHAAAHNxAH4APQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHNxAH4AQXVxAH4ARAAAAAN0AAZyZXN1bHRxAH4AgnQAAXBwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAAAAAAAAHEAfgEdcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAEAAAAAAXEAfgCCcQB+AIZxAH4AUHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEZcQB+AAgAAAAAAABxAH4BHHBwAABzcQB+AD0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDwcQB+AAhzcQB+AEF1cQB+AEQAAAADcQB+ARxxAH4AjHQABmVmZmVjdHBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAAAAAAAAcQB+ASRwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAQAAAAABcQB+AIxxAH4AkHEAfgBQcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASFxAH4ACAAAAAAAAHEAfgEccHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4APQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AShxAH4ACHNxAH4AQXVxAH4ARAAAAAN0AAZyZXN1bHRxAH4AtXEAfgC2cHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgAAAAAAABxAH4AtnBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgBAAAAAAFxAH4AtXEAfgC5cQB+AFBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BKXEAfgAIAAAAAAAAcQB+ASxwcHNxAH4AKAAAAAF3BAAAAAFzcQB+AL0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgExcQB+AAgAAAAAAAB0AAZtYXJrZXJwdAAJb3B0TWFya2VyeHBzcQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDucQB+AAhzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAgAAAAAAABxAH4AwHBzcQB+AJoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAhxAH4AxHEAfgDGc3EAfgCTAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7XEAfgAIc3EAfgCWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOHEAfgAIc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIAAAAAAAAcQB+AINwc3EAfgCaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIcQB+AKBxAH4AqHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AThxAH4ACHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACAAAAAAAAHEAfgCNcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACHEAfgCtcQB+AK9zcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+ACgAAAABdwQAAAABc3EAfgDLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIcQB+AM5zcQB+AM8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFCcQB+AAhzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFDcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAoAAAAAXcEAAAAAXEAfgDgeHEAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A4HEAfgAIc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BR3EAfgAIAAAAAAAAcQB+AUVwAXEAfgDOc3EAfgAucQB+ANxw\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?arm ?drug .\n ?result ?p .\n ?result ?effect .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "13", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=7", + "structureSignatureRawSha256" : "12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4", + "structureSignatureNormalizedSha256" : "12599f45c038f981423e302896744819851287151bd8209c04e3ebcc5ec6cdd4", + "joinAlgorithmSignatureSha256" : "32c1199eb4757d7953418c103717d5e2a3d9b5735fe0beddaa054db4fb66f97d", + "actualResultSizesSignatureSha256" : "61c0d835be9893b314245491fd9522bd53acd4237e9e61bc013b3f4171fcfc00", + "estimatesSignatureSha256" : "b32831565f51f3dfc92c21ed08045be4816548b3dea4ace3d1fe52278af541f6", + "joinAlgorithmMultisetSignatureSha256" : "c8e859f2621c395ee698ca39815245bc13a43ba048d347833b6adff93b7c998b", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "32ea5578af553cb8b5c92b37d26024c305d0814b7cab8da930a4fdf0e6c04c46", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "8949440.2", + "modeledInputRowsSum" : "8933093", + "modeledOutputRowsSum" : "8923489", + "modeledJoinInputRowsSum" : "8917522", + "modeledJoinOutputRowsSum" : "8904268", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.2;filter=0;group=0;join=8930220;projection=0;scan=19220;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=2886;filter=3082;group=0;join=8907905;projection=0;scan=19220;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "7d3d32a85f12561609e61de1a18f6d6d216a9af9ff2fc2f4d5ee381b030ea5c5", + "modeledOutputRowsByCategory" : "distinct=0;extension=1;filter=0;group=0;join=8904268;projection=0;scan=19220;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "484c3c7cd8c90cbdefc1c682f1f946cc8dbe30e975027d965134abe940f55e9b", + "modeledFilterInputRowsSum" : "3082", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "1", + "modeledJoinWorkByAlgorithm" : "JoinIterator=8930220;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "1e7a49796ed8b6355f7551f1d1548fc48b72f94f82524dbb6e1be74cfd97af45", + "modeledWorkVector" : "workUnits=8949440.2|barrierCount=4|joinInputRowsSum=8917522|joinOutputRowsSum=8904268|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=8930220;UNKNOWN=0|categories=distinct=0;extension=0.2;filter=0;group=0;join=8930220;projection=0;scan=19220;unknown=0", + "modeledWorkVectorSignatureSha256" : "9d8cc299d8bebb544a09742d3178b17657abd36163d7d16905b3c5bcb219daeb", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=2885|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=3082|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=8930220|inputRows=16335|outputRows=8904268|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=8891570|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=19220|inputRows=19220|outputRows=19220|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "72511e04e428cd9ce70e4a19ec6946d7a6c882f6375f0a950c08214fed314ac1", + "operatorWorkTopContributors" : "Join[JoinIterator]:8930220;StatementPattern[UNKNOWN]:19220;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.2;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "8923489", + "resultSizeEstimateMax" : "8891570", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.7M, nextCallCountActual=1, nextTimeNanosActual=14.2K, firstRowTimeNanosActual=15.7M, openCountActual=1, lastRowTimeNanosActual=15.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.9M, avgNextNanosActual=14.3K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.7M, nextCallCountActual=1, nextTimeNanosActual=4.5K, firstRowTimeNanosActual=15.7M, openCountActual=1, lastRowTimeNanosActual=15.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.9M, avgNextNanosActual=4.6K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.7M, nextCallCountActual=1, nextTimeNanosActual=1000, aggregateEvalCountActual=18, firstRowTimeNanosActual=15.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=15.8M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.9M, avgNextNanosActual=1000)\n │ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=12.1M, nextCallCountActual=18, nextTimeNanosActual=5.0K, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, firstRowTimeNanosActual=3.4M, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=13.4M, closeCountActual=1, exprEvalTimeNanosActual=402.6K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=605.6K, avgNextNanosActual=280, filterRejectRateActual=0)\n │ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=266.0K, hasNextFalseCountActual=0)\n │ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0)\n │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=11.5M, nextCallCountActual=18, nextTimeNanosActual=4.0K, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=3.2M, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=609.5K, avgNextNanosActual=222, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0)\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9M, resultSizeActual=18, joinRightIteratorsCreatedActual=26, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, inputRowsActual=44, rowsDroppedActual=26, expansionFactorActual=0.41, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left]\n │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=26, inputRowsActual=34, rowsDroppedActual=8, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=18, stddevActual=4.21, confidenceScoreActual=0.28, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left]\n │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=8, inputRowsActual=16, rowsDroppedActual=8, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=3.5K, stddevActual=59, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=8) [left]\n │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=8, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=8, inputRowsActual=10, rowsDroppedActual=2, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=3.4K, stddevActual=59, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=8, avgRightRowsPerLeftActual=4.00, joinOutputPerLeftActual=4.00) [left]\n │ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=23.3K, nextCallCountActual=2, nextTimeNanosActual=4.1K, firstRowTimeNanosActual=171.1K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=12.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=7.8K, avgNextNanosActual=2.1K) [left]\n │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=283.1K, nextCallCountActual=8, nextTimeNanosActual=109.8K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, firstRowTimeNanosActual=35.4K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=3.8M, closeCountActual=2, varsAddedActual=3, indexName=ospc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=28.3K, avgNextNanosActual=13.7K, indexHitRateActual=0.09) [right]\n │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=210.0K, nextCallCountActual=8, nextTimeNanosActual=22.0K, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, firstRowTimeNanosActual=17.2K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=757.4K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=13.1K, avgNextNanosActual=2.8K, indexHitRateActual=0.50) [right]\n │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=181.5K, nextCallCountActual=26, nextTimeNanosActual=81.8K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, firstRowTimeNanosActual=7.4K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=725.2K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=5.3K, avgNextNanosActual=3.1K, indexHitRateActual=0.76) [right]\n │ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=285.1K, nextCallCountActual=26, nextTimeNanosActual=60.7K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=8.4K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=190.0K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.5K, avgNextNanosActual=2.3K, indexHitRateActual=0.50) [right]\n │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=238.7K, nextCallCountActual=26, nextTimeNanosActual=55.7K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=7.2K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=167.2K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.6K, avgNextNanosActual=2.1K, indexHitRateActual=0.50) [right]\n │ ║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ └── Filter (resultSizeActual=18, hasNextCallCountActual=44, hasNextTrueCountActual=18, hasNextTimeNanosActual=4.1M, nextCallCountActual=18, nextTimeNanosActual=7.2K, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, firstRowTimeNanosActual=44.8K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=26, exprTrueCountActual=18, lastRowTimeNanosActual=124.1K, closeCountActual=26, exprEvalTimeNanosActual=2.6M, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=93.5K, avgNextNanosActual=403, filterRejectRateActual=0.31) [right]\n │ ║ ║ ╠══ Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0)\n │ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ ValueConstant (value=\"0.05\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.9M, hasNextFalseCountActual=0)\n │ ║ ║ ║ └── Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=197.5K, hasNextFalseCountActual=0)\n │ ║ ║ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ ValueConstant (value=\"0.7\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0K, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinLeftBindingsConsumedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=26, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00)\n │ ║ ║ ├── StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=224.9K, nextCallCountActual=26, nextTimeNanosActual=50.6K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=9.2K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=116.8K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3K, avgNextNanosActual=1.9K, indexHitRateActual=0.50) [left]\n │ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=247.2K, nextCallCountActual=26, nextTimeNanosActual=47.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=5.1K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=95.7K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.8K, avgNextNanosActual=1.8K, indexHitRateActual=0.50) [right]\n │ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=988.7K, nextCallCountActual=18, nextTimeNanosActual=90.0K, firstRowTimeNanosActual=9.5K, openCountActual=18, lastRowTimeNanosActual=47.5K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=27.5K, avgNextNanosActual=5.0K) [right]\n │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=222.8K, nextCallCountActual=18, nextTimeNanosActual=42.4K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, firstRowTimeNanosActual=8.8K, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=43.7K, closeCountActual=18, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.2K, avgNextNanosActual=2.4K, indexHitRateActual=0.50)\n │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0)\n │ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15736583,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 14250,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 15774584,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15876917,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15732125,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 4583,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 15785333,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15887125,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15718459,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 1000,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 18,\n \"firstRowTimeNanosActual\" : 15785833,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15879541,\n \"maxGroupSizeActual\" : 18,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 18.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 20,\n \"hasNextTrueCountActual\" : 19,\n \"hasNextTimeNanosActual\" : 12112956,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 5040,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 3435500,\n \"exprEvalCountActual\" : 18,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 13494541,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 402623.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18,\n \"exprTrueCountActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 265958.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2292.0\n }\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 19,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 11580165,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 4000,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 3249750,\n \"leftRowsWithMatchActual\" : 18,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 12720083,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 8891570.0,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 23333,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 4125,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 171167,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 12836209,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern [index: ospc] \",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 283167,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 109834,\n \"joinRightIteratorsCreatedActual\" : 2,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 94,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 86,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 35416,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 3866041,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"ospc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=disease)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 16,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 210042,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 22000,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 8,\n \"sourceRowsScannedActual\" : 16,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 17208,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 757458,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 34,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 181501,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 81833,\n \"joinRightIteratorsCreatedActual\" : 8,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 34,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 7416,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 725291,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 285126,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 60712,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8417,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 190042,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 238750,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 55710,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 7208,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 167208,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 44,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 4114289,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 7250,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 26,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 44833,\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 26,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 124166,\n \"closeCountActual\" : 26\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2560128.0\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 18,\n \"shortCircuitCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2427624.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 12,\n \"exprTrueCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2133918.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1896708.0\n }\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 12,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 4\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 197543.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 5000.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 3082.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 224961,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 50627,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 9208,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 116833,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 247209,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 47875,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 5167,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 95792,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 988753,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 90043,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 9500,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 47500,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 222874,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 42415,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 36,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 18,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8834,\n \"indexLookupCountActual\" : 18,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 43792,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n Filter (resultSizeActual=18)\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\n Join (JoinIterator) (resultSizeEstimate=8.9M, resultSizeActual=18)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\n Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8.00)\n Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=8.00)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n Filter (resultSizeActual=18)\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension (resultSizeActual=18)\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n Filter (resultSizeActual=18)\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\\n Join (JoinIterator) (resultSizeEstimate=8.9M, resultSizeActual=18)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26)\\n Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8.00)\\n Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=8.00)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n Filter (resultSizeActual=18)\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension (resultSizeActual=18)\\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"ae112f869caea0bf4068096ef7fbf708c176f5957829295d2b1b01877e36a88b\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAA8CLuAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA5SwAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAADwsip0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAAAPIwfXhwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAPAfBwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAN6oAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAPCzeHEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAPJDNXhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAPANnQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEecAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAPDddXEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAPJrFXhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAO/YOwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA+gAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQDIAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAABJxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAPDfaXQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAA8k11dAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnQAK0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1ZhbHVlRXhwcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAABQAAAAAALjUPAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAE7AAAAAAAAAAEr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAEv//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAAXZXhwckV2YWxUaW1lTmFub3NBY3R1YWxzcQB+ACdBGJL8AAAAAHhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3EAfgArcQB+AA9zcQB+AAwAAAAAADRr7HQAE2V4cHJFdmFsQ291bnRBY3R1YWxxAH4AK3QAFGV4cHJGYWxzZUNvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAB0ABlwcmVkaWNhdGVFcnJvckNvdW50QWN0dWFscQB+ADpxAH4AEnEAfgAOdAATZXhwclRydWVDb3VudEFjdHVhbHEAfgArcQB+ABNzcQB+AAwAAAAAAM3pDXEAfgARcQB+AA54cQB+ACRxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AMXhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAATAAAAAACwswUAAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAA+gAAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAxllZ0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHEAfgArcQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAADCF9NxAH4AEXEAfgAOdAAZbWF4UmlnaHRSb3dzUGVyTGVmdEFjdHVhbHEAfgAOeHEAfgAycQB+AAh0ABBMZWZ0Sm9pbkl0ZXJhdG9yc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABr/////////////////////AAAAAAAAABJBYPWWQAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQXEAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABr/////////////////////AAAAAAAAABpApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ASXEAfgAIcQB+AEpzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAGv////////////////////8AAAAAAAAAGkCmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBLcQB+AAhxAH4ASnNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAI/////////////////////wAAAAAAAAAaQKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AExxAH4ACHEAfgBKc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAj/////////////////////AAAAAAAAAAhAjdgAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ATXEAfgAIcQB+AEpzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAv////////////////////8AAAAAAAAACEAYAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBOcQB+AAhxAH4ASnNyADRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmRpbmdTZXRBc3NpZ25tZW50N9Z2Fr6OiCMCAAJMAAxiaW5kaW5nTmFtZXNxAH4AI0wAC2JpbmRpbmdTZXRzdAAUTGphdmEvbGFuZy9JdGVyYWJsZTt4cQB+AAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAABbJQAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAEB0AAAAAAAAAAj/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3NxAH4ADAAAAAAAAAACcQB+AA9zcQB+AAwAAAAAAAKcn3EAfgARcQB+AA5xAH4AEnEAfgAOdAAWYmluZGluZ3NQcm92aWRlZEFjdHVhbHEAfgBUcQB+ABNzcQB+AAwAAAAAAMPdcXhxAH4AT3EAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAAHZGlzZWFzZXhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAncEAAAAAnNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4AHUwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ACNMAAZ2YWx1ZXNxAH4AHXhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgBbAAAAAXcEAAAAAXEAfgBaeHBzcgAaamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3TZpDy+zYgG0gIAAVsAAWF0ABNbTGphdmEvbGFuZy9PYmplY3Q7eHB1cgAgW0xvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5WYWx1ZTvQ6xK0h0h51gIAAHhwAAAAAXNyACZvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUlSSZpFKkOTZkZuAgACSQAMbG9jYWxOYW1lSWR4TAAJaXJpU3RyaW5ncQB+AEB4cgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdElSSWw/DzoHkfCWAgABSQAOY2FjaGVkSGFzaENvZGV4cAAAAAAAAAAodAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzBzcQB+AF1zcQB+AFsAAAABdwQAAAABcQB+AFp4cHNxAH4AYXVxAH4AZAAAAAFzcQB+AGYAAAAAAAAAKHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZGlzZWFzZS8xeHNyADBvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm418/6mbe73UgIACUwAE2Fzc3VyZWRCaW5kaW5nTmFtZXNxAH4AI0wACmNvbnRleHRWYXJxAH4AF0wACWluZGV4TmFtZXEAfgBATAAJb2JqZWN0VmFycQB+ABdMAAxwcmVkaWNhdGVWYXJxAH4AF0wABXNjb3BldAA4TG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvU3RhdGVtZW50UGF0dGVybiRTY29wZTtMAA5zdGF0ZW1lbnRPcmRlcnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9jb21tb24vb3JkZXIvU3RhdGVtZW50T3JkZXI7TAAKc3ViamVjdFZhcnEAfgAXTAAHdmFyTGlzdHEAfgAdeHEAfgADAAAAAAAAAAFAJKfpy4o0kQAAAAAAAAAKAAAAAAAEUh8AAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAIAAAAAAAAACAAAAAAAAa0KAAAAAAAAAAhAjdgAAAAAAAAAAAAAAAAAVgAAAAAAAAAIAAAAAAAAAF7//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAAAACHEAfgAPc3EAfgAMAAAAAAAAilh0ABZpbmRleExvb2t1cENvdW50QWN0dWFscQB+AFRxAH4AEXEAfgBUcQB+ABJxAH4AVHEAfgATc3EAfgAMAAAAAAA6/bl4cQB+AE9xAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAV0cmlhbHQAE19jb25zdF81YTdiNTlmZF91cmlxAH4AWnB0AARvc3Bjc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgBATAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIAAAAAAAAcQB+AFpwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIAQAAAAABcQB+AH9zcQB+AGYAAAAA/////3QALmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvc3R1ZGllc0Rpc2Vhc2V+cgA2b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAQREVGQVVMVF9DT05URVhUU3BzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgAAAAAAABxAH4AfnBwAABzcQB+AHAAAAAAAAAAAT/wAAAAAAAAAAAAAAAAABAAAAAAAAM0egAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAVfAAAAAAAAAACECN2AAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAEP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3EAfgB1cQB+AA9zcQB+AAwAAAAAAABDOHEAfgB3cQB+AHVxAH4AEXEAfgB1cQB+ABJxAH4AdXEAfgATc3EAfgAMAAAAAAALjtJ4cQB+AE5xAH4ACHNxAH4AeXVxAH4AfAAAAANxAH4AfnQAE19jb25zdF9mNWU1NTg1YV91cml0ABNfY29uc3RfNDc5NWJiZmJfdXJpcHQABHNwb2NzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCMcQB+AAgBAAAAAAFxAH4Ak3NxAH4AZgAAAAD/////dAAtaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9DbGluaWNhbFRyaWFsc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAQAAAAABcQB+AJJzcQB+AGYAAAAA/////3QAL2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlcQB+AIlwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAAAAAAAAcQB+AH5wcAAAc3EAfgBwAAAAAAAAAAFAMetpKbAAsAAAAAAAAAAiAAAAAAACxP0AAAAAAAAAGgAAAAAAAAAACAAAAAAAAAAaAAAAAAAAAAgAAAAAAAAAGgAAAAAAAT+pAAAAAAAAABpApooAAAAAAAAAAAAAAAAACAAAAAAAAAAaAAAAAAAAACL//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtzcQB+AAwAAAAAAAAAGnEAfgAPc3EAfgAMAAAAAAAAHPhxAH4Ad3EAfgB1cQB+ABFxAH4AdXEAfgAScQB+AHVxAH4AE3NxAH4ADAAAAAAACxEreHEAfgBNcQB+AAhzcQB+AHl1cQB+AHwAAAADcQB+AH50ABNfY29uc3RfNzNjMmU0MGFfdXJpdAADYXJtcHQABHNwb2NzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCccQB+AAgAAAAAAABxAH4ApHBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCccQB+AAgBAAAAAAFxAH4Ao3NxAH4AZgAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9oYXNBcm1xAH4AiXBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCccQB+AAgAAAAAAABxAH4AfnBwAABzcQB+AHAAAAAAAAAAAUAx62kpsACwAAAAAAAAADQAAAAAAARZxgAAAAAAAAAaAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAAAAaAAAAAAAA7SgAAAAAAAAAGkCmigAAAAAAAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAANP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3EAfgCecQB+AA9zcQB+AAwAAAAAAAAg4XEAfgB3cQB+AJ5xAH4AEXEAfgCecQB+ABJxAH4AnnEAfgATc3EAfgAMAAAAAAAC5lp4cQB+AExxAH4ACHNxAH4AeXVxAH4AfAAAAANxAH4ApHQAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwdAAEc3BvY3NxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHEAfgCycHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAEAAAAAAXEAfgCxc3EAfgBmAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgCJcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHEAfgCkcHAAAHNxAH4AcAAAAAAAAAABQErhHb6IAQgAAAAAAAAANAAAAAAAA6SeAAAAAAAAABoAAAAAAAAAABoAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABoAAAAAAADZngAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAABoAAAAAAAAAGgAAAAAAAAA0//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AJ5xAH4AD3NxAH4ADAAAAAAAABwocQB+AHdxAH4AnnEAfgARcQB+AJ5xAH4AEnEAfgCecQB+ABNzcQB+AAwAAAAAAAKNKHhxAH4AS3EAfgAIc3EAfgB5dXEAfgB8AAAAA3EAfgCkdAATX2NvbnN0X2FlZmQzMjc0X3VyaXQABGRydWdwdAAEc3BvY3NxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALlxAH4ACAAAAAAAAHEAfgDAcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALlxAH4ACAEAAAAAAXEAfgC/c3EAfgBmAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2FybURydWdxAH4AiXBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC5cQB+AAgAAAAAAABxAH4ApHBwAABzcQB+ADAAAAAAAAAAAb/wAAAAAAAAAAAAAAAAACwAAAAAAD7HcQAAAAAAAAASAAAAAAAAAAAaAAAAAAAAABIAAAAAAAAAGgAAAAAAAAASAAAAAAAAHFIAAAAAAAAAEr/wAAAAAAAAAAAAAAAAAAAIAAAAAAAAABIAAAAAAAAAGv//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBQ4hAAAAAAHhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3EAfgArcQB+AA9zcQB+AAwAAAAAAACvIXEAfgA4cQB+AJ5xAH4AOXEAfgB1cQB+ADtxAH4AOnEAfgAScQB+AJ5xAH4APHEAfgArcQB+ABNzcQB+AAwAAAAAAAHlBnEAfgARcQB+AJ54cQB+AElxAH4ACHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAABoAAAAAAAAAGgAAAAAAAAAa/////////////////////wAAAAAAAAAaQKgUAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMdxAH4ACHEAfgBKc3EAfgBwAAAAAAAAAAFASuEdvogBCAAAAAAAAAA0AAAAAAADbsEAAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAMXDAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AnnEAfgAPc3EAfgAMAAAAAAAAI/hxAH4Ad3EAfgCecQB+ABFxAH4AnnEAfgAScQB+AJ5xAH4AE3NxAH4ADAAAAAAAAchheHEAfgDNcQB+AAhzcQB+AHl1cQB+AHwAAAADcQB+ALJ0ABNfY29uc3RfODBjNzE5ODlfdXJpdAABcHB0AARzcG9jc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAAAAAAAAcQB+ANVwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAQAAAAABcQB+ANRzcQB+AGYAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvcFZhbHVlcQB+AIlwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AznEAfgAIAAAAAAAAcQB+ALJwcHNxAH4AcAAAAAAAAAABQErhHb6IAQgAAAAAAAAANAAAAAAAA8WpAAAAAAAAABoAAAAAAAAAABoAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABoAAAAAAAC7AwAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAABoAAAAAAAAAGgAAAAAAAAA0//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+AJ5xAH4AD3NxAH4ADAAAAAAAABQvcQB+AHdxAH4AnnEAfgARcQB+AJ5xAH4AEnEAfgCecQB+ABNzcQB+AAwAAAAAAAF2MHhxAH4AzXEAfgAIc3EAfgB5dXEAfgB8AAAAA3EAfgCydAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHB0AARzcG9jc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3HEAfgAIAAAAAAAAcQB+AONwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3HEAfgAIAQAAAAABcQB+AOJzcQB+AGYAAAAA/////3QAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgCJcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ANxxAH4ACAAAAAAAAHEAfgCycHAAAHNyACJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk9y0eTly6RhAu8CAAB4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ADFMAAhyaWdodEFyZ3EAfgAxeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQUKFdAAAAAB4c3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAEdAAXc2hvcnRDaXJjdWl0Q291bnRBY3R1YWxzcQB+AAwAAAAAAAAADnEAfgA4cQB+AJ5xAH4AOXEAfgB1cQB+ADxxAH4AK3hxAH4Ax3EAfgAIc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cQB+AOsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBQEfPAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4AOHEAfgCecQB+ADlzcQB+AAwAAAAAAAAADHEAfgA8cQB+APF4cQB+AOxxAH4ACHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APRxAH4ACAAAAAAAAHEAfgDVcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AIJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBPPEEAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4AOHEAfgAOcQB+ADxxAH4ADnhxAH4A9HEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlTGl0ZXJhbOkbizOYhsbxAgAETAAMY29yZURhdGF0eXBldAArTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL2Jhc2UvQ29yZURhdGF0eXBlO0wACGRhdGF0eXBldAAdTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL0lSSTtMAAVsYWJlbHEAfgBATAAIbGFuZ3VhZ2VxAH4AQHhyACxvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0TGl0ZXJhbO4lVi6FByRNAgAAeHB+cgAtb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5Db3JlRGF0YXR5cGUkWFNEAAAAAAAAAAASAAB4cQB+AIh0AAdERUNJTUFMc3IAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuSW50ZXJuZWRJUkkCWUYAhQt1BwMABEkACGhhc2hDb2RlTAAJbG9jYWxOYW1lcQB+AEBMAAluYW1lc3BhY2VxAH4AQEwAC3N0cmluZ1ZhbHVlcQB+AEB4cHcwRwCNKgAhaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjAAdkZWNpbWFseHQABDAuMDVwfnIAMW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZSRDb21wYXJlT3AAAAAAAAAAABIAAHhxAH4AiHQAAkxUc3EAfgDyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQQgdOAAAAAB4c3EAfgAJP0AAAAAAAAN3CAAAAAQAAAADcQB+ADhxAH4A+HEAfgA5cQB+AHVxAH4APHNxAH4ADAAAAAAAAAAEeHEAfgDscQB+AAhzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgENcQB+AAgAAAAAAABxAH4A43BzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdAs4gAAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4AOHEAfgAOcQB+ADxxAH4ADnhxAH4BDXEAfgAIc3EAfgD/cQB+AQVxAH4BCHQAAzAuN3B+cQB+AQp0AAJHVAAAc3EAfgAcAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAkAAAAAAAPFlEAAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAV+7AAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAFcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAAJRxxAH4AEXEAfgArcQB+ABJxAH4AK3EAfgATc3EAfgAMAAAAAAAAuYx4cQB+AEFxAH4ACHNxAH4AcAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAJAAAAAAAA2aaAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAClrwAAAAAAAAASQKaKAAAAAAAAAAAAAAAAABIAAAAAAAAAEgAAAAAAAAAk//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ACtxAH4AD3NxAH4ADAAAAAAAACKCcQB+AHdxAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAACrEHhxAH4BG3EAfgAIc3EAfgB5dXEAfgB8AAAAA3EAfgCydAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnB0AARzcG9jc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ASZwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAQAAAAABcQB+ASVzcQB+AGYAAAAA/////3QAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AIlwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ALJwcHNxAH4AWwAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+AEB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEbcQB+AAhzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEvcQB+AAgAAAAAAABxAH4BJnB0AAlvcHRNYXJrZXJ4cHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0EQO5gAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+ACtxAH4APHEAfgAreHEAfgAycQB+AAhzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEycQB+AAgAAAAAAABxAH4BMXBzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdAoegAAAAAAHhzcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AOHEAfgAOeHEAfgEycQB+AAhzcQB+AGYAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VyLzk5OX5xAH4BCnQAAk5Fc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cQB+AFh3DAAAABA/QAAAAAAAAHhzcQB+AFsAAAABdwQAAAABc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXBFbGVtHBNQdl7woHoCAAJMAARuYW1lcQB+AEBMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0FnZ3JlZ2F0ZU9wZXJhdG9yO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACRxAH4ACHQABWNvdW50c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ291bnTDG6RMNpo3gAIAAHhyADlvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkFic3RyYWN0QWdncmVnYXRlT3BlcmF0b3I3u+2NG0ExvQIAAVoACGRpc3RpbmN0eHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlWYWx1ZU9wZXJhdG9ypZgvcyEVYrgCAAFMAANhcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AURxAH4ACHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUlxAH4ACAAAAAAAAHEAfgDAcAF4c3EAfgBbAAAAAXcEAAAAAXNxAH4BLgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUxxAH4ACHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AU1xAH4ACAAAAAAAAHEAfgDAcAFxAH4BRXgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4AHXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABhxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+AEBMAA9wcm9qZWN0aW9uQWxpYXNxAH4AQEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVFxAH4ACAFxAH4BRXBzcQB+AS4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgFZcQB+AAhxAH4BWAFzcQB+AU8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAh1cQB+AVIAAAABc3EAfgFUAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAXEAfgFFcHEAfgFXc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AB14cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+AFsAAAABdwQAAAABcQB+AV14cQB+AWJwcQB+AAhzcQB+ACIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFYcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFjcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFkcQB+AAhzcQB+AD4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFlcQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZnEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWdxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaXEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFrcQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BbHEAfgAIcHNxAH4AUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AW1xAH4ACHNxAH4BP3cMAAAAAj9AAAAAAAABcQB+AFp4cQB+AFxzcQB+AHAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFtcQB+AAhzcQB+AHl1cQB+AHwAAAADcQB+AH5xAH4AknEAfgCTcHBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFwcQB+AAgBAAAAAAFxAH4Ak3EAfgCWc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcHEAfgAIAQAAAAABcQB+AJJxAH4AmXEAfgCJcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXBxAH4ACAAAAAAAAHEAfgB+cHAAAHNxAH4AcAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWxxAH4ACHNxAH4AeXVxAH4AfAAAAANxAH4AfnEAfgB/dAAHZGlzZWFzZXBwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAAAAAAAAcQB+AXlwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAQAAAAABcQB+AH9xAH4AhXEAfgCJcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXZxAH4ACAAAAAAAAHEAfgB+cHAAAHNxAH4AcAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWtxAH4ACHNxAH4AeXVxAH4AfAAAAANxAH4AfnEAfgCjcQB+AKRwcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAAAAAAAAHEAfgCkcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAEAAAAAAXEAfgCjcQB+AKhxAH4AiXBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF9cQB+AAgAAAAAAABxAH4AfnBwAABzcQB+AHAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAhzcQB+AHl1cQB+AHwAAAADdAADYXJtcQB+AL9xAH4AwHBwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAAAAAAAAcQB+AMBwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAQAAAAABcQB+AL9xAH4AxHEAfgCJcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYNxAH4ACAAAAAAAAHEAfgGGcHAAAHNxAH4AcAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AeXVxAH4AfAAAAANxAH4BhnEAfgCxcQB+ALJwcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHEAfgCycHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAEAAAAAAXEAfgCxcQB+ALZxAH4AiXBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGKcQB+AAgAAAAAAABxAH4BhnBwAABzcQB+AHAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhzcQB+AHl1cQB+AHwAAAADdAAGcmVzdWx0cQB+ANR0AAFwcHBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgAAAAAAABxAH4BlHBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgBAAAAAAFxAH4A1HEAfgDZcQB+AIlwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BkHEAfgAIAAAAAAAAcQB+AZNwcAAAc3EAfgBwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZ3EAfgAIc3EAfgB5dXEAfgB8AAAAA3EAfgGTcQB+AOJ0AAZlZmZlY3RwcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAAAAAAAAHEAfgGbcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAEAAAAAAXEAfgDicQB+AOdxAH4AiXBzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGYcQB+AAgAAAAAAABxAH4Bk3BwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFmcQB+AAhzcQB+AHAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGfcQB+AAhzcQB+AHl1cQB+AHwAAAADdAAGcmVzdWx0cQB+ASVxAH4BJnBwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAAAAAAAAcQB+ASZwc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAQAAAAABcQB+ASVxAH4BKnEAfgCJcHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AaBxAH4ACAAAAAAAAHEAfgGjcHBzcQB+AFsAAAABdwQAAAABc3EAfgEuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bn3EAfgAIc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BqHEAfgAIAAAAAAAAdAAGbWFya2VycHQACW9wdE1hcmtlcnhwc3EAfgDyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZXEAfgAIc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIAAAAAAAAcQB+ATFwc3EAfgD6AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIcQB+ATtxAH4BPXNxAH4A6gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWRxAH4ACHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Aa9xAH4ACHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACAAAAAAAAHEAfgDVcHNxAH4A+gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACHEAfgEDcQB+AQtzcQB+APIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGvcQB+AAhzcQB+AIEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAgAAAAAAABxAH4A43BzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAhxAH4BF3EAfgEZc3IAEWphdmEudXRpbC5Db2xsU2VyV46rtjobqBEDAAFJAAN0YWd4cAAAAAJ3BAAAAAB4c3EAfgBbAAAAAXcEAAAAAXNxAH4BQgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWNxAH4ACHEAfgFFc3EAfgFGAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BuXEAfgAIc3EAfgCBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BunEAfgAIAAAAAAAAdAAEZHJ1Z3ABeHNxAH4AWwAAAAF3BAAAAAFxAH4BV3hxAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVdxAH4ACHNxAH4AgQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Ab5xAH4ACAAAAAAAAHEAfgG8cAFxAH4BRXNxAH4AYXEAfgFTcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?arm ?drug .\n ?result ?p .\n ?result ?effect .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "13", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "structureSignatureRawSha256" : "02caea518a2497dfaacb1ed066eb2ad102748541f87b8860562545246efa248e", + "structureSignatureNormalizedSha256" : "02caea518a2497dfaacb1ed066eb2ad102748541f87b8860562545246efa248e", + "joinAlgorithmSignatureSha256" : "8ac66f591d8c1ce34817125d812d2db20ddad811fe00027438202010e9abcbf8", + "actualResultSizesSignatureSha256" : "632a4b3b96012cbf54dc8f2cecc4cd06b2dad89473299a7c9bd39fd5b58b9967", + "estimatesSignatureSha256" : "94bd434d18048ee79fd92f54f7f07337fd45ede05c0b4c34d87b6fa75fdc871e", + "joinAlgorithmMultisetSignatureSha256" : "af0a118c0eeef597b3b2bf40840b2241af5c3399d027e0f5aadf3654e49897b3", + "actualResultSizesMultisetSignatureSha256" : "188de6882c3895b871c4e707f51242ce9f7924b57a8096b4f100b07bfcc845bd", + "estimatesMultisetSignatureSha256" : "a0ae892de31e537fdb7af8eb28e581657d7bbcd8cd1db283dbdc36b855b3dc5f", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "646.0499999999999995", + "modeledInputRowsSum" : "404", + "modeledOutputRowsSum" : "379", + "modeledJoinInputRowsSum" : "296", + "modeledJoinOutputRowsSum" : "156", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=452;projection=0.05;scan=164;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=156;projection=1;scan=164;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "7dd090fa3a9f563c23ff527f1f258db8ad28cb25101b5cec5caa7e8c7208588e", + "modeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=156;projection=1;scan=164;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "7c05800b6f87092193293f32472987552c2c0cb88e77b12bf75b9712a17f98b1", + "modeledFilterInputRowsSum" : "44", + "modeledFilterOutputRowsSum" : "36", + "modeledFilterPassRatio" : "0.818182", + "modeledFilterRejectRatio" : "0.181818", + "modeledJoinWorkByAlgorithm" : "JoinIterator=398;LeftJoinIterator=54", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b31f0bfd6365a7d0281220de6d1fcefc4223cbab47243676839897c1432edf15", + "modeledWorkVector" : "workUnits=646.0499999999999995|barrierCount=4|joinInputRowsSum=296|joinOutputRowsSum=156|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=398;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=452;projection=0.05;scan=164;unknown=0", + "modeledWorkVectorSignatureSha256" : "b32381b907c721719d0f57688970a0781024d6d4007161bc182e8b80624837bb", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=3.8|inputRows=19|outputRows=19|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=13.1999999999999995|inputRows=44|outputRows=36|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=12.6|inputRows=18|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=398|inputRows=138|outputRows=138|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=54|inputRows=18|outputRows=18|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: ospc] [UNKNOWN]|nodes=1|workUnits=8|inputRows=8|outputRows=8|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: spoc] [UNKNOWN]|nodes=7|workUnits=156|inputRows=156|outputRows=156|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "f0555b705e33fbcd6439c3f38a2a18814d789ec463ea870b33f5eff00d57b0e5", + "operatorWorkTopContributors" : "Join[JoinIterator]:398;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "estimateActualComparableNodeCount" : "16", + "estimateActualAbsErrorSum" : "8923191", + "estimateActualRelativeErrorMean" : "30967.968416132478", + "estimateActualQErrorP50" : "110.961538461538", + "estimateActualQErrorP95" : "493976.111111111111", + "estimateActualQErrorMax" : "493976.111111111111", + "joinEstimateActualComparableNodeCount" : "7", + "joinEstimateActualQErrorP50" : "110.961538461538", + "joinEstimateActualQErrorP95" : "493976.111111111111", + "joinEstimateActualQErrorMax" : "493976.111111111111", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "8923489", + "resultSizeEstimateMax" : "8891570", + "resultSizeActualSum" : "379", + "resultSizeActualMax" : "26", + "modeledHasNextCallCountSum" : "434", + "modeledHasNextTrueCountSum" : "243", + "modeledHasNextTimeNanosSum" : "93637875", + "modeledNextCallCountSum" : "242", + "modeledNextTimeNanosSum" : "615964", + "modeledJoinRightIteratorCreateCountSum" : "280", + "modeledJoinLeftBindingSetConsumedCountSum" : "232", + "modeledJoinRightBindingSetConsumedCountSum" : "312", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "1.344828", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.114286", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "35", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "29", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "39", + "modeledSourceRowsScannedSum" : "432", + "modeledSourceRowsMatchedSum" : "200", + "modeledSourceRowsFilteredSum" : "232", + "modeledSourceFilterOutRatio" : "0.537037", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "93.637875", + "modeledNextTimeMillisSum" : "0.615964", + "modeledHasNextPerNextRatio" : "1.793388", + "modeledHasNextTruePerNextRatio" : "1.004132" + } + } + } +} \ No newline at end of file diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-right-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-211331607-68b37847.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-right-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-211331607-68b37847.json new file mode 100644 index 00000000000..ad69ce33f6b --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/pharma-q0-after-right-7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0-20260419-211331607-68b37847.json @@ -0,0 +1,449 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-04-19T21:13:31.607168Z", + "queryId" : "pharma-q0-after-right", + "queryString" : "PREFIX pharma: \nPREFIX xsd: \nSELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { \n }\n ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm .\n ?arm pharma:armDrug ?drug ; pharma:hasResult ?result .\n ?result pharma:pValue ?p ; pharma:effectSize ?effect .\n OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) }\n FILTER(?optMarker != )\n FILTER(?p < 0.05 || ?effect > 0.7)\n}", + "unoptimizedFingerprint" : "7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0", + "metadata" : { + "store" : "lmdb", + "theme" : "PHARMA", + "querySource" : "theme-index", + "queryIndex" : "0", + "queryName" : "Pharma: trial drugs for diseases 0-1", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "60aeabe42586de97f294d7e5911bf41646bd3ed2a6c2dff2c462b43569658adc", + "queryString.normalizedWhitespaceSha256" : "d46242e97431d282ec8eab203813f57e57e9ce7a87e41319eb1243a6e54be19d", + "optimizerInput.unoptimizedStructureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "0", + "gitCommit" : "a6db343f08ea7e4e0da41ff4d518ed8502b9bd1c", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "26", + "queryString.charCount" : "667", + "queryString.lineCount" : "12", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.4.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "67", + "optimizerInput.unoptimizedJoinNodeCount" : "8", + "optimizerInput.unoptimizedFilterNodeCount" : "2", + "optimizerInput.unoptimizedStatementPatternCount" : "8", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=8", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "67", + "optimizerOutput.optimizedJoinNodeCount" : "8", + "optimizerOutput.optimizedFilterNodeCount" : "2", + "optimizerOutput.optimizedStatementPatternCount" : "8", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=7", + "optimizerOutput.optimizedStructureNormalizedSha256" : "4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "67", + "executionPlan.executedJoinNodeCount" : "8", + "executionPlan.executedFilterNodeCount" : "2", + "executionPlan.executedStatementPatternCount" : "8", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "executionPlan.executedStructureNormalizedSha256" : "66fb7d5c937cf7dfc9811aac0ca90386b34e929cfc62b9706d23d60c6c3b9f60", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "6289e1e9157f303e506fe4fea1a3afb21174071cf1a6eb9c4f24951ee806ada0", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "executionPlan.executedModeledWorkUnits" : "638.0499999999999995", + "executionPlan.executedModeledInputRowsSum" : "400", + "executionPlan.executedModeledOutputRowsSum" : "375", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "292", + "executionPlan.executedModeledJoinOutputRowsSum" : "152", + "executionPlan.executedModeledFilterInputRowsSum" : "44", + "executionPlan.executedModeledFilterOutputRowsSum" : "36", + "executionPlan.executedModeledFilterPassRatio" : "0.818182", + "executionPlan.executedModeledFilterRejectRatio" : "0.181818", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=444;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=152;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=152;projection=1;scan=164;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=390;LeftJoinIterator=54", + "executionPlan.executedModeledWorkVector" : "workUnits=638.0499999999999995|barrierCount=4|joinInputRowsSum=292|joinOutputRowsSum=152|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=390;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=444;projection=0.05;scan=164;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "51daf2324abde8095e70d7212d3f212cb57b44202235df95c9b548017b8d7607", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "a090df7091400571708f68d53c0bcedc72720778a51c3b48668376cce9921c17", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:390;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "executionPlan.executedEstimateActualComparableNodeCount" : "16", + "executionPlan.executedHasNextCallCountSum" : "434", + "executionPlan.executedHasNextTrueCountSum" : "243", + "executionPlan.executedHasNextTimeNanosSum" : "92199669", + "executionPlan.executedNextCallCountSum" : "242", + "executionPlan.executedNextTimeNanosSum" : "620665", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "140", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "350", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "124", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "0.354286", + "executionPlan.executedJoinTelemetryNodeCount" : "8", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "0.885714", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "17.5", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "43.75", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "15.5", + "executionPlan.executedSourceRowsScannedSum" : "432", + "executionPlan.executedSourceRowsMatchedSum" : "200", + "executionPlan.executedSourceRowsFilteredSum" : "232", + "executionPlan.executedSourceFilterOutRatio" : "0.537037", + "executionPlan.executedHasNextPerNextRatio" : "1.793388", + "executionPlan.executedHasNextTruePerNextRatio" : "1.004132", + "executionPlan.executedEstimateActualQErrorP95" : "3749767364329268555.555555555556", + "executionPlan.executedEstimateActualQErrorMax" : "3749767364329268555.555555555556", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "7", + "executionPlan.executedJoinEstimateActualQErrorP95" : "3749767364329268555.555555555556", + "executionPlan.executedJoinEstimateActualQErrorMax" : "3749767364329268555.555555555556", + "featureFlags.sha256" : "acc04d878713f98f79486b315c214a9125b548a25462e28a3bafc177fea8494b", + "planDeterminism.inputFingerprintSha256" : "7660656b319b5f6ce97a281b59b81aa62b06d9e27f43df84ac6a9f352d7232ba", + "planDeterminism.environmentFingerprintSha256" : "fbd1a40ac4edf3cadb877c5f1b5ac2e7862bb4fc5fe5b0d4c8d5a2849db0b2fa", + "execution.runs" : "5", + "execution.resultCount" : "1", + "execution.totalMillis" : "559", + "execution.averageMillis" : "111", + "execution.minMillis" : "92", + "execution.maxMillis" : "136", + "execution.stdDevMillis" : "15", + "execution.coefficientOfVariationPct" : "14.1621", + "execution.sampleMillis" : "123,136,106,101,92", + "execution.verificationStatus" : "max-runs-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e|05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e|05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e|05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e|05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e|05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6;4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e|05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551|6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "false", + "execution.maxRunsReached" : "true" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "PHARMA", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "", + "cli.queryTimeoutSeconds" : "", + "cli.executionRepeatMinRuns" : "3", + "cli.executionRepeatMaxRuns" : "5", + "cli.executionRepeatSoftLimitMillis" : "2000", + "cli.queryIndex" : "0", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2889358551", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Or\n │ ║ │ ╠══ Compare (<)\n │ ║ │ ║ Var (name=p)\n │ ║ │ ║ ValueConstant (value=\"0.05\"^^)\n │ ║ │ ╚══ Compare (>)\n │ ║ │ Var (name=effect)\n │ ║ │ ValueConstant (value=\"0.7\"^^)\n │ ║ └── Filter\n │ ║ ╠══ Compare (!=)\n │ ║ ║ Var (name=optMarker)\n │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ ╚══ LeftJoin\n │ ║ ├── Join [left]\n │ ║ │ ╠══ Join [left]\n │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ╠══ Join [left]\n │ ║ │ ║ │ ║ │ ║ ├── Join [left]\n │ ║ │ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) [left]\n │ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ │ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ │ ║ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ │ ║ │ ║ │ ║ o: Var (name=disease)\n │ ║ │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ ║ │ s: Var (name=trial)\n │ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ │ ║ │ ║ │ o: Var (name=arm)\n │ ║ │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ │ ║ s: Var (name=arm)\n │ ║ │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ │ ║ │ ║ o: Var (name=drug)\n │ ║ │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ ║ │ s: Var (name=arm)\n │ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ │ ║ │ o: Var (name=result)\n │ ║ │ ║ └── StatementPattern [right]\n │ ║ │ ║ s: Var (name=result)\n │ ║ │ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ │ ║ o: Var (name=p)\n │ ║ │ ╚══ StatementPattern [right]\n │ ║ │ s: Var (name=result)\n │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ │ o: Var (name=effect)\n │ ║ └── Extension [right]\n │ ║ ╠══ StatementPattern\n │ ║ ║ s: Var (name=result)\n │ ║ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ ║ o: Var (name=marker)\n │ ║ ╚══ ExtensionElem (optMarker)\n │ ║ Var (name=marker)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\"\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\"\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\"\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\"\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\"\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\"\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\"\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\"\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join\n Join\n Join\n Join\n Join\n Join\n Join\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\n StatementPattern\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n StatementPattern\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n StatementPattern\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n StatementPattern\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n StatementPattern\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n StatementPattern\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n Join\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n StatementPattern\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n StatementPattern\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"7d62a9fb5fc230a126f7a6d90718ce8fd68ce4671db8fe43dd9914395a5e90e0\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFnEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AGAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAccQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHXEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAfcQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AIHEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHBzcgA0b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5kaW5nU2V0QXNzaWdubWVudDfWdha+jogjAgACTAAMYmluZGluZ05hbWVzcQB+ABFMAAtiaW5kaW5nU2V0c3QAFExqYXZhL2xhbmcvSXRlcmFibGU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AInEAfgAIc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAACP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACoAAAABdwQAAAABcQB+ACl4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGXhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4ALHNxAH4AKgAAAAF3BAAAAAFxAH4AKXhwc3EAfgAwdXEAfgAzAAAAAXNxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3IAMG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybjXz/qZt7vdSAgAJTAATYXNzdXJlZEJpbmRpbmdOYW1lc3EAfgARTAAKY29udGV4dFZhcnEAfgALTAAJaW5kZXhOYW1lcQB+ABlMAAlvYmplY3RWYXJxAH4AC0wADHByZWRpY2F0ZVZhcnEAfgALTAAFc2NvcGV0ADhMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlO0wADnN0YXRlbWVudE9yZGVydAAvTG9yZy9lY2xpcHNlL3JkZjRqL2NvbW1vbi9vcmRlci9TdGF0ZW1lbnRPcmRlcjtMAApzdWJqZWN0VmFycQB+AAtMAAd2YXJMaXN0cQB+AA54cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAicQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAZTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQnEAfgAIAQAAAAABcQB+AEpzcQB+ADUAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAEAAAAAAXEAfgBJc3EAfgA1AAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZX5yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AEJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACFxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF81YTdiNTlmZF91cml0AAdkaXNlYXNlcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgAAAAAAABxAH4AXHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBYcQB+AAgBAAAAAAFxAH4AW3NxAH4ANQAAAAD/////dAAuaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9zdHVkaWVzRGlzZWFzZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFhxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACBxAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4ASHQAE19jb25zdF83M2MyZTQwYV91cml0AANhcm1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBmcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAEAAAAAAXEAfgBlc3EAfgA1AAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc0FybXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGJxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB9xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AANhcm10ABNfY29uc3RfYWVmZDMyNzRfdXJpdAAEZHJ1Z3Bwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAAAAAAAAcQB+AHFwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AbHEAfgAIAQAAAAABcQB+AHBzcQB+ADUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYXJtRHJ1Z3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGxxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4AQ3VxAH4ARgAAAANxAH4Ab3QAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgB7cHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAEAAAAAAXEAfgB6c3EAfgA1AAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHdxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB1xAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBjNzE5ODlfdXJpdAABcHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIZwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAQAAAAABcQB+AIVzcQB+ADUAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvcFZhbHVlcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AgXEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AHHEAfgAIc3EAfgBDdXEAfgBGAAAAA3EAfgCEdAATX2NvbnN0XzY5OTlmYmRhX3VyaXQABmVmZmVjdHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAAAAAAAAcQB+AJBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AjHEAfgAIAQAAAAABcQB+AI9zcQB+ADUAAAAA/////3QAKmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvZWZmZWN0U2l6ZXEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIxxAH4ACAAAAAAAAHEAfgCEcHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABpxAH4ACHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4AQ3VxAH4ARgAAAAN0AAZyZXN1bHR0ABNfY29uc3RfODBhNjk3OWFfdXJpdAAGbWFya2VycHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AnHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgBAAAAAAFxAH4Am3NxAH4ANQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXJxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCXcQB+AAgAAAAAAABxAH4AmnBwc3EAfgAqAAAAAXcEAAAAAXNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbkVsZW31RFrwC9DoKAIAAkwABGV4cHJxAH4AFEwABG5hbWVxAH4AGXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKRxAH4ACAAAAAAAAHQABm1hcmtlcnB0AAlvcHRNYXJrZXJ4cHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AKtxAH4ACAAAAAAAAHQACW9wdE1hcmtlcnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgBMeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Aq3EAfgAIc3EAfgA1AAAAAP////90AC1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Jpb21hcmtlci85OTl+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBUdAACTkVzcgAib3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5PctHk5cukYQLvAgAAeHEAfgCqAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AtnEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4At3EAfgAIAAAAAAAAdAABcHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC3cQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABlMAAhsYW5ndWFnZXEAfgAZeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AVHQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGUwACW5hbWVzcGFjZXEAfgAZTAALc3RyaW5nVmFsdWVxAH4AGXhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cQB+ALJ0AAJMVHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ALZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMhxAH4ACAAAAAAAAHQABmVmZmVjdHBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDIcQB+AAhzcQB+ALtxAH4AwXEAfgDEdAADMC43cH5xAH4AsnQAAkdUc3EAfgAmdwwAAAAQP0AAAAAAAAB4c3EAfgAqAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAZTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAScQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDUcQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDZcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAqAAAAAXcEAAAAAXNxAH4AowAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN1xAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AN5xAH4ACAAAAAAAAHEAfgDbcAFxAH4A1XgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAxxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABlMAA9wcm9qZWN0aW9uQWxpYXNxAH4AGUwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACAFxAH4A1XBzcQB+AKMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgDqcQB+AAhxAH4A6QFzcQB+AOAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDqcQB+AAh1cQB+AOMAAAABc3EAfgDlAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIAXEAfgDVcHEAfgDoc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AA54cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+ACoAAAABdwQAAAABcQB+AO54cQB+APNwcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDpcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+ABcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD2cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A93EAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APhxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+nEAfgAIcHNxAH4AGwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APtxAH4ACHBzcQB+ABsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD8cQB+AAhwc3EAfgAbAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/XEAfgAIcHNxAH4AIwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AP5xAH4ACHEAfgAocQB+ACtzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD+cQB+AAhxAH4ARXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BAHEAfgAIAQAAAAABcQB+AEpxAH4ATnNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQBxAH4ACAEAAAAAAXEAfgBJcQB+AFFxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEAcQB+AAgAAAAAAABxAH4ASHBwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD9cQB+AAhxAH4AWXBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAAAAAAAAcQB+AFxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBHEAfgAIAQAAAAABcQB+AFtxAH4AX3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQRxAH4ACAAAAAAAAHEAfgBIcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APxxAH4ACHEAfgBjcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgAAAAAAABxAH4AZnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEIcQB+AAgBAAAAAAFxAH4AZXEAfgBpcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BCHEAfgAIAAAAAAAAcQB+AEhwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+3EAfgAIcQB+AG1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAAAAAAAAHEAfgBxcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQxxAH4ACAEAAAAAAXEAfgBwcQB+AHRxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4Ab3BwAABzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD6cQB+AAhxAH4AeHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAAAAAAAAcQB+AHtwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BEHEAfgAIAQAAAAABcQB+AHpxAH4AfnEAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARBxAH4ACAAAAAAAAHEAfgBvcHAAAHNxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACHEAfgCCcHBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgAAAAAAABxAH4AhnBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEUcQB+AAgBAAAAAAFxAH4AhXEAfgCJcQB+AFVwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BFHEAfgAIAAAAAAAAcQB+AIRwcAAAc3EAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+HEAfgAIcQB+AI1wcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAAAAAAAAHEAfgCQcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARhxAH4ACAEAAAAAAXEAfgCPcQB+AJNxAH4AVXBzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEYcQB+AAgAAAAAAABxAH4AhHBwAABzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD3cQB+AAhzcQB+AD8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEccQB+AAhxAH4AmHBwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAAAAAAAAcQB+AJxwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHXEAfgAIAQAAAAABcQB+AJtxAH4An3EAfgBVcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AR1xAH4ACAAAAAAAAHEAfgCacHBzcQB+ACoAAAABdwQAAAABc3EAfgCjAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BHHEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BInEAfgAIAAAAAAAAcQB+AKZwcQB+AKd4cHNxAH4AqAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACAAAAAAAAHEAfgCtcHNxAH4ArgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASRxAH4ACHEAfgCwcQB+ALNzcQB+ALUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhzcQB+AKgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEncQB+AAhzcQB+AEsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAgAAAAAAABxAH4AuXBzcQB+AK4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhxAH4Av3EAfgDGc3EAfgCoAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BJ3EAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIAAAAAAAAcQB+AMpwc3EAfgCuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BK3EAfgAIcQB+AMxxAH4AznNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAACdwQAAAAAeHNxAH4AKgAAAAF3BAAAAAFzcQB+ANIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD0cQB+AAhxAH4A1XNxAH4A1gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATFxAH4ACHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATJxAH4ACAAAAAAAAHEAfgDbcAF4c3EAfgAqAAAAAXcEAAAAAXEAfgDoeHEAfgAIc3EAfgDWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A6HEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BNXEAfgAIAAAAAAAAcQB+ANtwAXEAfgDVc3EAfgAwcQB+AORw\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=8", + "structureSignatureRawSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "structureSignatureNormalizedSha256" : "f10fc8d145a1b5a34f16c4d0ebd496d0269fec017edbff8b937233597567d12f", + "joinAlgorithmSignatureSha256" : "03d7a2bdc493d7e3d2a3128c10a7cee6c2b544ef522375622a90b30277354e23", + "actualResultSizesSignatureSha256" : "d5b8cf9ddc61ba8386abf34a7830e54cf6aa27571adc5bc72f2b034926abfa64", + "estimatesSignatureSha256" : "498de055b200842ee050dc5f125412db50c04f878d73336815680b92a32e5c5f", + "joinAlgorithmMultisetSignatureSha256" : "f1261ab4cda229f34c0992b2b0dfc259d4ddedd7fc89eca0cbf33f21c11e2640", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "4bc569abf9d81b962e0cbdbf5ba7e872ef83dda8c23baa9b74b1c5eba47b3405", + "statementPatternEstimatesMultisetSignatureSha256" : "dbf970aec5550b30f956832b867d11e6bc18ab4e11d9faabb8971676a2f05fad", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "ccf345041ba4ad6f5c9171013f45013f85ab3a801781e2c37770a981eea11130", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;projection=0;scan=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "ef8126388f21fb10c8e3ec78d3298eb9b09d0b60f6f9e370a99f8f84ad9a3e1e", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "c86090ebc22aefaaa8704580c73546de2eeb16e8e133697f9c2eee87105ea728", + "operatorWorkTopContributors" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;ExtensionElem (optMarker)[UNKNOWN]:0;Extension[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=optMarker) (bindingState=bound)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n │ ║ └── LeftJoin\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M) [left]\n │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left]\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M) [right]\n │ ║ ║ ╠══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound)\n │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n │ ║ ║ ║ o: Var (name=disease) (bindingState=bound)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=7.06762435162E10M) [right]\n │ ║ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [left]\n │ ║ ║ │ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=7.40065377E7M) [right]\n │ ║ ║ ╠══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=bound)\n │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=25652.2M) [right]\n │ ║ ║ ├── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [left]\n │ ║ ║ │ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n │ ║ ║ │ o: Var (name=result) (bindingState=unbound)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.9M) [right]\n │ ║ ║ ╠══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ s: Var (name=arm) (bindingState=bound)\n │ ║ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n │ ║ ║ ║ o: Var (name=drug) (bindingState=unbound)\n │ ║ ║ ╚══ Filter [right]\n │ ║ ║ ├── Or\n │ ║ ║ │ ╠══ Compare (<)\n │ ║ ║ │ ║ Var (name=p) (bindingState=bound)\n │ ║ ║ │ ║ ValueConstant (value=\"0.05\"^^)\n │ ║ ║ │ ╚══ Compare (>)\n │ ║ ║ │ Var (name=effect) (bindingState=bound)\n │ ║ ║ │ ValueConstant (value=\"0.7\"^^)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K)\n │ ║ ║ ╠══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [left]\n │ ║ ║ ║ s: Var (name=result) (bindingState=bound)\n │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n │ ║ ║ ║ o: Var (name=p) (bindingState=unbound)\n │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right]\n │ ║ ║ s: Var (name=result) (bindingState=bound)\n │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n │ ║ ║ o: Var (name=effect) (bindingState=unbound)\n │ ║ ╚══ Extension [right]\n │ ║ ├── StatementPattern (resultSizeEstimate=2.9K)\n │ ║ │ s: Var (name=result) (bindingState=bound)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n │ ║ │ o: Var (name=marker) (bindingState=unbound)\n │ ║ └── ExtensionElem (optMarker)\n │ ║ Var (name=marker) (bindingState=bound)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=drug) (bindingState=bound)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=drug) (bindingState=unbound)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.7495812557926834E19,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.7495812557926834E19,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\"\n }, {\n \"type\" : \"Var (name=disease)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.067624351615375E16,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\"\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\"\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.400653771325E13,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\"\n }, {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2.565217945E10,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\"\n }, {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 8891570.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\"\n }, {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\"\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\"\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 3082.0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\"\n }, {\n \"type\" : \"Var (name=p)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\"\n }, {\n \"type\" : \"Var (name=effect)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 2885.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\"\n }, {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M)\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n Join (JoinIterator) (resultSizeEstimate=7.06762435162E10M)\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n Join (JoinIterator) (resultSizeEstimate=7.40065377E7M)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n Join (JoinIterator) (resultSizeEstimate=25652.2M)\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n Join (JoinIterator) (resultSizeEstimate=8.9M)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n Filter\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=3.1K)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension\n StatementPattern (resultSizeEstimate=2.9K)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin\\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00)\\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M)\\n StatementPattern (costEstimate=10, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n Join (JoinIterator) (resultSizeEstimate=7.06762435162E10M)\\n StatementPattern (costEstimate=1.00, resultSizeEstimate=955)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n Join (JoinIterator) (resultSizeEstimate=7.40065377E7M)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n Join (JoinIterator) (resultSizeEstimate=25652.2M)\\n StatementPattern (costEstimate=18, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n Join (JoinIterator) (resultSizeEstimate=8.9M)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n Filter\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=3.1K)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern (costEstimate=54, resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension\\n StatementPattern (resultSizeEstimate=2.9K)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"b1f083721378f38639c0b733dfcaa05ffd44c3a26a628c11beec4fa01d4d5101\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHEAfgAIcHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAMcQB+AAhzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cPZHG9B4DzP5AgACTAANZ3JvdXBCaW5kaW5nc3QAD0xqYXZhL3V0aWwvU2V0O0wADWdyb3VwRWxlbWVudHNxAH4ADnhxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AA9xAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkZpbHRlcjB7vaUpKqv1AgABTAAJY29uZGl0aW9udAArTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFsdWVFeHByO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABJxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AFHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AFXEAfgAIcHNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4AFwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////RA1Fil9ObKEA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABlxAH4ACHQADEpvaW5JdGVyYXRvcnNyADRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmRpbmdTZXRBc3NpZ25tZW50N9Z2Fr6OiCMCAAJMAAxiaW5kaW5nTmFtZXNxAH4AEUwAC2JpbmRpbmdTZXRzdAAUTGphdmEvbGFuZy9JdGVyYWJsZTt4cQB+AAMAAAAAAAAAAQAAAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////z/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAbcQB+AAhzcgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAOTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AEUwABnZhbHVlc3EAfgAOeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+ACMAAAABdwQAAAABcQB+ACJ4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4AJXNxAH4AIwAAAAF3BAAAAAFxAH4AInhwc3EAfgApdXEAfgAsAAAAAXNxAH4ALgAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9EDUWKX05soQD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AG3EAfgAIcQB+ABxzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AGEwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABQCSn6cuKNJH///////////////////////////////8A////////////////////////////////////////////////////////////////QI3YAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ADhxAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAV0cmlhbHQAE19jb25zdF81YTdiNTlmZF91cmlxAH4AInBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAYTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4APHEAfgAIAAAAAAAAcQB+ACJwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4APHEAfgAIAQAAAAABcQB+AENzcQB+AC4AAAAAAAAAIHQALmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvc3R1ZGllc0Rpc2Vhc2V+cgA2b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNjb3BlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAQREVGQVVMVF9DT05URVhUU3BzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgA8cQB+AAgAAAAAAABxAH4AQnBwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9Db2L1aJrb8wD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AOHEAfgAIcQB+ABxzcQB+ADkAAAAAAAAAAT/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0CN2AAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBPcQB+AAhzcQB+AD11cQB+AEAAAAADcQB+AEJ0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AUHEAfgAIAQAAAAABcQB+AFRzcQB+AC4AAAAAAAAAIHQALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFBxAH4ACAEAAAAAAXEAfgBTc3EAfgAuAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZXEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFBxAH4ACAAAAAAAAHEAfgBCcHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0LQ079ZDZiAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBPcQB+AAhxAH4AHHNxAH4AOQAAAAAAAAABQDHraSmwALD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AFxxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AQnQAE19jb25zdF83M2MyZTQwYV91cml0AANhcm1wcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBhcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAEAAAAAAXEAfgBgc3EAfgAuAAAAAAAAACB0ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc0FybXEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AF1xAH4ACAAAAAAAAHEAfgBCcHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0IX4/TH6AAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBccQB+AAhxAH4AHHNxAH4AOQAAAAAAAAABQDHraSmwALD///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGdxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AYXQAE19jb25zdF82MGY2ZDdhZl91cml0AAZyZXN1bHRwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGhxAH4ACAAAAAAAAHEAfgBscHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGhxAH4ACAEAAAAAAXEAfgBrc3EAfgAuAAAAAAAAACB0AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2hhc1Jlc3VsdHEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGhxAH4ACAAAAAAAAHEAfgBhcHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0Fg9ZZAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBncQB+AAhxAH4AHHNxAH4AOQAAAAAAAAABQErhHb6IAQj///////////////////////////////8A////////////////////////////////////////////////////////////////QKaKAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHJxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AYXQAE19jb25zdF9hZWZkMzI3NF91cml0AARkcnVncHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgAAAAAAABxAH4Ad3BzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgBzcQB+AAgBAAAAAAFxAH4AdnNxAH4ALgAAAAAAAAAgdAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9hcm1EcnVncQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ac3EAfgAIAAAAAAAAcQB+AGFwcHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AHJxAH4ACHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QKgUAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH1xAH4ACHEAfgAcc3EAfgA5AAAAAAAAAAFASuEdvogBCP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AfnEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBsdAATX2NvbnN0XzgwYzcxOTg5X3VyaXQAAXBwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgCDcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAEAAAAAAXEAfgCCc3EAfgAuAAAAAAAAACB0ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL3BWYWx1ZXEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AH9xAH4ACAAAAAAAAHEAfgBscHBzcQB+ADkAAAAAAAAAAUBK4R2+iAEI////////////////////////////////AP///////////////////////////////////////////////////////////////0CmigAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB+cQB+AAhzcQB+AD11cQB+AEAAAAADcQB+AGx0ABNfY29uc3RfNjk5OWZiZGFfdXJpdAAGZWZmZWN0cHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCJcQB+AAgAAAAAAABxAH4AjXBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCJcQB+AAgBAAAAAAFxAH4AjHNxAH4ALgAAAAAAAAAgdAAqaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9lZmZlY3RTaXplcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAAAAAAAAcQB+AGxwcAAAc3IAIm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuT3LR5OXLpGEC7wIAAHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVZhbHVlT3BlcmF0b3IKCpD35AAGagIAAkwAB2xlZnRBcmdxAH4AFEwACHJpZ2h0QXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgB9cQB+AAhzcgAnb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlb7VwlredKfoCAAFMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0NvbXBhcmUkQ29tcGFyZU9wO3hxAH4AlAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJVxAH4ACHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJhxAH4ACAAAAAAAAHEAfgCDcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AEV4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCYcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABhMAAhsYW5ndWFnZXEAfgAYeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AS3QAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AGEwACW5hbWVzcGFjZXEAfgAYTAALc3RyaW5nVmFsdWVxAH4AGHhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgBLdAACTFRzcQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCVcQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgAAAAAAABxAH4AjXBzcQB+AJoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAhzcQB+AJxxAH4AonEAfgCldAADMC43cH5xAH4Ap3QAAkdUAAAAAAAAAAAAAAAAc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AGXEAfgAIc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9ApooAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsXEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBsdAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+ALZwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAQAAAAABcQB+ALVzcQB+AC4AAAAAAAAAIHQAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AsnEAfgAIAAAAAAAAcQB+AGxwcHNxAH4AIwAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ABRMAARuYW1lcQB+ABh4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCxcQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC+cQB+AAgAAAAAAABxAH4AtnB0AAlvcHRNYXJrZXJ4cHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABVxAH4ACHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACAAAAAAAAHEAfgDAcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AMFxAH4ACHNxAH4ALgAAAAD/////dAAtaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9iaW9tYXJrZXIvOTk5fnEAfgCndAACTkVzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hTZXTYbNdald0qHgIAAHhxAH4AIHcMAAAAED9AAAAAAAAAeHNxAH4AIwAAAAF3BAAAAAFzcgApb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Hcm91cEVsZW0cE1B2XvCgegIAAkwABG5hbWVxAH4AGEwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQWdncmVnYXRlT3BlcmF0b3I7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AEnEAfgAIdAAFY291bnRzcgAlb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db3VudMMbpEw2mjeAAgAAeHIAOW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RBZ2dyZWdhdGVPcGVyYXRvcje77Y0bQTG9AgABWgAIZGlzdGluY3R4cgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5VbmFyeVZhbHVlT3BlcmF0b3KlmC9zIRViuAIAAUwAA2FyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AzXEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A0nEAfgAIAAAAAAAAcQB+AHdwAXhzcQB+ACMAAAABdwQAAAABc3EAfgC9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AD3EAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1XEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A1nEAfgAIAAAAAAAAcQB+AHdwAXEAfgDOeAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ADHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGEwAD3Byb2plY3Rpb25BbGlhc3EAfgAYTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A2nEAfgAIAXEAfgDOcHNxAH4AvQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcHEAfgAIcQB+AOJxAH4ACHEAfgDhAXNxAH4A2AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOJxAH4ACHVxAH4A2wAAAAFzcQB+AN0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDkcQB+AAgBcQB+AM5wcQB+AOBzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AIwAAAAF3BAAAAAFxAH4A5nhxAH4A63BxAH4ACHNxAH4AEAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOFxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AOxxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO1xAH4ACHNxAH4AFgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO5xAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDvcQB+AAhwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8HEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDycQB+AAhwc3EAfgAaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A83EAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APRxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD1cQB+AAhwc3EAfgAdAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9nEAfgAIc3EAfgDIdwwAAAACP0AAAAAAAAFxAH4AInhxAH4AJHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APZxAH4ACHNxAH4APXVxAH4AQAAAAANxAH4AQnEAfgBTcQB+AFRwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APlxAH4ACAEAAAAAAXEAfgBUcQB+AFZzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD5cQB+AAgBAAAAAAFxAH4AU3EAfgBZcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A+XEAfgAIAAAAAAAAcQB+AEJwcAAAc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9XEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBCcQB+AEN0AAdkaXNlYXNlcHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgAAAAAAABxAH4BAnBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgD/cQB+AAgBAAAAAAFxAH4AQ3EAfgBIcQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A/3EAfgAIAAAAAAAAcQB+AEJwcAAAc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9HEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgBCcQB+AGBxAH4AYXBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAAAAAAAAcQB+AGFwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BBnEAfgAIAQAAAAABcQB+AGBxAH4AZHEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQZxAH4ACAAAAAAAAHEAfgBCcHAAAHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APNxAH4ACHNxAH4APXVxAH4AQAAAAAN0AANhcm1xAH4AdnEAfgB3cHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgAAAAAAABxAH4Ad3BzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEMcQB+AAgBAAAAAAFxAH4AdnEAfgB6cQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BDHEAfgAIAAAAAAAAcQB+AQ9wcAAAc3EAfgA5AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A8nEAfgAIc3EAfgA9dXEAfgBAAAAAA3EAfgEPcQB+AGtxAH4AbHBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAAAAAAAAcQB+AGxwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BE3EAfgAIAQAAAAABcQB+AGtxAH4Ab3EAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARNxAH4ACAAAAAAAAHEAfgEPcHAAAHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+APFxAH4ACHNxAH4APXVxAH4AQAAAAAN0AAZyZXN1bHRxAH4AgnQAAXBwcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAAAAAAAAHEAfgEdcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ARlxAH4ACAEAAAAAAXEAfgCCcQB+AIZxAH4ATHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEZcQB+AAgAAAAAAABxAH4BHHBwAABzcQB+ADkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDwcQB+AAhzcQB+AD11cQB+AEAAAAADcQB+ARxxAH4AjHQABmVmZmVjdHBwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAAAAAAAAcQB+ASRwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BIXEAfgAIAQAAAAABcQB+AIxxAH4AkHEAfgBMcHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ASFxAH4ACAAAAAAAAHEAfgEccHAAAHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AO9xAH4ACHNxAH4AOQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AShxAH4ACHNxAH4APXVxAH4AQAAAAAN0AAZyZXN1bHRxAH4AtXEAfgC2cHBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgAAAAAAABxAH4AtnBzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEpcQB+AAgBAAAAAAFxAH4AtXEAfgC5cQB+AExwc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BKXEAfgAIAAAAAAAAcQB+ASxwcHNxAH4AIwAAAAF3BAAAAAFzcQB+AL0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEocQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgExcQB+AAgAAAAAAAB0AAZtYXJrZXJwdAAJb3B0TWFya2VyeHBzcQB+AJYAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDucQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAgAAAAAAABxAH4AwHBzcQB+AJoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgE1cQB+AAhxAH4AxHEAfgDGc3EAfgCTAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7XEAfgAIc3EAfgCWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOHEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIAAAAAAAAcQB+AINwc3EAfgCaAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BOXEAfgAIcQB+AKBxAH4AqHNxAH4AlgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AThxAH4ACHNxAH4ARAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACAAAAAAAAHEAfgCNcHNxAH4AmgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ATxxAH4ACHEAfgCtcQB+AK9zcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+ACMAAAABdwQAAAABc3EAfgDLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A7HEAfgAIcQB+AM5zcQB+AM8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFCcQB+AAhzcQB+AEQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFDcQB+AAgAAAAAAAB0AARkcnVncAF4c3EAfgAjAAAAAXcEAAAAAXEAfgDgeHEAfgAIc3EAfgDPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A4HEAfgAIc3EAfgBEAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BR3EAfgAIAAAAAAAAcQB+AUVwAXEAfgDOc3EAfgApcQB+ANxw\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?arm ?drug .\n ?result ?p .\n ?result ?effect .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "=1,JoinIterator=7", + "structureSignatureRawSha256" : "4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e", + "structureSignatureNormalizedSha256" : "4502e8648e95fb4b23342fa8c5ee47a9f7b420f772285a0d95bd8b9ae745885e", + "joinAlgorithmSignatureSha256" : "b78136d6544d433f45a3dec25d8edf319bd1cdc8a8333a29a51199b57aceb112", + "actualResultSizesSignatureSha256" : "48402be96b7fc713182683dd4ad3db181ee430b59b4bb79bb5155147fafaae27", + "estimatesSignatureSha256" : "f40df65a75524020b5ec1a116109576a650cd88b31677873a8db4ad56ee064e6", + "joinAlgorithmMultisetSignatureSha256" : "c8e859f2621c395ee698ca39815245bc13a43ba048d347833b6adff93b7c998b", + "actualResultSizesMultisetSignatureSha256" : "4244060b11843863c1bb6fe76b4314ca190b418424075c7adf1474f365d4c44c", + "estimatesMultisetSignatureSha256" : "05752913b28619d73332eea4a2f4db72bc659922e2c81b3a050a5c5d72ec8551", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "202628938225210419977.2", + "modeledInputRowsSum" : "135062375391568636978", + "modeledOutputRowsSum" : "135062375391568628323", + "modeledJoinInputRowsSum" : "135062375391568622356", + "modeledJoinOutputRowsSum" : "135062375391568609102", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.2;filter=0;group=0;join=202628938225210400757;projection=0;scan=19220;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=2886;filter=3082;group=0;join=135062375391568611790;projection=0;scan=19220;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "7d501ab105b13ecc64b735c6fb8c2479be3f9d7ae4dd2f30cf600dcbbf27db1e", + "modeledOutputRowsByCategory" : "distinct=0;extension=1;filter=0;group=0;join=135062375391568609102;projection=0;scan=19220;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "3464795561f4f9ee5dcb040c3550fb4a2c12ce4c9a7334d7b58af51a67b8d22c", + "modeledFilterInputRowsSum" : "3082", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "1", + "modeledJoinWorkByAlgorithm" : "JoinIterator=202628938225210400757;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "4c2212d9ddc7b1888d608ab14e1ec8d8d9514474baf9fd7204e31d5b83fc79b5", + "modeledWorkVector" : "workUnits=202628938225210419977.2|barrierCount=4|joinInputRowsSum=135062375391568622356|joinOutputRowsSum=135062375391568609102|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=202628938225210400757;UNKNOWN=0|categories=distinct=0;extension=0.2;filter=0;group=0;join=202628938225210400757;projection=0;scan=19220;unknown=0", + "modeledWorkVectorSignatureSha256" : "d5cb230968f8d181107544fa85a4d49719491c3fa25fb029ccec250cae4b6536", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=2885|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=0|inputRows=3082|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=202628938225210400757|inputRows=67566562833641777790|outputRows=135062375391568609102|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=67495812557926834000|outputRows=0|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=8|workUnits=19220|inputRows=19220|outputRows=19220|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "7f9d893d6718ca591729152f39476333be91ae6043d49871de41e861839cc5d9", + "operatorWorkTopContributors" : "Join[JoinIterator]:202628938225210400757;StatementPattern[UNKNOWN]:19220;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.2;Compare (!=)[UNKNOWN]:0;Compare (<)[UNKNOWN]:0;Compare (>)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "135062375391568628323", + "resultSizeEstimateMax" : "67495812557926834000", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.7M, nextCallCountActual=1, nextTimeNanosActual=18.1K, firstRowTimeNanosActual=15.7M, openCountActual=1, lastRowTimeNanosActual=15.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.9M, avgNextNanosActual=18.1K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.7M, nextCallCountActual=1, nextTimeNanosActual=5.3K, firstRowTimeNanosActual=15.7M, openCountActual=1, lastRowTimeNanosActual=15.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.9M, avgNextNanosActual=5.3K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.7M, nextCallCountActual=1, nextTimeNanosActual=917, aggregateEvalCountActual=18, firstRowTimeNanosActual=15.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=15.9M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.9M, avgNextNanosActual=917)\n │ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=11.6M, nextCallCountActual=18, nextTimeNanosActual=5.3K, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, firstRowTimeNanosActual=2.8M, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=13.3M, closeCountActual=1, exprEvalTimeNanosActual=435.5K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=581.1K, avgNextNanosActual=299, filterRejectRateActual=0)\n │ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=308.5K, hasNextFalseCountActual=0)\n │ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0)\n │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=11.0M, nextCallCountActual=18, nextTimeNanosActual=4.2K, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=2.5M, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=12.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=580.8K, avgNextNanosActual=238, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0)\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M, resultSizeActual=18, joinLeftBindingsConsumedActual=20, inputRowsActual=20, rowsDroppedActual=2, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=1.8748836821646E12M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.90) [left]\n │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=22.7K, nextCallCountActual=2, nextTimeNanosActual=3.5K, firstRowTimeNanosActual=170.6K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=12.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=7.6K, avgNextNanosActual=1.8K) [left]\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M, resultSizeActual=18, joinLeftBindingsConsumedActual=8, inputRowsActual=26, rowsDroppedActual=8, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=1.9632289866E9M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.25) [right]\n │ ║ ║ ╠══ StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=230.9K, nextCallCountActual=8, nextTimeNanosActual=103.2K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, firstRowTimeNanosActual=29.8K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=3.8M, closeCountActual=2, varsAddedActual=3, indexName=ospc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=23.1K, avgNextNanosActual=12.9K, indexHitRateActual=0.09) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=7.06762435162E10M, resultSizeActual=18, joinLeftBindingsConsumedActual=8, inputRowsActual=26, rowsDroppedActual=8, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=2055737.2M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.25) [right]\n │ ║ ║ ├── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=187.6K, nextCallCountActual=8, nextTimeNanosActual=20.9K, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, firstRowTimeNanosActual=17.2K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=822.5K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=11.7K, avgNextNanosActual=2.6K, indexHitRateActual=0.50) [left]\n │ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=7.40065377E7M, resultSizeActual=18, joinLeftBindingsConsumedActual=26, inputRowsActual=44, rowsDroppedActual=26, expansionFactorActual=0.41, sampleCountActual=2, varianceActual=5.077424444941E11M, stddevActual=712.6M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.69) [right]\n │ ║ ║ ╠══ StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=180.4K, nextCallCountActual=26, nextTimeNanosActual=82.4K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, firstRowTimeNanosActual=8.2K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=790.5K, closeCountActual=8, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=5.3K, avgNextNanosActual=3.2K, indexHitRateActual=0.76) [left]\n │ ║ ║ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=25652.2M, resultSizeActual=18, joinLeftBindingsConsumedActual=26, inputRowsActual=44, rowsDroppedActual=26, expansionFactorActual=0.41, sampleCountActual=2, varianceActual=60975.7M, stddevActual=246.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.69) [right]\n │ ║ ║ ├── StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=237.1K, nextCallCountActual=26, nextTimeNanosActual=54.9K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=9.1K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=320.2K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.6K, avgNextNanosActual=2.1K, indexHitRateActual=0.50) [left]\n │ ║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.9M, resultSizeActual=18, joinRightIteratorsCreatedActual=26, joinLeftBindingsConsumedActual=26, joinRightBindingsConsumedActual=18, inputRowsActual=44, rowsDroppedActual=26, expansionFactorActual=0.41, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=18, avgRightRowsPerLeftActual=0.69, joinOutputPerLeftActual=0.69) [right]\n │ ║ ║ ╠══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=243.2K, nextCallCountActual=26, nextTimeNanosActual=54.6K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=23.2K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=263.6K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7K, avgNextNanosActual=2.1K, indexHitRateActual=0.50) [left]\n │ ║ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ Filter (resultSizeActual=18, hasNextCallCountActual=44, hasNextTrueCountActual=18, hasNextTimeNanosActual=3.8M, nextCallCountActual=18, nextTimeNanosActual=6.0K, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, firstRowTimeNanosActual=72.8K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=26, exprTrueCountActual=18, lastRowTimeNanosActual=184.1K, closeCountActual=26, exprEvalTimeNanosActual=2.0M, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=88.1K, avgNextNanosActual=336, filterRejectRateActual=0.31) [right]\n │ ║ ║ ├── Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=1.9M, hasNextFalseCountActual=0)\n │ ║ ║ │ ╠══ Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ ValueConstant (value=\"0.05\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0)\n │ ║ ║ │ ╚══ Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=223.0K, hasNextFalseCountActual=0)\n │ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ValueConstant (value=\"0.7\"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.6K, hasNextFalseCountActual=0)\n │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinLeftBindingsConsumedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=26, rightRowsScannedActual=26, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00)\n │ ║ ║ ╠══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=272.5K, nextCallCountActual=26, nextTimeNanosActual=62.4K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=16.3K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=170.6K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.2K, avgNextNanosActual=2.4K, indexHitRateActual=0.50) [left]\n │ ║ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=242.6K, nextCallCountActual=26, nextTimeNanosActual=54.0K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, firstRowTimeNanosActual=6.8K, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=139.5K, closeCountActual=26, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7K, avgNextNanosActual=2.1K, indexHitRateActual=0.50) [right]\n │ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=881.2K, nextCallCountActual=18, nextTimeNanosActual=85.3K, firstRowTimeNanosActual=13.2K, openCountActual=18, lastRowTimeNanosActual=65.6K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=24.5K, avgNextNanosActual=4.7K) [right]\n │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=214.6K, nextCallCountActual=18, nextTimeNanosActual=40.4K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, firstRowTimeNanosActual=12.6K, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=57.0K, closeCountActual=18, varsAddedActual=3, indexName=spoc, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.0K, avgNextNanosActual=2.2K, indexHitRateActual=0.50)\n │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0)\n │ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0)\n │ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15744334,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 18125,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 15774083,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15912791,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15740750,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 5334,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 15776459,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15918084,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 15723500,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 917,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 18,\n \"firstRowTimeNanosActual\" : 15776042,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 15906167,\n \"maxGroupSizeActual\" : 18,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 18.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 20,\n \"hasNextTrueCountActual\" : 19,\n \"hasNextTimeNanosActual\" : 11621624,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 5375,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 18,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 2899958,\n \"exprEvalCountActual\" : 18,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 13332875,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 435543.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 18,\n \"exprTrueCountActual\" : 18\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 308502.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2042.0\n }\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 19,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 11036045,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 4289,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 2528250,\n \"leftRowsWithMatchActual\" : 18,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 12383458,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.7495812557926834E19,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 20,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 2,\n \"hasNextCallCountActual\" : 3,\n \"hasNextTrueCountActual\" : 2,\n \"hasNextTimeNanosActual\" : 22708,\n \"nextCallCountActual\" : 2,\n \"nextTimeNanosActual\" : 3583,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 2,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 170667,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 2,\n \"lastRowTimeNanosActual\" : 12506084,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 6.7495812557926834E19,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: ospc] \",\n \"costEstimate\" : 10.327955589886445,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 230999,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 103250,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 94,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 86,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 29834,\n \"indexLookupCountActual\" : 2,\n \"openCountActual\" : 2,\n \"lastRowTimeNanosActual\" : 3867042,\n \"closeCountActual\" : 2,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"ospc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=disease)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.067624351615375E16,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 1.0,\n \"resultSizeEstimate\" : 955.0,\n \"resultSizeActual\" : 8,\n \"hasNextCallCountActual\" : 16,\n \"hasNextTrueCountActual\" : 8,\n \"hasNextTimeNanosActual\" : 187667,\n \"nextCallCountActual\" : 8,\n \"nextTimeNanosActual\" : 20917,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 8,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 16,\n \"sourceRowsMatchedActual\" : 8,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 17291,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 822500,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 7.400653771325E13,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 34,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 180460,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 82415,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 34,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 8292,\n \"indexLookupCountActual\" : 8,\n \"openCountActual\" : 8,\n \"lastRowTimeNanosActual\" : 790542,\n \"closeCountActual\" : 8,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=trial)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 2.565217945E10,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 17.919573407620817,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 237127,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 54958,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 9166,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 320250,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 8891570.0,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 243206,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 54628,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 23209,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 263625,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=arm)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 44,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 3874874,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 6041,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 26,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 8,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 72833,\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 26,\n \"exprTrueCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 184125,\n \"closeCountActual\" : 26\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1997289.0\n },\n \"plans\" : [ {\n \"type\" : \"Or\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 18,\n \"shortCircuitCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1879250.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (<)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 26,\n \"exprFalseCountActual\" : 12,\n \"exprTrueCountActual\" : 14\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 1577497.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.05\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 2282875.0\n }\n } ]\n }, {\n \"type\" : \"Compare (>)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 12,\n \"exprFalseCountActual\" : 8,\n \"exprTrueCountActual\" : 4\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 223001.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"0.7\\\"^^)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprTrueCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 4583.0\n }\n } ]\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 3082.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 272583,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 62499,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 16333,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 170625,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=p)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"costEstimate\" : 53.75872022286245,\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 26,\n \"hasNextCallCountActual\" : 52,\n \"hasNextTrueCountActual\" : 26,\n \"hasNextTimeNanosActual\" : 242668,\n \"nextCallCountActual\" : 26,\n \"nextTimeNanosActual\" : 54045,\n \"joinRightIteratorsCreatedActual\" : 26,\n \"joinLeftBindingsConsumedActual\" : 26,\n \"joinRightBindingsConsumedActual\" : 26,\n \"sourceRowsScannedActual\" : 52,\n \"sourceRowsMatchedActual\" : 26,\n \"sourceRowsFilteredActual\" : 26,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 6833,\n \"indexLookupCountActual\" : 26,\n \"openCountActual\" : 26,\n \"lastRowTimeNanosActual\" : 139541,\n \"closeCountActual\" : 26,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=effect)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 881292,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 85373,\n \"joinRightIteratorsCreatedActual\" : 18,\n \"joinLeftBindingsConsumedActual\" : 18,\n \"joinRightBindingsConsumedActual\" : 18,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 13292,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 65625,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"resultSizeEstimate\" : 2885.0,\n \"resultSizeActual\" : 18,\n \"hasNextCallCountActual\" : 36,\n \"hasNextTrueCountActual\" : 18,\n \"hasNextTimeNanosActual\" : 214624,\n \"nextCallCountActual\" : 18,\n \"nextTimeNanosActual\" : 40499,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 36,\n \"sourceRowsMatchedActual\" : 18,\n \"sourceRowsFilteredActual\" : 18,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 12625,\n \"indexLookupCountActual\" : 18,\n \"openCountActual\" : 18,\n \"lastRowTimeNanosActual\" : 57042,\n \"closeCountActual\" : 18,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"indexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=result)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (optMarker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=marker)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=drug)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n Filter (resultSizeActual=18)\n Compare (!=)\n Var (name=optMarker)\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M, resultSizeActual=18)\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M, resultSizeActual=18)\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\n Var (name=disease)\n Join (JoinIterator) (resultSizeEstimate=7.06762435162E10M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\n Var (name=trial)\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\n Join (JoinIterator) (resultSizeEstimate=7.40065377E7M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=trial)\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\n Var (name=arm)\n Join (JoinIterator) (resultSizeEstimate=25652.2M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\n Var (name=result)\n Join (JoinIterator) (resultSizeEstimate=8.9M, resultSizeActual=18)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=arm)\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\n Var (name=drug)\n Filter (resultSizeActual=18)\n Or\n Compare (<)\n Var (name=p)\n ValueConstant (value=\"0.05\"^^)\n Compare (>)\n Var (name=effect)\n ValueConstant (value=\"0.7\"^^)\n Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\n Var (name=p)\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\n Var (name=result)\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\n Var (name=effect)\n Extension (resultSizeActual=18)\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\n Var (name=result)\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\n Var (name=marker)\n ExtensionElem (optMarker)\n Var (name=marker)\n GroupElem (count)\n Count (Distinct)\n Var (name=drug)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=drug)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n Filter (resultSizeActual=18)\\n Compare (!=)\\n Var (name=optMarker)\\n ValueConstant (value=http://example.com/theme/pharma/biomarker/999)\\n LeftJoin (LeftJoinIterator) (resultSizeActual=18)\\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M, resultSizeActual=18)\\n BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=2.00)\\n Join (JoinIterator) (resultSizeEstimate=6.74958125579268E13M, resultSizeActual=18)\\n StatementPattern [index: ospc] (costEstimate=10, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)\\n Var (name=disease)\\n Join (JoinIterator) (resultSizeEstimate=7.06762435162E10M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=955, resultSizeActual=8.00)\\n Var (name=trial)\\n Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\\n Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)\\n Join (JoinIterator) (resultSizeEstimate=7.40065377E7M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=trial)\\n Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)\\n Var (name=arm)\\n Join (JoinIterator) (resultSizeEstimate=25652.2M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=18, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)\\n Var (name=result)\\n Join (JoinIterator) (resultSizeEstimate=8.9M, resultSizeActual=18)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=arm)\\n Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)\\n Var (name=drug)\\n Filter (resultSizeActual=18)\\n Or\\n Compare (<)\\n Var (name=p)\\n ValueConstant (value=\\\"0.05\\\"^^)\\n Compare (>)\\n Var (name=effect)\\n ValueConstant (value=\\\"0.7\\\"^^)\\n Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)\\n Var (name=p)\\n StatementPattern [index: spoc] (costEstimate=54, resultSizeEstimate=2.9K, resultSizeActual=26)\\n Var (name=result)\\n Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)\\n Var (name=effect)\\n Extension (resultSizeActual=18)\\n StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18)\\n Var (name=result)\\n Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)\\n Var (name=marker)\\n ExtensionElem (optMarker)\\n Var (name=marker)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=drug)\\n\",\n \"fingerprintSha256\" : \"c48516dfbf7bdfc0820f9ae505c5a1440ef6027bfb6bba6a64670eccfd304ad5\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAWRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAEWxvbmdNZXRyaWNzQWN0dWFscQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AAR4cAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAgAAAAAA8EC4AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAABH8QAAAAAAAAABv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9zcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAADwr+J0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAAAPK9mnhwcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uaVI8Bk8cO1ICAANaAAhzdWJxdWVyeUwADHByb2pFbGVtTGlzdHQANExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtTGlzdDtMABFwcm9qZWN0aW9uQ29udGV4dHQAJUxvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Zhcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAPA9TgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAARs0AAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAPCxg3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAPLPV3hxAH4ABnEAfgAIc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9u1Ari8nNUn84CAAFMAAhlbGVtZW50c3QAEExqYXZhL3V0aWwvTGlzdDt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAPAvTgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAFNYAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAPC6y3EAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAPLkBHhxAH4AGHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AB14cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAO/r7AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA5UAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAASYXZnR3JvdXBTaXplQWN0dWFsc3IAEGphdmEubGFuZy5Eb3VibGWAs8JKKWv7BAIAAUQABXZhbHVleHEAfgANQDIAAAAAAAB4c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAABJxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAPC5KnQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAA8rV3dAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAecQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnQAK0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1ZhbHVlRXhwcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAAAAAAAAAAABQAAAAAALFU+AAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAFP8AAAAAAAAAEr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAEv//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABdAAXZXhwckV2YWxUaW1lTmFub3NBY3R1YWxzcQB+ACdBGpVcAAAAAHhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3EAfgArcQB+AA9zcQB+AAwAAAAAACw/9nQAE2V4cHJFdmFsQ291bnRBY3R1YWxxAH4AK3QAFGV4cHJGYWxzZUNvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAB0ABlwcmVkaWNhdGVFcnJvckNvdW50QWN0dWFscQB+ADpxAH4AEnEAfgAOdAATZXhwclRydWVDb3VudEFjdHVhbHEAfgArcQB+ABNzcQB+AAwAAAAAAMtxi3EAfgARcQB+AA54cQB+ACRxAH4ACHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkxlZnRKb2luMMrLJGgZ8joCAAFMAAljb25kaXRpb25xAH4AMXhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVR1cGxlT3BlcmF0b3I+mN5kaHRzjAIAA0wADWFsZ29yaXRobU5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAdsZWZ0QXJncQB+AAJMAAhyaWdodEFyZ3EAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAATAAAAAACoZY0AAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAABDBAAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAmk/p0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHEAfgArcQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAAC89OJxAH4AEXEAfgAOdAAZbWF4UmlnaHRSb3dzUGVyTGVmdEFjdHVhbHEAfgAOeHEAfgAycQB+AAh0ABBMZWZ0Sm9pbkl0ZXJhdG9yc3IAJG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuSm9pbpRZ1a9fiboEAgACWgAJY2FjaGVhYmxlWgAJbWVyZ2VKb2lueHEAfgA/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAD/////////////////////AAAAAAAAABJEDUWKX05soQD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AQXEAfgAIdAAMSm9pbkl0ZXJhdG9yc3IANG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluZGluZ1NldEFzc2lnbm1lbnQ31nYWvo6IIwIAAkwADGJpbmRpbmdOYW1lc3EAfgAjTAALYmluZGluZ1NldHN0ABRMamF2YS9sYW5nL0l0ZXJhYmxlO3hxAH4AAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAFi0AAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAN/wAAAAAAAAACP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAAAJxAH4AD3NxAH4ADAAAAAAAApqrcQB+ABFxAH4ADnEAfgAScQB+AA50ABZiaW5kaW5nc1Byb3ZpZGVkQWN0dWFscQB+AE9xAH4AE3NxAH4ADAAAAAAAvtPkeHEAfgBJcQB+AAhzcgARamF2YS51dGlsLkhhc2hTZXS6RIWVlri3NAMAAHhwdwwAAAAQP0AAAAAAAAF0AAdkaXNlYXNleHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAACdwQAAAACc3IAK29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmltcGwuTGlzdEJpbmRpbmdTZXTXpWLr9LWsIQIAA0wADGJpbmRpbmdOYW1lc3EAfgAdTAAUYmluZGluZ05hbWVzU2V0Q2FjaGVxAH4AI0wABnZhbHVlc3EAfgAdeHIAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LkFic3RyYWN0QmluZGluZ1NldNv/0pOONz1AAgAAeHBzcQB+AFYAAAABdwQAAAABcQB+AFV4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AQHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAAAAACh0AClodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL2Rpc2Vhc2UvMHNxAH4AWHNxAH4AVgAAAAF3BAAAAAFxAH4AVXhwc3EAfgBcdXEAfgBfAAAAAXNxAH4AYQAAAAAAAAAodAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9kaXNlYXNlLzF4c3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAD/////////////////////AAAAAAAAABJEDUWKX05soQD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ASXEAfgAIcQB+AEpzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ACNMAApjb250ZXh0VmFycQB+ABdMAAlpbmRleE5hbWVxAH4AQEwACW9iamVjdFZhcnEAfgAXTAAMcHJlZGljYXRlVmFycQB+ABdMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AF0wAB3Zhckxpc3RxAH4AHXhxAH4AAwAAAAAAAAABQCSn6cuKNJEAAAAAAAAACgAAAAAAA4ZXAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAGTUgAAAAAAAAAIQI3YAAAAAAAAAAAAAAAAAFYAAAAAAAAACAAAAAAAAABe//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAAAhxAH4AD3NxAH4ADAAAAAAAAHSKdAAWaW5kZXhMb29rdXBDb3VudEFjdHVhbHEAfgBPcQB+ABFxAH4AT3EAfgAScQB+AE9xAH4AE3NxAH4ADAAAAAAAOwGieHEAfgBrcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAAFdHJpYWx0ABNfY29uc3RfNWE3YjU5ZmRfdXJpcQB+AFVwdAAEb3NwY3NyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhckBD7rL6/vDHAgAFWgAJYW5vbnltb3VzSQAOY2FjaGVkSGFzaENvZGVaAAhjb25zdGFudEwABG5hbWVxAH4AQEwABXZhbHVldAAfTG9yZy9lY2xpcHNlL3JkZjRqL21vZGVsL1ZhbHVlO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AG9xAH4ACAAAAAAAAHEAfgBVcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AG9xAH4ACAEAAAAAAXEAfgB7c3EAfgBhAAAAAP////90AC5odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvcGhhcm1hL3N0dWRpZXNEaXNlYXNlfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ab3EAfgAIAAAAAAAAcQB+AHpwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAA/////////////////////wAAAAAAAAASQ29i9Wia2/MA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AGtxAH4ACHEAfgBKc3EAfgBsAAAAAAAAAAE/8AAAAAAAAAAAAAAAAAAQAAAAAAAC3RMAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAFG1AAAAAAAAAAhAjdgAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAABD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AcXEAfgAPc3EAfgAMAAAAAAAAQ4txAH4Ac3EAfgBxcQB+ABFxAH4AcXEAfgAScQB+AHFxAH4AE3NxAH4ADAAAAAAADIzkeHEAfgCIcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+AHp0ABNfY29uc3RfZjVlNTU4NWFfdXJpdAATX2NvbnN0XzQ3OTViYmZiX3VyaXB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AiXEAfgAIAQAAAAABcQB+AJBzcQB+AGEAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvQ2xpbmljYWxUcmlhbHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIlxAH4ACAEAAAAAAXEAfgCPc3EAfgBhAAAAAP////90AC9odHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZXEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AIlxAH4ACAAAAAAAAHEAfgB6cHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAEkLQ079ZDZiAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCIcQB+AAhxAH4ASnNxAH4AbAAAAAAAAAABQDHraSmwALAAAAAAAAAAIgAAAAAAAsDsAAAAAAAAABoAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAFB7wAAAAAAAAAaQKaKAAAAAAAAAAAAAAAAAAgAAAAAAAAAGgAAAAAAAAAi//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALc3EAfgAMAAAAAAAAABpxAH4AD3NxAH4ADAAAAAAAACBkcQB+AHNxAH4AcXEAfgARcQB+AHFxAH4AEnEAfgBxcQB+ABNzcQB+AAwAAAAAAAwQDnhxAH4AmXEAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgB6dAATX2NvbnN0XzczYzJlNDBhX3VyaXQAA2FybXB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AKJwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAQAAAAABcQB+AKFzcQB+AGEAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvaGFzQXJtcQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AmnEAfgAIAAAAAAAAcQB+AHpwcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAA/////////////////////wAAAAAAAAASQhfj9MfoAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AJlxAH4ACHEAfgBKc3EAfgBsAAAAAAAAAAFAMetpKbAAsAAAAAAAAAA0AAAAAAADnkcAAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAANauAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AnHEAfgAPc3EAfgAMAAAAAAAAI85xAH4Ac3EAfgCccQB+ABFxAH4AnHEAfgAScQB+AJxxAH4AE3NxAH4ADAAAAAAABOL6eHEAfgCpcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+AKJ0ABNfY29uc3RfNjBmNmQ3YWZfdXJpdAAGcmVzdWx0cHQABHNwb2NzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgAAAAAAABxAH4AsXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgBAAAAAAFxAH4AsHNxAH4AYQAAAAD/////dAApaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9oYXNSZXN1bHRxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgCqcQB+AAgAAAAAAABxAH4AonBwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAGgAAAAAAAAASAAAAAAAAABr/////////////////////AAAAAAAAABJBYPWWQAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AqXEAfgAIcQB+AEpzcQB+AGwAAAAAAAAAAUBK4R2+iAEIAAAAAAAAADQAAAAAAAO2BgAAAAAAAAAaAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAA1WQAAAAAAAAAGkCmigAAAAAAAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAANP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3EAfgCccQB+AA9zcQB+AAwAAAAAAABaqXEAfgBzcQB+AJxxAH4AEXEAfgCccQB+ABJxAH4AnHEAfgATc3EAfgAMAAAAAAAEBcl4cQB+ALhxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AonQAE19jb25zdF9hZWZkMzI3NF91cml0AARkcnVncHQABHNwb2NzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC5cQB+AAgAAAAAAABxAH4AwHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgC5cQB+AAgBAAAAAAFxAH4Av3NxAH4AYQAAAAD/////dAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9hcm1EcnVncQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4AuXEAfgAIAAAAAAAAcQB+AKJwcHNxAH4AMAAAAAAAAAABv/AAAAAAAAAAAAAAAAAALAAAAAAAOyA6AAAAAAAAABIAAAAAAAAAABoAAAAAAAAAEgAAAAAAAAAaAAAAAAAAABIAAAAAAAAXmQAAAAAAAAASv/AAAAAAAAAAAAAAAAAAAAgAAAAAAAAAEgAAAAAAAAAa//////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0E+eekAAAAAeHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAACXEAfgALcQB+ACtxAH4AD3NxAH4ADAAAAAAAARyBcQB+ADhxAH4AnHEAfgA5cQB+AHFxAH4AO3EAfgA6cQB+ABJxAH4AnHEAfgA8cQB+ACtxAH4AE3NxAH4ADAAAAAAAAs89cQB+ABFxAH4AnHhxAH4AuHEAfgAIc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABr/////////////////////AAAAAAAAABpAqBQAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Ax3EAfgAIcQB+AEpzcQB+AGwAAAAAAAAAAUBK4R2+iAEIAAAAAAAAADQAAAAAAAQoxwAAAAAAAAAaAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAA9CMAAAAAAAAAGkCmigAAAAAAAAAAAAAAAAAaAAAAAAAAABoAAAAAAAAANP//////////cQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAZxAH4AC3EAfgCccQB+AA9zcQB+AAwAAAAAAAA/zXEAfgBzcQB+AJxxAH4AEXEAfgCccQB+ABJxAH4AnHEAfgATc3EAfgAMAAAAAAACmoF4cQB+AM1xAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AsXQAE19jb25zdF84MGM3MTk4OV91cml0AAFwcHQABHNwb2NzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDOcQB+AAgAAAAAAABxAH4A1XBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDOcQB+AAgBAAAAAAFxAH4A1HNxAH4AYQAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9wVmFsdWVxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDOcQB+AAgAAAAAAABxAH4AsXBwc3EAfgBsAAAAAAAAAAFASuEdvogBCAAAAAAAAAA0AAAAAAADs+wAAAAAAAAAGgAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAABoAAAAAAAAAGgAAAAAAANMdAAAAAAAAABpApooAAAAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAADT//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AnHEAfgAPc3EAfgAMAAAAAAAAGrFxAH4Ac3EAfgCccQB+ABFxAH4AnHEAfgAScQB+AJxxAH4AE3NxAH4ADAAAAAAAAiEVeHEAfgDNcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+ALF0ABNfY29uc3RfNjk5OWZiZGFfdXJpdAAGZWZmZWN0cHQABHNwb2NzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDccQB+AAgAAAAAAABxAH4A43BzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgDccQB+AAgBAAAAAAFxAH4A4nNxAH4AYQAAAAD/////dAAqaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3BoYXJtYS9lZmZlY3RTaXplcQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A3HEAfgAIAAAAAAAAcQB+ALFwcAAAc3IAIm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuT3LR5OXLpGEC7wIAAHhyADNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmFyeVZhbHVlT3BlcmF0b3IKCpD35AAGagIAAkwAB2xlZnRBcmdxAH4AMUwACHJpZ2h0QXJncQB+ADF4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBPKzSAAAAAHhzcQB+AAk/QAAAAAAABncIAAAACAAAAAR0ABdzaG9ydENpcmN1aXRDb3VudEFjdHVhbHNxAH4ADAAAAAAAAAAOcQB+ADhxAH4AnHEAfgA5cQB+AHFxAH4APHEAfgAreHEAfgDHcQB+AAhzcgAnb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlb7VwlredKfoCAAFMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0NvbXBhcmUkQ29tcGFyZU9wO3hxAH4A6wAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0E4EhkAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAA3EAfgA4cQB+AJxxAH4AOXNxAH4ADAAAAAAAAAAMcQB+ADxxAH4A8XhxAH4A7HEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4A9HEAfgAIAAAAAAAAcQB+ANVwc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFsdWVDb25zdGFudDY0XwF1yivGAgABTAAFdmFsdWVxAH4AfnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0FBar2AAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+AA5xAH4APHEAfgAOeHEAfgD0cQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+AEBMAAhsYW5ndWFnZXEAfgBAeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4AhHQAB0RFQ0lNQUxzcgAob3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5JbnRlcm5lZElSSQJZRgCFC3UHAwAESQAIaGFzaENvZGVMAAlsb2NhbE5hbWVxAH4AQEwACW5hbWVzcGFjZXEAfgBATAALc3RyaW5nVmFsdWVxAH4AQHhwdzBHAI0qACFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSMAB2RlY2ltYWx4dAAEMC4wNXB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgCEdAACTFRzcQB+APIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBCzjIAAAAAHhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAANxAH4AOHEAfgD4cQB+ADlxAH4AcXEAfgA8c3EAfgAMAAAAAAAAAAR4cQB+AOxxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AQ1xAH4ACAAAAAAAAHEAfgDjcHNxAH4A+gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0Cx5wAAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+AA5xAH4APHEAfgAOeHEAfgENcQB+AAhzcQB+AP9xAH4BBXEAfgEIdAADMC43cH5xAH4BCnQAAkdUAAAAAAAAAAAAAAAAc3EAfgAcAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAkAAAAAAANcowAAAAAAAAAEgAAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAU19AAAAAAAAABK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAFcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAAM+xxAH4AEXEAfgArcQB+ABJxAH4AK3EAfgATc3EAfgAMAAAAAAABAFl4cQB+AEFxAH4ACHNxAH4AbAAAAAAAAAABv/AAAAAAAAAAAAAAAAAAJAAAAAAAA0ZgAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAACeMwAAAAAAAAASQKaKAAAAAAAAAAAAAAAAABIAAAAAAAAAEgAAAAAAAAAk//////////9xAH4ACHNxAH4ACT9AAAAAAAAGdwgAAAAIAAAABnEAfgALcQB+ACtxAH4AD3NxAH4ADAAAAAAAADFRcQB+AHNxAH4AK3EAfgARcQB+ACtxAH4AEnEAfgArcQB+ABNzcQB+AAwAAAAAAADe0nhxAH4BG3EAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgCxdAATX2NvbnN0XzgwYTY5NzlhX3VyaXQABm1hcmtlcnB0AARzcG9jc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ASZwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAQAAAAABcQB+ASVzcQB+AGEAAAAA/////3QAKWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VycQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BH3EAfgAIAAAAAAAAcQB+ALFwcHNxAH4AVgAAAAF3BAAAAAFzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeHRlbnNpb25FbGVt9URa8AvQ6CgCAAJMAARleHBycQB+ADFMAARuYW1lcQB+AEB4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEbcQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEvcQB+AAgAAAAAAABxAH4BJnB0AAlvcHRNYXJrZXJ4cHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0ES1FgAAAAAeHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+ACtxAH4APHEAfgAreHEAfgAycQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgEycQB+AAgAAAAAAABxAH4BMXBzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdAn+gAAAAAAHhzcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4AOHEAfgAOeHEAfgEycQB+AAhzcQB+AGEAAAAA/////3QALWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9waGFybWEvYmlvbWFya2VyLzk5OX5xAH4BCnQAAk5Fc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cQB+AFN3DAAAABA/QAAAAAAAAHhzcQB+AFYAAAABdwQAAAABc3IAKW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXBFbGVtHBNQdl7woHoCAAJMAARuYW1lcQB+AEBMAAhvcGVyYXRvcnQAM0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0FnZ3JlZ2F0ZU9wZXJhdG9yO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ACRxAH4ACHQABWNvdW50c3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ291bnTDG6RMNpo3gAIAAHhyADlvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkFic3RyYWN0QWdncmVnYXRlT3BlcmF0b3I3u+2NG0ExvQIAAVoACGRpc3RpbmN0eHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlWYWx1ZU9wZXJhdG9ypZgvcyEVYrgCAAFMAANhcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AURxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUlxAH4ACAAAAAAAAHEAfgDAcAF4c3EAfgBWAAAAAXcEAAAAAXNxAH4BLgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AB5xAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AUxxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AU1xAH4ACAAAAAAAAHEAfgDAcAFxAH4BRXgBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4AHXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+ABhxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+AEBMAA9wcm9qZWN0aW9uQWxpYXNxAH4AQEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVFxAH4ACAFxAH4BRXBzcQB+AS4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIc3EAfgAVAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHBxAH4ACHEAfgFZcQB+AAhxAH4BWAFzcQB+AU8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFZcQB+AAh1cQB+AVIAAAABc3EAfgFUAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BW3EAfgAIAXEAfgFFcHEAfgFXc3IAJmphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVMaXN0/A8lMbXsjhACAAFMAARsaXN0cQB+AB14cgAsamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb24ZQgCAy173HgIAAUwAAWN0ABZMamF2YS91dGlsL0NvbGxlY3Rpb247eHBzcQB+AFYAAAABdwQAAAABcQB+AV14cQB+AWJwcQB+AAhzcQB+ACIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFYcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFjcQB+AAhzcQB+ADAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFkcQB+AAhzcQB+AD4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFlcQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZnEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWdxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BaXEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWpxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFrcQB+AAhwc3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BbHEAfgAIcHNxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AW1xAH4ACHNxAH4BP3cMAAAAAj9AAAAAAAABcQB+AFV4cQB+AFdzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFtcQB+AAhzcQB+AHV1cQB+AHgAAAADcQB+AHpxAH4Aj3EAfgCQcHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFwcQB+AAgBAAAAAAFxAH4AkHEAfgCTc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BcHEAfgAIAQAAAAABcQB+AI9xAH4AlnEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXBxAH4ACAAAAAAAAHEAfgB6cHAAAHNxAH4AbAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWxxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AenEAfgB7dAAHZGlzZWFzZXBwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAAAAAAAAcQB+AXlwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BdnEAfgAIAQAAAAABcQB+AHtxAH4AgXEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AXZxAH4ACAAAAAAAAHEAfgB6cHAAAHNxAH4AbAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWtxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4AenEAfgChcQB+AKJwcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAAAAAAAAHEAfgCicHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AX1xAH4ACAEAAAAAAXEAfgChcQB+AKZxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgF9cQB+AAgAAAAAAABxAH4AenBwAABzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFqcQB+AAhzcQB+AHV1cQB+AHgAAAADdAADYXJtcQB+AL9xAH4AwHBwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAAAAAAAAcQB+AMBwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bg3EAfgAIAQAAAAABcQB+AL9xAH4AxHEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYNxAH4ACAAAAAAAAHEAfgGGcHAAAHNxAH4AbAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWlxAH4ACHNxAH4AdXVxAH4AeAAAAANxAH4BhnEAfgCwcQB+ALFwcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAAAAAAAAHEAfgCxcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AYpxAH4ACAEAAAAAAXEAfgCwcQB+ALVxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGKcQB+AAgAAAAAAABxAH4BhnBwAABzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFocQB+AAhzcQB+AHV1cQB+AHgAAAADdAAGcmVzdWx0cQB+ANR0AAFwcHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgAAAAAAABxAH4BlHBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGQcQB+AAgBAAAAAAFxAH4A1HEAfgDZcQB+AIVwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BkHEAfgAIAAAAAAAAcQB+AZNwcAAAc3EAfgBsAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZ3EAfgAIc3EAfgB1dXEAfgB4AAAAA3EAfgGTcQB+AOJ0AAZlZmZlY3RwcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAAAAAAAAHEAfgGbcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AZhxAH4ACAEAAAAAAXEAfgDicQB+AOdxAH4AhXBzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGYcQB+AAgAAAAAAABxAH4Bk3BwAABzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgFmcQB+AAhzcQB+AGwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGfcQB+AAhzcQB+AHV1cQB+AHgAAAADdAAGcmVzdWx0cQB+ASVxAH4BJnBwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAAAAAAAAcQB+ASZwc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BoHEAfgAIAQAAAAABcQB+ASVxAH4BKnEAfgCFcHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AaBxAH4ACAAAAAAAAHEAfgGjcHBzcQB+AFYAAAABdwQAAAABc3EAfgEuAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4Bn3EAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BqHEAfgAIAAAAAAAAdAAGbWFya2VycHQACW9wdE1hcmtlcnhwc3EAfgDyAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BZXEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIAAAAAAAAcQB+ATFwc3EAfgD6AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BrHEAfgAIcQB+ATtxAH4BPXNxAH4A6gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWRxAH4ACHNxAH4A8gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Aa9xAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACAAAAAAAAHEAfgDVcHNxAH4A+gAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AbBxAH4ACHEAfgEDcQB+AQtzcQB+APIAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGvcQB+AAhzcQB+AH0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAgAAAAAAABxAH4A43BzcQB+APoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgGzcQB+AAhxAH4BF3EAfgEZc3IAEWphdmEudXRpbC5Db2xsU2VyV46rtjobqBEDAAFJAAN0YWd4cAAAAAJ3BAAAAAB4c3EAfgBWAAAAAXcEAAAAAXNxAH4BQgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AWNxAH4ACHEAfgFFc3EAfgFGAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BuXEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4BunEAfgAIAAAAAAAAdAAEZHJ1Z3ABeHNxAH4AVgAAAAF3BAAAAAFxAH4BV3hxAH4ACHNxAH4BRgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AVdxAH4ACHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+Ab5xAH4ACAAAAAAAAHEAfgG8cAFxAH4BRXNxAH4AXHEAfgFTcA==\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE {\n VALUES ?disease { }\n ?trial ?disease .\n ?trial a .\n ?trial ?arm .\n ?arm ?result .\n ?arm ?drug .\n ?result ?p .\n ?result ?effect .\n FILTER ((?p < 0.05) || (?effect > 0.7))\n OPTIONAL {\n ?result ?marker .\n BIND(?marker AS ?optMarker)\n }\n FILTER (?optMarker != )\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "67", + "maxDepth" : "15", + "leafNodeCount" : "35", + "maxBranchingFactor" : "3", + "joinNodeCount" : "8", + "filterNodeCount" : "2", + "statementPatternCount" : "8", + "anonymousTypeTokenCount" : "0", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=7", + "structureSignatureRawSha256" : "66fb7d5c937cf7dfc9811aac0ca90386b34e929cfc62b9706d23d60c6c3b9f60", + "structureSignatureNormalizedSha256" : "66fb7d5c937cf7dfc9811aac0ca90386b34e929cfc62b9706d23d60c6c3b9f60", + "joinAlgorithmSignatureSha256" : "015f291d79cfd726ad3d55dbb8b32fdb73cc55e757d0f046ea1d53a2f1eb7a32", + "actualResultSizesSignatureSha256" : "c7581b4f10eaf184519b343dc088a5dab413eb13498d69a0f35dbfda8810937c", + "estimatesSignatureSha256" : "ad5dfdfc7d4749440010cf3f8ab91b6c9aaa20bba3d049c711dff9a576432ff1", + "joinAlgorithmMultisetSignatureSha256" : "af0a118c0eeef597b3b2bf40840b2241af5c3399d027e0f5aadf3654e49897b3", + "actualResultSizesMultisetSignatureSha256" : "7d3e338311541ad311ffd8dc67e6580712db65980e3a1c6572e4356402f7ef57", + "estimatesMultisetSignatureSha256" : "6289e1e9157f303e506fe4fea1a3afb21174071cf1a6eb9c4f24951ee806ada0", + "statementPatternEstimatesMultisetSignatureSha256" : "6101cd1b7bb250176cdd46210c3e9be3536306b529f4a395becee394edb303f6", + "statementPatternEstimateTokenCount" : "8", + "modeledWorkUnits" : "638.0499999999999995", + "modeledInputRowsSum" : "400", + "modeledOutputRowsSum" : "375", + "modeledJoinInputRowsSum" : "292", + "modeledJoinOutputRowsSum" : "152", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=444;projection=0.05;scan=164;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37", + "modeledOperatorCountByCategorySignatureSha256" : "75088421549431b67f761b39e8947ce7deba485b7c523f4721400a8348668108", + "modeledInputRowsByCategory" : "distinct=0;extension=21;filter=44;group=18;join=152;projection=1;scan=164;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "a7d4645442a96fe72f6a82eb96a51460d3792f0182675a6d5da8ef4620858a08", + "modeledOutputRowsByCategory" : "distinct=0;extension=21;filter=36;group=1;join=152;projection=1;scan=164;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "34d60966106e1d986f74607b759252f0ac3d0c89e027cdd6e1e4b236d004a85b", + "modeledFilterInputRowsSum" : "44", + "modeledFilterOutputRowsSum" : "36", + "modeledFilterPassRatio" : "0.818182", + "modeledFilterRejectRatio" : "0.181818", + "modeledJoinWorkByAlgorithm" : "JoinIterator=390;LeftJoinIterator=54", + "modeledJoinWorkByAlgorithmSignatureSha256" : "c67dfdc764739be0a06bed7e65b48cc943b4840e6fb4a0185b8994e946f388b1", + "modeledWorkVector" : "workUnits=638.0499999999999995|barrierCount=4|joinInputRowsSum=292|joinOutputRowsSum=152|operatorCountByCategory=distinct=2;extension=5;filter=2;group=2;join=8;projection=3;scan=8;unknown=37|joinWorkByAlgorithm=JoinIterator=390;LeftJoinIterator=54|categories=distinct=0;extension=4.2;filter=13.1999999999999995;group=12.6;join=444;projection=0.05;scan=164;unknown=0", + "modeledWorkVectorSignatureSha256" : "51daf2324abde8095e70d7212d3f212cb57b44202235df95c9b548017b8d7607", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]|nodes=1|workUnits=0.4|inputRows=2|outputRows=2|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (<)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (>)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=3.8|inputRows=19|outputRows=19|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=2|workUnits=13.1999999999999995|inputRows=44|outputRows=36|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=12.6|inputRows=18|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=7|workUnits=390|inputRows=134|outputRows=134|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=54|inputRows=18|outputRows=18|selfTimeActual=0|totalTimeActual=0;Or[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: ospc] [UNKNOWN]|nodes=1|workUnits=8|inputRows=8|outputRows=8|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: spoc] [UNKNOWN]|nodes=7|workUnits=156|inputRows=156|outputRows=156|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.05\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"0.7\"^^)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=http://example.com/theme/pharma/biomarker/999)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=arm)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=disease)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=drug)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=effect)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=marker)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optMarker)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=p)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=result)[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=trial)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "a090df7091400571708f68d53c0bcedc72720778a51c3b48668376cce9921c17", + "operatorWorkTopContributors" : "Join[JoinIterator]:390;StatementPattern [index: spoc] [UNKNOWN]:156;LeftJoin[LeftJoinIterator]:54;Filter[UNKNOWN]:13.1999999999999995;Group ()[UNKNOWN]:12.6;StatementPattern [index: ospc] [UNKNOWN]:8;Extension[UNKNOWN]:3.8;BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]])[UNKNOWN]:0.4", + "estimateActualComparableNodeCount" : "16", + "estimateActualAbsErrorSum" : "135062375391568628025", + "estimateActualRelativeErrorMean" : "468966581220724392.575454059829", + "estimateActualQErrorP50" : "119.375", + "estimateActualQErrorP95" : "3749767364329268555.555555555556", + "estimateActualQErrorMax" : "3749767364329268555.555555555556", + "joinEstimateActualComparableNodeCount" : "7", + "joinEstimateActualQErrorP50" : "4111474317402.777777777778", + "joinEstimateActualQErrorP95" : "3749767364329268555.555555555556", + "joinEstimateActualQErrorMax" : "3749767364329268555.555555555556", + "costEstimateSum" : "208.443263073715429", + "costEstimateMax" : "53.75872022286245", + "resultSizeEstimateSum" : "135062375391568628323", + "resultSizeEstimateMax" : "67495812557926834000", + "resultSizeActualSum" : "375", + "resultSizeActualMax" : "26", + "modeledHasNextCallCountSum" : "434", + "modeledHasNextTrueCountSum" : "243", + "modeledHasNextTimeNanosSum" : "92199669", + "modeledNextCallCountSum" : "242", + "modeledNextTimeNanosSum" : "620665", + "modeledJoinRightIteratorCreateCountSum" : "140", + "modeledJoinLeftBindingSetConsumedCountSum" : "350", + "modeledJoinRightBindingSetConsumedCountSum" : "124", + "modeledJoinTelemetryNodeCount" : "8", + "modeledJoinRightBindingsPerLeftRatio" : "0.354286", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0.885714", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "17.5", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "43.75", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "15.5", + "modeledSourceRowsScannedSum" : "432", + "modeledSourceRowsMatchedSum" : "200", + "modeledSourceRowsFilteredSum" : "232", + "modeledSourceFilterOutRatio" : "0.537037", + "modeledIteratorTelemetryNodeCount" : "68", + "modeledHasNextTimeMillisSum" : "92.199669", + "modeledNextTimeMillisSum" : "0.620665", + "modeledHasNextPerNextRatio" : "1.793388", + "modeledHasNextTruePerNextRatio" : "1.004132" + } + } + } +} \ No newline at end of file From 23d13737dea194e857cc16ad3aea3826adbda90e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 00:26:54 +0200 Subject: [PATCH 21/43] improvef query explanation --- plans/detailed-design.md | 1037 ------------ plans/engineering-design-doc.md | 743 --------- plans/implementation-design.md | 496 ------ plans/low-level-design-LLD.md | 1573 ------------------ plans/robust-synopsis-lazy-spill-execplan.md | 106 -- plans/technical-design-spec.md | 885 ---------- 6 files changed, 4840 deletions(-) delete mode 100644 plans/detailed-design.md delete mode 100644 plans/engineering-design-doc.md delete mode 100644 plans/implementation-design.md delete mode 100644 plans/low-level-design-LLD.md delete mode 100644 plans/robust-synopsis-lazy-spill-execplan.md delete mode 100644 plans/technical-design-spec.md diff --git a/plans/detailed-design.md b/plans/detailed-design.md deleted file mode 100644 index 49ed80e78d0..00000000000 --- a/plans/detailed-design.md +++ /dev/null @@ -1,1037 +0,0 @@ -# RDF4J LMDB Join Order Optimizer — Detailed Design - -**Document type:** Detailed design -**Target module:** `core/sail/lmdb` -**Audience:** Engineers implementing planner, ordered access, and statistics support - ---- - -## 1. Overview - -This document turns the implementation design into concrete behavior. - -The optimizer is built around one idea: - -> For LMDB, the cost of adding the next statement pattern depends on the actual index prefixes that can be used **after considering which variables are already bound**. - -The design therefore models: - -1. **binding state** per position, -2. **candidate access paths** per statement pattern, -3. **rows scanned per probe**, -4. **rows returned per probe**, -5. **order properties** for merge join, -6. and **plan-state cost accumulation**. - ---- - -## 2. Scope - -### 2.1 In-scope - -- inner join groups made only of `StatementPattern` -- join reordering for LMDB -- LMDB index-aware cost estimation -- ordered retrieval and merge-join enablement -- prefix statistics -- explainable chosen access paths - -### 2.2 Out-of-scope for this version - -- bushy plans -- adaptive re-optimization during execution -- exact skew-aware histograms -- optimizer support for SERVICE, property paths, arbitrary mixed tuple expressions -- automatic creation of new indexes - ---- - -## 3. Query-tree traversal behavior - -`LmdbJoinOrderOptimizer` must preserve the traversal behavior of RDF4J’s current `QueryJoinOptimizer` unless explicitly changed here. - -### 3.1 `LeftJoin` - -Behavior is unchanged: - -1. optimize left side first, -2. extend bound-variable scope with left-side bindings, -3. optimize right side under that extended scope. - -### 3.2 Priority join arguments - -Maintain current behavior for: - -- `BindingSetAssignment` -- extension / `BIND` -- subselect-like arguments that should be evaluated before normal join reordering - -These are **not** part of LMDB DP search. - -### 3.3 Pure statement-pattern groups - -If, after removing priority arguments, the remaining flattened join group consists only of `StatementPattern`, apply LMDB-specific planning. - -### 3.4 Mixed groups - -If any remaining non-priority argument is not a `StatementPattern`, do **not** use LMDB DP for that group. Use generic ordering logic for that group. - -This is the safety boundary for the first implementation. - ---- - -## 4. Binding-state model - -For each statement pattern position: - -- `S` = subject -- `P` = predicate -- `O` = object -- `C` = context - -Define a per-position state: - -```text -CONST = compile-time constant RDF value -BOUND = variable is not constant now, but will be bound by previous join steps -UNBOUND = variable still free when this pattern executes -ABSENT = no context variable exists for the pattern -``` - -### 4.1 Source of `CONST` - -A position is `CONST` if: - -1. `Var.hasValue()` is true, or -2. the variable name is present in incoming query bindings with a concrete value. - -In the second case, the value must be treated as a compile-time constant for planning. - -### 4.2 Source of `BOUND` - -A position is `BOUND` if: - -1. the variable has no compile-time value, and -2. its variable name is already bound by the current partial plan. - -### 4.3 Source of `UNBOUND` - -A position is `UNBOUND` if: - -1. it has no compile-time value, and -2. its variable name is not yet bound by the current partial plan. - -### 4.4 Source of `ABSENT` - -Only applicable to context: - -- if the statement pattern has no context variable, context state is `ABSENT`. - -For index-prefix scoring, `ABSENT` behaves the same as `UNBOUND`. - ---- - -## 5. Statement-pattern term resolution - -For every statement pattern, construct a `ResolvedPatternTerms` object: - -```text -subject: PositionState + optional Value + optional variable name -predicate: PositionState + optional Value + optional variable name -object: PositionState + optional Value + optional variable name -context: PositionState + optional Value + optional variable name -``` - -This object is input to all cost and access-path logic. - -### 5.1 Repeated variables inside one pattern - -If the same variable occurs in multiple positions, the state of each occurrence is derived independently but linked by variable name. - -Examples: - -- `?x :p ?x` - - if `?x` not yet bound: subject = `UNBOUND`, object = `UNBOUND`, plus equality constraint - - if `?x` already bound: subject = `BOUND`, object = `BOUND` - -### 5.2 Invalid constant types - -Use the same defensive behavior as current cardinality code: - -- subject constant must be a `Resource` -- predicate constant must be an `IRI` -- context constant must be a `Resource` - -Invalid inlined values must be treated as unbound/non-indexable for planning. - ---- - -## 6. Index model - -LMDB indexes are configured as field sequences such as: - -- `spoc` -- `posc` -- `sopc` -- `ospc` - -Each sequence defines the lexicographic order of the encoded quad key. - -### 6.1 Descriptor representation - -Represent each index with: - -```text -name = original field sequence string, e.g. "spoc" -fieldSeq = char[] or equivalent, e.g. ['s','p','o','c'] -``` - -### 6.2 Prefix usability - -For a given resolved statement pattern, the usable prefix length of an index is: - -> the number of consecutive leading fields in the index whose positions are in state `CONST` or `BOUND`, stopping at the first `UNBOUND`/`ABSENT`. - -Examples: - -#### Example A -Pattern: `?s :p ?o` -Current bound vars: `{?s}` -Index: `spoc` - -- `s = BOUND` -- `p = CONST` -- `o = UNBOUND` -- `c = ABSENT` - -Usable prefix = `2` (`s,p`) - -#### Example B -Pattern: `?s :p ?o` -Current bound vars: `{}` -Index: `spoc` - -- `s = UNBOUND` -- `p = CONST` -- usable prefix = `0` - -#### Example C -Pattern: `:a ?p :b` -Index: `spoc` - -- `s = CONST` -- `p = UNBOUND` -- `o = CONST` -- usable prefix = `1`, not `2` - -The fixed object does not help because predicate blocks the prefix. - ---- - -## 7. Access-path enumeration - -For each statement pattern under a given bound-variable set: - -1. enumerate every configured LMDB index, -2. compute prefix length, -3. estimate scan rows and output rows, -4. derive optional order property, -5. retain best candidates. - -### 7.1 Candidate retention rule - -Keep all indexes whose prefix length equals the **maximum prefix length** for that pattern and bound-variable set. - -Reason: - -- the optimizer must be aware of alternative orders available at the same prefix quality, -- but it must not keep obviously dominated lower-prefix candidates. - -### 7.2 Exception: no order candidates for prefix length 0 - -If the best prefix length is `0`, the candidate set is reduced to unordered access only. - -Reason: - -- a full-scan order is usually not useful enough to justify merge-join planning, -- and advertising such orders leads to pathological plans. - -### 7.3 Candidate fields - -Each access-path candidate must contain at least: - -```text -indexName -fieldSeq -prefixLen -rowsScannedPerProbe -rowsReturnedPerProbe -probeCost -orderedByVarName (nullable) -requestedStatementOrder (nullable) -usesRangeLookup (boolean) -``` - -### 7.4 Ordered candidate derivation - -For a retained index candidate: - -- if `prefixLen > 0` -- and `prefixLen < 4` -- and the first varying field after the prefix corresponds to an unbound variable, - -then the candidate may expose an order. - -Example: - -Index = `spoc`, prefixLen = 2, first varying field = `o` -If object variable is unbound, `orderedByVarName = objectVarName`. - -If the field after the prefix is already fixed, there is a bug in prefix computation. - ---- - -## 8. Statistics model - -The optimizer needs two classes of numbers: - -1. **exact constant cardinalities** -2. **average prefix fanout** - -### 8.1 Exact constant cardinalities - -Use LMDB’s existing exact or estimated constant-based cardinality logic through `LmdbEvaluationStatistics` and `TripleStore.cardinality(...)`. - -This path is used when all relevant fixed values are compile-time constants. - -### 8.2 Prefix statistics - -For each index, maintain: - -- `rowCount` -- `distinctPrefixCount[1]` -- `distinctPrefixCount[2]` -- `distinctPrefixCount[3]` -- `distinctPrefixCount[4]` - -Derived: - -- `avgRowsPerPrefix[1] = rowCount / distinctPrefixCount[1]` -- `avgRowsPerPrefix[2] = rowCount / distinctPrefixCount[2]` -- etc. - -### 8.3 Why prefix distinct counts are enough - -For runtime-bound prefix probes, the optimizer needs: - -> “If the first `k` fields of this index are bound at execution time, how many rows do I expect per probe?” - -That is exactly `avgRowsPerPrefix[k]`. - -### 8.4 Snapshot format - -Use an immutable in-memory snapshot: - -```text -StatisticsSnapshot - totalRows - builtAtNanos - dirtyCommitsAtBuild - byIndexName -> IndexStatistics -``` - -Where: - -```text -IndexStatistics - indexName - fieldSeq - rowCount - distinctPrefixCount[1..4] - avgRowsPerPrefix[1..4] -``` - ---- - -## 9. Building prefix statistics - -### 9.1 Build strategy - -Compute prefix statistics by scanning each configured index in key order. - -Because keys are already sorted lexicographically by index sequence, distinct prefix counts are easy to count in a single pass. - -### 9.2 One-pass algorithm - -For each index: - -1. open read cursor on explicit DB -2. open read cursor on inferred DB -3. process both and aggregate totals -4. for each record: - - decode ordered quad IDs for this index sequence - - compare prefix lengths 1..4 against previous key - - increment distinct counters when the prefix changes - -### 9.3 Pseudocode - -```text -for each index: - rows = 0 - distinct[1..4] = 0 - prevKey = null - - for each record in explicit DB and inferred DB: - key = decodeIndexOrderedIds(record) - - rows += 1 - - if prevKey == null: - distinct[1] += 1 - distinct[2] += 1 - distinct[3] += 1 - distinct[4] += 1 - else: - if prefixChanged(prevKey, key, 1): distinct[1] += 1 - if prefixChanged(prevKey, key, 2): distinct[2] += 1 - if prefixChanged(prevKey, key, 3): distinct[3] += 1 - if prefixChanged(prevKey, key, 4): distinct[4] += 1 - - prevKey = key -``` - -### 9.4 Complexity - -For `m` configured indexes and `N` statements: - -- build complexity is `O(mN)` -- memory is `O(m)` - -This is acceptable because: - -- LMDB index count is low, -- stats build is infrequent, -- result is cached. - ---- - -## 10. Statistics refresh policy - -### 10.1 Dirtying rule - -Any committed transaction that adds or removes statements increments `dirtyCommitCount`. - -Exact mutation counts are not required for the first implementation. - -### 10.2 Refresh rule - -Refresh snapshot when either condition is true: - -1. no snapshot exists, -2. `dirtyCommitCount >= queryOptimizerStatisticsRefreshCommitThreshold` - -### 10.3 Build timing - -If `queryOptimizerStatisticsBuildOnInit = true`, build at store initialization. - -Otherwise build lazily on first optimizer use. - -### 10.4 Failure behavior - -If stats build fails: - -1. log warning, -2. keep previous snapshot if present, -3. fall back to conservative heuristics, -4. never fail query planning because stats rebuild failed. - ---- - -## 11. Cost model - -The planner needs: - -- **probe scan cost** -- **probe output rows** -- **step cost** -- **plan output rows** - -### 11.1 Definitions - -Let: - -- `outerRows` = estimated rows produced by current partial plan -- `scanRowsPerProbe` = rows LMDB must inspect per probe -- `outRowsPerProbe` = rows returned per probe -- `scanWeight` = cost of scanning one row (constant) -- `emitWeight` = cost of materializing one output row (constant) -- `probeStartup` = constant startup per probe - -Recommended defaults: - -```text -scanWeight = 1.0 -emitWeight = 0.25 -probeStartup = 5.0 -``` - -These weights are internal constants, not public API. - -### 11.2 Scan rows per probe - -#### Case A: prefix length = 0 - -```text -scanRowsPerProbe = totalRows -``` - -#### Case B: prefix length > 0 and every prefix field is compile-time constant - -Use exact cardinality of the prefix-only restriction. - -Example: - -- chosen index `spoc` -- prefixLen = 2 -- subject constant, predicate constant - -Then compute: - -```text -scanRowsPerProbe = cardinality(s = const, p = const, o = *, c = *) -``` - -#### Case C: prefix length > 0 and any prefix field is runtime-bound - -Use average rows for that prefix length from the chosen index: - -```text -scanRowsPerProbe = avgRowsPerPrefix[prefixLen] -``` - -### 11.3 Output rows per probe - -`outRowsPerProbe` models how many rows survive all restrictions. - -#### Fast path: all fixed positions are compile-time constants - -Use exact full-pattern cardinality: - -```text -outRowsPerProbe = cardinality(all compile-time fixed values) -``` - -#### Mixed path: runtime-bound values present - -Start with: - -```text -outRowsPerProbe = scanRowsPerProbe -``` - -Then multiply by selectivity factors for all additional restrictions not already accounted for in the usable prefix. - -##### 11.3.1 Constant non-prefix field - -For a constant field not in the usable prefix: - -```text -selectivity(field = const) = exactCardinality(field = const only) / totalRows -outRowsPerProbe *= selectivity -``` - -Clamp to `[0,1]`. - -##### 11.3.2 Runtime-bound non-prefix field - -For a runtime-bound field not in the usable prefix: - -```text -selectivity(field = bound) = 1 / distinct(field) -``` - -Where `distinct(field)` is derived from any configured index whose first field is that field. - -If no index starts with that field, use fallback: - -```text -selectivity = 1 / max(10, sqrt(totalRows)) -``` - -##### 11.3.3 Repeated-variable equality inside one pattern - -For every additional occurrence of the same variable not already fixed by the prefix, multiply by an equality factor: - -```text -equalitySelectivity ≈ 1 / distinct(fieldOfExtraOccurrence) -``` - -Use the same `distinct(field)` lookup as above. - -If unavailable, reuse the generic fallback. - -### 11.4 Probe cost - -```text -probeCost = probeStartup + (scanRowsPerProbe * scanWeight) + (outRowsPerProbe * emitWeight) -``` - -### 11.5 Step cost in a left-deep plan - -Adding a new statement pattern to an existing partial plan: - -```text -stepCost = outerRows * probeCost -stepRows = outerRows * outRowsPerProbe -``` - -This works because every row from the left side produces one parameterized probe of the right-side statement pattern. - -### 11.6 Cross join penalty - -If the new statement pattern shares no variable with the current partial plan, the same formula already penalizes it because `outerRows` multiplies a non-parameterized scan. - -No extra ad-hoc penalty is required in the LMDB DP model. - -### 11.7 Merge join cost - -If a merge join is possible: - -```text -mergeCost = leftCost + rightScanCost + mergeCpuFactor * (leftRows + rightRows) -``` - -Recommended: - -```text -mergeCpuFactor = 0.2 -``` - -But for plan comparison, the implementation may simplify to: - -```text -mergeStepCost = leftRows + rightRows -``` - -if constants are calibrated consistently. - -### 11.8 Merge join output rows - -Use the same output-row estimate as nested-loop addition: - -```text -mergeStepRows = leftRows * outRowsPerProbe -``` - -because `outRowsPerProbe` is already conditioned on the shared bound variables. - ---- - -## 12. Choosing between nested loop and merge join - -A merge join candidate is valid only if: - -1. merge joins are enabled, -2. current partial plan has an output order on variable `v`, -3. next statement pattern can produce the same order on `v`, -4. `v` is a join variable, -5. the size ratio satisfies: - ```text - max(leftRows, rightRows) / max(1, min(leftRows, rightRows)) <= MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER - ``` -6. ordered access does not require a prefix downgrade. - -If valid, compute both nested-loop and merge costs and keep the cheaper state. - ---- - -## 13. DP plan search - -### 13.1 State shape - -A DP state must contain: - -```text -subsetMask // which statement patterns are included -orderedByVarName // nullable physical property -cost // total estimated cost of the plan -rows // total estimated output rows -boundVarNames // all binding names produced by the subset -planItems // ordered plan representation used to build the final tree -``` - -`orderedByVarName` is part of the state key because the same subset may have different future usefulness depending on whether it preserves a join order. - -### 13.2 Singleton states - -For each statement pattern: - -1. enumerate retained access paths, -2. create: - - one unordered singleton state, - - plus one ordered singleton state per supported order, -3. keep only the cheapest state per `(subsetMask, orderedByVarName)`. - -### 13.3 Transition - -For each existing state and each remaining statement pattern: - -1. derive bound-variable set from the state, -2. enumerate access paths for that pattern under the state’s bindings, -3. compute: - - nested-loop transition - - optional merge-join transition -4. keep best state for resulting `(newSubsetMask, newOrderedByVarName)`. - -### 13.4 Final state - -Pick the cheapest full-subset state. - -If multiple full states have nearly equal cost, tie-break in this order: - -1. lower total cost -2. lower output rows -3. higher average prefix length -4. more merge joins -5. deterministic lexical order of original statement-pattern positions - -### 13.5 DP cutoff - -If pattern count exceeds threshold, switch to greedy. - ---- - -## 14. Greedy fallback - -For statement-pattern groups larger than threshold: - -1. choose the best singleton statement pattern, -2. repeatedly add the cheapest next statement pattern using current bound vars, -3. preserve ordered state when beneficial, -4. consider merge join only when current state already has order. - -This keeps complexity linear-ish for large groups. - ---- - -## 15. Building the final join tree - -### 15.1 Do not mutate while searching - -During DP/greedy search, do **not** mutate the original query model. - -Store lightweight planning metadata only. - -### 15.2 Plan item representation - -Each plan item should record: - -```text -originalStatementPattern -chosenIndexName -chosenOrderVarName (nullable) -joinMethodToPrevious = NONE | NESTED_LOOP | MERGE -mergeJoinVarName (nullable) -``` - -### 15.3 Tree construction - -After best plan is chosen: - -1. clone or reuse optimized statement-pattern nodes in the chosen order, -2. attach metadata: - - set planned `indexName` - - set statement-pattern order if directly needed by execution path -3. build a right-recursive `Join` chain -4. mark joins with: - - `setMergeJoin(true)` - - `setOrder(var)` - where applicable - -### 15.4 Right-recursive shape - -Preserve RDF4J’s current right-recursive join construction to remain compatible with iterative evaluation optimization behavior. - ---- - -## 16. Ordered retrieval in `LmdbSailDataset` - -### 16.1 `getSupportedOrders(...)` - -Given concrete `subj`, `pred`, `obj`, `contexts`: - -1. convert known values to LMDB IDs where possible, -2. treat unknown or multiple-context requests conservatively, -3. compute best prefix length across configured indexes, -4. if best prefix length is `0`, return empty set, -5. for each index with that best prefix length: - - find first varying field after the prefix, - - map field to `StatementOrder`, - - add to result - -If multiple specific contexts are supplied, treat context as not fixed for support calculation. - -### 16.2 `getStatements(StatementOrder, ...)` - -Select the best index satisfying all of: - -1. index has best prefix length for current concrete bindings, -2. first varying field after the prefix matches requested order, -3. requested order is actually supported for this call. - -Then perform the same range or full scan logic as normal statement retrieval, but using that selected index. - -### 16.3 Multi-context ordering - -If multiple specific contexts are requested: - -1. create one per-context ordered iterator, -2. merge them with a heap-based k-way merge using statement comparator for the requested order. - -Do **not** concatenate with `UnionIteration`, because that destroys global order. - -### 16.4 Comparator - -Implement `getComparator()` as a value comparator consistent with LMDB index key order. - -Use LMDB internal value IDs whenever possible. - ---- - -## 17. Value comparator design - -### 17.1 Correctness requirement - -For ordered LMDB scans, the comparator must compare values in the same order used in the underlying LMDB keys. - -### 17.2 Implementation rule - -If both values are LMDB values with valid internal IDs for the current value-store revision: - -```text -compare(left, right) = compareUnsigned(left.getInternalID(), right.getInternalID()) -``` - -Otherwise: - -1. try resolving IDs through the value store without creating new values, -2. if both resolve, compare resolved IDs, -3. otherwise fall back to generic RDF value comparison **outside** the LMDB ordered fast path only. - -### 17.3 Why internal IDs are safe - -LMDB stores encoded value IDs in keys, and the varint encoding preserves numeric and lexicographic order. Therefore comparing value IDs is comparator-consistent with iterator order. - ---- - -## 18. Planned index-name annotation - -Every chosen statement pattern should be annotated with the planner’s chosen index name. - -### 18.1 Purpose - -- explain plans -- regression tests -- troubleshooting -- validating access-path choice - -### 18.2 Runtime overwrite - -If runtime execution reports a different actual index, runtime metadata wins for diagnostics. - ---- - -## 19. Mixed join-group fallback behavior - -If the group contains non-`StatementPattern` arguments after priority removal: - -1. optimize child joins recursively, -2. use the generic RDF4J join-order logic for that group, -3. do not attempt LMDB DP, -4. do not expose LMDB merge-join assumptions for that group. - -This avoids complex mixed-node semantics in v1. - ---- - -## 20. Examples - -### 20.1 Example 1 — runtime-bound variable changes best access path - -Query fragment: - -```sparql -?org :locatedIn :Berlin . -?person :worksFor ?org . -?person :name ?n . -``` - -Configured indexes: - -```text -spoc,posc -``` - -#### Step 1 -Pattern `?org :locatedIn :Berlin` - -- `posc` usable prefix = `2` (`p,o`) -- choose first - -Assume output rows = 100 organizations. - -#### Step 2 -Pattern `?person :worksFor ?org` - -Current bound vars = `{org}` - -- `spoc`: subject unbound => prefix `0` -- `posc`: predicate const + object bound => prefix `2` - -Choose `posc`. - -Now each organization produces a narrow probe, not a full scan. - -#### Step 3 -Pattern `?person :name ?n` - -Current bound vars = `{org, person}` - -- `spoc`: subject bound + predicate const => prefix `2` - -Choose `spoc`. - -Result: good left-deep nested-loop plan. - -### 20.2 Example 2 — order support should not force downgrade - -Pattern: - -```sparql -?x :p ?y -``` - -Current bound vars = `{?x}` - -Indexes: - -```text -spoc,posc -``` - -- `spoc` prefix = `2`, next varying field = `o`, ordered by `?y` -- `posc` prefix = `1`, next varying field = `o` - -Only `spoc` is retained because it has better prefix length. - -Result: order by `?y` is supported from `spoc`; no downgrade. - -### 20.3 Example 3 — full-scan order must not be advertised - -Pattern: - -```sparql -?s ?p ?o -``` - -Indexes: - -```text -spoc,posc -``` - -Best prefix length = `0`. - -Even though the store could physically emit a full scan in `s` or `p` order, the optimizer must return **no supported order** for this planning purpose. - ---- - -## 21. Error handling - -### 21.1 Unknown value IDs - -If a compile-time constant does not exist in the value store, exact cardinality is `0` and the pattern should be strongly preferred because it collapses the join group quickly. - -### 21.2 Statistics unavailable - -If no statistics snapshot exists and build fails: - -- use exact constant cardinality when available, -- otherwise use generic heuristics with conservative scan penalties, -- do not fail the query. - -### 21.3 Ordered access unavailable through wrappers - -If a wrapper dataset does not forward ordered APIs, ordered support is effectively disabled for that query shape. -The optimizer must still produce correct unordered plans. - ---- - -## 22. Complexity summary - -### 22.1 DP search - -For `n <= 8`: - -- subsets: `2^n` -- states per subset: bounded by number of interesting orders + 1 -- practical size is small because order dimension is at most one variable per step - -### 22.2 Greedy search - -Roughly `O(n^2 * i)` where `i` = number of indexes. - -### 22.3 Statistics build - -`O(mN)` where `m` = configured index count. - ---- - -## 23. Verification checklist - -The detailed design is fully implemented only if all statements below are true. - -### Planner - -- [ ] Statement patterns are costed against actual configured LMDB indexes -- [ ] Runtime-bound variables count toward usable prefix length -- [ ] Prefix length `0` never advertises order -- [ ] DP search retains order as a physical property -- [ ] Merge join compares against nested-loop alternative - -### Store/runtime - -- [ ] `LmdbSailDataset.getSupportedOrders(...)` implemented -- [ ] `LmdbSailDataset.getStatements(StatementOrder, ...)` implemented -- [ ] ordered multi-context reads merge globally -- [ ] value comparator is ID-based and order-consistent - -### Statistics - -- [ ] per-index prefix distinct counts built -- [ ] stats cached -- [ ] stats marked dirty on committed write transactions -- [ ] rebuild policy implemented - -### Tests - -- [ ] join order changes with index set -- [ ] join order changes with binding order -- [ ] merge join only appears when valid -- [ ] explain plan shows chosen access path -- [ ] ordered retrieval works across multiple contexts - ---- - -## 24. Summary of design decisions - -1. **LMDB-specific planner, not generic-core rewrite** -2. **Pure statement-pattern groups only** for LMDB DP in v1 -3. **Runtime-bound variables count as prefix-fixed** -4. **Prefix distinct counts** are the required statistics -5. **Order is exposed only at best prefix quality and only if prefixLen > 0** -6. **Left-deep DP up to 8 patterns**, greedy above -7. **Ordered multi-context reads require k-way merge** -8. **Comparator must use LMDB internal IDs** - -These are the implementation-critical decisions. Everything else is supporting detail. \ No newline at end of file diff --git a/plans/engineering-design-doc.md b/plans/engineering-design-doc.md deleted file mode 100644 index 74abdf3f5c6..00000000000 --- a/plans/engineering-design-doc.md +++ /dev/null @@ -1,743 +0,0 @@ -# RDF4J LMDB Join Order Optimizer — Engineering Design Document - -**Document type:** Engineering design document -**Audience:** Maintainers, performance engineers, release owners, tech leads -**Project:** LMDB-specific SPARQL join planning in RDF4J - ---- - -## 1. Executive summary - -The RDF4J LMDB store already knows how to choose a good index **once a statement lookup is executed**, but the default join optimizer still behaves largely as if storage were generic. - -That mismatch causes real problems: - -- the optimizer can pick the wrong first pattern, -- it can ignore the configured LMDB index set, -- it cannot properly value runtime-bound variables as indexable probes, -- and it cannot exploit ordered access because LMDB’s ordered APIs are currently stubbed. - -This project addresses that gap by introducing an **LMDB-local physical planner** and the minimum runtime support needed to use it. - -The resulting design: - -- limits code churn outside LMDB, -- preserves current behavior for non-LMDB stores, -- is feature-flagged, -- supports staged rollout, -- and provides strong testability and observability. - ---- - -## 2. Why this work matters - -### 2.1 User-visible impact - -Bad join order is one of the most expensive planner mistakes in RDF systems because a small logical reordering can change execution from: - -- a few thousand narrow prefix probes - -to - -- repeated full or near-full scans. - -When this happens in LMDB, the store is blamed even though the underlying runtime index selection is often fine. The real issue is that planning did not expose the right bound values to the runtime access path. - -### 2.2 Engineering value - -This project improves more than raw performance. - -It also gives the team: - -- a clearer separation between logical and physical planning, -- explainable access-path decisions, -- reproducible plan behavior under different index configurations, -- and a foundation for later work such as adaptive planning or index advising. - ---- - -## 3. Problem framing - -### 3.1 Current asymmetry - -Current LMDB behavior has three distinct layers: - -1. **storage layer** - index-aware at runtime - -2. **statistics layer** - partly LMDB-aware, but only for compile-time constants - -3. **join optimizer** - generic and largely store-agnostic - -The join optimizer is the weak link. - -### 3.2 Failure modes we are explicitly targeting - -1. A statement pattern is selective only **after** a previous join binds one of its variables. -2. The generic optimizer treats that pattern as weak because the value is not a compile-time constant. -3. LMDB actually has an index that would make the parameterized probe cheap. -4. The optimizer starts elsewhere and creates a huge intermediate result. - -Other failure modes: - -- merge join is impossible to exploit because ordered access is not implemented, -- configured custom index sets do not materially influence join order, -- explain output does not show enough planner intent. - ---- - -## 4. Constraints - -### 4.1 Technical constraints - -1. The implementation must fit into RDF4J’s existing evaluation-strategy and optimizer-pipeline architecture. -2. The LMDB store already has established internal classes (`LmdbStore`, `LmdbSailStore`, `TripleStore`, `LmdbEvaluationStatistics`) and the design should reuse them. -3. Public API expansion should be minimal. -4. Correctness is non-negotiable. -5. Planner failure must not make queries fail. - -### 4.2 Organizational constraints - -1. The change should be reviewable by a normal-sized team. -2. It should be mergeable without a broad generic-optimizer redesign. -3. It should support rollback if performance regressions appear in edge workloads. - -### 4.3 Performance constraints - -1. Planner overhead must remain modest. -2. Statistics rebuild must not dominate every query. -3. Ordered access must not regress non-ordered cases. - ---- - -## 5. Alternatives considered - -### Alternative A — do nothing - -#### Description - -Keep generic join ordering and rely on runtime `TripleStore.getBestIndex(...)`. - -#### Pros - -- zero implementation cost -- zero rollout risk - -#### Cons - -- core problem remains unsolved -- runtime index selection arrives too late to fix bad join order -- known LMDB workload regressions remain possible - -#### Decision - -Rejected. - ---- - -### Alternative B — patch generic `QueryJoinOptimizer` for all stores - -#### Description - -Teach RDF4J’s generic optimizer about index sets, binding-sensitive access paths, and order-aware planning. - -#### Pros - -- one optimizer for all stores -- no store-local duplication - -#### Cons - -- far larger blast radius -- generic abstractions are not yet rich enough -- likely requires cross-store API design before implementation -- risk of destabilizing non-LMDB stores - -#### Decision - -Rejected for this project. - -This may be a future architectural direction, but it is the wrong first move. - ---- - -### Alternative C — subclass generic `QueryJoinOptimizer` - -#### Description - -Create `LmdbJoinOrderOptimizer extends QueryJoinOptimizer` and override a few hooks. - -#### Pros - -- less code duplication in theory - -#### Cons - -- current generic optimizer stores critical planning state in private inner classes -- required behavior changes are deeper than a few hooks -- subclassing would be fragile across upstream changes -- hard to combine DP search, order-state tracking, and LMDB-only access-path logic cleanly - -#### Decision - -Rejected. - -We will **copy and adapt** the relevant logic into an LMDB-local optimizer. - ---- - -### Alternative D — LMDB-local planner via custom strategy factory and pipeline - -#### Description - -Add a store-specific evaluation-strategy factory and optimizer pipeline that replaces only the join-ordering stage for LMDB. - -#### Pros - -- contained code change -- exploits existing factory/pipeline extension points -- preserves other stores -- easy to feature-flag -- easy to roll back - -#### Cons - -- some duplication of generic optimizer logic -- requires maintaining LMDB-local planner code - -#### Decision - -Chosen. - -This is the correct implementation boundary. - ---- - -### Alternative E — exact per-value multi-dimensional statistics - -#### Description - -Maintain full histograms or exact distinct/frequency maps for all useful prefixes and value combinations. - -#### Pros - -- more accurate selectivity estimates -- better skew handling - -#### Cons - -- high storage complexity -- expensive updates -- difficult delete semantics -- large implementation scope -- unnecessary for first delivery - -#### Decision - -Rejected for v1. - ---- - -### Alternative F — prefix distinct-count statistics only - -#### Description - -Maintain per-index row counts and distinct prefix counts for prefix lengths 1..4. - -#### Pros - -- simple -- directly useful for parameterized-prefix fanout -- one pass per index to build -- low memory footprint - -#### Cons - -- average-based, not skew-aware -- approximate for some non-prefix filters - -#### Decision - -Chosen. - -This is the best complexity-to-value trade-off for v1. - ---- - -### Alternative G — bushy join enumeration - -#### Description - -Search arbitrary join trees. - -#### Pros - -- potentially better for some disconnected or symmetric workloads - -#### Cons - -- much larger search space -- less aligned with parameterized nested-loop execution -- more complex physical-property tracking -- more code and more regression risk - -#### Decision - -Rejected for v1. - -Use left-deep DP for small groups and greedy for larger groups. - ---- - -## 6. Why the chosen design is the right one - -The chosen design is appropriate because it matches the actual performance bottleneck. - -The LMDB store does **not** need a brand-new storage engine or a generic statistics framework first. -It needs the planner to stop throwing away physically meaningful information that is already present: - -- configured indexes, -- prefix scoring, -- and the fact that earlier joins bind later probes. - -By keeping the solution LMDB-local, the team can ship meaningful value sooner and evaluate it in production-like workloads before deciding whether a generic RDF4J abstraction should later emerge from it. - ---- - -## 7. Architecture decision summary - -### ADR-1 — Planner lives in LMDB module - -**Decision:** `LmdbJoinOrderOptimizer` resides in `core/sail/lmdb`. -**Reason:** access to `TripleStore` and internal stats without widening generic APIs. - -### ADR-2 — Strategy factory owns pipeline selection - -**Decision:** default LMDB strategy factory is replaced. -**Reason:** cleanest insertion point, minimal disruption. - -### ADR-3 — Prefix statistics are cached snapshots - -**Decision:** use in-memory cached snapshots with dirty-commit rebuild policy. -**Reason:** avoids write-path complexity and makes planner behavior deterministic. - -### ADR-4 — Ordered access is implemented in LMDB dataset - -**Decision:** finish the `SailDataset` ordered APIs for LMDB. -**Reason:** without this, order-aware planning is incomplete. - -### ADR-5 — Mixed groups fall back - -**Decision:** LMDB DP only for pure `StatementPattern` join groups in v1. -**Reason:** strict safety boundary. - ---- - -## 8. Rollout strategy - -### 8.1 Feature flags - -The implementation must ship behind config flags in `LmdbStoreConfig`. - -Required flags: - -- optimizer enabled -- merge join enabled -- prefix statistics enabled -- build stats on init -- refresh threshold -- DP threshold - -### 8.2 Rollout phases - -#### Phase 0 — dark launch in tests/benchmarks - -- code merged -- feature enabled only in targeted test configurations -- broad benchmark coverage collected - -#### Phase 1 — opt-in production evaluation - -- feature available but not necessarily default in every downstream deployment -- compare explain plans and benchmark traces -- collect regressions - -#### Phase 2 — default on for LMDB - -- feature enabled by default -- documented rollback path remains - -#### Phase 3 — tuning and cleanup - -- tune weights/thresholds if necessary -- decide whether public config surface should be expanded or reduced - -### 8.3 Rollback path - -Rollback must be one config change: - -```text -queryOptimizerEnabled = false -``` - -When disabled, LMDB should use standard optimizer pipeline behavior. - ---- - -## 9. Compatibility and migration - -### 9.1 Backward compatibility - -This project is backward compatible in the following sense: - -- query results remain unchanged, -- existing LMDB indexes remain valid, -- existing repositories do not need reindexing, -- user-provided custom evaluation strategy factories still win. - -### 9.2 Behavioral changes - -Expected changes: - -- different join orders for some queries, -- new explain-plan metadata, -- ordered statement-access methods implemented, -- possible appearance of merge joins in execution plans. - -### 9.3 Migration cost - -No data migration is required. - -Statistics snapshot is ephemeral and rebuildable. - ---- - -## 10. Operational considerations - -### 10.1 Startup behavior - -If `queryOptimizerStatisticsBuildOnInit = false`, startup cost remains almost unchanged. - -If true, expect a one-time scan over configured indexes. - -### 10.2 Warm-up behavior - -The first optimized query after startup may trigger stats build if lazy build is enabled. - -This is acceptable because it is deterministic and measurable. - -### 10.3 Write-heavy workloads - -Statistics are refreshed by dirty-commit threshold, not after every commit. -This is intentional. The planner can tolerate stale-but-reasonable stats better than the write path can tolerate rebuilds on every mutation. - -### 10.4 Read-heavy workloads - -This is the primary target scenario and should benefit most. - ---- - -## 11. Observability and diagnostics - -### 11.1 Required logs - -At debug level, log: - -1. stats snapshot build start/end and duration -2. number of indexes scanned -3. join group size and whether LMDB DP or generic fallback was used -4. candidate access paths for each chosen step -5. final ordered plan -6. merge-join acceptance/rejection reason - -### 11.2 Explain-plan expectations - -A useful explain plan should expose: - -- statement-pattern order in the final join sequence -- chosen index per statement pattern -- whether the join is merge or nested loop -- estimated rows and/or cost if available - -### 11.3 Benchmark telemetry - -Benchmarks should capture: - -- planning time -- execution time -- result counts -- chosen index sequence -- number of merge joins -- number of full-scan patterns - ---- - -## 12. Risk register - -### Risk 1 — planner regressions for mixed or unusual queries - -**Cause:** new planner scope too broad or insufficient fallback. -**Mitigation:** restrict LMDB DP to pure `StatementPattern` groups in v1. - -### Risk 2 — ordered access implementation incomplete due to wrapper datasets - -**Cause:** an intermediate dataset wrapper fails to delegate order methods. -**Mitigation:** audit all LMDB-used wrappers and add delegation tests. - -### Risk 3 — comparator mismatch causes invalid merge join - -**Cause:** ordered iterator sort order and comparator not aligned. -**Mitigation:** compare by LMDB internal IDs only for LMDB ordered path; verify with dedicated tests. - -### Risk 4 — stats build too expensive on large repositories - -**Cause:** full index scans at refresh time. -**Mitigation:** lazy build, dirty threshold, config flag, preserve previous snapshot on rebuild failure. - -### Risk 5 — stale stats cause suboptimal plans in write-heavy workloads - -**Cause:** refresh policy intentionally coarse. -**Mitigation:** configurable threshold, safe fallback, benchmark with write/read mix. - -### Risk 6 — code duplication with generic optimizer drifts over time - -**Cause:** LMDB planner copies generic traversal logic. -**Mitigation:** keep copied surface small, document divergence points, periodically diff against generic optimizer. - -### Risk 7 — full-scan ordered paths accidentally reintroduced - -**Cause:** order-support logic too permissive. -**Mitigation:** explicit invariant: never advertise order when best prefix length is zero. - ---- - -## 13. Benchmark program - -### 13.1 Benchmark goals - -The benchmark program must answer: - -1. Did planning improve query execution time? -2. Is planning overhead acceptable? -3. Are chosen plans stable and explainable? -4. Did any workload regress? - -### 13.2 Dataset mix - -Use at least: - -- synthetic star dataset -- synthetic chain/path dataset -- mixed schema/instance data -- context-heavy multi-graph dataset -- one real-ish workload dataset if available internally - -### 13.3 Query mix - -Use at least: - -1. highly selective anchor + fanout -2. same query with different bound entry points -3. predicate-heavy lookups -4. object-heavy lookups -5. join on subject -6. join on object -7. cases where merge join should help -8. cases where merge join should be rejected - -### 13.4 Index-set matrix - -Benchmark each query mix under: - -- default LMDB indexes -- one subject-oriented custom index set -- one object-oriented custom index set -- one richer index set with alternative same-prefix order choices - -### 13.5 Metrics - -Mandatory metrics: - -- planning latency -- execution latency -- total rows produced -- chosen join order -- chosen indexes -- merge-join count -- full-scan count - ---- - -## 14. Review strategy - -### 14.1 Code review slices - -Split review into small, comprehensible PRs if possible: - -1. strategy factory + pipeline wiring -2. stats manager + triple-store snapshot build -3. ordered dataset support + comparator + ordered union -4. LMDB optimizer core -5. tests and benchmarks - -### 14.2 Reviewer mix - -At minimum involve: - -- one LMDB store maintainer -- one query-evaluation/optimizer maintainer -- one performance/benchmark reviewer - -### 14.3 Review questions - -Reviewers should explicitly ask: - -1. Can this ever change results? -2. Does ordered support ever lie? -3. Can this produce a worse-than-before full scan when a good prefix exists? -4. Is the fallback path clear and reliable? -5. Is there any write-path penalty hidden in the design? - ---- - -## 15. Release criteria - -The feature is release-ready only if all of the following are true. - -### Correctness - -- all existing LMDB query tests pass -- new optimizer tests pass -- merge-join correctness tests pass -- multi-context ordered iteration tests pass - -### Stability - -- fallback path is exercised in tests -- feature flags work -- no deadlocks or rebuild races in stats manager - -### Performance - -- representative workloads improve or stay flat -- no catastrophic regressions remain unexplained -- planner overhead remains acceptable - -### Diagnostics - -- explain plan shows enough information to debug regressions -- logs reveal whether LMDB planner or generic fallback was used - ---- - -## 16. Documentation requirements - -Before release, publish at least: - -1. feature overview -2. config options -3. explanation of index-sensitive join planning -4. note that ordered APIs are now implemented for LMDB -5. troubleshooting guidance: - - how to disable feature - - how to enable debug logging - - how to compare plans under different index sets - ---- - -## 17. Long-term follow-up items - -These are explicitly **not required** for this delivery, but the design should not block them. - -### 17.1 Adaptive runtime re-optimization - -If a probe fanout is dramatically different from estimate, future work could replan remaining joins. - -### 17.2 Persistent stats snapshot - -If first-query stats rebuild is too expensive on huge stores, persist snapshot to disk. - -### 17.3 Skew-aware stats - -Heavy hitters or sampled histograms could improve estimates for extreme skew. - -### 17.4 Generic abstraction extraction - -If similar logic later appears in NativeStore or other backends, a generic physical-planner abstraction may be worth extracting. - -### 17.5 Index advisor - -Once access-path telemetry exists, an offline advisor could recommend missing indexes. - ---- - -## 18. Decision log - -| Decision | Status | -|---|---| -| Keep implementation local to LMDB | Accepted | -| Use custom strategy factory and pipeline | Accepted | -| Copy/adapt generic join traversal instead of subclassing | Accepted | -| Use prefix distinct-count snapshots | Accepted | -| Enable ordered access in `LmdbSailDataset` | Accepted | -| Restrict LMDB DP to pure statement-pattern groups in v1 | Accepted | -| Use left-deep DP up to threshold, greedy above | Accepted | -| Require feature flag rollback path | Accepted | - ---- - -## 19. Concrete acceptance criteria - -This project is successful when all of the following can be demonstrated. - -### Criterion A — index-sensitive planning - -Given the same query and data but different configured LMDB indexes, the optimizer produces different physically appropriate join orders. - -### Criterion B — binding-sensitive planning - -Given the same join group but a different earlier binding sequence, the optimizer chooses a different next statement pattern when prefix probes become available. - -### Criterion C — order-aware planning - -When two inputs can produce the same useful order at best prefix quality, merge join may appear. -When they cannot, it does not. - -### Criterion D — safe fallback - -Mixed join groups continue to work and use generic behavior. - -### Criterion E — operational safety - -A config change can disable the feature entirely and restore old behavior. - ---- - -## 20. Recommended implementation policy - -1. **Ship correctness and observability first.** -2. **Tune constants only after benchmark evidence.** -3. **Do not broaden planner scope until ordered runtime support is proven stable.** -4. **Preserve deterministic decisions and explicit tie-break rules.** -5. **Keep rollback easy.** - ---- - -## 21. Final engineering recommendation - -Proceed with the LMDB-local planner. - -It is the smallest change that actually fixes the right problem: - -- the join optimizer currently does not know what LMDB can really do, -- and the storage layer already contains enough information to make materially better choices. - -The engineering risk is manageable because the design is: - -- bounded, -- feature-flagged, -- fallback-friendly, -- benchmarkable, -- and incrementally reviewable. \ No newline at end of file diff --git a/plans/implementation-design.md b/plans/implementation-design.md deleted file mode 100644 index 846f8069dee..00000000000 --- a/plans/implementation-design.md +++ /dev/null @@ -1,496 +0,0 @@ -# RDF4J LMDB Join Order Optimizer — Implementation Design - -**Document type:** Implementation design -**Target module:** `core/sail/lmdb` -**Target codebase:** Eclipse RDF4J LMDB store -**Status:** Ready for implementation -**Audience:** RDF4J maintainers and engineers implementing the LMDB-specific optimizer - ---- - -## 1. Purpose - -This document defines the implementation design for an **LMDB-specific SPARQL join order optimizer** in RDF4J. - -The optimizer must make join-order decisions using: - -1. the **actual LMDB index set** configured for the store, -2. the **variables that are already bound** at each point in the join plan, -3. the difference between **compile-time constants** and **runtime-bound values**, and -4. whether an access path can also provide a **useful output order** for a merge join. - -The design is intentionally scoped to the RDF4J LMDB store and does **not** modify RDF4J’s generic optimizer behavior for other stores. - ---- - -## 2. Problem statement - -Today, LMDB already makes an index-aware decision at **statement retrieval time**, but not at **join-order planning time**. - -### Current behavior summary - -- `TripleStore` already selects the best runtime index using `getBestIndex(...)`. -- `TripleIndex.getPatternScore(...)` already measures usable **leading bound prefix length**. -- `LmdbEvaluationStatistics` estimates statement cardinality from **compile-time constants only**. -- The default optimizer pipeline still uses the generic `QueryJoinOptimizer`, which: - - tracks which variables are bound, - - but does **not** cost specific LMDB access paths, - - does **not** reason about configured LMDB indexes, - - and does **not** account for runtime-bound variables as indexable prefix bindings. -- `LmdbSailStore.LmdbSailDataset` does **not** currently implement: - - `getStatements(StatementOrder, ...)` - - `getSupportedOrders(...)` - - `getComparator()` - -### Consequence - -The query planner can choose an order that is logically plausible but physically poor for LMDB. -That creates avoidable full scans, poor nested-loop probe patterns, and missed opportunities for order-preserving access and merge join. - ---- - -## 3. Goals - -### 3.1 Functional goals - -The implementation **shall**: - -1. Replace the generic join ordering logic for LMDB with an LMDB-aware optimizer. -2. Plan statement-pattern joins using the **configured LMDB indexes**. -3. Distinguish: - - compile-time constants, - - runtime-bound variables, - - unbound variables. -4. Choose access paths using **leading-prefix usability** over the real LMDB index set. -5. Estimate both: - - **rows scanned per probe**, and - - **rows returned per probe**. -6. Prefer plans that avoid repeated high-cost scans. -7. Expose statement orders that LMDB can actually produce without pathological downgrade. -8. Enable merge join when: - - both sides can produce the same useful order, - - the order does not require a harmful access-path downgrade, - - and the size ratio is reasonable. -9. Fall back safely to existing behavior when the LMDB-specific path is unavailable or unsupported. - -### 3.2 Engineering goals - -The implementation should: - -1. Minimize changes outside `core/sail/lmdb`. -2. Preserve RDF4J’s existing optimizer pipeline structure. -3. Preserve correctness first; performance improvements must never change query results. -4. Be testable at: - - unit level, - - integration level, - - explain/plan level, - - benchmark level. - ---- - -## 4. Non-goals - -This project does **not** include: - -1. a generic optimizer rewrite for all RDF4J stores, -2. adaptive runtime re-optimization mid-query, -3. an automatic index advisor that creates or drops indexes, -4. bushy join enumeration for the first implementation, -5. broad optimizer changes for property paths, SERVICE, or non-statement tuple expressions, -6. exact selectivity modeling for every skew pattern. - -Those may be added later, but they are not required for this delivery. - ---- - -## 5. Design principles - -### 5.1 Physical planning, not logical-only planning - -Join order must be chosen as a function of: - -- current bound variables, -- candidate access path, -- expected probe cost, -- expected output rows, -- and available order. - -The planner must optimize **`(current subplan, next statement pattern, access path)`**, not just statement-pattern order. - -### 5.2 Runtime-bound variables are physically meaningful - -If a variable becomes bound by an earlier join, then LMDB can often use it as a prefix key at execution time even though the value is not known at compile time. - -This is the central planning distinction: - -- `CONST` = value known at optimization time -- `BOUND` = value unknown now, but guaranteed to be bound when this statement pattern executes -- `UNBOUND` = value not yet bound - -### 5.3 Prefix quality dominates index usability - -For an LMDB index with field sequence like `spoc`, the best access paths are those that can bind the longest consecutive prefix from the start of the index. -A later fixed field does not compensate for an earlier unbound field. - -### 5.4 Order is secondary to prefix quality - -An access path that provides a merge-join-friendly order is useful **only if** it does not destroy prefix quality. -The optimizer must not choose an ordered full scan over a good prefix range scan. - -### 5.5 Fallback over fragility - -If a join group is outside the intended scope, the implementation must degrade to RDF4J’s current behavior instead of producing a partially correct but unstable plan. - ---- - -## 6. Target architecture - -```mermaid -flowchart TD - A[SPARQL TupleExpr] --> B[LmdbEvaluationStrategyFactory] - B --> C[LmdbQueryOptimizerPipeline] - C --> D[LmdbJoinOrderOptimizer] - - D --> E[LmdbOptimizerStatisticsManager] - D --> F[TripleStore index catalog] - D --> G[LmdbEvaluationStatistics exact constant cardinality] - - D --> H[Chosen join order + access-path metadata] - H --> I[Evaluation / execution] - - I --> J[LmdbSailDataset.getStatements(order,...)] - J --> K[TripleStore ordered or unordered iterator] - K --> L[IndexReportingIterator / actual index name] -``` - -### Core components - -1. **`LmdbEvaluationStrategyFactory`** - LMDB-specific factory that injects an LMDB-specific optimizer pipeline by default. - -2. **`LmdbQueryOptimizerPipeline`** - Same optimizer sequence as the standard pipeline, except generic `QueryJoinOptimizer` is replaced with `LmdbJoinOrderOptimizer`. - -3. **`LmdbJoinOrderOptimizer`** - Main planner for LMDB BGP join groups. - - Left-deep dynamic programming for small pure statement-pattern groups. - - Greedy fallback for larger groups. - - Generic fallback for mixed groups. - -4. **`LmdbOptimizerStatisticsManager`** - Maintains cached prefix statistics for configured indexes. - -5. **`TripleStore` additions** - Expose index descriptors, ordered access, and statistics snapshot building. - -6. **`LmdbSailDataset` order support** - Implements ordered access, supported-order reporting, and a value comparator aligned to LMDB key order. - ---- - -## 7. Current-state audit and required deltas - -| Area | Current state | Required change | -|---|---|---| -| Strategy factory | `LmdbStore` defaults to `StrictEvaluationStrategyFactory` | Default to `LmdbEvaluationStrategyFactory` unless user supplied a custom factory | -| Join optimizer | Generic `QueryJoinOptimizer` only | Add `LmdbJoinOrderOptimizer` and wire it into LMDB pipeline | -| Cardinality | `LmdbEvaluationStatistics` sees constants only | Keep exact constant estimation, add prefix statistics for runtime-bound modeling | -| Index awareness | Runtime only (`TripleStore.getBestIndex`) | Expose index metadata to the planner | -| Ordered scans | LMDB dataset stubs return unsupported/null | Implement order support and comparator | -| Multi-context ordered reads | Existing code unions per-context iterators unsorted | Add k-way merge for ordered multi-context iteration | -| Plan observability | Runtime actual index already visible | Also annotate planned access path / desired order | - ---- - -## 8. Chosen design - -### 8.1 Strategy and pipeline wiring - -#### Decision - -Implement a **store-specific factory and pipeline** instead of changing RDF4J’s generic optimizer. - -#### Why - -- Minimal blast radius. -- LMDB-specific logic can use LMDB internals without generic abstractions. -- Easier to preserve behavior for other stores. -- Easier to back out behind a feature flag. - -#### Implementation - -- Add `LmdbEvaluationStrategyFactory extends StrictEvaluationStrategyFactory`. -- Override `createEvaluationStrategy(...)`. -- Create the strategy exactly as today, then call: - - `strategy.setOptimizerPipeline(new LmdbQueryOptimizerPipeline(strategy, tripleSource, evaluationStatistics));` -- In `LmdbStore.getEvaluationStrategyFactory()`, instantiate `LmdbEvaluationStrategyFactory` instead of generic `StrictEvaluationStrategyFactory` when no custom factory was configured. - ---- - -## 9. Join-group planning model - -### 9.1 Scope of LMDB-specific planning - -LMDB-specific join planning applies to **flattened inner join groups** when all non-priority join arguments are `StatementPattern`. - -The optimizer will preserve RDF4J’s current handling for: - -- `LeftJoin` -- extensions / `BIND` -- subselects -- other non-statement tuple expressions - -If a join group contains mixed tuple-expression kinds, LMDB-specific planning is disabled for that group and the current generic behavior is used. - -### 9.2 Binding state model - -For every statement-pattern position `(s,p,o,c)` under a partial plan, classify the position as: - -- **CONST**: compile-time known RDF value -- **BOUND**: variable value not known now, but guaranteed to be bound by the time the pattern executes -- **UNBOUND**: not yet bound -- **ABSENT**: no context variable exists in this pattern - -This state is evaluated **per candidate subplan**. - -### 9.3 Access-path model - -For each configured LMDB index: - -1. Map pattern positions into index field order. -2. Compute usable prefix length: - - count leading fields whose state is `CONST` or `BOUND` - - stop at first `UNBOUND` -3. Estimate: - - `rowsScannedPerProbe` - - `rowsReturnedPerProbe` - - optional `orderedBy` variable -4. Keep the best candidates for planning. - -### 9.4 Plan search model - -- **DP threshold:** `8` statement patterns -- **For n <= 8:** left-deep dynamic programming -- **For n > 8:** greedy growth seeded by best singleton pattern -- **Fallback:** generic behavior if group is mixed or if statistics are unavailable and cannot be built - -This is chosen because RDF4J’s execution model already strongly favors left-deep plans for parameterized index nested loops, while keeping the search space manageable. - ---- - -## 10. Ordered access and merge join - -### 10.1 Order support rule - -LMDB may expose an order only when: - -1. the chosen index has **best available prefix length** for the current binding signature, -2. that prefix length is **greater than zero**, -3. the first varying field after the prefix corresponds to an unbound variable, -4. the dataset wrapper can actually produce globally sorted output. - -This rule prevents the optimizer from advertising useless orders based on full scans. - -### 10.2 Runtime ordered access - -Implement in `LmdbSailDataset`: - -- `getStatements(StatementOrder, ...)` -- `getSupportedOrders(...)` -- `getComparator()` - -When multiple specific contexts are requested, the implementation must: - -- create one ordered iterator per context, -- then merge them with a comparator-consistent k-way merge, -- rather than using the current unsorted `UnionIteration`. - -### 10.3 Comparator - -Use a comparator based on LMDB internal value IDs. - -Rationale: - -- LMDB index keys are ordered by encoded value IDs. -- LMDB’s varint encoding preserves lexicographic and numeric order. -- Therefore comparison by internal ID is consistent with iterator order. - -Fallback to generic value comparison is allowed only outside the ordered-LMDB fast path. - ---- - -## 11. Statistics design - -### 11.1 What statistics are required - -For every configured index, maintain: - -- total rows, -- distinct count for prefix length 1, -- distinct count for prefix length 2, -- distinct count for prefix length 3, -- distinct count for prefix length 4, -- derived average rows per prefix: - - `avgRows(prefixLen) = totalRows / distinct(prefixLen)` - -These are sufficient for the first implementation. - -### 11.2 Why this is enough for v1 - -For runtime-bound prefix probes, the optimizer needs **average fanout**, not exact per-value counts. - -This is exactly what prefix distinct counts provide. - -### 11.3 Statistics lifecycle - -- Build lazily on first optimizer use, or eagerly if configured. -- Cache in memory. -- Mark stale after any committed transaction that changes statements. -- Rebuild on next optimization once stale commit count passes threshold. - -This avoids write-path complexity while keeping estimates current enough. - ---- - -## 12. Explainability and observability - -The implementation must expose enough information for debugging and regression detection. - -### Planned metadata - -Each planned statement pattern should carry: - -- chosen index name (planned), -- estimated rows scanned, -- estimated rows returned, -- whether the access path was chosen for order, -- whether the surrounding join is nested loop or merge join. - -### Runtime metadata - -LMDB already reports the actual index used via the iterator path. -Runtime metadata should continue to overwrite or confirm planned hints. - -### Logging - -Add debug logging for: - -- chosen join order, -- bound variable set per step, -- candidate access paths considered, -- rejected merge-join candidates, -- statistics rebuild events. - ---- - -## 13. Configuration - -Add the following to `LmdbStoreConfig`: - -| Property | Type | Default | Purpose | -|---|---:|---:|---| -| `queryOptimizerEnabled` | boolean | `true` | master feature flag | -| `queryOptimizerDynamicProgrammingThreshold` | int | `8` | DP vs greedy cutoff | -| `queryOptimizerMergeJoinEnabled` | boolean | `true` | allow merge-join planning | -| `queryOptimizerStatisticsEnabled` | boolean | `true` | enable prefix stats | -| `queryOptimizerStatisticsBuildOnInit` | boolean | `false` | eager stats build | -| `queryOptimizerStatisticsRefreshCommitThreshold` | int | `100` | stale-to-rebuild threshold | - -If RDF config serialization is part of your deployment, also extend LMDB config schema/factory to read and write these values. - ---- - -## 14. Compatibility - -### Preserved behavior - -- Results must remain identical. -- Existing LMDB index configuration remains valid. -- Existing custom evaluation strategy factory configuration still wins if explicitly set. - -### Changed behavior - -- Default LMDB query planning becomes index-aware. -- Ordered statement retrieval is now implemented. -- Explain/plan output includes LMDB-specific access-path details. - ---- - -## 15. Risks and mitigations - -| Risk | Impact | Mitigation | -|---|---|---| -| Statistics build is expensive on huge stores | slower first optimized query | lazy build + rebuild threshold + config | -| Ordered access through wrapper datasets is not forwarded | merge join never triggers | audit every `SailDataset` wrapper used by LMDB and delegate order methods | -| Comparator mismatches iterator order | incorrect merge join | compare by LMDB internal IDs only for ordered LMDB path | -| Mixed join groups regress | planner instability | generic fallback for mixed groups | -| Overeager order advertisement | poor plans | advertise orders only when best prefix length > 0 and no harmful downgrade | -| Stale stats after many writes | suboptimal plans | dirty commit threshold + rebuild | - ---- - -## 16. Deliverables - -The implementation is complete only when all of the following exist: - -1. `LmdbEvaluationStrategyFactory` -2. `LmdbQueryOptimizerPipeline` -3. `LmdbJoinOrderOptimizer` -4. `LmdbOptimizerStatisticsManager` -5. `TripleStore` index-descriptor and ordered-access support -6. `LmdbSailDataset` ordered retrieval, supported orders, comparator -7. unit tests -8. integration tests -9. explain-plan tests -10. performance benchmarks -11. rollback / feature-flag path - ---- - -## 17. Acceptance summary - -This design is accepted when: - -1. LMDB chooses different join orders based on configured indexes and bound-variable state. -2. Plans differ appropriately for different index sets. -3. Runtime ordered access works. -4. Merge join appears only when it is both supported and beneficial. -5. Mixed groups remain correct and stable. -6. Benchmarks show improvement on representative LMDB workloads. - ---- - -## 18. Implementation snapshot - -### Mandatory code changes - -- `LmdbStore` -- `LmdbStoreConnection` -- `LmdbSailStore` -- `LmdbEvaluationStatistics` -- `TripleStore` -- `LmdbStoreConfig` -- new optimizer/statistics classes in `org.eclipse.rdf4j.sail.lmdb` - -### Mandatory new tests - -- prefix statistics build -- access path enumeration -- join order change under different index sets -- runtime ordered scans -- merge join on LMDB -- fallback for mixed groups -- multi-context ordered iteration - ---- - -## 19. Final recommendation - -Implement this as an **LMDB-local physical planner** that reuses RDF4J’s existing pipeline architecture but replaces only the join-ordering stage for pure statement-pattern join groups. - -That gives the team: - -- a contained code change, -- correct physical planning for LMDB, -- order-aware execution support, -- and a safe fallback path when a query is outside the intended scope. \ No newline at end of file diff --git a/plans/low-level-design-LLD.md b/plans/low-level-design-LLD.md deleted file mode 100644 index 114e68cb393..00000000000 --- a/plans/low-level-design-LLD.md +++ /dev/null @@ -1,1573 +0,0 @@ -# RDF4J LMDB Join Order Optimizer — Low-Level Design (LLD) - -**Document type:** Low-level design -**Target module:** `core/sail/lmdb` -**Audience:** Engineers implementing and reviewing code -**Implementation mode:** file-by-file, class-by-class - ---- - -## 1. Goal of this LLD - -This LLD specifies the concrete code structure required to implement an LMDB-specific join order optimizer in RDF4J. - -It answers: - -- which files to add, -- which existing files to change, -- which methods to add or override, -- what each method must do, -- how data flows between planner and runtime execution. - ---- - -## 2. Package layout - -All new optimizer classes should live in: - -```text -org.eclipse.rdf4j.sail.lmdb -``` - -### Why same package? - -`TripleStore` and `LmdbEvaluationStatistics` are package-private/internal and the optimizer must access their internals directly without expanding public API more than necessary. - ---- - -## 3. New files - -Add the following files. - -### 3.1 `LmdbEvaluationStrategyFactory.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -public class LmdbEvaluationStrategyFactory extends StrictEvaluationStrategyFactory { - public LmdbEvaluationStrategyFactory(); - public LmdbEvaluationStrategyFactory(FederatedServiceResolver resolver); - - @Override - public EvaluationStrategy createEvaluationStrategy( - Dataset dataset, - TripleSource tripleSource, - EvaluationStatistics evaluationStatistics); -} -``` - -### 3.2 `LmdbQueryOptimizerPipeline.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -public class LmdbQueryOptimizerPipeline implements QueryOptimizerPipeline { - public LmdbQueryOptimizerPipeline( - EvaluationStrategy strategy, - TripleSource tripleSource, - EvaluationStatistics evaluationStatistics); - - @Override - public Iterable getOptimizers(); -} -``` - -### 3.3 `LmdbJoinOrderOptimizer.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -public final class LmdbJoinOrderOptimizer implements QueryOptimizer { - public LmdbJoinOrderOptimizer( - LmdbEvaluationStatistics lmdbStatistics, - boolean trackResultSize, - TripleSource tripleSource, - LmdbStoreConfig config); - - @Override - public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings); -} -``` - -Use nested static records/classes for: - -- `ResolvedPatternTerms` -- `ResolvedTerm` -- `AccessPath` -- `PlanItem` -- `PlanState` -- `IndexStatsRef` - -### 3.4 `LmdbOptimizerStatisticsManager.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -final class LmdbOptimizerStatisticsManager { - - static final class StatisticsSnapshot { ... } - - static final class IndexStatistics { ... } - - LmdbOptimizerStatisticsManager(TripleStore tripleStore, LmdbStoreConfig config); - - StatisticsSnapshot getSnapshot(); - - void maybeRefresh(); - - void forceRefresh(); - - void markDirtyCommit(); -} -``` - -### 3.5 `LmdbOrderedValueComparator.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -final class LmdbOrderedValueComparator implements Comparator { - LmdbOrderedValueComparator(ValueStore valueStore); - - @Override - public int compare(Value left, Value right); -} -``` - -### 3.6 `LmdbOrderedStatementUnionIteration.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -final class LmdbOrderedStatementUnionIteration - extends LookAheadIteration - implements IndexReportingIterator { - LmdbOrderedStatementUnionIteration( - List> sources, - Comparator statementComparator, - String indexNameHint); - - @Override - protected Statement getNextElement(); - - @Override - protected void handleClose(); - - @Override - public String getIndexName(); -} -``` - -### 3.7 `LmdbIndexDescriptor.java` - -```java -package org.eclipse.rdf4j.sail.lmdb; - -record LmdbIndexDescriptor(String name, char[] fieldSeq) { } -``` - ---- - -## 4. Existing files to change - -### 4.1 `LmdbStore.java` - -#### Changes - -1. Default evaluation strategy factory becomes `LmdbEvaluationStrategyFactory`. -2. Add dirty-statistics hook. - -#### Code changes - -Add: - -```java -void markOptimizerStatisticsDirty() { - if (backingStore != null) { - backingStore.getOptimizerStatisticsManager().markDirtyCommit(); - } -} -``` - -Modify `getEvaluationStrategyFactory()`: - -```java -public synchronized EvaluationStrategyFactory getEvaluationStrategyFactory() { - if (evalStratFactory == null) { - evalStratFactory = new LmdbEvaluationStrategyFactory(getFederatedServiceResolver()); - } - evalStratFactory.setQuerySolutionCacheThreshold(getIterationCacheSyncThreshold()); - evalStratFactory.setTrackResultSize(isTrackResultSize()); - evalStratFactory.setCollectionFactory(getCollectionFactory()); - return evalStratFactory; -} -``` - -### 4.2 `LmdbStoreConnection.java` - -#### Changes - -Mark optimizer stats dirty after successful commit when statements changed. - -#### Code changes - -In `commitInternal()`: - -```java -@Override -protected void commitInternal() throws SailException { - boolean statementsChanged = sailChangedEvent.statementsAdded() || sailChangedEvent.statementsRemoved(); - try { - super.commitInternal(); - } finally { - if (txnLock != null && txnLock.isActive()) { - txnLock.release(); - } - } - - if (statementsChanged) { - lmdbStore.markOptimizerStatisticsDirty(); - } - - lmdbStore.notifySailChanged(sailChangedEvent); - sailChangedEvent = new DefaultSailChangedEvent(lmdbStore); -} -``` - -No change on rollback. - -### 4.3 `LmdbSailStore.java` - -#### Changes - -1. Create/store `LmdbOptimizerStatisticsManager` -2. Return `LmdbEvaluationStatistics` with stats manager -3. Add ordered statement iterator support -4. Implement dataset order APIs - -#### New field - -```java -private final LmdbOptimizerStatisticsManager optimizerStatisticsManager; -private final Comparator orderedValueComparator; -``` - -#### Constructor changes - -After `tripleStore` initialization: - -```java -this.optimizerStatisticsManager = new LmdbOptimizerStatisticsManager(tripleStore, config); -this.orderedValueComparator = new LmdbOrderedValueComparator(valueStore); -``` - -#### Getter - -```java -LmdbOptimizerStatisticsManager getOptimizerStatisticsManager() { - return optimizerStatisticsManager; -} -``` - -#### Evaluation statistics - -Change: - -```java -return new LmdbEvaluationStatistics(valueStore, tripleStore, optimizerStatisticsManager); -``` - -#### Overload `createStatementIterator` - -Existing method remains and delegates: - -```java -CloseableIteration createStatementIterator( - Txn txn, - Resource subj, - IRI pred, - Value obj, - boolean explicit, - Resource... contexts) throws IOException { - return createStatementIterator(txn, subj, pred, obj, explicit, null, contexts); -} -``` - -Add overload: - -```java -CloseableIteration createStatementIterator( - Txn txn, - Resource subj, - IRI pred, - Value obj, - boolean explicit, - StatementOrder statementOrder, - Resource... contexts) throws IOException -``` - -#### Overload algorithm - -1. Resolve subject/predicate/object IDs exactly as existing method. -2. Build `contextIDList` exactly as existing method. -3. If `statementOrder == null`: - - preserve current behavior. -4. Else: - - if `contextIDList.size() == 1` - - call `tripleStore.getTriplesOrdered(...)` - - else - - for each context ID, create ordered iterator using `getTriplesOrdered(...)` - - wrap in `LmdbOrderedStatementUnionIteration` - - use `statementOrder.getComparator(orderedValueComparator)` as statement comparator - -#### `LmdbSailDataset` methods - -Replace stubs with: - -```java -@Override -public CloseableIteration getStatements( - StatementOrder statementOrder, - Resource subj, - IRI pred, - Value obj, - Resource... contexts) throws SailException { - try { - return createStatementIterator(txn, subj, pred, obj, explicit, statementOrder, contexts); - } catch (IOException e) { - throw new SailException("Unable to get ordered statements", e); - } -} - -@Override -public Set getSupportedOrders(Resource subj, IRI pred, Value obj, Resource... contexts) { - try { - long subjID = resolveIdOrUnknown(subj); - long predID = resolveIdOrUnknown(pred); - long objID = resolveIdOrUnknown(obj); - - long contextIDForSupport; - if (contexts == null || contexts.length != 1) { - contextIDForSupport = LmdbValue.UNKNOWN_ID; - } else { - contextIDForSupport = contexts[0] == null ? 0L : resolveIdOrUnknown(contexts[0]); - } - - return tripleStore.getSupportedOrders(subjID, predID, objID, contextIDForSupport); - } catch (IOException e) { - logger.warn("Unable to determine supported orders", e); - return Set.of(); - } -} - -@Override -public Comparator getComparator() { - return orderedValueComparator; -} -``` - -Add helper: - -```java -private long resolveIdOrUnknown(Value value) throws IOException { ... } -``` - -### 4.4 `LmdbEvaluationStatistics.java` - -#### Changes - -Add stats-manager and accessors for optimizer. - -#### New fields - -```java -private final LmdbOptimizerStatisticsManager optimizerStatisticsManager; -``` - -#### Constructor - -```java -public LmdbEvaluationStatistics( - ValueStore valueStore, - TripleStore tripleStore, - LmdbOptimizerStatisticsManager optimizerStatisticsManager) { - this.valueStore = valueStore; - this.tripleStore = tripleStore; - this.optimizerStatisticsManager = optimizerStatisticsManager; -} -``` - -#### Add package-private accessors - -```java -ValueStore getValueStore() { - return valueStore; -} - -TripleStore getTripleStore() { - return tripleStore; -} - -LmdbOptimizerStatisticsManager getOptimizerStatisticsManager() { - return optimizerStatisticsManager; -} - -double cardinality(Resource subj, IRI pred, Value obj, Resource context) throws IOException { - ... -} - -long getValueId(Value value) throws IOException { - if (value == null) { - return LmdbValue.UNKNOWN_ID; - } - return valueStore.getId(value); -} -``` - -Do **not** change semantic behavior of existing `getCardinality(StatementPattern)` override except to call package-private `cardinality(...)`. - -### 4.5 `TripleStore.java` - -#### Changes - -1. Expose immutable index descriptors -2. Implement order-aware index selection -3. Expose supported orders -4. Add ordered-triples access method -5. Add statistics snapshot builder - -#### Add helper record/class - -Inside or next to `TripleStore`: - -```java -static final class IndexSelection { - final TripleIndex index; - final String indexName; - final int prefixLen; - final boolean rangeSearch; - final StatementOrder order; // nullable -} -``` - -#### Add descriptor getter - -```java -List getIndexDescriptors() { - ArrayList list = new ArrayList<>(indexes.size()); - for (TripleIndex index : indexes) { - list.add(new LmdbIndexDescriptor(new String(index.getFieldSeq()), index.getFieldSeq().clone())); - } - return List.copyOf(list); -} -``` - -#### Add support-order method - -```java -Set getSupportedOrders(long subj, long pred, long obj, long context) { - int bestPrefix = 0; - for (TripleIndex index : indexes) { - bestPrefix = Math.max(bestPrefix, index.getPatternScore(subj, pred, obj, context)); - } - - if (bestPrefix == 0 || bestPrefix >= 4) { - return Set.of(); - } - - EnumSet result = EnumSet.noneOf(StatementOrder.class); - for (TripleIndex index : indexes) { - if (index.getPatternScore(subj, pred, obj, context) != bestPrefix) { - continue; - } - char nextField = index.getFieldSeq()[bestPrefix]; - switch (nextField) { - case 's' -> result.add(StatementOrder.S); - case 'p' -> result.add(StatementOrder.P); - case 'o' -> result.add(StatementOrder.O); - case 'c' -> result.add(StatementOrder.C); - default -> throw new IllegalStateException("Unexpected field: " + nextField); - } - } - return result; -} -``` - -#### Add ordered index selection - -```java -IndexSelection selectBestIndex(long subj, long pred, long obj, long context) { ... } - -IndexSelection selectBestIndexForOrder( - long subj, long pred, long obj, long context, StatementOrder requestedOrder) { ... } -``` - -`selectBestIndexForOrder(...)` algorithm: - -1. compute `bestPrefix` across all indexes -2. if `bestPrefix == 0`, return `null` -3. retain indexes with `prefixLen == bestPrefix` -4. keep those whose first varying field after prefix matches requested order -5. choose first retained index in configured order -6. return `IndexSelection` - -#### Add ordered triples method - -```java -RecordIterator getTriplesOrdered( - Txn txn, - StatementOrder statementOrder, - long subj, - long pred, - long obj, - long context, - boolean explicit) throws IOException -``` - -Implementation: - -1. call `selectBestIndexForOrder(...)` -2. if selection is null: - - fall back to `getTriples(...)` or throw `IllegalArgumentException` - - recommended: fall back to `getTriples(...)` and log debug -3. use `getTriplesUsingIndex(...)` with selected index and selected range-search mode - -#### Add stats snapshot builder - -```java -LmdbOptimizerStatisticsManager.StatisticsSnapshot buildOptimizerStatisticsSnapshot() throws IOException -``` - -Implementation: - -1. iterate `indexes` -2. scan explicit and inferred DBs -3. compute rows + prefix distinct counts -4. populate immutable snapshot - -#### Add scan helper - -```java -private LmdbOptimizerStatisticsManager.IndexStatistics buildIndexStatistics(TripleIndex index) throws IOException -``` - -#### Prefix-change helper - -```java -private static boolean prefixChanged(long[] prev, long[] current, int prefixLen) { ... } -``` - -### 4.6 `config/LmdbStoreConfig.java` - -#### Add fields - -```java -private boolean queryOptimizerEnabled = true; -private int queryOptimizerDynamicProgrammingThreshold = 8; -private boolean queryOptimizerMergeJoinEnabled = true; -private boolean queryOptimizerStatisticsEnabled = true; -private boolean queryOptimizerStatisticsBuildOnInit = false; -private int queryOptimizerStatisticsRefreshCommitThreshold = 100; -``` - -#### Add getters/setters - -```java -public boolean getQueryOptimizerEnabled(); -public void setQueryOptimizerEnabled(boolean value); - -public int getQueryOptimizerDynamicProgrammingThreshold(); -public void setQueryOptimizerDynamicProgrammingThreshold(int value); - -public boolean getQueryOptimizerMergeJoinEnabled(); -public void setQueryOptimizerMergeJoinEnabled(boolean value); - -public boolean getQueryOptimizerStatisticsEnabled(); -public void setQueryOptimizerStatisticsEnabled(boolean value); - -public boolean getQueryOptimizerStatisticsBuildOnInit(); -public void setQueryOptimizerStatisticsBuildOnInit(boolean value); - -public int getQueryOptimizerStatisticsRefreshCommitThreshold(); -public void setQueryOptimizerStatisticsRefreshCommitThreshold(int value); -``` - -### 4.7 RDF config schema/factory files (if repository-config serialization is required) - -Update: - -- `config/LmdbStoreSchema.java` -- `config/LmdbStoreFactory.java` -- any config export/parser classes used by RDF4J LMDB config - -Add IRIs: - -```text -lmdb:queryOptimizerEnabled -lmdb:queryOptimizerDynamicProgrammingThreshold -lmdb:queryOptimizerMergeJoinEnabled -lmdb:queryOptimizerStatisticsEnabled -lmdb:queryOptimizerStatisticsBuildOnInit -lmdb:queryOptimizerStatisticsRefreshCommitThreshold -``` - -### 4.8 Audit any LMDB-used `SailDataset` wrappers - -Any wrapper between query evaluation and `LmdbSailDataset` must forward: - -- `getStatements(StatementOrder, ...)` -- `getSupportedOrders(...)` -- `getComparator()` - -If an existing wrapper drops these, add delegation. - ---- - -## 5. `LmdbEvaluationStrategyFactory` implementation - -### 5.1 Behavior - -If LMDB optimizer feature flag is enabled and `evaluationStatistics instanceof LmdbEvaluationStatistics`, install `LmdbQueryOptimizerPipeline`. -Otherwise install standard pipeline. - -### 5.2 Method body - -```java -@Override -public EvaluationStrategy createEvaluationStrategy( - Dataset dataset, - TripleSource tripleSource, - EvaluationStatistics evaluationStatistics) { - - StrictEvaluationStrategy strategy = new StrictEvaluationStrategy( - tripleSource, - dataset, - getFederatedServiceResolver(), - getQuerySolutionCacheThreshold(), - evaluationStatistics, - isTrackResultSize()); - - if (evaluationStatistics instanceof LmdbEvaluationStatistics lmdbStats - && lmdbStats.getOptimizerStatisticsManager() != null) { - strategy.setOptimizerPipeline( - new LmdbQueryOptimizerPipeline(strategy, tripleSource, lmdbStats)); - } else { - strategy.setOptimizerPipeline( - new StandardQueryOptimizerPipeline(strategy, tripleSource, evaluationStatistics)); - } - - strategy.setCollectionFactory(collectionFactorySupplier); - return strategy; -} -``` - ---- - -## 6. `LmdbQueryOptimizerPipeline` implementation - -### 6.1 Required optimizer order - -Preserve the same optimizer order as `StandardQueryOptimizerPipeline` and replace only the join optimizer. - -```java -List optimizers = List.of( - StandardQueryOptimizerPipeline.BINDING_ASSIGNER, - StandardQueryOptimizerPipeline.BINDING_SET_ASSIGNMENT_INLINER, - new ConstantOptimizer(strategy), - new RegexAsStringFunctionOptimizer(tripleSource.getValueFactory()), - StandardQueryOptimizerPipeline.COMPARE_OPTIMIZER, - StandardQueryOptimizerPipeline.CONJUNCTIVE_CONSTRAINT_SPLITTER, - StandardQueryOptimizerPipeline.DISJUNCTIVE_CONSTRAINT_OPTIMIZER, - StandardQueryOptimizerPipeline.SAME_TERM_FILTER_OPTIMIZER, - StandardQueryOptimizerPipeline.UNION_SCOPE_CHANGE_OPTIMIZER, - StandardQueryOptimizerPipeline.QUERY_MODEL_NORMALIZER, - StandardQueryOptimizerPipeline.PROJECTION_REMOVAL_OPTIMIZER, - new LmdbJoinOrderOptimizer(lmdbStats, strategy.isTrackResultSize(), tripleSource, config), - StandardQueryOptimizerPipeline.ITERATIVE_EVALUATION_OPTIMIZER, - StandardQueryOptimizerPipeline.FILTER_OPTIMIZER, - StandardQueryOptimizerPipeline.ORDER_LIMIT_OPTIMIZER -); -``` - -If `evaluationStatistics` is not LMDB-specific, fall back to standard pipeline. - ---- - -## 7. `LmdbJoinOrderOptimizer` implementation - -### 7.1 Internal nested types - -Use nested static types inside `LmdbJoinOrderOptimizer`. - -#### `enum PositionState` - -```java -enum PositionState { - CONST, - BOUND, - UNBOUND, - ABSENT -} -``` - -#### `record ResolvedTerm` - -```java -record ResolvedTerm( - char field, - PositionState state, - Value value, - String varName) { -} -``` - -#### `record ResolvedPatternTerms` - -```java -record ResolvedPatternTerms( - StatementPattern statementPattern, - ResolvedTerm s, - ResolvedTerm p, - ResolvedTerm o, - ResolvedTerm c) { - - ResolvedTerm forField(char field) { ... } -} -``` - -#### `record AccessPath` - -```java -record AccessPath( - String indexName, - char[] fieldSeq, - int prefixLen, - double scanRowsPerProbe, - double outRowsPerProbe, - double probeCost, - String orderedByVarName, - StatementOrder requestedOrder) { -} -``` - -#### `record PlanItem` - -```java -record PlanItem( - StatementPattern statementPattern, - String chosenIndexName, - String chosenOrderVarName, - JoinMethod joinMethodToPrevious, - String mergeJoinVarName) { -} -``` - -#### `enum JoinMethod` - -```java -enum JoinMethod { - NONE, - NESTED_LOOP, - MERGE -} -``` - -#### `record PlanStateKey` - -```java -record PlanStateKey(int subsetMask, String orderedByVarName) { } -``` - -#### `record PlanState` - -```java -record PlanState( - int subsetMask, - String orderedByVarName, - double cost, - double rows, - Set boundVarNames, - List items) { -} -``` - -### 7.2 Main constructor - -```java -public LmdbJoinOrderOptimizer( - LmdbEvaluationStatistics lmdbStatistics, - boolean trackResultSize, - TripleSource tripleSource, - LmdbStoreConfig config) { - ... -} -``` - -Store: - -- `lmdbStatistics` -- `genericStatistics = lmdbStatistics` -- `tripleSource` -- `trackResultSize` -- `dpThreshold` -- `mergeJoinEnabled` - -### 7.3 `optimize(...)` - -Implementation: - -1. `tupleExpr.visit(new JoinVisitor(bindings));` - -### 7.4 `JoinVisitor` - -Use a visitor similar in structure to the existing `QueryJoinOptimizer`, but do **not** subclass the generic optimizer. Copy the relevant logic and modify join planning. - -Maintain field: - -```java -private Set boundVars = new HashSet<>(); -private final BindingSet initialBindings; -``` - -### 7.5 `meet(LeftJoin)` - -Same behavior as generic optimizer. - -### 7.6 `meet(StatementPattern)` - -Set result size estimate using `lmdbStatistics.getCardinality(node)`. - -### 7.7 `meet(Join)` - -Algorithm: - -1. capture `origBoundVars` -2. flatten join args -3. separate priority args: - - extensions / BIND - - subselects -4. optimize priority args in current behavior -5. inspect remaining args -6. if all remaining args are `StatementPattern` - - plan via `planPureStatementPatterns(...)` -7. else - - use copied generic greedy ordering logic -8. rebuild join tree -9. restore `boundVars` - -### 7.8 `planPureStatementPatterns(...)` - -Signature: - -```java -private TupleExpr planPureStatementPatterns( - List patterns, - Set outerBoundVars, - BindingSet initialBindings) -``` - -Algorithm: - -1. if `patterns.size() <= dpThreshold` - - `PlanState best = planDp(...)` -2. else - - `PlanState best = planGreedy(...)` -3. build final join tree from `best` -4. return tree - -### 7.9 `resolvePatternTerms(...)` - -Signature: - -```java -private ResolvedPatternTerms resolvePatternTerms( - StatementPattern sp, - Set boundVarNames, - BindingSet initialBindings) -``` - -Rules: - -- if `var.hasValue()` => `CONST` -- else if `initialBindings.hasBinding(var.getName())` => `CONST` -- else if `boundVarNames.contains(var.getName())` => `BOUND` -- else => `UNBOUND` -- if `contextVar == null` => `ABSENT` - -### 7.10 `enumerateAccessPaths(...)` - -Signature: - -```java -private List enumerateAccessPaths( - StatementPattern sp, - Set boundVarNames, - BindingSet initialBindings) -``` - -Algorithm: - -1. resolve terms -2. loop over `lmdbStatistics.getTripleStore().getIndexDescriptors()` -3. compute prefix length per index -4. find `bestPrefix` -5. if `bestPrefix == 0` - - create one unordered access path only, based on the best default index and no order property -6. else - - retain only indexes with prefix == `bestPrefix` - - create one candidate per retained index -7. deduplicate by `(indexName, orderedByVarName)` - -### 7.11 `computePrefixLen(...)` - -```java -private int computePrefixLen(ResolvedPatternTerms terms, char[] fieldSeq) { ... } -``` - -Implementation: - -```java -int prefix = 0; -for (char field : fieldSeq) { - PositionState s = terms.forField(field).state(); - if (s == PositionState.CONST || s == PositionState.BOUND) { - prefix++; - } else { - break; - } -} -return prefix; -``` - -### 7.12 `computeOrderedByVar(...)` - -```java -private String computeOrderedByVar(ResolvedPatternTerms terms, char[] fieldSeq, int prefixLen) -``` - -Rules: - -- if `prefixLen <= 0 || prefixLen >= 4` => `null` -- `char nextField = fieldSeq[prefixLen]` -- if `terms.forField(nextField).state() == PositionState.UNBOUND` => its var name -- else => `null` - -### 7.13 `estimateScanRowsPerProbe(...)` - -```java -private double estimateScanRowsPerProbe( - ResolvedPatternTerms terms, - AccessPathSeed seed) -``` - -Use: - -- `totalRows` if prefix `0` -- exact prefix cardinality if all prefix fields are `CONST` -- stats snapshot average rows if any prefix field is `BOUND` - -### 7.14 `estimateOutRowsPerProbe(...)` - -```java -private double estimateOutRowsPerProbe( - ResolvedPatternTerms terms, - AccessPathSeed seed, - double scanRowsPerProbe, - StatisticsSnapshot snapshot) -``` - -Use exact full cardinality when all fixed fields are compile-time constants; otherwise apply selectivity factors. - -### 7.15 `estimateProbeCost(...)` - -```java -private double estimateProbeCost(double scanRowsPerProbe, double outRowsPerProbe) -``` - -Formula: - -```java -return 5.0 + scanRowsPerProbe + (0.25 * outRowsPerProbe); -``` - -### 7.16 `planDp(...)` - -Signature: - -```java -private PlanState planDp( - List patterns, - Set outerBoundVars, - BindingSet initialBindings) -``` - -Implementation outline: - -1. assign bit position to each statement pattern -2. create singleton states -3. dynamic-program across subset sizes -4. store best state by `(subsetMask, orderedByVarName)` -5. return best full-subset state - -### 7.17 `createSingletonStates(...)` - -For each pattern: - -- enumerate access paths -- for each path: - - `rows = path.outRowsPerProbe()` - - `cost = path.probeCost()` - - `boundVarNames = outerBoundVars + pattern.getBindingNames()` - - `orderedByVarName = path.orderedByVarName()` - - `items = List.of(new PlanItem(...))` - -Also keep an unordered singleton state even if ordered states exist. - -### 7.18 `transition(...)` - -Signature: - -```java -private Stream transition( - PlanState state, - StatementPattern next, - int nextBit, - BindingSet initialBindings) -``` - -Generate: - -- nested-loop state -- optional merge state - -#### Nested loop - -```java -newCost = state.cost() + (state.rows() * accessPath.probeCost()) -newRows = state.rows() * accessPath.outRowsPerProbe() -newOrderedBy = null -``` - -#### Merge join - -Allowed only if: - -- `state.orderedByVarName() != null` -- `state.orderedByVarName().equals(accessPath.orderedByVarName())` -- shared binding names contain that var -- merge join feature enabled -- cardinality ratio acceptable - -Then: - -```java -newCost = state.cost() + state.rows() + accessPath.outRowsPerProbe() -newRows = state.rows() * accessPath.outRowsPerProbe() -newOrderedBy = state.orderedByVarName() -``` - -### 7.19 `planGreedy(...)` - -Signature: - -```java -private PlanState planGreedy( - List patterns, - Set outerBoundVars, - BindingSet initialBindings) -``` - -Algorithm: - -1. choose cheapest singleton state -2. while remaining patterns exist: - - evaluate all transitions from current state - - pick cheapest -3. return final state - -### 7.20 `buildJoinTree(...)` - -Signature: - -```java -private TupleExpr buildJoinTree(PlanState state) -``` - -Algorithm: - -1. clone statement patterns in chosen order -2. apply statement metadata: - - `sp.setIndexName(chosenIndexName)` - - if `chosenOrderVarName != null`, and direct statement ordering is required for runtime, call `sp.setOrder(var)` -3. build right-recursive joins -4. if `joinMethodToPrevious == MERGE` - - `join.setMergeJoin(true)` - - `join.setOrder(varFor(mergeJoinVarName))` - -### 7.21 Var resolution helper - -```java -private Var varForName(StatementPattern sp, String varName) -``` - -Returns the actual `Var` instance from `sp` matching the name. - ---- - -## 8. `LmdbOptimizerStatisticsManager` implementation - -### 8.1 Fields - -```java -private final TripleStore tripleStore; -private final LmdbStoreConfig config; -private final ReentrantLock rebuildLock = new ReentrantLock(); -private final AtomicLong dirtyCommitCount = new AtomicLong(); -private volatile StatisticsSnapshot snapshot; -``` - -### 8.2 `getSnapshot()` - -```java -StatisticsSnapshot getSnapshot() { - maybeRefresh(); - return snapshot; -} -``` - -### 8.3 `maybeRefresh()` - -```java -void maybeRefresh() { - if (!config.getQueryOptimizerStatisticsEnabled()) { - return; - } - - StatisticsSnapshot current = snapshot; - if (current == null - || dirtyCommitCount.get() >= config.getQueryOptimizerStatisticsRefreshCommitThreshold()) { - forceRefresh(); - } -} -``` - -### 8.4 `forceRefresh()` - -```java -void forceRefresh() { - if (!rebuildLock.tryLock()) { - return; - } - try { - snapshot = tripleStore.buildOptimizerStatisticsSnapshot(); - dirtyCommitCount.set(0); - } catch (IOException e) { - // log and keep previous snapshot - } finally { - rebuildLock.unlock(); - } -} -``` - -### 8.5 `markDirtyCommit()` - -```java -void markDirtyCommit() { - dirtyCommitCount.incrementAndGet(); -} -``` - ---- - -## 9. `LmdbOrderedValueComparator` implementation - -### 9.1 Fields - -```java -private final ValueStore valueStore; -private final Comparator fallback = new ValueComparator(); -``` - -### 9.2 `compare(...)` - -Implementation: - -```java -@Override -public int compare(Value left, Value right) { - if (left == right) { - return 0; - } - - long leftId = resolveId(left); - long rightId = resolveId(right); - - if (leftId != LmdbValue.UNKNOWN_ID && rightId != LmdbValue.UNKNOWN_ID) { - return Long.compareUnsigned(leftId, rightId); - } - - return fallback.compare(left, right); -} -``` - -### 9.3 `resolveId(...)` - -```java -private long resolveId(Value value) { - if (value instanceof LmdbValue lv) { - long id = lv.getInternalID(); - if (id != LmdbValue.UNKNOWN_ID) { - return id; - } - try { - lv.init(); - return lv.getInternalID(); - } catch (Exception ignore) { - // fall through - } - } - - try { - return valueStore.getId(value); - } catch (IOException e) { - return LmdbValue.UNKNOWN_ID; - } -} -``` - ---- - -## 10. `LmdbOrderedStatementUnionIteration` implementation - -### 10.1 Purpose - -Globally merge multiple already-sorted ordered iterators into a single sorted iterator. - -### 10.2 Data structures - -```java -private static final class Head { - final CloseableIteration source; - final Statement statement; -} -``` - -Use: - -```java -private final PriorityQueue queue; -private final List> allSources; -private final String indexNameHint; -``` - -### 10.3 Constructor - -1. prime every source iterator -2. insert first statement of each non-empty source into the queue -3. comparator = compare `Head.statement` using provided statement comparator - -### 10.4 `getNextElement()` - -1. poll smallest head -2. emit its statement -3. advance same source -4. if source has next, push replacement head - -### 10.5 `getIndexName()` - -Return: - -- exact index name if all inputs used same index -- otherwise `ordered-merge()` - ---- - -## 11. `TripleStore` statistics-scan details - -### 11.1 Record decoding - -For stats scanning, decode keys in index order directly into a `long[4]`. - -Use existing varint decoding helpers; do not allocate per row. - -### 11.2 Single-pass distinct counting - -Maintain: - -```java -long[] prev = new long[4]; -boolean first = true; -long rows = 0; -long[] distinct = new long[5]; // ignore 0 -``` - -For each key: - -```java -rows++; -if (first) { - distinct[1]++; distinct[2]++; distinct[3]++; distinct[4]++; - copy current -> prev; - first = false; -} else { - if (prefixChanged(prev, current, 1)) distinct[1]++; - if (prefixChanged(prev, current, 2)) distinct[2]++; - if (prefixChanged(prev, current, 3)) distinct[3]++; - if (prefixChanged(prev, current, 4)) distinct[4]++; - copy current -> prev; -} -``` - -### 11.3 Prefix changed function - -```java -private static boolean prefixChanged(long[] prev, long[] current, int prefixLen) { - for (int i = 0; i < prefixLen; i++) { - if (prev[i] != current[i]) { - return true; - } - } - return false; -} -``` - ---- - -## 12. Ordered access path selection in `TripleStore` - -### 12.1 Requested-order matching - -Map requested `StatementOrder` to expected first varying field: - -- `S` -> `'s'` -- `P` -> `'p'` -- `O` -> `'o'` -- `C` -> `'c'` - -### 12.2 Selection algorithm - -```text -bestPrefix = max(patternScore(index)) - -if bestPrefix == 0: - return null - -for index in configured order: - if patternScore(index) != bestPrefix: - continue - if index.fieldSeq[bestPrefix] == requestedField: - return index -return null -``` - -Configured-order iteration preserves deterministic tie-breaking. - ---- - -## 13. Build-order of implementation tasks - -Implement in this exact order. - -### Phase 1 — Plumbing - -1. add config fields -2. add `LmdbEvaluationStrategyFactory` -3. add `LmdbQueryOptimizerPipeline` -4. wire `LmdbStore` to use the factory - -### Phase 2 — Statistics - -5. add `LmdbOptimizerStatisticsManager` -6. add `TripleStore.buildOptimizerStatisticsSnapshot()` -7. add dirty-marking from `LmdbStoreConnection` - -### Phase 3 — Ordered runtime support - -8. implement `TripleStore.getSupportedOrders(...)` -9. implement `TripleStore.getTriplesOrdered(...)` -10. add `LmdbOrderedValueComparator` -11. add `LmdbOrderedStatementUnionIteration` -12. implement `LmdbSailDataset` ordered methods - -### Phase 4 — Planner - -13. implement `LmdbJoinOrderOptimizer` with: - - generic traversal - - pure statement-pattern DP/greedy planning - - mixed-group fallback -14. integrate planner into pipeline - -### Phase 5 — Tests and polish - -15. explain/plan metadata -16. debug logging -17. full regression and benchmark suite - ---- - -## 14. Test classes to add - -### 14.1 Unit tests - -#### `LmdbOptimizerStatisticsManagerTest` - -- builds snapshot for default indexes -- counts prefix distinct values correctly -- refreshes after dirty threshold - -#### `TripleStoreOrderSupportTest` - -- reports supported orders correctly for: - - `spoc` - - `posc` - - mixed configured index sets -- returns empty set for prefix length `0` - -#### `LmdbOrderedValueComparatorTest` - -- internal-ID ordering works -- equal IDs compare equal -- unknown IDs fall back safely - -#### `LmdbJoinOrderOptimizerAccessPathTest` - -- runtime-bound vars contribute to prefix length -- lower-prefix ordered path is rejected -- prefix length `0` suppresses ordered candidates - -### 14.2 Integration tests - -#### `LmdbJoinOrderOptimizerIntegrationTest` - -Use real LMDB store and assert: - -- different index sets yield different join orders -- same query with different leading selective pattern yields different plan -- bound-variable-sensitive planning occurs - -#### `LmdbMergeJoinIntegrationTest` - -- ordered scan support is visible to execution -- merge join selected only on valid conditions - -#### `LmdbOrderedMultiContextIterationTest` - -- multiple specific contexts remain globally ordered - -#### `LmdbMixedJoinFallbackTest` - -- mixed join group uses generic fallback and stays correct - -### 14.3 Explain-plan / metadata tests - -#### `LmdbPlanMetadataTest` - -- statement patterns carry chosen index name -- merge-join flag and order variable present where expected - ---- - -## 15. Benchmarks to add - -### 15.1 Query-shape set - -Benchmark at least: - -1. subject-star -2. object-star -3. predicate-object chain -4. path / snowflake -5. cross-join-avoidance case -6. context-heavy case - -### 15.2 Index configurations - -Run at least: - -- `spoc,posc` -- `spoc,sopc,posc` -- `spoc,posc,opsc` -- workload-specific custom configuration - -### 15.3 Success criteria - -- LMDB-specific optimizer must not regress correctness -- median planning time increase acceptable -- execution-time improvement on targeted workloads visible -- no catastrophic full-scan plans where good prefix probes exist - ---- - -## 16. Logging points - -Add debug logs at: - -1. stats snapshot build start/end -2. dirty-count refresh trigger -3. join group entering LMDB DP -4. join group falling back to generic planning -5. access paths enumerated for each statement pattern -6. final chosen plan for each join group -7. ordered-scan fallback when requested order cannot be satisfied - ---- - -## 17. Thread safety - -### 17.1 Stats manager - -- `snapshot` is volatile -- rebuild guarded by `ReentrantLock` -- dirty count is atomic - -### 17.2 Planner - -Planner is request-scoped. -No shared mutable planner state beyond immutable config/statistics snapshot references. - -### 17.3 Comparator - -`LmdbOrderedValueComparator` is stateless apart from store reference and is thread-safe if `ValueStore.getId(...)` is thread-safe for reads in the current LMDB store design. - ---- - -## 18. Edge cases to cover explicitly - -1. unknown compile-time constant value ID => cardinality `0` -2. context var absent -3. multiple specific contexts -4. null context -5. repeated variable in one statement pattern -6. merge-join candidate with huge cardinality imbalance -7. no stats snapshot available -8. stats snapshot stale but rebuild skipped due to lock contention -9. user-provided custom evaluation strategy factory -10. feature flags disabled - ---- - -## 19. Definition of done for the code - -The code is done only if: - -- [ ] LMDB uses `LmdbEvaluationStrategyFactory` by default -- [ ] LMDB-specific pipeline is installed -- [ ] `LmdbJoinOrderOptimizer` plans pure statement-pattern groups -- [ ] `TripleStore` exposes index descriptors and order support -- [ ] `LmdbSailDataset` implements ordered retrieval -- [ ] prefix statistics are built and refreshed -- [ ] tests in sections 14 and 15 pass -- [ ] explain metadata is present -- [ ] feature flag can disable the new planner cleanly - ---- - -## 20. Final coding guidance - -1. **Copy and adapt** generic join-optimizer logic; do not try to subclass it deeply. -2. **Keep optimizer LMDB-local**. -3. **Do not advertise order for prefix length 0**. -4. **Do not concatenate ordered per-context iterators**; always merge them. -5. **Use internal value IDs for comparator consistency**. -6. **Never let stats failure fail a query**. -7. **Keep deterministic tie-breaking** everywhere. \ No newline at end of file diff --git a/plans/robust-synopsis-lazy-spill-execplan.md b/plans/robust-synopsis-lazy-spill-execplan.md deleted file mode 100644 index 93bca8ac9c2..00000000000 --- a/plans/robust-synopsis-lazy-spill-execplan.md +++ /dev/null @@ -1,106 +0,0 @@ -# Reduce robust synopsis spill, rebuild, and memory pressure cost - -This ExecPlan is a living document. The sections `Progress`, `Surprises & Discoveries`, `Decision Log`, and `Outcomes & Retrospective` must be kept up to date as work proceeds. - -This document must be maintained in accordance with [PLANS.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/PLANS.md). - -## Purpose / Big Picture - -After this change, the robust synopsis used by the join estimator should stop paying the full heap cost of all binary pattern synopses at load time. Persisted `RJMS` snapshots should load only resolver and unary data eagerly, then load each binary synopsis on demand. When memory pressure rises, the estimator should be able to unload those lazily loaded binary synopses before escalating to a full robust-synopsis spill or full estimator unload. Rebuild should also stop doing duplicate per-statement work for the base estimator and robust synopsis builder. - -## Progress - -- [x] (2026-04-10 11:04 CEST) Captured hotspot evidence and mapped the spill, merge, rebuild, and memory-accounting call sites. -- [x] (2026-04-10 11:04 CEST) Added `RJMS` v2 sketch payload support and builder-side batch registration primitives in `StoreSynopsis`. -- [x] (2026-04-10 12:10 CEST) Replaced eager binary synopsis loading with disk-backed lazy indexing in `StoreSynopsis.readFrom`; kept `readFullyFrom` for temporary spill outputs. -- [x] (2026-04-10 12:10 CEST) Connected `StoreSynopsis` binary load/unload callbacks to `SketchBasedJoinEstimator` memory tracking and pressure recovery. -- [x] (2026-04-10 12:10 CEST) Batched `rebuildOnceSlow()` through `IngestEvent[]` plus `StoreSynopsis.Builder.addStatements(...)`; added the single-segment spill fast path. -- [x] (2026-04-10 12:10 CEST) Extended persistence and robust-snapshot tests for lazy load/unload, v1/v2 compatibility, and spill equivalence. -- [ ] (2026-04-10 12:10 CEST) Finish a full downstream LMDB benchmark-style verification run; the targeted `ThemeQueryBenchmarkJoinEstimationTest` attempt was stopped after several minutes without reaching a suite summary. - -## Surprises & Discoveries - -- Observation: the spill hotspot is not only top-level sort work; rebuild also duplicates fingerprinting and robust-builder ingestion work. - Evidence: `SketchBasedJoinEstimator.rebuildOnceSlow()` currently calls `ingest(...)` and then separately recomputes `valueFingerprint(str(...))` for `StoreSynopsis.Builder`. - -- Observation: merge correctness only depends on top-level key ordering, not neighborhood entry ordering. - Evidence: `StoreSynopsisSnapshotSupport.mergeBinaryEntries(...)` merges by `BinaryPatternKey`, while neighborhood maps are unioned via hash-map lookups. - -- Observation: non-persistent rebuild spill cannot return a lazy disk-backed synopsis because the temporary spill directory is deleted on close. - Evidence: `RobustSynopsisSpillBuffer.close()` always deletes the spill directory. - -- Observation: slot-local persisted refs were not enough; dirty ownership also had to become slot-local. - Evidence: during rebuild-into-`A`, the old published `B` slot still carried stale dirty bits after a successful persist, so budget eviction rewrote the canonical sidecar even though the rebuilt `A` slot was spilling to a temp sidecar. - -## Decision Log - -- Decision: use `RJMS` v2 native DataSketches payloads for new writes while keeping v1 read support. - Rationale: this removes per-entry rewrite cost and allows whole-sketch union during merge without changing public API. - Date/Author: 2026-04-10 / Codex - -- Decision: make `StoreSynopsis.readFrom(Path)` lazy for binary synopses and add `StoreSynopsis.readFullyFrom(Path)` for temporary spill outputs. - Rationale: persistent snapshots can remain disk-backed; temporary merged snapshots cannot because their files are deleted after the rebuild finishes. - Date/Author: 2026-04-10 / Codex - -- Decision: unload all loaded robust binary synopses as the first robust-memory shedding step instead of implementing partial LRU in this pass. - Rationale: this keeps the first implementation small, deterministic, and sufficient to release large binary payloads before escalating to full spill. - Date/Author: 2026-04-10 / Codex - -## Outcomes & Retrospective - -Implemented in `core/sail/base`: persisted robust synopses now stay disk-backed by default, binary synopses load on demand, estimator pressure can unload loaded binary synopses before escalating to whole-synopsis spill, rebuild reuses batched `IngestEvent` work for both estimator and robust synopsis ingestion, and canonical sketch-slot persistence no longer gets corrupted by stale dirty state from the inactive buffer slot. Focused verification is green in `core/sail/base`; an additional LMDB benchmark-style class was started but not allowed to run to completion. - -## Context and Orientation - -The robust join synopsis lives in `core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/sketchoptimizer/StoreSynopsis.java`. It persists to `RJMS` files and is used by `PatternSynopsisAdapter` during robust join planning. `StoreSynopsisSnapshotSupport.java` merges sorted spill segments during rebuild. `SketchBasedJoinEstimator.java` owns memory accounting, rebuild, persistence, and spill/unload policy. Persistence regression tests live in `core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java`. Benchmark-oriented persistence tests live in `core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/ThemeQueryBenchmarkJoinEstimationTest.java`. - -In this repository, a “binary synopsis” means the robust synopsis for a two-variable statement-pattern shape. Each binary synopsis contains two degree sketches plus two neighborhood maps. Those binary synopses dominate robust heap cost and should be disk-backed when possible. - -## Plan of Work - -First, rework `StoreSynopsis` so the immutable synopsis can be backed by an `RJMS` file. The eager parts remain the resolver map and unary sketches. The binary section becomes an index of keys to payload offsets and lengths, plus a small cache of loaded `BinaryPatternSynopsis` objects. Add hooks so the owning estimator can be notified before load and after load or unload. Keep `writeTo(...)` correct for both eager and lazy synopses, with a fast whole-file copy when a lazy snapshot is already backed by the same on-disk version. - -Second, update `StoreSynopsisSnapshotSupport` to read both v1 and v2 segment payloads and to merge them by unioning whole sketches. Keep top-level key sorting only. Do not reintroduce nested neighborhood-map sorting. - -Third, rework `SketchBasedJoinEstimator.rebuildOnceSlow()` to batch statements through existing `IngestEvent` machinery and reuse the same precomputed `hs/hp/ho/hc` values for robust-builder ingestion. Connect robust binary load/unload to estimator memory accounting and pressure recovery. Add the single-segment spill fast path in `RobustSynopsisSpillBuffer.complete()`. - -Finally, extend tests to prove lazy robust loading, memory-tracking updates, unload-under-pressure behavior, v1-read/v2-write compatibility, and direct-build versus merged-spill equivalence. - -## Concrete Steps - -Work from repository root `/Users/havardottestad/Documents/Programming/rdf4j-stf`. - -1. Edit `StoreSynopsis.java` and `StoreSynopsisSnapshotSupport.java`. -2. Edit `SketchBasedJoinEstimator.java` to connect lazy robust loading, pressure shedding, and rebuild batching. -3. Add or extend tests in `core/sail/base` and `core/sail/lmdb`. -4. Run focused verification with the repo’s Maven workflow, then broaden to the affected module tests. - -Expected verification commands after implementation: - - python3 .codex/skills/mvnf/scripts/mvnf.py StoreSynopsisSnapshotCompatibilityTest - python3 .codex/skills/mvnf/scripts/mvnf.py SketchBasedJoinEstimatorPersistenceTest - python3 .codex/skills/mvnf/scripts/mvnf.py ThemeQueryBenchmarkJoinEstimationTest - -## Validation and Acceptance - -Acceptance is met when a persisted estimator can load a robust synopsis without materializing every binary synopsis, robust planner access can lazily materialize a needed binary synopsis, memory tracking reflects that load and later unload, pressure handling can release loaded robust binary synopses before falling back to full robust spill, and rebuild still publishes a correct robust synopsis even when spill segmentation is forced. Tests must cover both eager temporary loads and persistent lazy loads, and merged v2 snapshots must produce the same robust answers as direct builds. - -## Idempotence and Recovery - -The code changes are additive and retryable. If a lazy-load attempt fails, the estimator should invalidate the robust synopsis and fall back to the existing rebuild path rather than leaving partially initialized cache state behind. Temporary spill directories remain disposable and can be recreated on the next rebuild. - -## Artifacts and Notes - -Initial hotspot evidence: - - Comparator.lambda$comparingInt... ~9.6% - HashMap.getNode ~4.3% - ByteArrayOutputStream.ensureCapacity ~2.6% - StoreSynopsis.writeSketch(...) ~1.1% - HeapArrayOfDoublesCompactSketch. ~0.94% - -## Interfaces and Dependencies - -`StoreSynopsis` should expose an internal callback attachment point for binary-cache lifecycle notifications. `SketchBasedJoinEstimator` remains the owner of `MemoryCategory.ROBUST_SYNOPSIS` tracking and should call into `StoreSynopsis` only through that internal hook and an unload method. No new third-party dependencies are required; continue using Apache DataSketches for tuple sketch serialization and union. - -Change note: created this ExecPlan because the task expanded from a local spill optimization into a cross-module refactor spanning snapshot format, lazy loading, and memory-pressure behavior. diff --git a/plans/technical-design-spec.md b/plans/technical-design-spec.md deleted file mode 100644 index 525052da8b5..00000000000 --- a/plans/technical-design-spec.md +++ /dev/null @@ -1,885 +0,0 @@ -# RDF4J LMDB Join Order Optimizer — Technical Design Specification - -**Document type:** Technical design specification -**Audience:** Implementers, reviewers, QA, performance test owners -**Normative language:** SHALL, SHOULD, MAY - ---- - -## 1. Purpose - -This specification defines the normative behavior of the RDF4J LMDB-specific join order optimizer, its supporting statistics, and the ordered-access runtime support needed for execution. - -Anything marked SHALL is required for conformance to this spec. - ---- - -## 2. Definitions - -### 2.1 Terms - -- **BGP**: basic graph pattern represented as a join group of `StatementPattern` -- **access path**: a combination of an LMDB index, usable prefix, and optional output order -- **usable prefix**: consecutive leading index fields that are fixed by `CONST` or `BOUND` -- **ordered candidate**: access path that can return bindings ordered by one unbound variable -- **partial plan**: a left-deep plan built from a subset of statement patterns -- **prefix statistics**: per-index row counts and distinct prefix counts -- **ordered runtime path**: `SailDataset.getStatements(StatementOrder, ...)` path - -### 2.2 Position names - -- `S` = subject -- `P` = predicate -- `O` = object -- `C` = context - ---- - -## 3. Conformance scope - -An implementation conforms to this specification if it satisfies all mandatory requirements in: - -- section 4 (functional requirements) -- section 5 (planner behavior) -- section 6 (statistics) -- section 7 (runtime ordered access) -- section 8 (configuration) -- section 9 (error handling) -- section 10 (test requirements) - ---- - -## 4. Functional requirements - -### FR-001 — LMDB-specific pipeline - -The LMDB store SHALL use an LMDB-specific optimizer pipeline by default when no custom evaluation strategy factory was explicitly supplied. - -### FR-002 — Generic fallback preservation - -If a custom evaluation strategy factory was explicitly provided in `LmdbStoreConfig`, LMDB SHALL preserve that configuration and SHALL NOT replace it automatically. - -### FR-003 — Pure statement-pattern scope - -The LMDB-specific join enumerator SHALL apply only to flattened inner join groups whose non-priority members are all `StatementPattern`. - -### FR-004 — Mixed-group fallback - -If a join group contains any non-priority member that is not a `StatementPattern`, the implementation SHALL use generic join-order behavior for that group. - -### FR-005 — Bound-variable awareness - -The LMDB-specific planner SHALL distinguish between: -- compile-time constants, -- runtime-bound variables, -- unbound variables. - -### FR-006 — Index-set awareness - -The planner SHALL enumerate candidate access paths from the actual configured LMDB index set. - -### FR-007 — Prefix-based access-path selection - -The planner SHALL use leading-prefix usability as the primary index-quality measure. - -### FR-008 — Scan-vs-output distinction - -The planner SHALL estimate both: -- rows scanned per probe, -- rows returned per probe. - -### FR-009 — Ordered access support - -The runtime LMDB dataset SHALL implement: -- `getStatements(StatementOrder, ...)` -- `getSupportedOrders(...)` -- `getComparator()` - -### FR-010 — Merge-join correctness - -The planner SHALL enable merge join only when both inputs can produce the same valid order and the runtime comparator is consistent with iterator order. - -### FR-011 — Safe failure - -Planner-statistics failures SHALL degrade plan quality conservatively but SHALL NOT fail query execution. - -### FR-012 — Explainability - -The planner SHALL expose the chosen index name per planned statement pattern. - ---- - -## 5. Planner specification - -## 5.1 Query traversal - -### PR-001 - -The optimizer SHALL traverse the query model and optimize join nodes recursively. - -### PR-002 - -For `LeftJoin`, the optimizer SHALL: -1. optimize the left argument first, -2. extend the bound-variable set with the left argument’s bindings, -3. optimize the right argument under that extended bound-variable set. - -### PR-003 - -The optimizer SHALL preserve current priority treatment for: -- `BindingSetAssignment` -- extension / `BIND` -- subselect-like join arguments - -These SHALL NOT be fed into the LMDB-specific statement-pattern DP search. - ---- - -## 5.2 Binding-state rules - -### PR-010 — CONST classification - -A statement-pattern position SHALL be classified as `CONST` if: -1. its `Var` already has a compile-time value, or -2. its variable name exists in incoming query bindings with a concrete value. - -### PR-011 — BOUND classification - -A statement-pattern position SHALL be classified as `BOUND` if: -1. it is not `CONST`, and -2. its variable name is already bound by earlier steps in the current partial plan. - -### PR-012 — UNBOUND classification - -A statement-pattern position SHALL be classified as `UNBOUND` if: -1. it is not `CONST`, and -2. it is not `BOUND`. - -### PR-013 — ABSENT classification - -If the statement pattern has no context variable, context SHALL be classified as `ABSENT`. - -### PR-014 — Invalid constant types - -If a subject constant is not a `Resource`, predicate constant is not an `IRI`, or context constant is not a `Resource`, the implementation SHALL treat that position as not indexable for planning purposes. - ---- - -## 5.3 Index enumeration rules - -### PR-020 — Candidate index source - -The planner SHALL enumerate candidate indexes from the configured LMDB triple indexes only. - -### PR-021 — Usable prefix length - -For an index field sequence `f1 f2 f3 f4`, usable prefix length SHALL equal the number of consecutive leading fields in `{CONST, BOUND}` state, stopping at the first `UNBOUND` or `ABSENT`. - -### PR-022 — Best-prefix retention - -The planner SHALL retain candidate indexes whose usable prefix length equals the maximum usable prefix length for the statement pattern under the current bound-variable set. - -### PR-023 — Lower-prefix rejection - -The planner SHALL reject candidate indexes whose usable prefix length is strictly less than the best available prefix length for that statement pattern and bound-variable set. - -### PR-024 — Prefix-zero order suppression - -If the best usable prefix length is zero, the planner SHALL NOT advertise any order property for that statement pattern. - -### PR-025 — Deterministic tie-breaking - -When multiple candidate indexes have equal usable prefix length and equivalent cost, the planner SHALL tie-break using configured LMDB index order. - ---- - -## 5.4 Ordered-candidate rules - -### PR-030 — Ordered candidate eligibility - -A candidate access path MAY expose an order property only if: -1. its prefix length is greater than zero, -2. its prefix length is less than four, -3. the first varying field after the usable prefix corresponds to an unbound variable. - -### PR-031 — Ordered variable derivation - -The ordered variable SHALL be the variable bound to the first varying field after the usable prefix. - -### PR-032 — Ordered candidate deduplication - -If multiple retained indexes produce the same ordered variable and materially identical probe costs, the planner SHOULD keep only the cheapest one. - -### PR-033 — No ordered downgrade - -The planner SHALL NOT choose an ordered access path that requires a prefix downgrade relative to the best available prefix length. - ---- - -## 5.5 Statistics usage rules - -### PR-040 — Constant-only exact cardinality - -If all fixed positions relevant to a cardinality estimate are compile-time constants, the planner SHALL use `LmdbEvaluationStatistics` / `TripleStore.cardinality(...)` for exact or existing-estimator cardinality. - -### PR-041 — Runtime-bound prefix fanout - -If a usable prefix contains any runtime-bound position, the planner SHALL use average rows per prefix from prefix statistics for `rowsScannedPerProbe`. - -### PR-042 — Prefix-zero scan estimate - -If usable prefix length is zero, `rowsScannedPerProbe` SHALL equal total row count from the current stats snapshot, or a conservative equivalent if stats are unavailable. - -### PR-043 — Output rows exact fast path - -If all fixed positions in a statement pattern are compile-time constants, `rowsReturnedPerProbe` SHALL use exact full-pattern cardinality. - -### PR-044 — Output rows mixed path - -If runtime-bound values are involved, `rowsReturnedPerProbe` SHALL be estimated from: -1. `rowsScannedPerProbe`, then -2. selectivity factors for additional non-prefix fixed fields. - -### PR-045 — Constant non-prefix selectivity - -A constant non-prefix field SHOULD use: -```text -exactCardinality(field = const only) / totalRows -``` -clamped to `[0,1]`. - -### PR-046 — Runtime-bound non-prefix selectivity - -A runtime-bound non-prefix field SHOULD use: -```text -1 / distinct(field) -``` -where `distinct(field)` is derived from an index whose first field is that field. - -### PR-047 — Distinct-field fallback - -If no index begins with the field needed for `distinct(field)`, the planner SHALL use a conservative fallback: -```text -1 / max(10, sqrt(totalRows)) -``` -or a stricter equivalent. - -### PR-048 — Repeated-variable intra-pattern equality - -If the same variable appears multiple times in one statement pattern and not all occurrences are fixed by the usable prefix, the planner SHOULD apply an additional equality selectivity factor. - -If omitted in v1, the omission SHALL be documented and covered by tests proving correctness is unaffected. - ---- - -## 5.6 Cost formulas - -### PR-050 — Probe cost formula - -The implementation SHALL compute probe cost using a formula equivalent in shape to: - -```text -probeCost = probeStartup + scanRowsPerProbe * scanWeight + rowsReturnedPerProbe * emitWeight -``` - -The exact constants MAY be internal and configurable only in code. - -### PR-051 — Nested-loop step cost - -For a left-deep addition of statement pattern `p` to partial plan `L`: - -```text -stepCost = rows(L) * probeCost(p | bindings(L)) -stepRows = rows(L) * rowsReturnedPerProbe(p | bindings(L)) -``` - -### PR-052 — Cross-join penalty semantics - -If `p` shares no binding variable with `L`, the implementation SHALL still use the same nested-loop formula. -The multiplicative effect of `rows(L)` on a non-parameterized scan SHALL serve as the cross-join penalty. - -### PR-053 — Ordered-state as physical property - -The planner SHALL treat output order as a physical property of the partial plan state key. - ---- - -## 5.7 Plan search rules - -### PR-060 — Left-deep search - -The LMDB-specific planner SHALL search only left-deep plan shapes in v1. - -### PR-061 — DP threshold - -For pure statement-pattern join groups of size `<= queryOptimizerDynamicProgrammingThreshold`, the planner SHALL use dynamic programming over subsets. - -### PR-062 — Greedy fallback above threshold - -For larger pure statement-pattern join groups, the planner SHALL use greedy growth from the cheapest singleton plan. - -### PR-063 — Singleton state creation - -The planner SHALL create: -- one unordered singleton state, -- and zero or more ordered singleton states - -for each statement pattern. - -### PR-064 — State key - -A DP state key SHALL include: -- subset membership, -- ordered variable name or null. - -### PR-065 — Transition generation - -For each state transition, the planner SHALL consider: -- nested-loop addition, -- optional merge-join addition - -when merge eligibility rules are satisfied. - -### PR-066 — Deterministic final choice - -If multiple full-plan states have equal cost within floating-point tolerance, the implementation SHALL use deterministic tie-breaking. - ---- - -## 5.8 Merge-join rules - -### PR-070 — Merge-join eligibility - -A merge join MAY be generated only if all conditions hold: - -1. merge join feature flag enabled -2. current partial plan has ordered property on variable `v` -3. next statement pattern can produce ordered property on same `v` -4. `v` is a shared join variable -5. cardinality ratio is acceptable -6. ordered access does not require prefix downgrade -7. runtime ordered access is available - -### PR-071 — Cardinality-ratio guard - -The acceptable cardinality ratio SHALL use the same conceptual guard as RDF4J’s current merge-join heuristic, defaulting to a multiplier of `10` unless configured otherwise in code. - -### PR-072 — Merge output rows - -Merge-join output rows SHALL use the same output-row estimate as the nested-loop alternative over the same binding assumptions. - -### PR-073 — Merge plan annotation - -A merge join in the final plan SHALL set: -- `join.setMergeJoin(true)` -- `join.setOrder(var)` - ---- - -## 5.9 Plan materialization rules - -### PR-080 — Search/model separation - -The planner SHALL NOT mutate the original query model while evaluating candidate states. - -### PR-081 — Final tree shape - -After the best plan is chosen, the planner SHALL build a right-recursive `Join` tree. - -### PR-082 — Planned index annotation - -Each chosen statement pattern in the final plan SHALL have the planned index name recorded via `setIndexName(...)` or equivalent metadata hook. - -### PR-083 — Statement-pattern order annotation - -If runtime ordered retrieval requires statement-pattern-local order metadata in addition to `Join.order`, the final plan construction SHALL set that metadata on the relevant statement patterns. - -### PR-084 — Existing result-size estimates - -The planner SHOULD continue to populate result-size estimates on statement patterns and joins where existing RDF4J infrastructure expects them. - ---- - -## 6. Statistics specification - -## 6.1 Snapshot contents - -### ST-001 - -The optimizer statistics snapshot SHALL contain: -- total row count, -- one entry per configured LMDB index. - -### ST-002 - -Each per-index stats entry SHALL contain: -- index name -- field sequence -- total row count -- distinct prefix count for lengths 1, 2, 3, 4 -- derived average rows per prefix for lengths 1, 2, 3, 4 - -### ST-003 - -All snapshot data used by the planner SHALL be immutable after publication. - ---- - -## 6.2 Snapshot build algorithm - -### ST-010 - -The implementation SHALL compute per-index prefix distinct counts by scanning the index in key order. - -### ST-011 - -Distinct prefix count for length `k` SHALL increment when the first `k` decoded fields differ from the previous key. - -### ST-012 - -Stats build SHOULD aggregate explicit and inferred statement DBs into one snapshot unless query-evaluation scope-specific stats are explicitly implemented. - -### ST-013 - -Temporary decode buffers SHALL be reused; the implementation SHOULD avoid per-row allocation. - ---- - -## 6.3 Snapshot lifecycle - -### ST-020 - -A stats snapshot SHALL be built: -- eagerly at initialization if configured, -- otherwise lazily on first optimizer use. - -### ST-021 - -Any committed transaction that changes statements SHALL mark the stats snapshot dirty. - -### ST-022 - -Dirtying MAY be tracked by commit count rather than exact mutation count. - -### ST-023 - -The stats manager SHALL rebuild the snapshot when dirty count reaches configured threshold. - -### ST-024 - -If rebuild fails, the implementation SHALL keep the previous snapshot if available. - -### ST-025 - -Stats rebuild failure SHALL NOT fail query execution. - ---- - -## 7. Runtime ordered-access specification - -## 7.1 Dataset-level order support - -### RT-001 - -`LmdbSailDataset.getSupportedOrders(...)` SHALL return the set of statement orders producible at best prefix quality for the concrete bindings supplied to the call. - -### RT-002 - -If best prefix length is zero, `getSupportedOrders(...)` SHALL return an empty set. - -### RT-003 - -`LmdbSailDataset.getComparator()` SHALL return a comparator consistent with LMDB ordered-iterator output. - -### RT-004 - -`LmdbSailDataset.getStatements(StatementOrder, ...)` SHALL produce statements in that order when the order is supported. - ---- - -## 7.2 TripleStore order support - -### RT-010 - -`TripleStore` SHALL expose the configured index descriptors to the LMDB planner. - -### RT-011 - -`TripleStore` SHALL expose a method to determine supported orders from concrete bindings. - -### RT-012 - -`TripleStore` SHALL expose an ordered-access method that chooses the best index matching: -- best prefix length, -- requested order as first varying field after prefix. - -### RT-013 - -If no best-prefix index supports the requested order, the implementation SHALL NOT silently claim the order is supported. - -It MAY: -- fall back to unordered access with debug logging, or -- reject the ordered request internally. - ---- - -## 7.3 Multi-context ordered iteration - -### RT-020 - -If multiple specific contexts are requested for an ordered call, the implementation SHALL merge per-context ordered iterators using a global k-way merge. - -### RT-021 - -The implementation SHALL NOT concatenate ordered per-context iterators using plain union/append semantics. - -### RT-022 - -The merge comparator SHALL be derived from: -```text -statementOrder.getComparator(valueComparator) -``` -where `valueComparator` is LMDB-order-consistent. - ---- - -## 7.4 Comparator rules - -### RT-030 - -For the LMDB ordered fast path, value comparison SHALL prefer LMDB internal value IDs. - -### RT-031 - -If both values have valid LMDB internal IDs, comparison SHALL use unsigned numeric ordering of those IDs or an equivalent total order consistent with LMDB key order. - -### RT-032 - -If one or both IDs are unavailable, the implementation MAY fall back to a generic RDF value comparator only outside the guaranteed LMDB ordered path. - -### RT-033 - -The implementation SHALL have tests proving comparator consistency with iterator order. - ---- - -## 8. Configuration specification - -## 8.1 Required configuration fields - -### CFG-001 - -`LmdbStoreConfig` SHALL expose: - -- `queryOptimizerEnabled` -- `queryOptimizerDynamicProgrammingThreshold` -- `queryOptimizerMergeJoinEnabled` -- `queryOptimizerStatisticsEnabled` -- `queryOptimizerStatisticsBuildOnInit` -- `queryOptimizerStatisticsRefreshCommitThreshold` - -### CFG-002 - -Default values SHALL be: - -```text -queryOptimizerEnabled = true -queryOptimizerDynamicProgrammingThreshold = 8 -queryOptimizerMergeJoinEnabled = true -queryOptimizerStatisticsEnabled = true -queryOptimizerStatisticsBuildOnInit = false -queryOptimizerStatisticsRefreshCommitThreshold = 100 -``` - -### CFG-003 - -If RDF config serialization is supported for LMDB store configuration, these fields SHALL also be serializable/deserializable through LMDB config schema/factory classes. - ---- - -## 9. Error-handling specification - -### ERR-001 — Unknown compile-time constant - -If a compile-time constant cannot be resolved to an LMDB value ID, exact cardinality SHALL be treated as zero. - -### ERR-002 — Stats unavailable - -If no stats snapshot exists and building one fails, the planner SHALL fall back to conservative heuristic estimates. - -### ERR-003 — Comparator resolution failure - -If internal IDs cannot be resolved for values on the non-guaranteed path, generic fallback comparison MAY be used, but merge-join correctness MUST remain preserved. - -### ERR-004 — Unsupported ordered request - -If ordered retrieval is requested but not actually satisfiable at runtime, the implementation SHALL fall back safely and SHALL NOT claim the order was produced. - -### ERR-005 — Mixed-group unsupported optimization - -Mixed join groups outside the LMDB-specific scope SHALL use generic behavior. - -### ERR-006 — Lock contention during stats rebuild - -If another thread is already rebuilding stats, the current thread MAY continue using the previous snapshot. - ---- - -## 10. Test specification - -## 10.1 Mandatory unit tests - -### TEST-001 - -Prefix statistics build SHALL be tested against a small deterministic dataset where distinct prefix counts are known exactly. - -### TEST-002 - -Access-path prefix calculation SHALL be tested for: -- constants -- runtime-bound variables -- non-prefix constants -- absent context - -### TEST-003 - -Supported-order reporting SHALL be tested for: -- best prefix > 0 -- best prefix = 0 -- multiple same-prefix indexes -- requested multiple contexts - -### TEST-004 - -LMDB ordered comparator SHALL be tested against known LMDB value IDs. - ---- - -## 10.2 Mandatory integration tests - -### TEST-010 - -The same query under different index sets SHALL produce different chosen statement orders when physically appropriate. - -### TEST-011 - -The same query under different earlier bound-variable states SHALL produce different next-pattern choices when parameterized probes become available. - -### TEST-012 - -Merge join SHALL appear only when: -- same order available on both sides, -- prefix quality not downgraded, -- size ratio acceptable. - -### TEST-013 - -When multiple contexts are requested, ordered result streams SHALL remain globally ordered. - -### TEST-014 - -Mixed join groups SHALL remain correct and shall use generic fallback. - ---- - -## 10.3 Mandatory metadata tests - -### TEST-020 - -Chosen statement patterns SHALL carry planned index names. - -### TEST-021 - -Final merge joins SHALL be annotated with `mergeJoin=true` and the correct order variable. - -### TEST-022 - -Runtime actual index reporting SHALL remain available. - ---- - -## 10.4 Mandatory benchmark tests - -### TEST-030 - -Benchmark suite SHALL include: -- star joins -- path joins -- object-heavy joins -- context-heavy joins -- cross-join-avoidance cases - -### TEST-031 - -Benchmarks SHALL compare at least two LMDB index configurations. - -### TEST-032 - -Benchmarks SHALL capture: -- planning time -- execution time -- result count -- chosen plan/index sequence - ---- - -## 11. Non-functional requirements - -### NFR-001 — Correctness first - -The implementation SHALL preserve query results. - -### NFR-002 — Determinism - -For a fixed query, dataset, bindings, and index configuration, the planner SHALL make deterministic choices. - -### NFR-003 — Isolation - -The feature SHALL not change planning behavior for non-LMDB stores. - -### NFR-004 — Observability - -The implementation SHALL provide enough metadata and logging to diagnose planner regressions. - -### NFR-005 — Rollback - -The feature SHALL be disableable by configuration. - -### NFR-006 — Modest planner overhead - -The planner SHOULD keep optimization overhead reasonable for typical BGP sizes. - -### NFR-007 — No write-path regression by design - -Statistics maintenance SHALL avoid expensive exact update work on every write in v1. - ---- - -## 12. Invariants - -### INV-001 - -No supported order SHALL be advertised when best usable prefix length is zero. - -### INV-002 - -A merge join SHALL never be emitted without a comparator-consistent ordered runtime path. - -### INV-003 - -The planner SHALL never depend on stats freshness for correctness. - -### INV-004 - -If ordered access through wrappers is unavailable, the planner SHALL still generate a valid unordered plan. - -### INV-005 - -Configured LMDB index order SHALL define deterministic tie-breaking among equal-cost equal-prefix candidates. - ---- - -## 13. Reference algorithms - -## 13.1 Prefix length - -```text -prefixLen = 0 -for field in index.fieldSeq: - if state(field) in {CONST, BOUND}: - prefixLen++ - else: - break -``` - -## 13.2 Ordered variable - -```text -if prefixLen == 0 or prefixLen == 4: - no order -else: - nextField = index.fieldSeq[prefixLen] - if state(nextField) == UNBOUND: - orderedVar = variable(nextField) - else: - no order -``` - -## 13.3 DP transition - -```text -for each state: - for each remaining pattern: - for each access path: - nestedLoopTransition(...) - if mergeEligible(...): - mergeTransition(...) - keep best by (subset, orderedVar) -``` - ---- - -## 14. Out-of-scope clarifications - -The following are explicitly non-required for conformance to v1 of this spec: - -1. bushy join enumeration -2. exact skew-aware histograms -3. adaptive runtime re-planning -4. automatic index recommendation or creation -5. optimizer-local handling for arbitrary non-`StatementPattern` nodes beyond safe fallback - ---- - -## 15. Implementation conformance checklist - -An implementation is conformant when every statement below is true. - -### Planner wiring - -- [ ] FR-001 satisfied -- [ ] FR-002 satisfied - -### Planner behavior - -- [ ] PR-010 to PR-084 satisfied - -### Statistics - -- [ ] ST-001 to ST-025 satisfied - -### Runtime ordered access - -- [ ] RT-001 to RT-033 satisfied - -### Config - -- [ ] CFG-001 to CFG-003 satisfied - -### Error handling - -- [ ] ERR-001 to ERR-006 satisfied - -### Tests - -- [ ] TEST-001 to TEST-032 satisfied - -### Non-functional - -- [ ] NFR-001 to NFR-007 satisfied - -### Invariants - -- [ ] INV-001 to INV-005 satisfied - ---- - -## 16. Final normative statement - -The LMDB join optimizer is considered complete only when it behaves as a **physical planner** that is: - -- aware of the actual configured LMDB indexes, -- aware of which variables are already bound, -- aware of when ordered access is truly available, -- safe under stale or missing statistics, -- and correct under all fallback conditions. \ No newline at end of file From 9a8e50378a1f9d8078370f1d58c294edb27e579f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 07:43:26 +0200 Subject: [PATCH 22/43] wip --- .../sail/lmdb/benchmark/results-2026-04-20.md | 10180 ++++++++++++++++ 1 file changed, 10180 insertions(+) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md new file mode 100644 index 00000000000..b6df930cde5 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md @@ -0,0 +1,10180 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 55.256 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 120.961 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 18.391 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 92.607 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 127.652 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 33.326 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 65.502 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 83.912 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.223 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 297.461 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 278.110 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.179 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 63.236 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.404 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.107 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 3.585 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 767.601 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.264 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 9.298 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 940.004 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 25.026 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 53.381 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 725.098 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 174.088 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 20.261 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.923 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 349.613 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 7.371 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 32204.731 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 493.078 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 91.372 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 114.845 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 207.756 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 238.436 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 158.529 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 2.100 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 144.900 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 59.402 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 3.114 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 246.244 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 5.787 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.752 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 8.150 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 2.692 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 397.706 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1202.188 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 704.931 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 126.495 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 299.815 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 273.886 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1431.609 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 216.615 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1392.135 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1480.063 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 465.966 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 38.622 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 46.027 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.928 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 157.242 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 163.190 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 17.850 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 117.360 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 41.055 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 164.118 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 245.462 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 208.560 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.713 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 32.980 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 6.649 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 337.447 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.845 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 7.055 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 96.276 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 15.286 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.019 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.905 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 366.590 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 18.509 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 2.993 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 31.997 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 24.087 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 35.673 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 9.763 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 8.935 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 33.054 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 28.829 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.691 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 256.919 ms/op + +``` + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +70.667 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +55.256 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 55.256 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 00:22:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +170.031 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=code) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] + │ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +120.961 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 120.961 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 00:22:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +24.417 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0243ac56d94205774ad6bc85131e85622587, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ │ ║ ├── Filter (costEstimate=420, resultSizeEstimate=1.3K) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ │ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_0243ac56d94205774ad6bc85131e85622587) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0243ac56d94205774ad6bc85131e85622587) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + ?enc ?practitioner . + ?enc a . + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +18.391 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.391 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:21:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +118.535 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_207d96867fdaaf94548a600cb9180d8bc5501, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_207d96867fdaaf94548a600cb9180d8bc5501, anonymous) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +92.607 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 92.607 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:21:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +171.665 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=33.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=31.7K) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=205, resultSizeEstimate=42.0K) [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="DX-200") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="DX-201") + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ │ ║ s: Var (name=cond) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ │ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + ?enc ?cond . + ?enc a . + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +127.652 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 127.652 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:21:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.342 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K) [left] + │ ║ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ ║ │ ║ │ s: Var (name=obs) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ ║ │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ │ o: Var (name=enc) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] + │ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + VALUES ?limit { 55 } + FILTER NOT EXISTS { + ?enc ?cond . + } +} + +33.326 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 33.326 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:21:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +69.004 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +65.502 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 65.502 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:20:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +113.675 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) + │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (costEstimate=236, resultSizeEstimate=55.9K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +83.912 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 83.912 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:20:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +78.805 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_090152887b79502248e594363bbef59f0ff7, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ ║ Var (name=patient) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_090152887b79502248e594363bbef59f0ff7) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_090152887b79502248e594363bbef59f0ff7) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +56.223 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 56.223 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:20:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +410.572 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K, joinType=Cartesian product) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.6K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.4K) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ │ ║ └── Filter (costEstimate=259, resultSizeEstimate=66.9K) [right] + │ ║ │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) + │ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc a . + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +297.461 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 297.461 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:20:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f801121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +372.416 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (=) + │ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ │ │ ValueConstant (value="MED-1005") + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.4K) + │ ║ │ ╠══ StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=m2) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ s: Var (name=m2) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +278.110 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 278.110 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:19:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.053 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ │ Var (name=v) (bindingState=bound) + │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +2.179 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.179 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:19:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +80.161 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ╠══ Or + │ ║ │ ║ ║ ├── Compare (=) + │ ║ │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ │ ValueConstant (value="user0") + │ ║ │ ║ ║ └── Compare (=) + │ ║ │ ║ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="user1") + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3364465105415278E17M) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.297148555399E11M) [left] + │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6467671.6M) [left] + │ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=45.0M) [left] + │ ║ │ │ ║ │ ║ ├── Filter [left] + │ ║ │ │ ║ │ ║ │ ╠══ And + │ ║ │ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ └── Compare (!=) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.3M) + │ ║ │ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ │ │ ║ │ ║ │ │ ╠══ Filter [left] + │ ║ │ │ ║ │ ║ │ │ ║ ├── Compare (!=) + │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ │ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ │ │ o: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ ║ │ └── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ ║ s: Var (name=u3) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ ║ o: Var (name=u1) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ │ s: Var (name=u2) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_45817ef2a195b893433a80fa43434c7124b00123) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + VALUES ?u3 { } + FILTER ((?u2 != ?u3) && (?u1 != ?u3)) + ?u1 ?u3 . + ?u2 ?u1 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_45817ef2a195b893433a80fa43434c7124b00123) + } +} + +63.236 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 63.236 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:19:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.363 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ And + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ └── Exists + │ ║ ║ │ ║ StatementPattern + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +2.404 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.404 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:19:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.783 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +2.107 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.107 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:18:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.698 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] + │ ║ ║ ╠══ Not + │ ║ ║ ║ Exists + │ ║ ║ ║ Extension + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_path_701410582c3446f344b159fd0ded0c7fda1090123456) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_701410582c3446f344b159fd0ded0c7fda1090123456) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +3.585 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.585 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:18:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1038.418 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Join (HashJoinIteration) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union (new scope) [right] + │ ║ ║ ╠══ Extension (new scope) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ Extension (new scope) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ └── ExtensionElem (activity) + │ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { } + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post ?u . + BIND(?post AS ?activity) + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +767.601 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 767.601 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:18:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.908 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.2M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u != ?v) + ?u ?v . + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +2.264 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.264 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:18:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.823 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.2M) + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_9136c0ff928e96324574a82809a0327e1ed1012345678) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_9136c0ff928e96324574a82809a0327e1ed1012345678) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +9.298 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.298 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:17:47 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1199.690 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185314.6M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +940.004 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 940.004 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:17:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +35.496 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=20595.2M) [left] + │ ║ ║ ├── Filter [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=135.8M) + │ ║ ║ │ ├── Filter [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=945) + │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ │ │ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ │ │ ╚══ Filter [right] + │ ║ ║ │ │ │ ├── Compare (!=) + │ ║ ║ │ │ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ └── StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) + │ ║ ║ │ │ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ └── Filter [right] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +25.026 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 25.026 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:17:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +72.010 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.67849993939E10M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=395031.6M) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=e) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=11126.7M) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=11126.7M) [left] + │ ║ ║ │ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=250.8M) + │ ║ ║ │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=250.8M) [left] + │ ║ ║ │ ║ ║ │ │ ╠══ Filter [left] + │ ║ ║ │ ║ ║ │ │ ║ ├── And + │ ║ ║ │ ║ ║ │ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ │ ╚══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=3.6M) + │ ║ ║ │ ║ ║ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.6M) [left] + │ ║ ║ │ ║ ║ │ │ ║ ║ ├── Filter [left] + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ║ ║ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ │ │ ║ ║ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ │ │ ║ ║ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ ║ ╚══ BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ │ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ │ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ ║ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ ╚══ BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?a != ?c) && (?b != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +53.381 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.381 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:17:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +891.712 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) + │ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +725.098 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 725.098 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:16:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +219.939 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] + │ ║ │ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +174.088 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 174.088 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:16:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +26.787 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] + │ ║ │ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Author 1") + │ ║ │ ║ │ ValueConstant (value="Author 2") + │ ║ │ ║ │ ValueConstant (value="Author 3") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=40.3K) [right] + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +20.261 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.261 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:16:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +62.966 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ o: Var (name=member) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a . + ?loan ?member . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +45.923 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 45.923 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:16:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +445.634 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter (costEstimate=361, resultSizeEstimate=130.6K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +349.613 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 349.613 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:15:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.226 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=511, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=511) [left] + │ ║ ║ ├── Filter (costEstimate=1.5K, resultSizeEstimate=507) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +7.371 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.371 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:15:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +33668.195 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_51cd5cef888879412abff09f76f00ca68401234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) (bindingState=bound) + │ ║ │ Var (name=member) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) (bindingState=bound) + │ ║ GroupElem (_anon_having_51cd5cef888879412abff09f76f00ca68401234) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_51cd5cef888879412abff09f76f00ca68401234) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan a . + ?loan ?member . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +32204.731 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32204.731 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:17:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +686.701 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── Exists + │ ║ │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ║ ├── Or + │ ║ │ ║ ║ │ ╠══ Compare (=) + │ ║ │ ║ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ║ │ ║ ValueConstant (value="Branch 0") + │ ║ │ ║ ║ │ ╚══ Compare (=) + │ ║ │ ║ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ║ │ ValueConstant (value="Branch 1") + │ ║ │ ║ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ ║ o: Var (name=branchName) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=386.3K) [right] + │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +493.078 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 493.078 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:16:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +119.142 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.6K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] + │ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +91.372 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 91.372 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:16:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00002000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +155.205 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ ║ │ ╚══ Compare (=) + │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="Author 3") + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=268.5K, joinType=Cartesian product) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=268.5K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=261.3K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.6K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [left] + │ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=member) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] + │ ║ ║ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] + │ ║ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ ║ │ o: Var (name=author) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ ║ ║ s: Var (name=author) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?loan ?member . + ?loan a . + ?loan ?copy . + ?member a . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +114.845 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 114.845 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:15:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +279.247 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) + │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +207.756 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 207.756 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:15:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +249.808 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +238.436 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 238.436 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:15:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +211.413 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] + │ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +158.529 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 158.529 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:15:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2.940 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_44132b7f119773fec4674b9ba869ee58689290123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=assemblyName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ ║ ValueConstant (value="Assembly 3") + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_44132b7f119773fec4674b9ba869ee58689290123) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_44132b7f119773fec4674b9ba869ee58689290123) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +2.100 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.100 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:14:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000038001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +204.221 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ o: Var (name=component) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +144.900 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 144.900 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:14:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +75.584 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] + │ ║ ║ ├── Filter (costEstimate=3.4K, resultSizeEstimate=6.7K) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +59.402 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 59.402 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:14:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.342 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=78, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ ├── Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.6K) [right] + │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +3.114 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.114 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:13:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +330.507 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_562c015adadd61145f7a5b0e308aecce3d201234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_562c015adadd61145f7a5b0e308aecce3d201234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_562c015adadd61145f7a5b0e308aecce3d201234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement a . + ?requirement ?component . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +246.244 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 246.244 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:13:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.053 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) + │ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter (costEstimate=82, resultSizeEstimate=6.7K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (costEstimate=409.4K, resultSizeEstimate=3.1K) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +5.787 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.787 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:13:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.739 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_042510b137c97be6a4029a20676730fe31e49, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_042510b137c97be6a4029a20676730fe31e49) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_042510b137c97be6a4029a20676730fe31e49) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?requirement a . + ?component a . + ?component ?assembly . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +4.752 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.752 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:12:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +11.210 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, joinType=Cartesian product) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +8.150 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.150 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:12:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.594 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="Assembly 2") + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) + │ ║ │ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] + │ ║ │ │ │ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +2.692 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.692 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:12:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +424.201 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +397.706 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 397.706 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:11:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1561.192 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1202.188 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1202.188 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:11:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +953.598 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0011badd9bd735a4483976a47f3e676b630, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.3K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=13.4K, resultSizeEstimate=40.3K) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.5K) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_0011badd9bd735a4483976a47f3e676b630) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0011badd9bd735a4483976a47f3e676b630) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +704.931 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 704.931 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:11:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +136.138 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +126.495 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 126.495 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:11:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +390.617 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=212, resultSizeEstimate=45.0K) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +299.815 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 299.815 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:10:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +360.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.0K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.0K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +273.886 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 273.886 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:10:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2114.005 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_05cf33ce76df1e4d238ae94f175192c35f, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_05cf33ce76df1e4d238ae94f175192c35f) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_05cf33ce76df1e4d238ae94f175192c35f) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1431.609 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1431.609 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:10:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +273.349 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) + │ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (costEstimate=213, resultSizeEstimate=45.2K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +216.615 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 216.615 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:09:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1789.045 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1392.135 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1392.135 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:09:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1594.530 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1480.063 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1480.063 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:09:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +600.781 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Filter + │ ║ │ ║ ├── Compare (<) + │ ║ │ ║ │ Var (name=w2) (bindingState=bound) + │ ║ │ ║ │ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=528.1K) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] + │ ║ │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ ║ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ s: Var (name=n2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=89.4K, joinType=Cartesian product) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=89.4K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter (costEstimate=300, resultSizeEstimate=90.0K) [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_4716c93cf0246c74faeba90d0d3882bc0b50123) + │ ║ Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_4716c93cf0246c74faeba90d0d3882bc0b50123) + } +} + +465.966 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 465.966 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:09:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f801120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +41.108 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +38.622 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.622 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:08:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +58.387 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] + │ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +46.027 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.027 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:08:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +27.599 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_6142c68cbc796351447ba97f7f653b74902e012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ │ ╠══ Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=lineName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ║ │ ValueConstant (value="Line 2") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=lineName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_6142c68cbc796351447ba97f7f653b74902e012345) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_6142c68cbc796351447ba97f7f653b74902e012345) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + ?line a . + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +20.928 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.928 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:08:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +205.615 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=line) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a . + ?section ?line . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +157.242 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 157.242 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:07:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +217.791 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ ║ ├── Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Line 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Line 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + ?line a . + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +163.190 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 163.190 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:07:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +23.101 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.3K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] + │ ║ ║ ├── Filter (costEstimate=3.9K, resultSizeEstimate=1.3K) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=time) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ │ o: Var (name=time) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.6K) [right] + │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +17.850 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 17.850 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:07:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +162.557 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service ?section . + ?section ?line . + ?service a . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +117.360 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 117.360 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:07:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +53.027 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) + │ ║ │ ├── Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="OP 2") + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=29.9K) [right] + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + ?op a . + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +41.055 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.055 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:06:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +195.164 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) + │ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?s1 . + ?s1 ?line . + ?service a . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +164.118 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 164.118 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:06:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +324.246 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +245.462 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 245.462 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:06:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +277.958 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +208.560 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 208.560 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:06:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +60.622 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +46.713 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.713 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:05:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.549 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] + │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?substation . + ?substation ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +32.980 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.980 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:05:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.558 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8K) [left] + │ ║ │ ║ ├── Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +6.649 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.649 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:05:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +437.250 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) + │ ║ ╠══ StatementPattern (costEstimate=6278.4M, resultSizeEstimate=112.1K) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +337.447 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 337.447 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:04:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.903 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +6.845 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.845 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:04:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.726 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=469, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=469) [left] + │ ║ ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=470) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="700"^^) + │ ║ ║ │ ║ ValueConstant (value="800"^^) + │ ║ ║ │ ║ ValueConstant (value="900"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +7.055 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 7.055 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:04:21 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +125.982 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +96.276 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 96.276 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +20.017 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.8K) [left] + │ ║ │ │ ╠══ Filter (costEstimate=237, resultSizeEstimate=468) [left] + │ ║ │ │ ║ ├── Or + │ ║ │ │ ║ │ ╠══ Compare (=) + │ ║ │ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ │ ║ │ ╚══ Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +15.286 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 15.286 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:03:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe01126000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +17.967 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0854c6327d0499ee40459923cd960c8ef603, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) + │ ║ │ ║ Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_0854c6327d0499ee40459923cd960c8ef603) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0854c6327d0499ee40459923cd960c8ef603) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a . + ?substation ?name . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +14.019 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 14.019 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:03:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +7.938 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Filter [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ║ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + ?line a . + FILTER (?cap IN (500, 600, 700)) + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +5.905 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.905 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +458.901 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +366.590 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 366.590 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:02:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +24.053 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Filter [left] + │ ║ ║ ├── Or + │ ║ ║ │ ╠══ Compare (<) + │ ║ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ╚══ Compare (>) + │ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +18.509 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 18.509 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:02:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.931 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=141) [left] + │ ║ ║ │ ╠══ Filter (costEstimate=49, resultSizeEstimate=141) [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=477) [right] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo a . + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +2.993 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.993 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:26 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +40.851 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_42239202f0707f214517b5e6d6080a9974820123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=224, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=26, resultSizeEstimate=666) [right] + │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_42239202f0707f214517b5e6d6080a9974820123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_42239202f0707f214517b5e6d6080a9974820123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +31.997 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.997 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +31.730 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Filter [left] + ║ ├── Not + ║ │ Exists + ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ o: Var (name=disease) (bindingState=bound) + ║ └── Join (JoinIterator) (resultSizeEstimate=2.9K) + ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.1K) [left] + ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (costEstimate=320, resultSizeEstimate=955, indexName=ospc) [left] + ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=31, resultSizeEstimate=955) [right] + ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ ║ │ ║ │ o: Var (name=disease) (bindingState=unbound) + ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + ║ ║ │ ║ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + ║ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + ║ ║ │ s: Var (name=arm) (bindingState=bound) + ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ ║ │ o: Var (name=result) (bindingState=unbound) + ║ ║ └── Filter (costEstimate=34, resultSizeEstimate=1.1K) [right] + ║ ║ ╠══ Compare (>) + ║ ║ ║ Var (name=rate) (bindingState=bound) + ║ ║ ║ ValueConstant (value="0.6"^^) + ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + ║ ║ s: Var (name=result) (bindingState=bound) + ║ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ ║ o: Var (name=rate) (bindingState=unbound) + ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + ║ s: Var (name=arm) (bindingState=bound) + ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ o: Var (name=drug) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) + +SELECT ?drug ?disease WHERE { + ?trial a . + ?trial ?disease . + ?trial ?arm . + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +24.087 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 24.087 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:01:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000380001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +44.317 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + { + { + ?drug a . + ?drug ?mol . + } + } + ?mol ?class . + } + UNION + { + { + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + } + } + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +35.673 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 35.673 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.035 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Filter (costEstimate=40, resultSizeEstimate=1.6K) [right] + │ ║ ║ │ ║ │ ├── Or + │ ║ ║ │ ║ │ │ ╠══ Compare (<) + │ ║ ║ │ ║ │ │ ║ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ │ │ ║ ValueConstant (value="0.05"^^) + │ ║ ║ │ ║ │ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ │ Var (name=p) (bindingState=bound) + │ ║ ║ │ ║ │ │ ValueConstant (value="0.05"^^) + │ ║ ║ │ ║ │ └── StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] + │ ║ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + ?arm ?result . + ?trial ?arm . + ?trial a . + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +9.763 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.763 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +11.545 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_23411109d689ff49b4881b74bf0f40aead89001, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] + │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_23411109d689ff49b4881b74bf0f40aead89001) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_23411109d689ff49b4881b74bf0f40aead89001) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +8.935 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 8.935 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:04 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.551 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) + │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=12, resultSizeEstimate=144) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) (bindingState=bound) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +33.054 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 33.054 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +40.234 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_0212ed57ac60ad9647a688adda29b35e2e59, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_0212ed57ac60ad9647a688adda29b35e2e59) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0212ed57ac60ad9647a688adda29b35e2e59) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +28.829 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 28.829 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +26.643 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +19.691 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 19.691 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +324.096 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_614d870109bb4594e749ae1752c64e3c19b012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, joinType=Cartesian product) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_614d870109bb4594e749ae1752c64e3c19b012345) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_614d870109bb4594e749ae1752c64e3c19b012345) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?drug a . + ?drug ?target . + ?target ?pathway . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +256.919 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 256.919 ms/op + + +# Run complete. Total time: 00:23:41 +``` From e5ddae0561b7bc07b76f1f628aa40965f3ccc65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 07:46:27 +0200 Subject: [PATCH 23/43] wip --- .../sail/lmdb/benchmark/results-2026-04-20.md | 3832 +++++++++-------- 1 file changed, 1950 insertions(+), 1882 deletions(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md index b6df930cde5..6c121e9137a 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20.md @@ -1,94 +1,93 @@ ``` Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 55.256 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 120.961 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 18.391 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 92.607 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 127.652 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 33.326 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 65.502 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 83.912 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 56.223 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 297.461 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 278.110 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.179 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 63.236 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.404 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.107 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 3.585 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 767.601 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.264 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 9.298 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 940.004 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 25.026 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 53.381 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 725.098 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 174.088 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 20.261 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 45.923 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 349.613 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 7.371 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 32204.731 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 493.078 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 91.372 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 114.845 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 207.756 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 238.436 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 158.529 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 2.100 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 144.900 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 59.402 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 3.114 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 246.244 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 5.787 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.752 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 8.150 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 2.692 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 397.706 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1202.188 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 704.931 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 126.495 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 299.815 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 273.886 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1431.609 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 216.615 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1392.135 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1480.063 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 465.966 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 38.622 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 46.027 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.928 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 157.242 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 163.190 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 17.850 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 117.360 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 41.055 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 164.118 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 245.462 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 208.560 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.713 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 32.980 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 6.649 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 337.447 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.845 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 7.055 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 96.276 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 15.286 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.019 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.905 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 366.590 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 18.509 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 2.993 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 31.997 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 24.087 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 35.673 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 9.763 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 8.935 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 33.054 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 28.829 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 19.691 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 256.919 ms/op - +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 51.642 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 131.174 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 87.341 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 87.625 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 197.667 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 41.515 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 64.600 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 82.216 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 58.618 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 305.043 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 346.322 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.136 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 98.569 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.777 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.099 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 4.688 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 731.486 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.374 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 10.024 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 874.961 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 31.329 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 90.552 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 708.021 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 166.127 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 100.388 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 46.993 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 354.255 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 30.031 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 31110.554 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1570.434 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 106.931 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 74.143 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 205.765 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 231.134 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 170.079 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 3.677 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 129.795 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 355.238 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 5.600 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.566 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 6.627 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.391 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 9.062 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 4.758 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 403.742 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1226.737 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 1058.682 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 125.490 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 305.396 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 271.242 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1450.803 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 223.728 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1337.609 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1441.020 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 474.020 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 37.792 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 48.570 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 21.925 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 159.637 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 162.086 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 38.264 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 104.919 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 103.340 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 160.139 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 244.542 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 212.075 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.019 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 53.870 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 89.466 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 335.819 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 123.834 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 34.315 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 93.504 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 107.823 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.677 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.979 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 387.730 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 16.866 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.253 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.167 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 27.848 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 38.642 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 6.773 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 10.949 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 35.563 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 29.450 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 20.363 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 258.264 ms/op ``` ``` @@ -127,11 +126,19 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc010a88a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -70.667 ms/op +Loading theme dataset: MEDICAL_RECORDS +Loading theme dataset: SOCIAL_MEDIA +Loading theme dataset: LIBRARY +Loading theme dataset: ENGINEERING +Loading theme dataset: HIGHLY_CONNECTED +Loading theme dataset: TRAIN +Loading theme dataset: ELECTRICAL_GRID +Loading theme dataset: PHARMA +73.296 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -150,11 +157,11 @@ Projection │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ │ └── Extension [right] │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) - │ ║ │ ║ ├── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] │ ║ │ ║ s: Var (name=enc) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) │ ║ │ ║ o: Var (name=date) (bindingState=unbound) @@ -184,11 +191,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -55.256 ms/op +51.642 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 55.256 ms/op + 51.642 ms/op # JMH version: 1.37 @@ -204,7 +211,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) -# Run progress: 1.14% complete, ETA 00:22:25 +# Run progress: 1.14% complete, ETA 01:47:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -224,11 +231,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -170.031 ms/op +187.068 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -237,7 +244,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) @@ -248,15 +255,15 @@ Projection │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[P, O, S]) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ │ ║ o: Var (name=code) (bindingState=unbound) - │ ║ │ ╚══ Filter + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=code) (bindingState=bound) @@ -267,11 +274,11 @@ Projection │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] - │ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) - │ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=code) (bindingState=unbound) @@ -291,8 +298,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "DX-200" "DX-201" } { { - ?entity a . ?entity ?code . + ?entity a . } } FILTER ((?code = ?target) || (?code = "DX-202")) @@ -313,11 +320,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -120.961 ms/op +131.174 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 120.961 ms/op + 131.174 ms/op # JMH version: 1.37 @@ -333,7 +340,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) -# Run progress: 2.27% complete, ETA 00:22:11 +# Run progress: 2.27% complete, ETA 01:04:05 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -352,11 +359,11 @@ GROUP BY ?practitioner HAVING(COUNT(?enc) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -24.417 ms/op +122.513 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -366,40 +373,40 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0243ac56d94205774ad6bc85131e85622587, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (practitioner) │ ║ LeftJoin │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] - │ ║ │ ║ ├── Filter (costEstimate=420, resultSizeEstimate=1.3K) [left] - │ ║ │ ║ │ ╠══ ListMemberOperator - │ ║ │ ║ │ ║ Var (name=date) (bindingState=bound) - │ ║ │ ║ │ ║ ValueConstant (value="2024-01-01"^^) - │ ║ │ ║ │ ║ ValueConstant (value="2024-02-01"^^) - │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) - │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) - │ ║ │ ║ │ o: Var (name=date) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] │ ║ │ ║ s: Var (name=enc) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) - │ ║ │ ║ o: Var (name=practitioner) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] - │ ║ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=date) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ │ ValueConstant (value="2024-02-01"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] │ ║ s: Var (name=enc) (bindingState=bound) │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ GroupElem (_anon_having_0243ac56d94205774ad6bc85131e85622587) + │ ║ GroupElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0243ac56d94205774ad6bc85131e85622587) + │ ╚══ ExtensionElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -407,10 +414,10 @@ Projection Var (name=enc) (bindingState=unbound) SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { - ?enc ?date . - FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) ?enc ?practitioner . ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) OPTIONAL { ?enc ?cond . } @@ -418,11 +425,11 @@ SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?practitioner HAVING (COUNT(?enc) > 0) -18.391 ms/op +87.341 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 18.391 ms/op + 87.341 ms/op # JMH version: 1.37 @@ -438,7 +445,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) -# Run progress: 3.41% complete, ETA 00:21:53 +# Run progress: 3.41% complete, ETA 00:49:31 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -460,11 +467,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -118.535 ms/op +123.707 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -484,15 +491,15 @@ Projection │ ║ │ └── Extension [right] │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] - │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ ║ │ ║ o: Var (name=_anon_path_207d96867fdaaf94548a600cb9180d8bc5501, anonymous) (bindingState=unbound) - │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] - │ ║ │ ║ │ s: Var (name=_anon_path_207d96867fdaaf94548a600cb9180d8bc5501, anonymous) (bindingState=bound) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[P, S]) [right] │ ║ │ ║ s: Var (name=obs) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) │ ║ │ ║ o: Var (name=value) (bindingState=unbound) @@ -529,11 +536,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -92.607 ms/op +87.625 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 92.607 ms/op + 87.625 ms/op # JMH version: 1.37 @@ -549,7 +556,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) -# Run progress: 4.55% complete, ETA 00:21:39 +# Run progress: 4.55% complete, ETA 00:42:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -568,11 +575,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -171.665 ms/op +286.625 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -586,28 +593,28 @@ Projection │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ │ o: Var (name=obs) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=33.1K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=31.7K) [left] - │ ║ ║ │ ╠══ Filter (costEstimate=205, resultSizeEstimate=42.0K) [left] - │ ║ ║ │ ║ ├── Or - │ ║ ║ │ ║ │ ╠══ Compare (=) - │ ║ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) - │ ║ ║ │ ║ │ ║ ValueConstant (value="DX-200") - │ ║ ║ │ ║ │ ╚══ Compare (=) - │ ║ ║ │ ║ │ Var (name=code) (bindingState=bound) - │ ║ ║ │ ║ │ ValueConstant (value="DX-201") - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=66.5K) - │ ║ ║ │ ║ s: Var (name=cond) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ ║ │ ║ o: Var (name=code) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [right] - │ ║ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ ║ ║ │ o: Var (name=cond) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=12.5K, resultSizeEstimate=25.0K) [right] - │ ║ ║ s: Var (name=enc) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="DX-200") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=code) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="DX-201") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ s: Var (name=cond) (bindingState=bound) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) (bindingState=unbound) │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] │ ║ s: Var (name=enc) (bindingState=bound) │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) @@ -620,10 +627,10 @@ Projection Var (name=enc) (bindingState=unbound) SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . ?cond ?code . FILTER ((?code = "DX-200") || (?code = "DX-201")) - ?enc ?cond . - ?enc a . OPTIONAL { ?enc ?practitioner . } @@ -632,11 +639,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } } -127.652 ms/op +197.667 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 127.652 ms/op + 197.667 ms/op # JMH version: 1.37 @@ -652,7 +659,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) -# Run progress: 5.68% complete, ETA 00:21:25 +# Run progress: 5.68% complete, ETA 00:37:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -672,51 +679,51 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -43.342 ms/op +61.595 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter - │ ║ ├── Not - │ ║ │ Exists - │ ║ │ StatementPattern (resultSizeEstimate=49.8K) - │ ║ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) - │ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] - │ ║ ║ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K) [left] - │ ║ ║ │ ║ │ ╠══ ListMemberOperator - │ ║ ║ │ ║ │ ║ Var (name=value) (bindingState=bound) - │ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) - │ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) - │ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) - │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) - │ ║ ║ │ ║ │ s: Var (name=obs) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) - │ ║ ║ │ ║ │ o: Var (name=value) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] - │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ ║ │ ║ o: Var (name=obs) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] - │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ ║ │ o: Var (name=enc) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] - │ ║ ║ s: Var (name=patient) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ │ ╠══ ListMemberOperator + │ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ │ o: Var (name=enc) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=patient) (bindingState=bound) @@ -730,17 +737,17 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { ?enc ?obs . ?patient ?enc . ?patient a . - VALUES ?limit { 55 } FILTER NOT EXISTS { ?enc ?cond . } + VALUES ?limit { 55 } } -33.326 ms/op +41.515 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 33.326 ms/op + 41.515 ms/op # JMH version: 1.37 @@ -756,7 +763,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) -# Run progress: 6.82% complete, ETA 00:21:09 +# Run progress: 6.82% complete, ETA 00:34:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -780,11 +787,11 @@ GROUP BY ?patient HAVING(COUNT(?med) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -69.004 ms/op +68.068 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -794,7 +801,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_40986d1530202c24961b195abcd7bd1a8760123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (patient) │ ║ Filter @@ -818,13 +825,13 @@ Projection │ ║ │ o: Var (name=med) (bindingState=unbound) │ ║ └── ExtensionElem (optMed) │ ║ Var (name=med) (bindingState=bound) - │ ║ GroupElem (_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345) + │ ║ GroupElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) │ ║ Count │ ║ Var (name=med) (bindingState=bound) │ ║ GroupElem (medCount) │ ║ Count (Distinct) │ ║ Var (name=med) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_698ca27ecf45e2346fc98fca9ec6d6071ab012345) + │ ╚══ ExtensionElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) │ Count │ Var (name=med) (bindingState=unbound) └── ExtensionElem (medCount) @@ -848,11 +855,11 @@ SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { GROUP BY ?patient HAVING (COUNT(?med) > 0) -65.502 ms/op +64.600 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 65.502 ms/op + 64.600 ms/op # JMH version: 1.37 @@ -868,7 +875,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) -# Run progress: 7.95% complete, ETA 00:20:53 +# Run progress: 7.95% complete, ETA 00:32:08 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -886,11 +893,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -113.675 ms/op +119.731 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -898,18 +905,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ ║ o: Var (name=med) (bindingState=bound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) - │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ │ Var (name=patient) + │ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ Var (name=med) + │ ║ │ │ ) │ ║ │ │ s: Var (name=med) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) - │ ║ │ └── Filter (costEstimate=236, resultSizeEstimate=55.9K) [right] + │ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], plannedLookupComponents=[O, P, S]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=code) (bindingState=bound) @@ -951,11 +963,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } } -83.912 ms/op +82.216 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 83.912 ms/op + 82.216 ms/op # JMH version: 1.37 @@ -971,7 +983,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) -# Run progress: 9.09% complete, ETA 00:20:37 +# Run progress: 9.09% complete, ETA 00:30:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -995,11 +1007,11 @@ GROUP BY ?patient HAVING(COUNT(?enc) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -78.805 ms/op +86.699 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1009,7 +1021,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_090152887b79502248e594363bbef59f0ff7, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (patient) │ ║ Filter @@ -1029,23 +1041,23 @@ Projection │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ ╚══ Extension [right] │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) - │ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] │ ║ │ ║ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ o: Var (name=practitioner) (bindingState=unbound) │ ║ └── ExtensionElem (optPractitioner) │ ║ Var (name=practitioner) (bindingState=bound) - │ ║ GroupElem (_anon_having_090152887b79502248e594363bbef59f0ff7) + │ ║ GroupElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_090152887b79502248e594363bbef59f0ff7) + │ ╚══ ExtensionElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -1064,11 +1076,11 @@ SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?patient HAVING (COUNT(?enc) >= 2) -56.223 ms/op +58.618 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 56.223 ms/op + 58.618 ms/op # JMH version: 1.37 @@ -1084,7 +1096,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) -# Run progress: 10.23% complete, ETA 00:20:21 +# Run progress: 10.23% complete, ETA 00:28:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1104,11 +1116,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -410.572 ms/op +428.822 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1117,14 +1129,14 @@ Projection ├── Group () │ ╠══ Difference │ ║ ├── LeftJoin - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K, joinType=Cartesian product) [left] - │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.6K) [left] - │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.4K) [left] - │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ │ ║ │ ║ └── Filter (costEstimate=259, resultSizeEstimate=66.9K) [right] + │ ║ │ ║ │ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.6K) [right] │ ║ │ ║ │ ║ ╠══ ListMemberOperator │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") @@ -1183,11 +1195,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } } -297.461 ms/op +305.043 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 297.461 ms/op + 305.043 ms/op # JMH version: 1.37 @@ -1203,7 +1215,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) -# Run progress: 11.36% complete, ETA 00:20:07 +# Run progress: 11.36% complete, ETA 00:27:44 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1224,11 +1236,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f801121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -372.416 ms/op +506.120 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1242,41 +1254,44 @@ Projection │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ Not │ ║ │ Exists - │ ║ │ Filter - │ ║ │ ├── Compare (=) - │ ║ │ │ Var (name=c) (bindingState=bound) - │ ║ │ │ ValueConstant (value="MED-1005") - │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=16.4K) - │ ║ │ ╠══ StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] - │ ║ │ ║ s: Var (name=patient) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) - │ ║ │ ║ o: Var (name=m2) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] + │ ║ │ Join (JoinIterator) (resultSizeEstimate=8.0K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ o: Var (name=m2) (bindingState=unbound) + │ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1005") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) + │ ║ │ Var (name=c) + │ ║ │ ValueConstant (value="MED-1005") + │ ║ │ , plannedLookupComponents=[P, S]) │ ║ │ s: Var (name=m2) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=c) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] │ ║ ║ │ s: Var (name=patient) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ ║ │ o: Var (name=med) (bindingState=unbound) │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] - │ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[P, S]) [right] │ ║ ║ s: Var (name=enc) (bindingState=bound) │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ ║ o: Var (name=obs) (bindingState=unbound) @@ -1308,11 +1323,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) } -278.110 ms/op +346.322 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 278.110 ms/op + 346.322 ms/op # JMH version: 1.37 @@ -1328,7 +1343,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) -# Run progress: 12.50% complete, ETA 00:19:51 +# Run progress: 12.50% complete, ETA 00:26:43 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1353,11 +1368,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.053 ms/op +3.093 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1372,18 +1387,21 @@ Projection │ ║ │ ║ ValueConstant (value="user1") │ ║ │ ║ ValueConstant (value="user2") │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] - │ ║ │ │ ╠══ Filter [left] - │ ║ │ │ ║ ├── Compare (!=) - │ ║ │ │ ║ │ Var (name=u) (bindingState=bound) - │ ║ │ │ ║ │ Var (name=v) (bindingState=bound) - │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ │ s: Var (name=u) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ Var (name=v) (bindingState=bound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ │ │ │ Var (name=u) + │ ║ │ │ │ Var (name=v) + │ ║ │ │ │ ) + │ ║ │ │ │ s: Var (name=u) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ │ s: Var (name=u) (bindingState=bound) │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) @@ -1402,19 +1420,10 @@ Projection Var (name=pair) (bindingState=unbound) SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { - VALUES (?u ?v) { - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - } - FILTER (?u != ?v) + VALUES ?v { } ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) OPTIONAL { ?u ?optName . } @@ -1422,11 +1431,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) } -2.179 ms/op +2.136 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.179 ms/op + 2.136 ms/op # JMH version: 1.37 @@ -1442,7 +1451,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) -# Run progress: 13.64% complete, ETA 00:19:35 +# Run progress: 13.64% complete, ETA 00:25:48 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1475,11 +1484,11 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -80.161 ms/op +145.759 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1487,73 +1496,73 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter - │ ║ │ ╠══ Exists - │ ║ │ ║ Filter - │ ║ │ ║ ╠══ Or - │ ║ │ ║ ║ ├── Compare (=) - │ ║ │ ║ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ ║ │ ValueConstant (value="user0") - │ ║ │ ║ ║ └── Compare (=) - │ ║ │ ║ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ ║ ValueConstant (value="user1") - │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) - │ ║ │ ║ s: Var (name=u1) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3364465105415278E17M) [left] - │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.297148555399E11M) [left] - │ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6467671.6M) [left] - │ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=45.0M) [left] - │ ║ │ │ ║ │ ║ ├── Filter [left] - │ ║ │ │ ║ │ ║ │ ╠══ And - │ ║ │ │ ║ │ ║ │ ║ ├── Compare (!=) - │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ ║ └── Compare (!=) - │ ║ │ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.3M) - │ ║ │ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.3M) [left] - │ ║ │ │ ║ │ ║ │ │ ╠══ Filter [left] - │ ║ │ │ ║ │ ║ │ │ ║ ├── Compare (!=) - │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u1) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ │ ║ │ Var (name=u2) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ │ │ ║ │ ║ │ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ │ │ ║ │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ │ ║ │ ║ │ │ s: Var (name=u1) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ ║ │ ║ │ │ o: Var (name=u2) (bindingState=bound) - │ ║ │ │ ║ │ ║ │ └── BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ │ ║ │ ║ s: Var (name=u1) (bindingState=bound) - │ ║ │ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ ║ │ ║ o: Var (name=u3) (bindingState=bound) - │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ │ ║ │ s: Var (name=u2) (bindingState=bound) - │ ║ │ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ ║ │ o: Var (name=u1) (bindingState=bound) - │ ║ │ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ │ ║ s: Var (name=u3) (bindingState=bound) - │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ ║ o: Var (name=u1) (bindingState=bound) - │ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ │ s: Var (name=u2) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ o: Var (name=u3) (bindingState=bound) - │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ s: Var (name=u3) (bindingState=bound) - │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ │ ├── Exists + │ ║ │ │ Filter + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="user0") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="user1") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] + │ ║ │ ║ │ ║ ├── Filter [left] + │ ║ │ ║ │ ║ │ ╠══ And + │ ║ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ └── Compare (!=) + │ ║ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.2K) + │ ║ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ │ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ │ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ │ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ ║ │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) │ ║ └── Extension │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ s: Var (name=u1) (bindingState=unbound) │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ o: Var (name=u1) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_45817ef2a195b893433a80fa43434c7124b00123) + │ ║ ╚══ ExtensionElem (_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) │ ║ Var (name=u1) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -1577,8 +1586,8 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { FILTER (?u1 != ?u2) ?u1 ?u2 . VALUES ?u3 { } - FILTER ((?u2 != ?u3) && (?u1 != ?u3)) ?u1 ?u3 . + FILTER ((?u2 != ?u3) && (?u1 != ?u3)) ?u2 ?u1 . ?u3 ?u1 . ?u2 ?u3 . @@ -1589,15 +1598,15 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } MINUS { ?u1 ?u1 . - BIND(?u1 AS ?_anon_path_45817ef2a195b893433a80fa43434c7124b00123) + BIND(?u1 AS ?_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) } } -63.236 ms/op +98.569 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 63.236 ms/op + 98.569 ms/op # JMH version: 1.37 @@ -1613,7 +1622,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) -# Run progress: 14.77% complete, ETA 00:19:19 +# Run progress: 14.77% complete, ETA 00:24:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1640,11 +1649,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.363 ms/op +4.135 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1656,24 +1665,32 @@ Projection │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ And - │ ║ ║ │ ║ ├── Compare (!=) - │ ║ ║ │ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ └── Exists - │ ║ ║ │ ║ StatementPattern - │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] + │ ║ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ , Compare (!=) + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) @@ -1686,37 +1703,24 @@ Projection Var (name=u) (bindingState=unbound) SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { - VALUES (?u ?v) { - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - } - FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + VALUES ?v { } ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER EXISTS { + ?v ?u . + } OPTIONAL { ?v ?optName . } FILTER (?optName != "") } -2.404 ms/op +2.777 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.404 ms/op + 2.777 ms/op # JMH version: 1.37 @@ -1732,7 +1736,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) -# Run progress: 15.91% complete, ETA 00:19:03 +# Run progress: 15.91% complete, ETA 00:24:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1760,11 +1764,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.783 ms/op +3.017 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1774,7 +1778,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (u) │ ║ Filter @@ -1785,18 +1789,21 @@ Projection │ ║ │ ValueConstant (value="user5") │ ║ │ ValueConstant (value="user6") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3M) [left] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) │ ║ │ s: Var (name=u) (bindingState=bound) @@ -1804,13 +1811,13 @@ Projection │ ║ │ o: Var (name=optName) (bindingState=unbound) │ ║ └── ExtensionElem (optAlias) │ ║ Var (name=optName) (bindingState=bound) - │ ║ GroupElem (_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345) + │ ║ GroupElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_6197144f4c56a7e2e43e4a0cbdccd893a6738012345) + │ ╚══ ExtensionElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (degree) @@ -1818,26 +1825,10 @@ Projection Var (name=v) (bindingState=unbound) SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { - VALUES (?u ?v) { - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - } - FILTER (?u != ?v) + VALUES ?v { } ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) OPTIONAL { ?u ?optName . BIND(?optName AS ?optAlias) @@ -1847,11 +1838,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 3) -2.107 ms/op +2.099 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.107 ms/op + 2.099 ms/op # JMH version: 1.37 @@ -1867,7 +1858,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) -# Run progress: 17.05% complete, ETA 00:18:47 +# Run progress: 17.05% complete, ETA 00:23:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1896,11 +1887,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.698 ms/op +6.842 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1912,13 +1903,13 @@ Projection │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350) [left] - │ ║ ║ ├── Filter [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] │ ║ ║ │ ╠══ Compare (!=) │ ║ ║ │ ║ Var (name=u) (bindingState=bound) │ ║ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70) - │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [left] + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] │ ║ ║ │ s: Var (name=u) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) @@ -1931,7 +1922,7 @@ Projection │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_path_701410582c3446f344b159fd0ded0c7fda1090123456) + │ ║ ║ ║ └── ExtensionElem (_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) │ ║ ║ ║ Var (name=u) (bindingState=bound) │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] @@ -1952,7 +1943,7 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { VALUES ?u { } FILTER NOT EXISTS { ?u ?u . - BIND(?u AS ?_anon_path_701410582c3446f344b159fd0ded0c7fda1090123456) + BIND(?u AS ?_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) } OPTIONAL { ?v ?optName . @@ -1960,11 +1951,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName != "") } -3.585 ms/op +4.688 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.585 ms/op + 4.688 ms/op # JMH version: 1.37 @@ -1980,7 +1971,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) -# Run progress: 18.18% complete, ETA 00:18:32 +# Run progress: 18.18% complete, ETA 00:22:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2011,11 +2002,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1038.418 ms/op +1030.599 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2082,11 +2073,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) } -767.601 ms/op +731.486 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 767.601 ms/op + 731.486 ms/op # JMH version: 1.37 @@ -2102,7 +2093,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) -# Run progress: 19.32% complete, ETA 00:18:19 +# Run progress: 19.32% complete, ETA 00:22:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2134,11 +2125,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 5) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.908 ms/op +3.483 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2148,7 +2139,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="5"^^) │ ║ └── Group (u) │ ║ Filter @@ -2156,29 +2147,32 @@ Projection │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.2M) [left] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ s: Var (name=u) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=u) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678) + │ ║ GroupElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (connections) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_95961b16bf41b5f294cbabd36f093969269ed012345678) + │ ╚══ ExtensionElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (connections) @@ -2186,46 +2180,10 @@ Projection Var (name=v) (bindingState=unbound) SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { - VALUES (?u ?v) { - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - } - FILTER (?u != ?v) + VALUES ?v { } ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) OPTIONAL { ?u ?optName . } @@ -2234,11 +2192,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 5) -2.264 ms/op +2.374 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.264 ms/op + 2.374 ms/op # JMH version: 1.37 @@ -2254,7 +2212,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) -# Run progress: 20.45% complete, ETA 00:18:03 +# Run progress: 20.45% complete, ETA 00:21:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2286,11 +2244,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f0001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -13.823 ms/op +14.313 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2308,30 +2266,38 @@ Projection │ ║ │ ValueConstant (value="user17") │ ║ └── LeftJoin │ ║ ╠══ Difference [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.2M) - │ ║ ║ │ ╠══ Filter [left] - │ ║ ║ │ ║ ├── And - │ ║ ║ │ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ │ ╚══ Exists - │ ║ ║ │ ║ │ StatementPattern - │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ s: Var (name=u) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] + │ ║ ║ │ │ ├── Compare (!=) + │ ║ ║ │ │ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ │ │ Var (name=v) (bindingState=bound) + │ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists + │ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ │ Var (name=v) + │ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ Var (name=u) + │ ║ ║ │ │ , Compare (!=) + │ ║ ║ │ │ Var (name=u) + │ ║ ║ │ │ Var (name=v) + │ ║ ║ │ │ ) + │ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] │ ║ ║ └── Extension │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) - │ ║ ║ ╚══ ExtensionElem (_anon_path_9136c0ff928e96324574a82809a0327e1ed1012345678) + │ ║ ║ ╚══ ExtensionElem (_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) │ ║ ║ Var (name=v) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) @@ -2345,49 +2311,16 @@ Projection Var (name=u) (bindingState=unbound) SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { - VALUES (?u ?v) { - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - ( ) - } - FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + VALUES ?v { } ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER EXISTS { + ?v ?u . + } MINUS { ?v ?v . - BIND(?v AS ?_anon_path_9136c0ff928e96324574a82809a0327e1ed1012345678) + BIND(?v AS ?_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) } OPTIONAL { ?v ?optName . @@ -2395,11 +2328,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) } -9.298 ms/op +10.024 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 9.298 ms/op + 10.024 ms/op # JMH version: 1.37 @@ -2415,7 +2348,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) -# Run progress: 21.59% complete, ETA 00:17:47 +# Run progress: 21.59% complete, ETA 00:21:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2435,11 +2368,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffe01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1199.690 ms/op +1192.679 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2454,9 +2387,9 @@ Projection │ ║ │ ValueConstant (value="user2") │ ║ └── LeftJoin │ ║ ╠══ Extension [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185314.6M) - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) @@ -2492,11 +2425,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optName IN ("user0", "user1", "user2")) } -940.004 ms/op +874.961 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 940.004 ms/op + 874.961 ms/op # JMH version: 1.37 @@ -2512,7 +2445,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) -# Run progress: 22.73% complete, ETA 00:17:36 +# Run progress: 22.73% complete, ETA 00:20:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2537,11 +2470,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -35.496 ms/op +44.765 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2553,39 +2486,39 @@ Projection │ ║ │ Var (name=optAlias) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=20595.2M) [left] - │ ║ ║ ├── Filter [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=d) (bindingState=bound) - │ ║ ║ │ ║ Var (name=a) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=135.8M) - │ ║ ║ │ ├── Filter [left] - │ ║ ║ │ │ ╠══ Compare (!=) - │ ║ ║ │ │ ║ Var (name=b) (bindingState=bound) - │ ║ ║ │ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=945) - │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=105) [left] - │ ║ ║ │ │ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ │ │ │ ╚══ Filter [right] - │ ║ ║ │ │ │ ├── Compare (!=) - │ ║ ║ │ │ │ │ Var (name=a) (bindingState=bound) - │ ║ ║ │ │ │ │ Var (name=b) (bindingState=bound) - │ ║ ║ │ │ │ └── StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) - │ ║ ║ │ │ │ s: Var (name=a) (bindingState=unbound) - │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ │ o: Var (name=b) (bindingState=bound) - │ ║ ║ │ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) - │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ o: Var (name=c) (bindingState=unbound) - │ ║ ║ │ └── Filter [right] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ Var (name=d) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) - │ ║ ║ │ s: Var (name=c) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=d) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ║ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound) │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] │ ║ ║ s: Var (name=d) (bindingState=bound) │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) @@ -2621,11 +2554,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optAlias != "") } -25.026 ms/op +31.329 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 25.026 ms/op + 31.329 ms/op # JMH version: 1.37 @@ -2641,7 +2574,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) -# Run progress: 23.86% complete, ETA 00:17:20 +# Run progress: 23.86% complete, ETA 00:20:25 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2690,11 +2623,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -72.010 ms/op +130.795 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2724,56 +2657,56 @@ Projection │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.67849993939E10M) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=395031.6M) [left] - │ ║ ║ │ ╠══ Filter [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] │ ║ ║ │ ║ ├── Compare (!=) - │ ║ ║ │ ║ │ Var (name=d) (bindingState=bound) - │ ║ ║ │ ║ │ Var (name=e) (bindingState=bound) - │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=11126.7M) - │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=11126.7M) [left] - │ ║ ║ │ ║ ║ ├── Filter [left] - │ ║ ║ │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ ║ │ ║ Var (name=d) (bindingState=bound) - │ ║ ║ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=250.8M) - │ ║ ║ │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=250.8M) [left] - │ ║ ║ │ ║ ║ │ │ ╠══ Filter [left] - │ ║ ║ │ ║ ║ │ │ ║ ├── And - │ ║ ║ │ ║ ║ │ │ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=a) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ │ ╚══ Compare (!=) - │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ │ Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=3.6M) - │ ║ ║ │ ║ ║ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.6M) [left] - │ ║ ║ │ ║ ║ │ │ ║ ║ ├── Filter [left] - │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=a) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00) - │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ ║ ║ │ │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ ║ ║ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ ║ ║ │ │ ║ ║ s: Var (name=a) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ ║ │ │ ║ ║ o: Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ ║ ╚══ BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ ║ │ ║ ║ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ ║ ║ │ │ s: Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ ║ │ │ o: Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ ║ │ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ ║ ║ s: Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ ║ o: Var (name=d) (bindingState=bound) - │ ║ ║ │ ║ ╚══ BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ s: Var (name=d) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] + │ ║ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) + │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ │ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ │ │ ║ ├── Compare (!=) + │ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) + │ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ │ │ ║ ║ ├── Filter [left] + │ ║ ║ │ │ │ ║ ║ │ ╠══ And + │ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) + │ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] │ ║ ║ s: Var (name=e) (bindingState=bound) │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) @@ -2835,11 +2768,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) } -53.381 ms/op +90.552 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 53.381 ms/op + 90.552 ms/op # JMH version: 1.37 @@ -2855,7 +2788,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 0) -# Run progress: 25.00% complete, ETA 00:17:04 +# Run progress: 25.00% complete, ETA 00:19:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2877,11 +2810,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -891.712 ms/op +1015.073 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2900,11 +2833,11 @@ Projection │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) │ ║ │ └── Extension [right] │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) - │ ║ │ ║ ├── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[P, S]) [right] │ ║ │ ║ s: Var (name=copy) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) @@ -2934,11 +2867,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -725.098 ms/op +708.021 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 725.098 ms/op + 708.021 ms/op # JMH version: 1.37 @@ -2954,7 +2887,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 1) -# Run progress: 26.14% complete, ETA 00:16:50 +# Run progress: 26.14% complete, ETA 00:19:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2974,11 +2907,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -219.939 ms/op +236.397 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2987,7 +2920,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -2998,15 +2931,15 @@ Projection │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter + │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -3017,14 +2950,14 @@ Projection │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] - │ ║ │ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ │ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] + │ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) - │ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) - │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) @@ -3052,8 +2985,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "Member 1" "Member 2" } { { - ?entity a . ?entity ?name . + ?entity a . } } FILTER ((?name = ?target) || (?name = "Member 3")) @@ -3063,11 +2996,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -174.088 ms/op +166.127 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 174.088 ms/op + 166.127 ms/op # JMH version: 1.37 @@ -3083,7 +3016,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 2) -# Run progress: 27.27% complete, ETA 00:16:35 +# Run progress: 27.27% complete, ETA 00:19:10 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3102,11 +3035,11 @@ GROUP BY ?author HAVING(COUNT(?book) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -26.787 ms/op +144.325 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3116,36 +3049,36 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_4847357f353acef49b4b29328e6c6fcfa510123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ LeftJoin │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] - │ ║ │ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] - │ ║ │ ║ ├── ListMemberOperator - │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="Author 1") - │ ║ │ ║ │ ValueConstant (value="Author 2") - │ ║ │ ║ │ ValueConstant (value="Author 3") - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) - │ ║ │ ║ s: Var (name=author) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=40.3K) [right] - │ ║ │ s: Var (name=author) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=authorName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Author 1") + │ ║ │ │ ValueConstant (value="Author 2") + │ ║ │ │ ValueConstant (value="Author 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=authorName) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] │ ║ s: Var (name=book) (bindingState=unbound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) │ ║ o: Var (name=author) (bindingState=bound) - │ ║ GroupElem (_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567) + │ ║ GroupElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) │ ║ Count │ ║ Var (name=book) (bindingState=bound) │ ║ GroupElem (bookCount) │ ║ Count (Distinct) │ ║ Var (name=book) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_8842278b9839fd994d4cb7b826b776828a6501234567) + │ ╚══ ExtensionElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) │ Count │ Var (name=book) (bindingState=unbound) └── ExtensionElem (bookCount) @@ -3153,9 +3086,9 @@ Projection Var (name=book) (bindingState=unbound) SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . ?author ?authorName . FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) - ?author a . OPTIONAL { ?book ?author . } @@ -3163,11 +3096,11 @@ SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { GROUP BY ?author HAVING (COUNT(?book) > 0) -20.261 ms/op +100.388 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 20.261 ms/op + 100.388 ms/op # JMH version: 1.37 @@ -3183,7 +3116,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 3) -# Run progress: 28.41% complete, ETA 00:16:19 +# Run progress: 28.41% complete, ETA 00:18:46 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3204,11 +3137,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -62.966 ms/op +74.725 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3222,14 +3155,14 @@ Projection │ ║ │ ║ ValueConstant (value="2024-01-10"^^) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P, O]) [right] │ ║ │ │ s: Var (name=loan) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ │ │ o: Var (name=member) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) │ ║ │ └── Extension [right] │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) │ ║ │ ║ s: Var (name=loan) (bindingState=bound) @@ -3255,8 +3188,8 @@ Projection Var (name=loan) (bindingState=unbound) SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { - ?loan a . ?loan ?member . + ?loan a . OPTIONAL { ?loan ?due . BIND(?due AS ?optDue) @@ -3268,11 +3201,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } } -45.923 ms/op +46.993 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 45.923 ms/op + 46.993 ms/op # JMH version: 1.37 @@ -3288,7 +3221,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 4) -# Run progress: 29.55% complete, ETA 00:16:03 +# Run progress: 29.55% complete, ETA 00:18:22 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3306,11 +3239,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -445.634 ms/op +516.836 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3325,11 +3258,11 @@ Projection │ ║ │ o: Var (name=copy) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] - │ ║ ║ ├── StatementPattern (costEstimate=64.4K, resultSizeEstimate=128.9K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ s: Var (name=book) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ ║ └── Filter (costEstimate=361, resultSizeEstimate=130.6K) [right] + │ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], plannedLookupComponents=[S, P, O]) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=title) (bindingState=bound) @@ -3364,11 +3297,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -349.613 ms/op +354.255 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 349.613 ms/op + 354.255 ms/op # JMH version: 1.37 @@ -3384,7 +3317,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 5) -# Run progress: 30.68% complete, ETA 00:15:48 +# Run progress: 30.68% complete, ETA 00:18:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3402,18 +3335,18 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.226 ms/op +43.533 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists │ ║ │ Filter @@ -3424,22 +3357,32 @@ Projection │ ║ │ s: Var (name=loan) (bindingState=bound) │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ o: Var (name=due) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=511, joinType=Cartesian product) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=511) [left] - │ ║ ║ ├── Filter (costEstimate=1.5K, resultSizeEstimate=507) [left] - │ ║ ║ │ ╠══ ListMemberOperator - │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) - │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) - │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) - │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] - │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=due) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ Var (name=loan) + │ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ ║ Var (name=due) + │ ║ ║ ) + │ ║ ║ s: Var (name=loan) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Filter (resultSizeEstimate=511, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], plannedLookupComponents=[S, P, O]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=loanDate) (bindingState=bound) + │ ║ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ ValueConstant (value="2024-01-02"^^) + │ ║ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ o: Var (name=loanDate) (bindingState=unbound) │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=loan) (bindingState=bound) @@ -3448,21 +3391,21 @@ Projection Var (name=loan) (bindingState=unbound) SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^ } + ?loan a . ?loan ?loanDate . FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) - ?loan a . - VALUES ?threshold { "2024-01-01"^^ } FILTER NOT EXISTS { ?loan ?due . FILTER (?due < ?threshold) } } -7.371 ms/op +30.031 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 7.371 ms/op + 30.031 ms/op # JMH version: 1.37 @@ -3478,7 +3421,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 6) -# Run progress: 31.82% complete, ETA 00:15:32 +# Run progress: 31.82% complete, ETA 00:17:37 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3502,11 +3445,11 @@ GROUP BY ?member HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -33668.195 ms/op +34773.242 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3516,7 +3459,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_51cd5cef888879412abff09f76f00ca68401234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (member) │ ║ Filter @@ -3526,14 +3469,14 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[O, P, S]) [right] │ ║ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) │ ║ ║ s: Var (name=member) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) @@ -3545,13 +3488,13 @@ Projection │ ║ │ o: Var (name=copy) (bindingState=unbound) │ ║ └── ExtensionElem (optCopy) │ ║ Var (name=copy) (bindingState=bound) - │ ║ GroupElem (_anon_having_51cd5cef888879412abff09f76f00ca68401234) + │ ║ GroupElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_51cd5cef888879412abff09f76f00ca68401234) + │ ╚══ ExtensionElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -3560,8 +3503,8 @@ Projection SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { { - ?loan a . ?loan ?member . + ?loan a . } UNION { @@ -3576,11 +3519,11 @@ SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?member HAVING (COUNT(?loan) > 0) -32204.731 ms/op +31110.554 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 32204.731 ms/op + 31110.554 ms/op # JMH version: 1.37 @@ -3596,7 +3539,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 7) -# Run progress: 32.95% complete, ETA 00:17:00 +# Run progress: 32.95% complete, ETA 00:18:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3615,11 +3558,11 @@ SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000600011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -686.701 ms/op +2262.774 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3627,34 +3570,39 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── Exists - │ ║ │ ║ │ StatementPattern (resultSizeEstimate=386.3K) - │ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) - │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) - │ ║ │ ║ ╠══ Filter (costEstimate=1.1K, resultSizeEstimate=2.3K) [left] - │ ║ │ ║ ║ ├── Or - │ ║ │ ║ ║ │ ╠══ Compare (=) - │ ║ │ ║ ║ │ ║ Var (name=branchName) (bindingState=bound) - │ ║ │ ║ ║ │ ║ ValueConstant (value="Branch 0") - │ ║ │ ║ ║ │ ╚══ Compare (=) - │ ║ │ ║ ║ │ Var (name=branchName) (bindingState=bound) - │ ║ │ ║ ║ │ ValueConstant (value="Branch 1") - │ ║ │ ║ ║ └── StatementPattern (resultSizeEstimate=45.3K) - │ ║ │ ║ ║ s: Var (name=branch) (bindingState=unbound) - │ ║ │ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ ║ ║ o: Var (name=branchName) (bindingState=unbound) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] - │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) - │ ║ │ ║ o: Var (name=branch) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=386.3K) [right] - │ ║ │ s: Var (name=copy) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] + │ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ │ ║ Var (name=copy) + │ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ │ ║ ) + │ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=branchName) (bindingState=unbound) │ ║ └── Filter (new scope) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── Str @@ -3672,24 +3620,24 @@ Projection Var (name=copy) (bindingState=unbound) SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy ?branch . + ?copy a . ?branch ?branchName . FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) - ?copy ?branch . FILTER EXISTS { ?copy a . } - ?copy a . MINUS { ?copy ?branch . FILTER (CONTAINS(STR(?branch), "branch/0")) } } -493.078 ms/op +1570.434 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 493.078 ms/op + 1570.434 ms/op # JMH version: 1.37 @@ -3705,7 +3653,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 8) -# Run progress: 34.09% complete, ETA 00:16:40 +# Run progress: 34.09% complete, ETA 00:18:37 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3726,11 +3674,11 @@ GROUP BY ?author HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -119.142 ms/op +154.097 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3740,7 +3688,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ Filter @@ -3751,50 +3699,50 @@ Projection │ ║ │ ValueConstant (value="Member 3") │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=135.9K) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.8K) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.6K) [left] - │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] - │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] - │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=10.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) - │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] - │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=207, resultSizeEstimate=386.3K) [right] - │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) - │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=622, resultSizeEstimate=386.3K) [right] - │ ║ ║ │ ║ s: Var (name=copy) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) - │ ║ ║ │ ║ o: Var (name=branch) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=128.9K) [right] + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] │ ║ ║ │ s: Var (name=book) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=507, resultSizeEstimate=257.2K) [right] - │ ║ ║ s: Var (name=book) (bindingState=bound) - │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) - │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ o: Var (name=author) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] │ ║ s: Var (name=member) (bindingState=bound) │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13) + │ ║ GroupElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_06212e72d0a3acc243dea8f5c46da07c3f13) + │ ╚══ ExtensionElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -3802,13 +3750,13 @@ Projection Var (name=loan) (bindingState=unbound) SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { - ?loan ?copy . - ?loan a . ?loan ?member . + ?loan ?copy . ?book ?copy . ?copy ?branch . ?book a . ?book ?author . + ?loan a . OPTIONAL { ?member ?optName . } @@ -3817,11 +3765,11 @@ SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?author HAVING (COUNT(?loan) > 0) -91.372 ms/op +106.931 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 91.372 ms/op + 106.931 ms/op # JMH version: 1.37 @@ -3837,7 +3785,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 9) -# Run progress: 35.23% complete, ETA 00:16:19 +# Run progress: 35.23% complete, ETA 00:18:11 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3861,11 +3809,11 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00002000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -155.205 ms/op +109.110 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3888,50 +3836,57 @@ Projection │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ o: Var (name=due) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Filter [left] - │ ║ ║ ├── Or - │ ║ ║ │ ╠══ Compare (=) - │ ║ ║ │ ║ Var (name=authorName) (bindingState=bound) - │ ║ ║ │ ║ Var (name=target) (bindingState=bound) - │ ║ ║ │ ╚══ Compare (=) - │ ║ ║ │ Var (name=authorName) (bindingState=bound) - │ ║ ║ │ ValueConstant (value="Author 3") - │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=268.5K, joinType=Cartesian product) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=268.5K) [left] - │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=261.3K) [left] - │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.6K) [left] - │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] - │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] - │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] - │ ║ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (costEstimate=15.2K, resultSizeEstimate=10.2K) [left] - │ ║ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) - │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=10.2K) [right] - │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=50, resultSizeEstimate=10.2K) [right] - │ ║ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) - │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) - │ ║ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) - │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.1K) [right] - │ ║ ║ ║ │ ║ │ s: Var (name=member) (bindingState=bound) - │ ║ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) - │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=311, resultSizeEstimate=386.3K) [right] - │ ║ ║ ║ │ ║ s: Var (name=book) (bindingState=unbound) - │ ║ ║ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) - │ ║ ║ ║ │ ║ o: Var (name=copy) (bindingState=bound) - │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=254, resultSizeEstimate=257.2K) [right] - │ ║ ║ ║ │ s: Var (name=book) (bindingState=bound) - │ ║ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) - │ ║ ║ ║ │ o: Var (name=author) (bindingState=unbound) - │ ║ ║ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] - │ ║ ║ ║ s: Var (name=author) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ ║ ║ o: Var (name=authorName) (bindingState=unbound) - │ ║ ║ ╚══ BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ │ ║ │ ║ │ ║ ╠══ Or + │ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or + │ ║ ║ │ ║ │ ║ │ ║ Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=target) + │ ║ ║ │ ║ │ ║ │ ║ Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ║ s: Var (name=member) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] │ ║ s: Var (name=book) (bindingState=bound) │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) @@ -3944,26 +3899,26 @@ Projection Var (name=member) (bindingState=unbound) SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { - ?loan ?member . - ?loan a . - ?loan ?copy . - ?member a . - ?book ?copy . - ?book ?author . - ?author ?authorName . VALUES ?target { "Author 1" "Author 2" } + ?author ?authorName . FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + ?book ?author . + ?book ?copy . + ?loan ?copy . + ?loan a . + ?loan ?member . + ?member a . OPTIONAL { ?book ?optTitle . } FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) } -114.845 ms/op +74.143 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 114.845 ms/op + 74.143 ms/op # JMH version: 1.37 @@ -3979,7 +3934,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 10) -# Run progress: 36.36% complete, ETA 00:15:59 +# Run progress: 36.36% complete, ETA 00:17:45 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4000,11 +3955,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -279.247 ms/op +289.298 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4023,11 +3978,11 @@ Projection │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) - │ ║ │ │ ├── StatementPattern (costEstimate=5.00, resultSizeEstimate=5.00) [left] + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) - │ ║ │ │ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] + │ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[P, S]) [right] │ ║ │ │ s: Var (name=branch) (bindingState=bound) │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) @@ -4075,11 +4030,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } } -207.756 ms/op +205.765 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 207.756 ms/op + 205.765 ms/op # JMH version: 1.37 @@ -4095,7 +4050,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 0) -# Run progress: 37.50% complete, ETA 00:15:40 +# Run progress: 37.50% complete, ETA 00:17:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4112,11 +4067,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -249.808 ms/op +243.518 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4163,11 +4118,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -238.436 ms/op +231.134 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 238.436 ms/op + 231.134 ms/op # JMH version: 1.37 @@ -4183,7 +4138,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 1) -# Run progress: 38.64% complete, ETA 00:15:21 +# Run progress: 38.64% complete, ETA 00:16:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4202,11 +4157,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -211.413 ms/op +239.181 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4215,7 +4170,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -4226,15 +4181,15 @@ Projection │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -4245,14 +4200,14 @@ Projection │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] - │ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) - │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) @@ -4280,8 +4235,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "REQ-1000" "REQ-1001" } { { - ?entity a . ?entity ?name . + ?entity a . } } FILTER ((?name = ?target) || (?name = "REQ-1002")) @@ -4291,11 +4246,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -158.529 ms/op +170.079 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 158.529 ms/op + 170.079 ms/op # JMH version: 1.37 @@ -4311,7 +4266,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 2) -# Run progress: 39.77% complete, ETA 00:15:01 +# Run progress: 39.77% complete, ETA 00:16:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4329,11 +4284,11 @@ GROUP BY ?assembly HAVING(COUNT(?component) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2.940 ms/op +5.507 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4343,22 +4298,27 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_44132b7f119773fec4674b9ba869ee58689290123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_02721af97b5d5797d4075b575bde9a4da065b, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (assembly) │ ║ LeftJoin - │ ║ ├── Filter [left] - │ ║ │ ╠══ ListMemberOperator - │ ║ │ ║ Var (name=assemblyName) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="Assembly 1") - │ ║ │ ║ ValueConstant (value="Assembly 2") - │ ║ │ ║ ValueConstant (value="Assembly 3") - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) - │ ║ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] - │ ║ │ │ s: Var (name=assembly) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) - │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=assemblyName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ValueConstant (value="Assembly 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=assemblyName) + │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ ValueConstant (value="Assembly 2") + │ ║ │ ValueConstant (value="Assembly 3") + │ ║ │ ) │ ║ │ s: Var (name=assembly) (bindingState=bound) │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) @@ -4366,13 +4326,13 @@ Projection │ ║ s: Var (name=component) (bindingState=unbound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ o: Var (name=assembly) (bindingState=bound) - │ ║ GroupElem (_anon_having_44132b7f119773fec4674b9ba869ee58689290123) + │ ║ GroupElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) │ ║ Count │ ║ Var (name=component) (bindingState=bound) │ ║ GroupElem (componentCount) │ ║ Count (Distinct) │ ║ Var (name=component) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_44132b7f119773fec4674b9ba869ee58689290123) + │ ╚══ ExtensionElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) │ Count │ Var (name=component) (bindingState=unbound) └── ExtensionElem (componentCount) @@ -4390,11 +4350,11 @@ SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { GROUP BY ?assembly HAVING (COUNT(?component) > 0) -2.100 ms/op +3.677 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.100 ms/op + 3.677 ms/op # JMH version: 1.37 @@ -4410,7 +4370,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 3) -# Run progress: 40.91% complete, ETA 00:14:42 +# Run progress: 40.91% complete, ETA 00:16:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4427,11 +4387,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000038001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -204.221 ms/op +189.436 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4445,14 +4405,14 @@ Projection │ ║ │ ║ Var (name=requirement) (bindingState=bound) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, O, S]) [right] │ ║ │ │ s: Var (name=requirement) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) - │ ║ │ │ o: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) │ ║ │ └── Extension [right] │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) @@ -4477,8 +4437,8 @@ Projection Var (name=requirement) (bindingState=unbound) SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { - ?requirement a . ?requirement ?component . + ?requirement a . OPTIONAL { ?requirement ?test . BIND(?test AS ?optTest) @@ -4490,11 +4450,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -144.900 ms/op +129.795 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 144.900 ms/op + 129.795 ms/op # JMH version: 1.37 @@ -4510,7 +4470,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 4) -# Run progress: 42.05% complete, ETA 00:14:23 +# Run progress: 42.05% complete, ETA 00:15:46 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4527,11 +4487,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -75.584 ms/op +518.212 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4546,22 +4506,22 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] - │ ║ ║ ├── Filter (costEstimate=3.4K, resultSizeEstimate=6.7K) [left] - │ ║ ║ │ ╠══ Or - │ ║ ║ │ ║ ├── Compare (=) - │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ │ ValueConstant (value="Component 1") - │ ║ ║ │ ║ └── Compare (=) - │ ║ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="Component 2") - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) - │ ║ ║ │ s: Var (name=component) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] - │ ║ ║ s: Var (name=component) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Component 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Component 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=component) (bindingState=bound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) @@ -4574,9 +4534,9 @@ Projection Var (name=component) (bindingState=unbound) SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . ?component ?name . FILTER ((?name = "Component 1") || (?name = "Component 2")) - ?component a . OPTIONAL { ?component ?assembly . } @@ -4585,11 +4545,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -59.402 ms/op +355.238 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 59.402 ms/op + 355.238 ms/op # JMH version: 1.37 @@ -4605,7 +4565,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 5) -# Run progress: 43.18% complete, ETA 00:14:04 +# Run progress: 43.18% complete, ETA 00:15:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4622,18 +4582,18 @@ SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.342 ms/op +8.504 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists │ ║ │ Filter @@ -4644,22 +4604,32 @@ Projection │ ║ │ s: Var (name=measurement) (bindingState=bound) │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) │ ║ │ o: Var (name=value2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=78, joinType=Cartesian product) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=78) [left] - │ ║ ║ ├── Filter (costEstimate=249, resultSizeEstimate=78) [left] - │ ║ ║ │ ╠══ ListMemberOperator - │ ║ ║ │ ║ Var (name=value) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="0.9"^^) - │ ║ ║ │ ║ ValueConstant (value="0.95"^^) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) - │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) - │ ║ ║ │ o: Var (name=value) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.6K) [right] - │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=value2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ Var (name=measurement) + │ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ Var (name=value2) + │ ║ ║ ) + │ ║ ║ s: Var (name=measurement) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) - │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Filter (resultSizeEstimate=78, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], plannedLookupComponents=[P, S, O]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="0.9"^^) + │ ║ │ ValueConstant (value="0.95"^^) + │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=measurement) (bindingState=bound) @@ -4668,21 +4638,21 @@ Projection Var (name=measurement) (bindingState=unbound) SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a . ?measurement ?value . FILTER (?value IN (0.9, 0.95)) - ?measurement a . - VALUES ?threshold { 0.85 } FILTER NOT EXISTS { ?measurement ?value2 . FILTER (?value2 < ?threshold) } } -3.114 ms/op +5.600 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.114 ms/op + 5.600 ms/op # JMH version: 1.37 @@ -4698,7 +4668,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 6) -# Run progress: 44.32% complete, ETA 00:13:45 +# Run progress: 44.32% complete, ETA 00:15:01 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4718,11 +4688,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -330.507 ms/op +376.636 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4732,7 +4702,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_562c015adadd61145f7a5b0e308aecce3d201234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (component) │ ║ Filter @@ -4742,14 +4712,14 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=23, resultSizeEstimate=520) [right] + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) - │ ║ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) │ ║ ║ s: Var (name=component) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) @@ -4761,13 +4731,13 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_562c015adadd61145f7a5b0e308aecce3d201234) + │ ║ GroupElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_562c015adadd61145f7a5b0e308aecce3d201234) + │ ╚══ ExtensionElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -4776,8 +4746,8 @@ Projection SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { { - ?requirement a . ?requirement ?component . + ?requirement a . } UNION { @@ -4792,11 +4762,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) > 0) -246.244 ms/op +245.566 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 246.244 ms/op + 245.566 ms/op # JMH version: 1.37 @@ -4812,7 +4782,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 7) -# Run progress: 45.45% complete, ETA 00:13:27 +# Run progress: 45.45% complete, ETA 00:14:40 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4829,11 +4799,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.053 ms/op +9.451 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4841,18 +4811,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=520) │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ ║ o: Var (name=component) (bindingState=unbound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) - │ ║ │ ├── StatementPattern (costEstimate=263, resultSizeEstimate=520) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ │ Var (name=requirement) + │ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ Var (name=component) + │ ║ │ │ ) │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ └── Filter (costEstimate=82, resultSizeEstimate=6.7K) [right] + │ ║ │ └── Filter (resultSizeEstimate=27, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], plannedLookupComponents=[S, P, O]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) @@ -4865,11 +4840,11 @@ Projection │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) - │ ║ ╠══ StatementPattern (costEstimate=409.4K, resultSizeEstimate=3.1K) [left] + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ ║ o: Var (name=test) (bindingState=unbound) - │ ║ ╚══ StatementPattern (costEstimate=56, resultSizeEstimate=3.1K) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[P, S]) [right] │ ║ s: Var (name=test) (bindingState=bound) │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ o: Var (name=measurement) (bindingState=unbound) @@ -4893,11 +4868,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -5.787 ms/op +6.627 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.787 ms/op + 6.627 ms/op # JMH version: 1.37 @@ -4913,7 +4888,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 8) -# Run progress: 46.59% complete, ETA 00:13:08 +# Run progress: 46.59% complete, ETA 00:14:18 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4932,11 +4907,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) >= 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -6.739 ms/op +6.476 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4946,7 +4921,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_042510b137c97be6a4029a20676730fe31e49, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (component) │ ║ Filter @@ -4956,23 +4931,23 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=520) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=131, resultSizeEstimate=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] - │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=132.7K) [right] + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, S]) [right] │ ║ ║ │ s: Var (name=component) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=364, resultSizeEstimate=132.7K) [right] - │ ║ ║ s: Var (name=component) (bindingState=bound) - │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) - │ ║ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) │ ║ │ s: Var (name=component) (bindingState=bound) @@ -4980,13 +4955,13 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_042510b137c97be6a4029a20676730fe31e49) + │ ║ GroupElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_042510b137c97be6a4029a20676730fe31e49) + │ ╚══ ExtensionElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -4995,9 +4970,9 @@ Projection SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { ?requirement ?component . - ?requirement a . ?component a . ?component ?assembly . + ?requirement a . OPTIONAL { ?component ?dep . BIND(?dep AS ?optDep) @@ -5007,11 +4982,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) >= 1) -4.752 ms/op +4.391 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.752 ms/op + 4.391 ms/op # JMH version: 1.37 @@ -5027,7 +5002,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 9) -# Run progress: 47.73% complete, ETA 00:12:50 +# Run progress: 47.73% complete, ETA 00:13:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5048,11 +5023,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -11.210 ms/op +13.588 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5070,11 +5045,11 @@ Projection │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ o: Var (name=component) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, joinType=Cartesian product) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78) [left] - │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ │ ║ ├── ListMemberOperator │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) @@ -5121,11 +5096,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) } -8.150 ms/op +9.062 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 8.150 ms/op + 9.062 ms/op # JMH version: 1.37 @@ -5141,7 +5116,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 10) -# Run progress: 48.86% complete, ETA 00:12:32 +# Run progress: 48.86% complete, ETA 00:13:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5159,11 +5134,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.594 ms/op +6.909 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5176,20 +5151,27 @@ Projection │ ║ │ ║ Var (name=optComponent) (bindingState=bound) │ ║ │ ║ Var (name=assembly) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Filter [left] - │ ║ │ │ ╠══ Or - │ ║ │ │ ║ ├── Compare (=) - │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ │ ValueConstant (value="Assembly 1") - │ ║ │ │ ║ └── Compare (=) - │ ║ │ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ ValueConstant (value="Assembly 2") - │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=963) - │ ║ │ │ ├── StatementPattern (costEstimate=463, resultSizeEstimate=921) [left] - │ ║ │ │ │ s: Var (name=assembly) (bindingState=unbound) - │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ │ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) - │ ║ │ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=Or + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ) │ ║ │ │ s: Var (name=assembly) (bindingState=bound) │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) @@ -5225,11 +5207,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } } -2.692 ms/op +4.758 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.692 ms/op + 4.758 ms/op # JMH version: 1.37 @@ -5245,7 +5227,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) -# Run progress: 50.00% complete, ETA 00:12:14 +# Run progress: 50.00% complete, ETA 00:13:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5262,11 +5244,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -424.201 ms/op +419.733 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5313,11 +5295,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -397.706 ms/op +403.742 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 397.706 ms/op + 403.742 ms/op # JMH version: 1.37 @@ -5333,7 +5315,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) -# Run progress: 51.14% complete, ETA 00:11:56 +# Run progress: 51.14% complete, ETA 00:12:54 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5352,11 +5334,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1561.192 ms/op +1721.876 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5376,11 +5358,11 @@ Projection │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ ║ └── Union [right] │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) - │ ║ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ ║ └── StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) @@ -5415,11 +5397,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { FILTER ((?w = ?target) || (?w = 3)) } -1202.188 ms/op +1226.737 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1202.188 ms/op + 1226.737 ms/op # JMH version: 1.37 @@ -5435,7 +5417,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) -# Run progress: 52.27% complete, ETA 00:11:40 +# Run progress: 52.27% complete, ETA 00:12:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5454,11 +5436,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -953.598 ms/op +1563.614 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5468,41 +5450,41 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0011badd9bd735a4483976a47f3e676b630, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.3K) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] - │ ║ │ ║ ├── StatementPattern (costEstimate=13.4K, resultSizeEstimate=40.3K) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.5K) [right] - │ ║ │ ║ ╠══ ListMemberOperator - │ ║ │ ║ ║ Var (name=w) (bindingState=bound) - │ ║ │ ║ ║ ValueConstant (value="1"^^) - │ ║ │ ║ ║ ValueConstant (value="2"^^) - │ ║ │ ║ ║ ValueConstant (value="3"^^) - │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) - │ ║ │ ║ s: Var (name=node) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ │ ║ o: Var (name=w) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] - │ ║ │ s: Var (name=node) (bindingState=bound) - │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ ValueConstant (value="1"^^) + │ ║ │ │ ValueConstant (value="2"^^) + │ ║ │ │ ValueConstant (value="3"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] │ ║ s: Var (name=neighbor) (bindingState=bound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=node) (bindingState=bound) - │ ║ GroupElem (_anon_having_0011badd9bd735a4483976a47f3e676b630) + │ ║ GroupElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0011badd9bd735a4483976a47f3e676b630) + │ ╚══ ExtensionElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -5511,9 +5493,9 @@ Projection SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { ?node a . + ?node ?neighbor . ?node ?w . FILTER (?w IN (1, 2, 3)) - ?node ?neighbor . OPTIONAL { ?neighbor ?node . } @@ -5521,11 +5503,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -704.931 ms/op +1058.682 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 704.931 ms/op + 1058.682 ms/op # JMH version: 1.37 @@ -5541,7 +5523,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) -# Run progress: 53.41% complete, ETA 00:11:23 +# Run progress: 53.41% complete, ETA 00:12:16 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5558,11 +5540,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -136.138 ms/op +131.387 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5614,11 +5596,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -126.495 ms/op +125.490 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 126.495 ms/op + 125.490 ms/op # JMH version: 1.37 @@ -5634,7 +5616,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) -# Run progress: 54.55% complete, ETA 00:11:05 +# Run progress: 54.55% complete, ETA 00:11:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5651,11 +5633,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -390.617 ms/op +442.220 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5670,11 +5652,11 @@ Projection │ ║ │ o: Var (name=neighbor) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] - │ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ └── Filter (costEstimate=212, resultSizeEstimate=45.0K) [right] + │ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[O, P, S]) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=w) (bindingState=bound) @@ -5709,11 +5691,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -299.815 ms/op +305.396 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 299.815 ms/op + 305.396 ms/op # JMH version: 1.37 @@ -5729,7 +5711,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) -# Run progress: 55.68% complete, ETA 00:10:48 +# Run progress: 55.68% complete, ETA 00:11:36 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5746,18 +5728,18 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e0001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -360.625 ms/op +378.359 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists │ ║ │ Filter @@ -5768,23 +5750,33 @@ Projection │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.0K, joinType=Cartesian product) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.0K) [left] - │ ║ ║ ├── StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] - │ ║ ║ │ s: Var (name=node) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ └── Filter (costEstimate=260, resultSizeEstimate=67.4K) [right] - │ ║ ║ ╠══ ListMemberOperator - │ ║ ║ ║ Var (name=w) (bindingState=bound) - │ ║ ║ ║ ValueConstant (value="4"^^) - │ ║ ║ ║ ValueConstant (value="5"^^) - │ ║ ║ ║ ValueConstant (value="6"^^) - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) - │ ║ ║ s: Var (name=node) (bindingState=bound) - │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ ║ o: Var (name=w) (bindingState=unbound) - │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=w2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ Var (name=node) + │ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ Var (name=w2) + │ ║ ║ ) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="4"^^) + │ ║ │ ValueConstant (value="5"^^) + │ ║ │ ValueConstant (value="6"^^) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=node) (bindingState=bound) @@ -5793,21 +5785,21 @@ Projection Var (name=node) (bindingState=unbound) SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } ?node a . ?node ?w . FILTER (?w IN (4, 5, 6)) - VALUES ?threshold { 4 } FILTER NOT EXISTS { ?node ?w2 . FILTER (?w2 < ?threshold) } } -273.886 ms/op +271.242 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 273.886 ms/op + 271.242 ms/op # JMH version: 1.37 @@ -5823,7 +5815,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) -# Run progress: 56.82% complete, ETA 00:10:31 +# Run progress: 56.82% complete, ETA 00:11:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5843,11 +5835,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2114.005 ms/op +2102.107 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5857,7 +5849,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_05cf33ce76df1e4d238ae94f175192c35f, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_058b31be46df25465c99c5913497ab9733, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ Filter @@ -5867,11 +5859,11 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, S]) [right] │ ║ ║ │ s: Var (name=node) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) @@ -5886,13 +5878,13 @@ Projection │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_05cf33ce76df1e4d238ae94f175192c35f) + │ ║ GroupElem (_anon_having_058b31be46df25465c99c5913497ab9733) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_05cf33ce76df1e4d238ae94f175192c35f) + │ ╚══ ExtensionElem (_anon_having_058b31be46df25465c99c5913497ab9733) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -5917,11 +5909,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -1431.609 ms/op +1450.803 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1431.609 ms/op + 1450.803 ms/op # JMH version: 1.37 @@ -5937,7 +5929,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) -# Run progress: 57.95% complete, ETA 00:10:14 +# Run progress: 57.95% complete, ETA 00:10:58 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5954,11 +5946,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -273.349 ms/op +313.209 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5966,18 +5958,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ ║ s: Var (name=node) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) - │ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=neighbor) + │ ║ │ │ ) │ ║ │ │ s: Var (name=node) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ └── Filter (costEstimate=213, resultSizeEstimate=45.2K) [right] + │ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, O, S]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=w) (bindingState=bound) @@ -6017,11 +6014,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -216.615 ms/op +223.728 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 216.615 ms/op + 223.728 ms/op # JMH version: 1.37 @@ -6037,7 +6034,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) -# Run progress: 59.09% complete, ETA 00:09:57 +# Run progress: 59.09% complete, ETA 00:10:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6055,11 +6052,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1789.045 ms/op +1835.098 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6073,7 +6070,7 @@ Projection │ ║ │ ValueConstant (value="8"^^) │ ║ │ ValueConstant (value="9"^^) │ ║ └── LeftJoin - │ ║ ╠══ Filter [left] + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] │ ║ ║ ├── Exists │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) │ ║ ║ │ s: Var (name=end) (bindingState=bound) @@ -6081,15 +6078,20 @@ Projection │ ║ ║ │ o: Var (name=node) (bindingState=bound) │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] - │ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] │ ║ ║ ║ s: Var (name=node) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] + │ ║ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ Var (name=end) + │ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ Var (name=node) + │ ║ ║ ) │ ║ ║ s: Var (name=mid) (bindingState=bound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=end) (bindingState=unbound) @@ -6117,11 +6119,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { FILTER (?optWeight IN (7, 8, 9)) } -1392.135 ms/op +1337.609 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1392.135 ms/op + 1337.609 ms/op # JMH version: 1.37 @@ -6137,7 +6139,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) -# Run progress: 60.23% complete, ETA 00:09:40 +# Run progress: 60.23% complete, ETA 00:10:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6157,11 +6159,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1594.530 ms/op +1546.988 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6171,7 +6173,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8443e8b506d40048ad8022cd3559f864e101234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (node) │ ║ Filter @@ -6195,13 +6197,13 @@ Projection │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567) + │ ║ GroupElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_840743eaf6c6334bf48602d3bcaff77a7301234567) + │ ╚══ ExtensionElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (degree) @@ -6219,11 +6221,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 1) -1480.063 ms/op +1441.020 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1480.063 ms/op + 1441.020 ms/op # JMH version: 1.37 @@ -6239,7 +6241,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) -# Run progress: 61.36% complete, ETA 00:09:24 +# Run progress: 61.36% complete, ETA 00:10:02 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6258,11 +6260,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -600.781 ms/op +679.480 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6270,46 +6272,64 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ │ ╠══ Not │ ║ │ ║ Exists - │ ║ │ ║ Filter - │ ║ │ ║ ├── Compare (<) - │ ║ │ ║ │ Var (name=w2) (bindingState=bound) - │ ║ │ ║ │ Var (name=threshold) (bindingState=bound) - │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=528.1K) - │ ║ │ ║ ╠══ StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [left] - │ ║ │ ║ ║ s: Var (name=node) (bindingState=bound) - │ ║ │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ │ ║ ║ o: Var (name=n2) (bindingState=unbound) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=472, resultSizeEstimate=222.8K) [right] + │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.0K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ ╠══ Compare (<) + │ ║ │ ║ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ║ , plannedLookupComponents=[S, P]) │ ║ │ ║ s: Var (name=n2) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=89.4K, joinType=Cartesian product) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=89.4K) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=120.8K, resultSizeEstimate=40.3K) [left] - │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ │ ╚══ Filter (costEstimate=300, resultSizeEstimate=90.0K) [right] - │ ║ │ │ ├── ListMemberOperator - │ ║ │ │ │ Var (name=w) (bindingState=bound) - │ ║ │ │ │ ValueConstant (value="1"^^) - │ ║ │ │ │ ValueConstant (value="2"^^) - │ ║ │ │ │ ValueConstant (value="3"^^) - │ ║ │ │ │ ValueConstant (value="4"^^) - │ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) - │ ║ │ │ s: Var (name=node) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ │ │ o: Var (name=w) (bindingState=unbound) - │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] + │ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ │ │ Exists + │ ║ │ │ Join (resultSizeEstimate=127.0K) + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=n2) + │ ║ │ │ Filter + │ ║ │ │ Compare (<) + │ ║ │ │ Var (name=w2) + │ ║ │ │ Var (name=threshold) + │ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ Var (name=n2) + │ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ Var (name=w2) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ValueConstant (value="4"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── Extension │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) │ ║ ║ s: Var (name=node) (bindingState=unbound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=node) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_4716c93cf0246c74faeba90d0d3882bc0b50123) + │ ║ ╚══ ExtensionElem (_anon_path_261b186d14e6aef456d8325c960be07cc6e01) │ ║ Var (name=node) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -6319,10 +6339,10 @@ Projection Var (name=node) (bindingState=unbound) SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } ?node a . ?node ?w . FILTER (?w IN (1, 2, 3, 4)) - VALUES ?threshold { 3 } FILTER NOT EXISTS { ?node ?n2 . ?n2 ?w2 . @@ -6330,15 +6350,15 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } MINUS { ?node ?node . - BIND(?node AS ?_anon_path_4716c93cf0246c74faeba90d0d3882bc0b50123) + BIND(?node AS ?_anon_path_261b186d14e6aef456d8325c960be07cc6e01) } } -465.966 ms/op +474.020 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 465.966 ms/op + 474.020 ms/op # JMH version: 1.37 @@ -6354,7 +6374,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 0) -# Run progress: 62.50% complete, ETA 00:09:07 +# Run progress: 62.50% complete, ETA 00:09:43 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6375,11 +6395,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f801120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -41.108 ms/op +39.698 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6426,11 +6446,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } } -38.622 ms/op +37.792 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 38.622 ms/op + 37.792 ms/op # JMH version: 1.37 @@ -6446,7 +6466,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 1) -# Run progress: 63.64% complete, ETA 00:08:50 +# Run progress: 63.64% complete, ETA 00:09:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6466,11 +6486,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -58.387 ms/op +68.254 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6479,7 +6499,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -6490,15 +6510,15 @@ Projection │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -6509,11 +6529,11 @@ Projection │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] - │ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) @@ -6555,11 +6575,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -46.027 ms/op +48.570 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 46.027 ms/op + 48.570 ms/op # JMH version: 1.37 @@ -6575,7 +6595,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 2) -# Run progress: 64.77% complete, ETA 00:08:33 +# Run progress: 64.77% complete, ETA 00:09:05 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6594,11 +6614,11 @@ GROUP BY ?line HAVING(COUNT(?section) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -27.599 ms/op +32.847 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6608,36 +6628,36 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_6142c68cbc796351447ba97f7f653b74902e012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ LeftJoin │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] - │ ║ │ ╠══ Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] - │ ║ │ ║ ├── ListMemberOperator - │ ║ │ ║ │ Var (name=lineName) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="Line 0") - │ ║ │ ║ │ ValueConstant (value="Line 1") - │ ║ │ ║ │ ValueConstant (value="Line 2") - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K) - │ ║ │ ║ s: Var (name=line) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ │ ║ o: Var (name=lineName) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] - │ ║ │ s: Var (name=line) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=lineName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Line 0") + │ ║ │ │ ValueConstant (value="Line 1") + │ ║ │ │ ValueConstant (value="Line 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] │ ║ s: Var (name=section) (bindingState=unbound) │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ o: Var (name=line) (bindingState=bound) - │ ║ GroupElem (_anon_having_6142c68cbc796351447ba97f7f653b74902e012345) + │ ║ GroupElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) │ ║ Count │ ║ Var (name=section) (bindingState=bound) │ ║ GroupElem (sectionCount) │ ║ Count (Distinct) │ ║ Var (name=section) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_6142c68cbc796351447ba97f7f653b74902e012345) + │ ╚══ ExtensionElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) │ Count │ Var (name=section) (bindingState=unbound) └── ExtensionElem (sectionCount) @@ -6645,9 +6665,9 @@ Projection Var (name=section) (bindingState=unbound) SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . ?line ?lineName . FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) - ?line a . OPTIONAL { ?section ?line . } @@ -6655,11 +6675,11 @@ SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { GROUP BY ?line HAVING (COUNT(?section) > 0) -20.928 ms/op +21.925 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 20.928 ms/op + 21.925 ms/op # JMH version: 1.37 @@ -6675,7 +6695,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 3) -# Run progress: 65.91% complete, ETA 00:08:15 +# Run progress: 65.91% complete, ETA 00:08:46 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6693,11 +6713,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -205.615 ms/op +230.308 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6711,14 +6731,14 @@ Projection │ ║ │ ║ Var (name=section) (bindingState=bound) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, P, O]) [right] │ ║ │ │ s: Var (name=section) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ │ │ o: Var (name=line) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) │ ║ │ └── Extension [right] │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) │ ║ │ ║ s: Var (name=section) (bindingState=bound) @@ -6743,8 +6763,8 @@ Projection Var (name=section) (bindingState=unbound) SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { - ?section a . ?section ?line . + ?section a . OPTIONAL { ?section ?track . BIND(?track AS ?optTrack) @@ -6756,11 +6776,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } } -157.242 ms/op +159.637 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 157.242 ms/op + 159.637 ms/op # JMH version: 1.37 @@ -6776,7 +6796,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 4) -# Run progress: 67.05% complete, ETA 00:07:58 +# Run progress: 67.05% complete, ETA 00:08:28 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6794,11 +6814,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -217.791 ms/op +235.334 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6813,22 +6833,22 @@ Projection │ ║ │ o: Var (name=line) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] - │ ║ ║ ├── Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] - │ ║ ║ │ ╠══ Or - │ ║ ║ │ ║ ├── Compare (=) - │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ │ ValueConstant (value="Line 1") - │ ║ ║ │ ║ └── Compare (=) - │ ║ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="Line 2") - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) - │ ║ ║ │ s: Var (name=line) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.5K) [right] - │ ║ ║ s: Var (name=line) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] │ ║ s: Var (name=section) (bindingState=unbound) │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) @@ -6841,9 +6861,9 @@ Projection Var (name=line) (bindingState=unbound) SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . ?line ?name . FILTER ((?name = "Line 1") || (?name = "Line 2")) - ?line a . OPTIONAL { ?section ?op . } @@ -6852,11 +6872,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -163.190 ms/op +162.086 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 163.190 ms/op + 162.086 ms/op # JMH version: 1.37 @@ -6872,7 +6892,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 5) -# Run progress: 68.18% complete, ETA 00:07:41 +# Run progress: 68.18% complete, ETA 00:08:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6890,18 +6910,18 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -23.101 ms/op +54.073 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists │ ║ │ Filter @@ -6912,22 +6932,32 @@ Projection │ ║ │ s: Var (name=service) (bindingState=bound) │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) │ ║ │ o: Var (name=late) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.3K, joinType=Cartesian product) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3K) [left] - │ ║ ║ ├── Filter (costEstimate=3.9K, resultSizeEstimate=1.3K) [left] - │ ║ ║ │ ╠══ ListMemberOperator - │ ║ ║ │ ║ Var (name=time) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) - │ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) - │ ║ ║ │ s: Var (name=service) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) - │ ║ ║ │ o: Var (name=time) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.6K) [right] - │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (>) + │ ║ ║ Var (name=late) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ Var (name=service) + │ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ Var (name=late) + │ ║ ║ ) + │ ║ ║ s: Var (name=service) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], plannedLookupComponents=[P, O, S]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ └── StatementPattern (resultSizeEstimate=25.8K) + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ o: Var (name=time) (bindingState=unbound) │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=service) (bindingState=bound) @@ -6936,21 +6966,21 @@ Projection Var (name=service) (bindingState=unbound) SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^ } + ?service a . ?service ?time . FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) - ?service a . - VALUES ?threshold { "10:00:00"^^ } FILTER NOT EXISTS { ?service ?late . FILTER (?late > ?threshold) } } -17.850 ms/op +38.264 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 17.850 ms/op + 38.264 ms/op # JMH version: 1.37 @@ -6966,7 +6996,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 6) -# Run progress: 69.32% complete, ETA 00:07:24 +# Run progress: 69.32% complete, ETA 00:07:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6988,11 +7018,11 @@ GROUP BY ?line HAVING(COUNT(?service) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -162.557 ms/op +152.221 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7002,7 +7032,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_09631b95168022b44c782f4e22240fe1963, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ Filter @@ -7012,19 +7042,19 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.7K) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) - │ ║ ║ │ ║ │ o: Var (name=section) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] - │ ║ ║ │ ║ s: Var (name=section) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=4.3K, resultSizeEstimate=8.6K) [right] - │ ║ ║ │ s: Var (name=service) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) │ ║ ║ s: Var (name=line) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) @@ -7033,13 +7063,13 @@ Projection │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345) + │ ║ GroupElem (_anon_having_09631b95168022b44c782f4e22240fe1963) │ ║ Count │ ║ Var (name=service) (bindingState=bound) │ ║ GroupElem (serviceCount) │ ║ Count (Distinct) │ ║ Var (name=service) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_63661a8c5b10ccc4f0999db659f8973f0e2012345) + │ ╚══ ExtensionElem (_anon_having_09631b95168022b44c782f4e22240fe1963) │ Count │ Var (name=service) (bindingState=unbound) └── ExtensionElem (serviceCount) @@ -7048,9 +7078,9 @@ Projection SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { { + ?service a . ?service ?section . ?section ?line . - ?service a . } UNION { @@ -7064,11 +7094,11 @@ SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { GROUP BY ?line HAVING (COUNT(?service) > 0) -117.360 ms/op +104.919 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 117.360 ms/op + 104.919 ms/op # JMH version: 1.37 @@ -7084,7 +7114,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 7) -# Run progress: 70.45% complete, ETA 00:07:07 +# Run progress: 70.45% complete, ETA 00:07:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7102,11 +7132,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -53.027 ms/op +152.071 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7114,29 +7144,34 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) │ ║ │ ║ s: Var (name=service) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) │ ║ │ ║ o: Var (name=op) (bindingState=bound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) - │ ║ │ ├── Filter (costEstimate=1.2K, resultSizeEstimate=2.3K) [left] - │ ║ │ │ ╠══ Or - │ ║ │ │ ║ ├── Compare (=) - │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ │ ValueConstant (value="OP 1") - │ ║ │ │ ║ └── Compare (=) - │ ║ │ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ ValueConstant (value="OP 2") - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) - │ ║ │ │ s: Var (name=op) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) - │ ║ │ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=29.9K) [right] - │ ║ │ s: Var (name=op) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ │ Var (name=service) + │ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ │ Var (name=op) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── Filter (new scope) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) @@ -7155,9 +7190,9 @@ Projection Var (name=op) (bindingState=unbound) SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . ?op ?name . FILTER ((?name = "OP 1") || (?name = "OP 2")) - ?op a . FILTER EXISTS { ?service ?op . } @@ -7167,11 +7202,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -41.055 ms/op +103.340 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 41.055 ms/op + 103.340 ms/op # JMH version: 1.37 @@ -7187,7 +7222,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 8) -# Run progress: 71.59% complete, ETA 00:06:51 +# Run progress: 71.59% complete, ETA 00:07:14 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7208,11 +7243,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -195.164 ms/op +233.351 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7227,20 +7262,20 @@ Projection │ ║ │ ║ ValueConstant (value="Line 1") │ ║ │ ╚══ Exists │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) - │ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] │ ║ │ ║ s: Var (name=s1) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ │ ║ o: Var (name=op) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[P, O, S]) [right] │ ║ │ s: Var (name=s2) (bindingState=bound) │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ │ o: Var (name=op) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] - │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) @@ -7283,11 +7318,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) } -164.118 ms/op +160.139 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 164.118 ms/op + 160.139 ms/op # JMH version: 1.37 @@ -7303,7 +7338,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 9) -# Run progress: 72.73% complete, ETA 00:06:34 +# Run progress: 72.73% complete, ETA 00:06:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7323,11 +7358,11 @@ GROUP BY ?section HAVING(COUNT(?track) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -324.246 ms/op +360.407 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7337,7 +7372,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0526a87f6c473a74a5b8969e381c95d73eb, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (section) │ ║ Filter @@ -7346,7 +7381,7 @@ Projection │ ║ │ Var (name=section) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] - │ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ╠══ Exists │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) @@ -7356,7 +7391,7 @@ Projection │ ║ ║ │ s: Var (name=section) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) │ ║ ║ │ o: Var (name=track) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=67.4K) [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[P, S, O]) [right] │ ║ ║ s: Var (name=section) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) @@ -7367,13 +7402,13 @@ Projection │ ║ │ o: Var (name=op) (bindingState=unbound) │ ║ └── ExtensionElem (optOp) │ ║ Var (name=op) (bindingState=bound) - │ ║ GroupElem (_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234) + │ ║ GroupElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) │ ║ Count │ ║ Var (name=track) (bindingState=bound) │ ║ GroupElem (trackCount) │ ║ Count (Distinct) │ ║ Var (name=track) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5626aef5f2f50bd45328d749dd2c36550ae01234) + │ ╚══ ExtensionElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) │ Count │ Var (name=track) (bindingState=unbound) └── ExtensionElem (trackCount) @@ -7395,11 +7430,11 @@ SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { GROUP BY ?section HAVING (COUNT(?track) > 0) -245.462 ms/op +244.542 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 245.462 ms/op + 244.542 ms/op # JMH version: 1.37 @@ -7415,7 +7450,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 10) -# Run progress: 73.86% complete, ETA 00:06:17 +# Run progress: 73.86% complete, ETA 00:06:38 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7435,11 +7470,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc001120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -277.958 ms/op +308.411 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7458,11 +7493,11 @@ Projection │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) - │ ║ │ │ ├── StatementPattern (costEstimate=15.0K, resultSizeEstimate=29.9K) [left] + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] + │ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] │ ║ │ │ s: Var (name=op) (bindingState=bound) │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) @@ -7510,11 +7545,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -208.560 ms/op +212.075 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 208.560 ms/op + 212.075 ms/op # JMH version: 1.37 @@ -7530,7 +7565,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) -# Run progress: 75.00% complete, ETA 00:06:00 +# Run progress: 75.00% complete, ETA 00:06:20 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7547,11 +7582,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -60.622 ms/op +66.485 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7570,11 +7605,11 @@ Projection │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) │ ║ │ └── Extension [right] │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) - │ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[P, S]) [right] │ ║ │ ║ s: Var (name=generator) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) @@ -7604,11 +7639,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } } -46.713 ms/op +46.019 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 46.713 ms/op + 46.019 ms/op # JMH version: 1.37 @@ -7624,7 +7659,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) -# Run progress: 76.14% complete, ETA 00:05:44 +# Run progress: 76.14% complete, ETA 00:06:03 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7643,11 +7678,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c0001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000301120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -43.549 ms/op +78.989 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7656,7 +7691,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -7667,15 +7702,15 @@ Projection │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] - │ ║ │ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -7686,19 +7721,19 @@ Projection │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K) [left] - │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] - │ ║ │ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ │ o: Var (name=substation) (bindingState=unbound) - │ ║ │ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] - │ ║ │ s: Var (name=substation) (bindingState=bound) - │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) @@ -7715,8 +7750,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "Substation 1" "Substation 2" } { { - ?entity a . ?entity ?name . + ?entity a . } } FILTER ((?name = ?target) || (?name = "Substation 3")) @@ -7726,9 +7761,9 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "Substation 1" "Substation 2" } { { - ?entity a . - ?entity ?substation . ?substation ?name . + ?entity ?substation . + ?entity a . } } FILTER ((?name = ?target) || (?name = "Substation 3")) @@ -7738,11 +7773,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -32.980 ms/op +53.870 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 32.980 ms/op + 53.870 ms/op # JMH version: 1.37 @@ -7758,7 +7793,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) -# Run progress: 77.27% complete, ETA 00:05:27 +# Run progress: 77.27% complete, ETA 00:05:45 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7777,11 +7812,11 @@ GROUP BY ?transformer HAVING(COUNT(?meter) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000018001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -9.558 ms/op +130.219 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7791,41 +7826,41 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_076216e8764c0ae4eeabd25208dcd347bb4, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (transformer) │ ║ LeftJoin │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8K) [left] - │ ║ │ ║ ├── Filter (costEstimate=237, resultSizeEstimate=468) [left] - │ ║ │ ║ │ ╠══ ListMemberOperator - │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") - │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") - │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") - │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) - │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] - │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ ║ o: Var (name=substation) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] - │ ║ │ s: Var (name=transformer) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 0") + │ ║ │ │ ValueConstant (value="Substation 1") + │ ║ │ │ ValueConstant (value="Substation 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ o: Var (name=meter) (bindingState=unbound) - │ ║ GroupElem (_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234) + │ ║ GroupElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) │ ║ Count │ ║ Var (name=meter) (bindingState=bound) │ ║ GroupElem (meterCount) │ ║ Count (Distinct) │ ║ Var (name=meter) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5009cb978d66a78e4d068c63ad1cc110266d01234) + │ ╚══ ExtensionElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) │ Count │ Var (name=meter) (bindingState=unbound) └── ExtensionElem (meterCount) @@ -7833,10 +7868,10 @@ Projection Var (name=meter) (bindingState=unbound) SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a . + ?transformer ?substation . ?substation ?name . FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) - ?transformer ?substation . - ?transformer a . OPTIONAL { ?transformer ?meter . } @@ -7844,11 +7879,11 @@ SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { GROUP BY ?transformer HAVING (COUNT(?meter) > 0) -6.649 ms/op +89.466 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.649 ms/op + 89.466 ms/op # JMH version: 1.37 @@ -7864,7 +7899,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) -# Run progress: 78.41% complete, ETA 00:05:10 +# Run progress: 78.41% complete, ETA 00:05:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7881,11 +7916,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -437.250 ms/op +487.637 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7899,11 +7934,11 @@ Projection │ ║ │ ║ ValueConstant (value="100"^^) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] │ ║ │ │ s: Var (name=meter) (bindingState=bound) │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ │ │ o: Var (name=load) (bindingState=unbound) @@ -7915,7 +7950,7 @@ Projection │ ║ │ ╚══ ExtensionElem (optValue) │ ║ │ Var (name=value) (bindingState=bound) │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) - │ ║ ╠══ StatementPattern (costEstimate=6278.4M, resultSizeEstimate=112.1K) [left] + │ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] │ ║ ║ s: Var (name=meter) (bindingState=unbound) │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ ║ o: Var (name=load2) (bindingState=unbound) @@ -7953,11 +7988,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } } -337.447 ms/op +335.819 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 337.447 ms/op + 335.819 ms/op # JMH version: 1.37 @@ -7973,7 +8008,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) -# Run progress: 79.55% complete, ETA 00:04:54 +# Run progress: 79.55% complete, ETA 00:05:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7991,11 +8026,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.903 ms/op +179.928 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8010,27 +8045,27 @@ Projection │ ║ │ o: Var (name=other) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.9K) [left] - │ ║ ║ │ ╠══ Filter (costEstimate=237, resultSizeEstimate=468) [left] - │ ║ ║ │ ║ ├── Or - │ ║ ║ │ ║ │ ╠══ Compare (=) - │ ║ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") - │ ║ ║ │ ║ │ ╚══ Compare (=) - │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) - │ ║ ║ │ ║ s: Var (name=substation) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.5K) [right] - │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) - │ ║ ║ │ o: Var (name=substation) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] - │ ║ ║ s: Var (name=line) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Substation 1") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) @@ -8043,10 +8078,10 @@ Projection Var (name=line) (bindingState=unbound) SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?substation . ?substation ?name . FILTER ((?name = "Substation 0") || (?name = "Substation 1")) - ?line ?substation . - ?line a . OPTIONAL { ?line ?other2 . } @@ -8055,11 +8090,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -6.845 ms/op +123.834 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.845 ms/op + 123.834 ms/op # JMH version: 1.37 @@ -8075,7 +8110,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) -# Run progress: 80.68% complete, ETA 00:04:37 +# Run progress: 80.68% complete, ETA 00:04:52 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8092,18 +8127,18 @@ SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f0001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.726 ms/op +49.313 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists │ ║ │ Filter @@ -8114,23 +8149,33 @@ Projection │ ║ │ s: Var (name=generator) (bindingState=bound) │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ o: Var (name=cap2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=469, joinType=Cartesian product) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=469) [left] - │ ║ ║ ├── Filter (costEstimate=1.4K, resultSizeEstimate=470) [left] - │ ║ ║ │ ╠══ ListMemberOperator - │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="700"^^) - │ ║ ║ │ ║ ValueConstant (value="800"^^) - │ ║ ║ │ ║ ValueConstant (value="900"^^) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) - │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=9.4K) [right] - │ ║ ║ s: Var (name=generator) (bindingState=bound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=cap2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ Var (name=generator) + │ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ Var (name=cap2) + │ ║ ║ ) + │ ║ ║ s: Var (name=generator) (bindingState=unbound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Filter (resultSizeEstimate=470, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], plannedLookupComponents=[O, S, P]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=capacity) (bindingState=bound) + │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ValueConstant (value="800"^^) + │ ║ │ ValueConstant (value="900"^^) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=capacity) (bindingState=unbound) │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=generator) (bindingState=bound) @@ -8139,21 +8184,21 @@ Projection Var (name=generator) (bindingState=unbound) SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a . ?generator ?capacity . FILTER (?capacity IN (700, 800, 900)) - ?generator a . - VALUES ?threshold { 700 } FILTER NOT EXISTS { ?generator ?cap2 . FILTER (?cap2 < ?threshold) } } -7.055 ms/op +34.315 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 7.055 ms/op + 34.315 ms/op # JMH version: 1.37 @@ -8169,7 +8214,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) -# Run progress: 81.82% complete, ETA 00:04:21 +# Run progress: 81.82% complete, ETA 00:04:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8189,11 +8234,11 @@ GROUP BY ?substation HAVING(COUNT(?asset) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000030001121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -125.982 ms/op +136.375 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8203,7 +8248,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_47731a99100374d4267827330a3c2ecdd090123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) │ ║ Filter @@ -8213,20 +8258,20 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=14.0K, resultSizeEstimate=28.0K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] │ ║ ║ │ s: Var (name=asset) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) - │ ║ ║ ╠══ StatementPattern (costEstimate=65.6M, resultSizeEstimate=9.4K) [left] + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] │ ║ ║ s: Var (name=asset) (bindingState=bound) │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ o: Var (name=substation) (bindingState=unbound) @@ -8237,13 +8282,13 @@ Projection │ ║ │ o: Var (name=substation) (bindingState=bound) │ ║ └── ExtensionElem (optSub) │ ║ Var (name=substation) (bindingState=bound) - │ ║ GroupElem (_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123) + │ ║ GroupElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) │ ║ Count │ ║ Var (name=asset) (bindingState=bound) │ ║ GroupElem (assetCount) │ ║ Count (Distinct) │ ║ Var (name=asset) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_408e769a97787d843f6ac6b0687a0ea1d300123) + │ ╚══ ExtensionElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) │ Count │ Var (name=asset) (bindingState=unbound) └── ExtensionElem (assetCount) @@ -8269,11 +8314,11 @@ SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { GROUP BY ?substation HAVING (COUNT(?asset) > 0) -96.276 ms/op +93.504 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 96.276 ms/op + 93.504 ms/op # JMH version: 1.37 @@ -8289,7 +8334,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) -# Run progress: 82.95% complete, ETA 00:04:04 +# Run progress: 82.95% complete, ETA 00:04:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8307,11 +8352,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -20.017 ms/op +159.353 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8319,34 +8364,39 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=1.8K) [left] - │ ║ │ │ ╠══ Filter (costEstimate=237, resultSizeEstimate=468) [left] - │ ║ │ │ ║ ├── Or - │ ║ │ │ ║ │ ╠══ Compare (=) - │ ║ │ │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") - │ ║ │ │ ║ │ ╚══ Compare (=) - │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ │ ║ │ ValueConstant (value="Substation 1") - │ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) - │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] - │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ │ ║ Var (name=transformer) + │ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ │ ║ Var (name=meter) + │ ║ │ │ ║ ) + │ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=transformer) (bindingState=bound) │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ │ o: Var (name=substation) (bindingState=bound) - │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=28.0K) [right] - │ ║ │ s: Var (name=transformer) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── Filter (new scope) │ ║ ╠══ Compare (=) │ ║ ║ Var (name=load) (bindingState=bound) @@ -8363,10 +8413,10 @@ Projection Var (name=transformer) (bindingState=unbound) SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a . + ?transformer ?substation . ?substation ?name . FILTER ((?name = "Substation 0") || (?name = "Substation 1")) - ?transformer ?substation . - ?transformer a . FILTER EXISTS { ?transformer ?meter . } @@ -8376,11 +8426,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } } -15.286 ms/op +107.823 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 15.286 ms/op + 107.823 ms/op # JMH version: 1.37 @@ -8396,7 +8446,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) -# Run progress: 84.09% complete, ETA 00:03:48 +# Run progress: 84.09% complete, ETA 00:03:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8415,11 +8465,11 @@ GROUP BY ?substation HAVING(COUNT(?transformer) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe01126000 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -17.967 ms/op +21.250 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8429,7 +8479,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0854c6327d0499ee40459923cd960c8ef603, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5604866bb553a18f43ff9cac17a76b74474901234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) │ ║ Filter @@ -8444,14 +8494,14 @@ Projection │ ║ │ o: Var (name=meter) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] - │ ║ ║ ├── StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[P, O, S]) [right] │ ║ ║ s: Var (name=substation) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) │ ║ │ s: Var (name=substation) (bindingState=bound) @@ -8459,13 +8509,13 @@ Projection │ ║ │ o: Var (name=transformer) (bindingState=unbound) │ ║ └── ExtensionElem (optTransformer) │ ║ Var (name=transformer) (bindingState=bound) - │ ║ GroupElem (_anon_having_0854c6327d0499ee40459923cd960c8ef603) + │ ║ GroupElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) │ ║ Count │ ║ Var (name=transformer) (bindingState=bound) │ ║ GroupElem (transformerCount) │ ║ Count (Distinct) │ ║ Var (name=transformer) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0854c6327d0499ee40459923cd960c8ef603) + │ ╚══ ExtensionElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) │ Count │ Var (name=transformer) (bindingState=unbound) └── ExtensionElem (transformerCount) @@ -8473,8 +8523,8 @@ Projection Var (name=transformer) (bindingState=unbound) SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { - ?substation a . ?substation ?name . + ?substation a . OPTIONAL { ?substation ?transformer . BIND(?transformer AS ?optTransformer) @@ -8484,11 +8534,11 @@ SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { GROUP BY ?substation HAVING (COUNT(?transformer) > 0) -14.019 ms/op +14.677 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 14.019 ms/op + 14.677 ms/op # JMH version: 1.37 @@ -8504,7 +8554,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) -# Run progress: 85.23% complete, ETA 00:03:31 +# Run progress: 85.23% complete, ETA 00:03:42 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8521,11 +8571,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -7.938 ms/op +8.627 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8534,21 +8584,26 @@ Projection ├── Group () │ ╠══ Difference │ ║ ├── LeftJoin - │ ║ │ ╠══ Filter [left] - │ ║ │ ║ ├── ListMemberOperator - │ ║ │ ║ │ Var (name=cap) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="500"^^) - │ ║ │ ║ │ ValueConstant (value="600"^^) - │ ║ │ ║ │ ValueConstant (value="700"^^) - │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=0) - │ ║ │ ║ ╠══ StatementPattern (costEstimate=4.7K, resultSizeEstimate=9.4K) [left] - │ ║ │ ║ ║ s: Var (name=line) (bindingState=unbound) - │ ║ │ ║ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - │ ║ │ ║ ║ o: Var (name=cap) (bindingState=unbound) - │ ║ │ ║ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=18.8K) [right] - │ ║ │ ║ s: Var (name=line) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator + │ ║ │ ║ │ Var (name=cap) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ │ ) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] │ ║ │ s: Var (name=line) (bindingState=bound) │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) @@ -8570,8 +8625,8 @@ Projection SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { ?line ?cap . - ?line a . FILTER (?cap IN (500, 600, 700)) + ?line a . OPTIONAL { ?line ?substation . } @@ -8581,11 +8636,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -5.905 ms/op +5.979 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.905 ms/op + 5.979 ms/op # JMH version: 1.37 @@ -8601,7 +8656,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) -# Run progress: 86.36% complete, ETA 00:03:15 +# Run progress: 86.36% complete, ETA 00:03:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8620,11 +8675,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -458.901 ms/op +557.193 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8649,28 +8704,28 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) - │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] │ ║ ║ │ s: Var (name=meter) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ ║ │ o: Var (name=load) (bindingState=unbound) │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=276.7K) [left] - │ ║ ║ ║ ├── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [left] - │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) - │ ║ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) - │ ║ ║ ║ │ o: Var (name=load) (bindingState=unbound) - │ ║ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] - │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ ║ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] - │ ║ ║ s: Var (name=load) (bindingState=bound) - │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) - │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] │ ║ s: Var (name=load) (bindingState=bound) │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) @@ -8689,9 +8744,9 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } UNION { + ?load ?value . ?meter ?load . ?meter a . - ?load ?value . } OPTIONAL { ?load ?optValue . @@ -8699,11 +8754,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) } -366.590 ms/op +387.730 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 366.590 ms/op + 387.730 ms/op # JMH version: 1.37 @@ -8719,7 +8774,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 0) -# Run progress: 87.50% complete, ETA 00:02:58 +# Run progress: 87.50% complete, ETA 00:03:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8741,11 +8796,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -24.053 ms/op +25.228 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8757,50 +8812,57 @@ Projection │ ║ │ Var (name=optMarker) (bindingState=bound) │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) │ ║ └── LeftJoin - │ ║ ╠══ Filter [left] - │ ║ ║ ├── Or - │ ║ ║ │ ╠══ Compare (<) - │ ║ ║ │ ║ Var (name=p) (bindingState=bound) - │ ║ ║ │ ║ ValueConstant (value="0.05"^^) - │ ║ ║ │ ╚══ Compare (>) - │ ║ ║ │ Var (name=effect) (bindingState=bound) - │ ║ ║ │ ValueConstant (value="0.7"^^) - │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=3.1K) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=955) [left] - │ ║ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] - │ ║ ║ ║ │ ║ │ ║ │ ╠══ BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=10, resultSizeEstimate=955) [right] - │ ║ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ ║ │ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) - │ ║ ║ ║ │ ║ │ ║ │ o: Var (name=disease) (bindingState=bound) - │ ║ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] - │ ║ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) - │ ║ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] - │ ║ ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) - │ ║ ║ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] - │ ║ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) - │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] - │ ║ ║ ║ │ s: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ ║ ║ ║ │ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] - │ ║ ║ ║ s: Var (name=result) (bindingState=bound) - │ ║ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) - │ ║ ║ ║ o: Var (name=p) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] - │ ║ ║ s: Var (name=result) (bindingState=bound) - │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) - │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (>) + │ ║ ║ ║ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] + │ ║ ║ Compare (<) + │ ║ ║ Var (name=p) + │ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ Compare (>) + │ ║ ║ Var (name=effect) + │ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) │ ║ │ s: Var (name=result) (bindingState=bound) @@ -8820,8 +8882,8 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { ?trial ?disease . ?trial a . ?trial ?arm . - ?arm ?result . ?arm ?drug . + ?arm ?result . ?result ?p . ?result ?effect . FILTER ((?p < 0.05) || (?effect > 0.7)) @@ -8832,11 +8894,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER (?optMarker != ) } -18.509 ms/op +16.866 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 18.509 ms/op + 16.866 ms/op # JMH version: 1.37 @@ -8852,7 +8914,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 1) -# Run progress: 88.64% complete, ETA 00:02:42 +# Run progress: 88.64% complete, ETA 00:02:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8876,11 +8938,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?drug) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.931 ms/op +4.982 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8890,7 +8952,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (combo) │ ║ Filter @@ -8900,8 +8962,8 @@ Projection │ ║ │ ValueConstant (value="Moderate") │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=141) [left] - │ ║ ║ │ ╠══ Filter (costEstimate=49, resultSizeEstimate=141) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ ├── Compare (>) │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) @@ -8909,33 +8971,33 @@ Projection │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=477) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] │ ║ ║ │ s: Var (name=combo) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) - │ ║ ║ └── StatementPattern (costEstimate=31, resultSizeEstimate=949) [right] + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[O, P, S]) [right] │ ║ ║ s: Var (name=combo) (bindingState=bound) - │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ ║ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) │ ║ ╚══ Extension [right] │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) - │ ║ │ ╠══ StatementPattern (costEstimate=50, resultSizeEstimate=10.0K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] │ ║ │ ║ s: Var (name=drug) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (costEstimate=16, resultSizeEstimate=267) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] │ ║ │ s: Var (name=sideEffect) (bindingState=bound) │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) │ ║ │ o: Var (name=sev) (bindingState=unbound) │ ║ └── ExtensionElem (optSeverity) │ ║ Var (name=sev) (bindingState=bound) - │ ║ GroupElem (_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9) + │ ║ GroupElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_02352de7cabbcd6e947b488fefd0ca6f39cf9) + │ ╚══ ExtensionElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -8945,8 +9007,8 @@ Projection SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { ?combo ?score . FILTER (?score > 0.7) - ?combo a . ?combo ?drug . + ?combo a . OPTIONAL { ?drug ?sideEffect . ?sideEffect ?sev . @@ -8957,11 +9019,11 @@ SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?drug) >= 2) -2.993 ms/op +3.253 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.993 ms/op + 3.253 ms/op # JMH version: 1.37 @@ -8977,7 +9039,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 2) -# Run progress: 89.77% complete, ETA 00:02:26 +# Run progress: 89.77% complete, ETA 00:02:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8999,11 +9061,11 @@ GROUP BY ?target HAVING(COUNT(DISTINCT ?drug) > 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -40.851 ms/op +49.883 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9013,7 +9075,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_42239202f0707f214517b5e6d6080a9974820123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (target) │ ║ Filter @@ -9024,11 +9086,11 @@ Projection │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) │ ║ │ ╚══ Exists │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) - │ ║ │ ╠══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) │ ║ │ ║ o: Var (name=drug) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] │ ║ │ s: Var (name=trial) (bindingState=unbound) │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ ║ │ o: Var (name=arm) (bindingState=bound) @@ -9036,19 +9098,19 @@ Projection │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=224, resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=26, resultSizeEstimate=666) [right] + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, P, O]) [right] │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) - │ ║ ║ │ ║ o: Var (name=pathway) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) │ ║ ║ │ o: Var (name=target) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, P, O]) [right] │ ║ ║ s: Var (name=drug) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) @@ -9059,13 +9121,13 @@ Projection │ ║ │ o: Var (name=disease) (bindingState=unbound) │ ║ └── ExtensionElem (optDisease) │ ║ Var (name=disease) (bindingState=bound) - │ ║ GroupElem (_anon_having_42239202f0707f214517b5e6d6080a9974820123) + │ ║ GroupElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_42239202f0707f214517b5e6d6080a9974820123) + │ ╚══ ExtensionElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -9073,8 +9135,8 @@ Projection Var (name=drug) (bindingState=unbound) SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { - ?target a . ?target ?pathway . + ?target a . ?drug ?target . ?drug a . OPTIONAL { @@ -9086,11 +9148,11 @@ SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?target HAVING (COUNT(DISTINCT ?drug) > 2) -31.997 ms/op +32.167 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 31.997 ms/op + 32.167 ms/op # JMH version: 1.37 @@ -9106,7 +9168,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 3) -# Run progress: 90.91% complete, ETA 00:02:09 +# Run progress: 90.91% complete, ETA 00:02:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9127,11 +9189,11 @@ SELECT ?drug ?disease WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -31.730 ms/op +42.057 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9142,46 +9204,52 @@ Projection │ Var (name=optTarget) (bindingState=bound) │ ValueConstant (value=http://example.com/theme/pharma/target/0) └── LeftJoin (LeftJoinIterator) - ╠══ Filter [left] + ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] ║ ├── Not ║ │ Exists ║ │ StatementPattern (resultSizeEstimate=9.9K) ║ │ s: Var (name=drug) (bindingState=bound) ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) ║ │ o: Var (name=disease) (bindingState=bound) - ║ └── Join (JoinIterator) (resultSizeEstimate=2.9K) - ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.1K) [left] + ║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) + ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] - ║ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (costEstimate=320, resultSizeEstimate=955, indexName=ospc) [left] + ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) - ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=31, resultSizeEstimate=955) [right] + ║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) + ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, S, P]) [right] ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) - ║ ║ │ ║ │ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) - ║ ║ │ ║ │ o: Var (name=disease) (bindingState=unbound) - ║ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[P, S]) [right] ║ ║ │ ║ s: Var (name=trial) (bindingState=bound) ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) - ║ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[P, S], unlockedFilters=Not [right] + ║ ║ │ Exists + ║ ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ ║ │ Var (name=drug) + ║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ ║ │ Var (name=disease) + ║ ║ │ ) ║ ║ │ s: Var (name=arm) (bindingState=bound) - ║ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - ║ ║ │ o: Var (name=result) (bindingState=unbound) - ║ ║ └── Filter (costEstimate=34, resultSizeEstimate=1.1K) [right] - ║ ║ ╠══ Compare (>) - ║ ║ ║ Var (name=rate) (bindingState=bound) - ║ ║ ║ ValueConstant (value="0.6"^^) - ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) - ║ ║ s: Var (name=result) (bindingState=bound) - ║ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) - ║ ║ o: Var (name=rate) (bindingState=unbound) - ║ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] - ║ s: Var (name=arm) (bindingState=bound) - ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - ║ o: Var (name=drug) (bindingState=unbound) + ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ ║ │ o: Var (name=drug) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[P, S]) [right] + ║ ║ s: Var (name=arm) (bindingState=bound) + ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ ║ o: Var (name=result) (bindingState=unbound) + ║ ╚══ Filter (resultSizeEstimate=1.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[P, S]) [right] + ║ ├── Compare (>) + ║ │ Var (name=rate) (bindingState=bound) + ║ │ ValueConstant (value="0.6"^^) + ║ └── StatementPattern (resultSizeEstimate=2.9K) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) ╚══ Extension [right] ├── StatementPattern (resultSizeEstimate=20.0K) │ s: Var (name=drug) (bindingState=bound) @@ -9191,13 +9259,13 @@ Projection Var (name=target) (bindingState=bound) SELECT ?drug ?disease WHERE { - ?trial a . ?trial ?disease . + ?trial a . ?trial ?arm . + ?arm ?drug . ?arm ?result . ?result ?rate . FILTER (?rate > 0.6) - ?arm ?drug . FILTER NOT EXISTS { ?drug ?disease . } @@ -9208,11 +9276,11 @@ SELECT ?drug ?disease WHERE { FILTER (?optTarget != ) } -24.087 ms/op +27.848 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 24.087 ms/op + 27.848 ms/op # JMH version: 1.37 @@ -9228,7 +9296,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 4) -# Run progress: 92.05% complete, ETA 00:01:53 +# Run progress: 92.05% complete, ETA 00:01:58 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9252,11 +9320,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000380001124660 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -44.317 ms/op +57.198 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9272,14 +9340,14 @@ Projection │ ║ │ ├── Union [left] │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ │ │ ║ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) - │ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[O, S, P]) [right] │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) - │ ║ │ │ ║ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) - │ ║ │ │ ║ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) @@ -9287,15 +9355,15 @@ Projection │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] - │ ║ │ │ │ ║ ├── StatementPattern (costEstimate=603.8K, resultSizeEstimate=477) [left] + │ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) - │ ║ │ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ │ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) - │ ║ │ │ │ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[O, S, P]) [right] │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) - │ ║ │ │ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ │ │ │ ║ o: Var (name=drug) (bindingState=unbound) - │ ║ │ │ │ ╚══ StatementPattern (costEstimate=100, resultSizeEstimate=10.0K) [right] + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[P, S]) [right] │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) @@ -9330,8 +9398,8 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { { { { - ?drug a . ?drug ?mol . + ?drug a . } } ?mol ?class . @@ -9340,8 +9408,8 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { { { { - ?combo a . ?combo ?drug . + ?combo a . ?drug ?mol . } } @@ -9358,11 +9426,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } } -35.673 ms/op +38.642 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 35.673 ms/op + 38.642 ms/op # JMH version: 1.37 @@ -9378,7 +9446,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 5) -# Run progress: 93.18% complete, ETA 00:01:37 +# Run progress: 93.18% complete, ETA 00:01:41 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9401,11 +9469,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc01121b00 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -13.035 ms/op +10.393 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9420,37 +9488,37 @@ Projection │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] - │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (costEstimate=0, resultSizeEstimate=1.00) [left] - │ ║ ║ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) - │ ║ ║ │ ║ │ ╚══ Filter (costEstimate=40, resultSizeEstimate=1.6K) [right] - │ ║ ║ │ ║ │ ├── Or - │ ║ ║ │ ║ │ │ ╠══ Compare (<) - │ ║ ║ │ ║ │ │ ║ Var (name=p) (bindingState=bound) - │ ║ ║ │ ║ │ │ ║ ValueConstant (value="0.05"^^) - │ ║ ║ │ ║ │ │ ╚══ Compare (=) - │ ║ ║ │ ║ │ │ Var (name=p) (bindingState=bound) - │ ║ ║ │ ║ │ │ ValueConstant (value="0.05"^^) - │ ║ ║ │ ║ │ └── StatementPattern (resultSizeEstimate=2.9K) - │ ║ ║ │ ║ │ s: Var (name=result) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) - │ ║ ║ │ ║ │ o: Var (name=p) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] - │ ║ ║ │ ║ s: Var (name=arm) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ │ ║ o: Var (name=result) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] - │ ║ ║ │ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ │ o: Var (name=arm) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=955) [right] - │ ║ ║ s: Var (name=trial) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) (bindingState=unbound) │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) │ ║ │ s: Var (name=result) (bindingState=bound) @@ -9468,11 +9536,11 @@ Projection SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { VALUES ?marker { } ?result ?marker . - ?result ?p . - FILTER ((?p < 0.05) || (?p = 0.05)) ?arm ?result . ?trial ?arm . ?trial a . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) OPTIONAL { ?result ?effect . BIND(?effect AS ?optEffect) @@ -9480,11 +9548,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { FILTER (?optEffect > 0.3) } -9.763 ms/op +6.773 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 9.763 ms/op + 6.773 ms/op # JMH version: 1.37 @@ -9500,7 +9568,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 6) -# Run progress: 94.32% complete, ETA 00:01:20 +# Run progress: 94.32% complete, ETA 00:01:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9523,11 +9591,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?target) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -11.545 ms/op +16.467 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9537,7 +9605,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_23411109d689ff49b4881b74bf0f40aead89001, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (combo) │ ║ Filter @@ -9553,13 +9621,13 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] - │ ║ ║ │ ╠══ Filter [left] + │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] │ ║ ║ │ ║ ├── Compare (!=) │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) - │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K) - │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] - │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477) [left] + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) @@ -9586,13 +9654,13 @@ Projection │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) │ ║ └── ExtensionElem (optSideEffect) │ ║ Var (name=sideEffect) (bindingState=bound) - │ ║ GroupElem (_anon_having_23411109d689ff49b4881b74bf0f40aead89001) + │ ║ GroupElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (sharedTargets) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_23411109d689ff49b4881b74bf0f40aead89001) + │ ╚══ ExtensionElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (sharedTargets) @@ -9615,11 +9683,11 @@ SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?target) > 1) -8.935 ms/op +10.949 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 8.935 ms/op + 10.949 ms/op # JMH version: 1.37 @@ -9635,7 +9703,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 7) -# Run progress: 95.45% complete, ETA 00:01:04 +# Run progress: 95.45% complete, ETA 00:01:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9657,11 +9725,11 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -43.551 ms/op +53.799 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9676,11 +9744,11 @@ Projection │ ║ │ ╚══ Not │ ║ │ Exists │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) - │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] │ ║ │ │ s: Var (name=arm) (bindingState=bound) │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) │ ║ │ │ o: Var (name=r) (bindingState=unbound) - │ ║ │ └── Filter (costEstimate=12, resultSizeEstimate=144) [right] + │ ║ │ └── Filter (resultSizeEstimate=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], plannedLookupComponents=[S, O, P]) [right] │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=p) (bindingState=bound) │ ║ │ ║ ValueConstant (value="0.08"^^) @@ -9692,14 +9760,14 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ │ ╠══ StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] │ ║ ║ │ s: Var (name=trial) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) │ ║ ║ └── Union [right] │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) @@ -9724,8 +9792,8 @@ Projection Var (name=arm) (bindingState=unbound) SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { - ?trial a . ?trial ?arm . + ?trial a . ?arm (|) ?comp . OPTIONAL { ?comp ?optName . @@ -9734,11 +9802,11 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) } -33.054 ms/op +35.563 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 33.054 ms/op + 35.563 ms/op # JMH version: 1.37 @@ -9754,7 +9822,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 8) -# Run progress: 96.59% complete, ETA 00:00:48 +# Run progress: 96.59% complete, ETA 00:00:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9776,11 +9844,11 @@ GROUP BY ?drug HAVING(COUNT(DISTINCT ?target) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -40.234 ms/op +41.725 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9790,7 +9858,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_0212ed57ac60ad9647a688adda29b35e2e59, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (drug) │ ║ Difference @@ -9800,11 +9868,11 @@ Projection │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ │ │ ╠══ StatementPattern (costEstimate=2.5K, resultSizeEstimate=5.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ │ ╚══ StatementPattern (costEstimate=141, resultSizeEstimate=20.0K) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] │ ║ │ │ s: Var (name=drug) (bindingState=bound) │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) │ ║ │ │ o: Var (name=target) (bindingState=unbound) @@ -9832,13 +9900,13 @@ Projection │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) - │ ║ GroupElem (_anon_having_0212ed57ac60ad9647a688adda29b35e2e59) + │ ║ GroupElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (targetCount) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0212ed57ac60ad9647a688adda29b35e2e59) + │ ╚══ ExtensionElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (targetCount) @@ -9868,11 +9936,11 @@ SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { GROUP BY ?drug HAVING (COUNT(DISTINCT ?target) >= 3) -28.829 ms/op +29.450 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 28.829 ms/op + 29.450 ms/op # JMH version: 1.37 @@ -9888,7 +9956,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 9) -# Run progress: 97.73% complete, ETA 00:00:32 +# Run progress: 97.73% complete, ETA 00:00:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9917,11 +9985,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -26.643 ms/op +30.263 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9948,7 +10016,7 @@ Projection │ ║ ║ ╠══ Extension │ ║ ║ ║ ├── Filter │ ║ ║ ║ │ ╠══ Compare (>) - │ ║ ║ ║ │ ║ Var (name=_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ Var (name=_anon_having_0025d4a630759f094f50983e40d4cbd8113a, anonymous) (bindingState=bound) │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) │ ║ ║ ║ │ ╚══ Group (drug) │ ║ ║ ║ │ Filter @@ -9960,23 +10028,23 @@ Projection │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] - │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (costEstimate=480, resultSizeEstimate=955) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (costEstimate=18, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P, O]) [right] │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) - │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ ║ │ │ ║ │ o: Var (name=result) (bindingState=unbound) - │ ║ ║ ║ │ │ ║ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) - │ ║ ║ ║ │ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - │ ║ ║ ║ │ │ ║ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ ║ │ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) @@ -9987,13 +10055,13 @@ Projection │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) - │ ║ ║ ║ │ GroupElem (_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456) + │ ║ ║ ║ │ GroupElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) │ ║ ║ ║ │ GroupElem (avgEffect) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_having_77651b3fb26619b34c8c9ed86778e9ae0a4f0123456) + │ ║ ║ ║ └── ExtensionElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) │ ║ ║ ║ Avg │ ║ ║ ║ Var (name=effect) (bindingState=unbound) │ ║ ║ ╚══ ExtensionElem (avgEffect) @@ -10016,10 +10084,10 @@ Projection SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { { SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { - ?trial a . ?trial ?arm . - ?arm ?result . + ?trial a . ?arm ?drug . + ?arm ?result . ?result ?effect . OPTIONAL { ?result ?rate . @@ -10037,11 +10105,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) } -19.691 ms/op +20.363 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 19.691 ms/op + 20.363 ms/op # JMH version: 1.37 @@ -10081,11 +10149,11 @@ GROUP BY ?pathway HAVING(COUNT(DISTINCT ?drug) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -324.096 ms/op +374.084 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10095,7 +10163,7 @@ Projection ├── Extension │ ╠══ Filter │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_614d870109bb4594e749ae1752c64e3c19b012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_483a537e636433f44b583e838d50a0511570123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (pathway) │ ║ Filter @@ -10106,23 +10174,23 @@ Projection │ ║ │ ╚══ Exists │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ │ ║ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) │ ║ │ ║ o: Var (name=result) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] │ ║ │ s: Var (name=trial) (bindingState=bound) │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ ║ │ o: Var (name=arm) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, joinType=Cartesian product) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) @@ -10142,13 +10210,13 @@ Projection │ ║ │ o: Var (name=trial) (bindingState=unbound) │ ║ └── ExtensionElem (optTrial) │ ║ Var (name=trial) (bindingState=bound) - │ ║ GroupElem (_anon_having_614d870109bb4594e749ae1752c64e3c19b012345) + │ ║ GroupElem (_anon_having_483a537e636433f44b583e838d50a0511570123) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_614d870109bb4594e749ae1752c64e3c19b012345) + │ ╚══ ExtensionElem (_anon_having_483a537e636433f44b583e838d50a0511570123) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -10169,12 +10237,12 @@ SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?pathway HAVING (COUNT(DISTINCT ?drug) > 1) -256.919 ms/op +258.264 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 256.919 ms/op + 258.264 ms/op -# Run complete. Total time: 00:23:41 +# Run complete. Total time: 00:24:42 ``` From fb7c471633a72317ea5fe26a5fdc4609acde02f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 20:24:02 +0200 Subject: [PATCH 24/43] wip --- .../lmdb/benchmark/ThemeQueryBenchmark.java | 79 +- .../lmdb/benchmark/ThemeQueryExplain.java | 290 + .../lmdb/benchmark/explain-2026-04-20-2.md | 12094 ++++++++++++++++ .../lmdb/benchmark/results-2026-04-20-2.md | 10248 +++++++++++++ .../lmdb/benchmark/results-2026-04-20-3.md | 10248 +++++++++++++ 5 files changed, 32912 insertions(+), 47 deletions(-) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-2.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-2.md create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index ae8a3213c57..5473acf3a28 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -324,32 +324,6 @@ private File storeDirectory() { return new File(STORE_DIRECTORY, "complete"); } - private void configureBenchmarkEstimatorProperties() { -// previousEstimatorNominalEntries = System.getProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY); -// if (previousEstimatorNominalEntries == null) { -// System.setProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY, BENCHMARK_ESTIMATOR_NOMINAL_ENTRIES); -// } -// previousEstimatorSketchK = System.getProperty(ESTIMATOR_SKETCH_K_PROPERTY); -// if (previousEstimatorSketchK == null) { -// System.setProperty(ESTIMATOR_SKETCH_K_PROPERTY, BENCHMARK_ESTIMATOR_SKETCH_K); -// } - } - - private void restoreBenchmarkEstimatorProperties() { -// if (previousEstimatorNominalEntries == null) { -// System.clearProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY); -// } else { -// System.setProperty(ESTIMATOR_NOMINAL_ENTRIES_PROPERTY, previousEstimatorNominalEntries); -// } -// previousEstimatorNominalEntries = null; -// if (previousEstimatorSketchK == null) { -// System.clearProperty(ESTIMATOR_SKETCH_K_PROPERTY); -// } else { -// System.setProperty(ESTIMATOR_SKETCH_K_PROPERTY, previousEstimatorSketchK); -// } -// previousEstimatorSketchK = null; - } - private void captureQueryPlanSnapshot() throws IOException { var benchmarkQuery = ThemeQueryCatalog.benchmarkQueryFor(theme, z_queryIndex); var featureFlags = new FeatureFlagCollector() @@ -489,25 +463,25 @@ public void explainQuery() { // if(true) throw new IllegalStateException(); - System.out.println("=== Explanation for theme " + themeName + " and query index " + z_queryIndex + " ==="); - System.out.println("Query:\n" + query); - System.out.println(); - - try (SailRepositoryConnection connection = repository.getConnection()) { - try (RepositoryResult statements = connection.getStatements(null, RDF.TYPE, - Values.iri("http://example.com/theme/library/Copy"))) { - System.out.println("Count of statements with rdf:type http://example.com/theme/library/Copy: " - + statements.stream().count()); - } - } - - try (SailRepositoryConnection connection = repository.getConnection()) { - try (RepositoryResult statements = connection.getStatements(null, - Values.iri("http://example.com/theme/library/locatedAt"), null)) { - System.out.println("Count of statements with http://example.com/theme/library/locatedAt: " - + statements.stream().count()); - } - } +// System.out.println("=== Explanation for theme " + themeName + " and query index " + z_queryIndex + " ==="); +// System.out.println("Query:\n" + query); +// System.out.println(); +// +// try (SailRepositoryConnection connection = repository.getConnection()) { +// try (RepositoryResult statements = connection.getStatements(null, RDF.TYPE, +// Values.iri("http://example.com/theme/library/Copy"))) { +// System.out.println("Count of statements with rdf:type http://example.com/theme/library/Copy: " +// + statements.stream().count()); +// } +// } +// +// try (SailRepositoryConnection connection = repository.getConnection()) { +// try (RepositoryResult statements = connection.getStatements(null, +// Values.iri("http://example.com/theme/library/locatedAt"), null)) { +// System.out.println("Count of statements with http://example.com/theme/library/locatedAt: " +// + statements.stream().count()); +// } +// } try { // QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = false; @@ -524,12 +498,23 @@ public void explainQuery() { // } // QueryJoinOptimizer.REORDER_JOINS_WITH_SKETCHES = true; try (var connection = repository.getConnection()) { - System.out.println("=== Explanation with join reordering enabled ==="); + System.out.println("=== Explanation Optimized ==="); Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); System.out.println(explain); System.out.println(); TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); - System.out.println("=== Rendered optimized TupleExpr with join reordering enabled ==="); + System.out.println("=== Rendered Optimized TupleExpr ==="); + System.out.println(new TupleExprIRRenderer().render(tupleExpr)); + System.out.println(); + + } + try (var connection = repository.getConnection()) { + System.out.println("=== Explanation Telemetry ==="); + Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Telemetry); + System.out.println(explain); + System.out.println(); + TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); + System.out.println("=== Rendered Telemetry TupleExpr ==="); System.out.println(new TupleExprIRRenderer().render(tupleExpr)); System.out.println(); System.out.println(); diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java new file mode 100644 index 00000000000..907ded5fa57 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java @@ -0,0 +1,290 @@ +/******************************************************************************* + * Copyright (c) 2025 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.benchmark; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Properties; + +import org.apache.commons.io.FileUtils; +import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.query.TupleQuery; +import org.eclipse.rdf4j.query.TupleQueryResult; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.repository.util.RDFInserter; +import org.eclipse.rdf4j.sail.lmdb.LmdbStore; +import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; +import org.openjdk.jmh.runner.RunnerException; + +public class ThemeQueryExplain { + + private static final String STORE_NAME = "lmdb"; + private static final String TARGET_DIRECTORY_ROOT = "core/sail/lmdb/"; + private static final File STORE_DIRECTORY; + + static { + File target = new File("target", "lmdb-theme-query-benchmark"); + if (target.getAbsolutePath().toLowerCase().contains(TARGET_DIRECTORY_ROOT)) { + STORE_DIRECTORY = target; + } else { + // In case the benchmark is run from an IDE with a different working directory, we want to ensure the store + // directory is still in the target directory of the project. + STORE_DIRECTORY = new File(TARGET_DIRECTORY_ROOT + "target", "lmdb-theme-query-benchmark"); + } + } + + private static final String TRIPLES_DATA_FILE = "triples/data.mdb"; + private static final String VALUES_DATA_FILE = "values/data.mdb"; + private static final String EXPECTED_DB_FILE_SIZES_FILE = "expected-db-file-sizes.properties"; + private static final String TRIPLES_DATA_SIZE_PROPERTY = "triples.data.mdb.size.bytes"; + private static final String VALUES_DATA_SIZE_PROPERTY = "values.data.mdb.size.bytes"; + private static final long EXPECTED_TRIPLES_DATA_SIZE_BYTES = 1500921856L; + private static final long EXPECTED_VALUES_DATA_SIZE_BYTES = 713687040L; + + private static SailRepository repository; + private static LmdbStore store; + private static LmdbStoreConfig storeConfig; + + public static void main(String[] args) throws RunnerException, IOException { + File storeDirectory = storeDirectory(); + + var storeConfig = ConfigUtil.createConfig(); + var store = new LmdbStore(storeDirectory, storeConfig); + repository = new SailRepository(store); + try { + ensureDataLoadedAndValidated(); + for (int i = 0; i < 10; i++) { + var query = ThemeQueryCatalog.queryFor(Theme.MEDICAL_RECORDS, 0); + try (SailRepositoryConnection connection = repository.getConnection()) { + TupleQuery tupleQuery = connection.prepareTupleQuery(query); + try (TupleQueryResult result = tupleQuery.evaluate()) { + long count = result.stream().count(); + } + } + } + + for (var theme : Theme.values()) { + for (int z_queryIndex = 0; z_queryIndex <= 10; z_queryIndex++) { + System.out.println("Theme: " + theme + " z_queryIndex: " + z_queryIndex); + var query = ThemeQueryCatalog.queryFor(theme, z_queryIndex); + + var connection = repository.getConnection(); + try { + System.out.println("=== Explanation Telemetry ==="); + TupleQuery tupleQuery = connection.prepareTupleQuery(query); + tupleQuery.setMaxExecutionTime(30); + long l = System.currentTimeMillis(); + Explanation explain = tupleQuery.explain(Explanation.Level.Telemetry); + int l1 = (int) (System.currentTimeMillis() - l); + System.out.println("Initial explain execution time: " + l1 + " ms"); + if (l1 < 2000) { + int max = (int) (2000 / l1); + max = Math.min(max, 10); + int minTime = l1; + for (int i = 0; i < max; i++) { + System.out.println("Warmup execution " + (i + 1) + "/" + max); + connection.close(); + connection = repository.getConnection(); + + tupleQuery = connection.prepareTupleQuery(query); + tupleQuery.setMaxExecutionTime(30); + long l2 = System.currentTimeMillis(); + + try (TupleQueryResult evaluate = tupleQuery.evaluate()) { + long count = evaluate.stream().count(); + } + minTime = (int) Math.min(minTime, System.currentTimeMillis() - l2); + } + System.out.println("Fastest execution time: " + minTime + " ms"); + + tupleQuery = connection.prepareTupleQuery(query); + tupleQuery.setMaxExecutionTime(30); + explain = tupleQuery.explain(Explanation.Level.Telemetry); + } + System.out.println(); + System.out.println(explain); + System.out.println(); + } finally { + connection.close(); + } + + connection = repository.getConnection(); + try { + System.out.println("=== Explanation Optimized ==="); + Explanation explain = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + System.out.println(explain); + System.out.println(); + TupleExpr tupleExpr = (TupleExpr) explain.tupleExpr(); + System.out.println("=== Rendered Optimized TupleExpr ==="); + System.out.println(new TupleExprIRRenderer().render(tupleExpr)); + System.out.println(); + System.out.println(); + + } finally { + connection.close(); + } + } + + } + } finally { + repository.shutDown(); + } + + } + + private static void ensureDataLoadedAndValidated() throws IOException { + var expectedDbFileSizes = readExpectedDbFileSizes(); + if (!hasExpectedDbFileSizes(expectedDbFileSizes)) { + rebuildStoreFromScratch(); + expectedDbFileSizes = currentDbFileSizes(); + writeExpectedDbFileSizes(expectedDbFileSizes); + } + + if (!hasExpectedDbFileSizes(expectedDbFileSizes)) { + var currentDbFileSizes = currentDbFileSizes(); + throw new IllegalStateException("Unexpected LMDB db file sizes in fixed benchmark store. Expected " + + TRIPLES_DATA_FILE + "=" + expectedDbFileSizes.triplesDataSizeBytes + " and " + + VALUES_DATA_FILE + "=" + expectedDbFileSizes.valuesDataSizeBytes + " but got " + + TRIPLES_DATA_FILE + "=" + currentDbFileSizes.triplesDataSizeBytes + " and " + + VALUES_DATA_FILE + "=" + currentDbFileSizes.valuesDataSizeBytes); + } + + if (!expectedDbFileSizeFile().isFile()) { + writeExpectedDbFileSizes(expectedDbFileSizes); + } + } + + private static void rebuildStoreFromScratch() throws IOException { + File storeDirectory = storeDirectory(); + if (repository != null) { + repository.shutDown(); + } + + FileUtils.deleteDirectory(storeDirectory); + if (!storeDirectory.exists() && !storeDirectory.mkdirs()) { + throw new IOException("Unable to recreate fixed LMDB benchmark directory: " + storeDirectory); + } + + storeConfig = ConfigUtil.createConfig(); + store = new LmdbStore(storeDirectory, storeConfig); + repository = new SailRepository(store); +// BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(); + + repository.shutDown(); + repository = null; + store = null; + + System.gc(); + + store = new LmdbStore(storeDirectory, storeConfig); + repository = new SailRepository(store); + } + + private static DbFileSizes readExpectedDbFileSizes() throws IOException { + var expectedDbFileSizeFile = expectedDbFileSizeFile(); + if (!expectedDbFileSizeFile.isFile()) { + return defaultExpectedDbFileSizes(); + } + var properties = new Properties(); + try (var inputStream = new FileInputStream(expectedDbFileSizeFile)) { + properties.load(inputStream); + } + try { + return new DbFileSizes( + parseSizeProperty(properties, TRIPLES_DATA_SIZE_PROPERTY), + parseSizeProperty(properties, VALUES_DATA_SIZE_PROPERTY)); + } catch (IllegalStateException e) { + System.out.println("Ignoring invalid expected LMDB size file " + expectedDbFileSizeFile + ": " + + e.getMessage()); + if (!expectedDbFileSizeFile.delete()) { + System.out.println("Unable to delete invalid expected LMDB size file: " + expectedDbFileSizeFile); + } + return defaultExpectedDbFileSizes(); + } + } + + private static void writeExpectedDbFileSizes(DbFileSizes expectedDbFileSizes) throws IOException { + var properties = new Properties(); + properties.setProperty(TRIPLES_DATA_SIZE_PROPERTY, Long.toString(expectedDbFileSizes.triplesDataSizeBytes)); + properties.setProperty(VALUES_DATA_SIZE_PROPERTY, Long.toString(expectedDbFileSizes.valuesDataSizeBytes)); + try (var outputStream = new FileOutputStream(expectedDbFileSizeFile())) { + properties.store(outputStream, "Expected LMDB data file sizes for ThemeQueryBenchmark"); + } + } + + private static long parseSizeProperty(Properties properties, String propertyName) { + var value = properties.getProperty(propertyName); + if (value == null) { + throw new IllegalStateException("Missing property " + propertyName); + } + try { + return Long.parseLong(value); + } catch (NumberFormatException e) { + throw new IllegalStateException("Invalid long value for property " + propertyName + ": " + value, e); + } + } + + private static DbFileSizes defaultExpectedDbFileSizes() { + return new DbFileSizes(EXPECTED_TRIPLES_DATA_SIZE_BYTES, EXPECTED_VALUES_DATA_SIZE_BYTES); + } + + private static DbFileSizes currentDbFileSizes() { + return new DbFileSizes(dbFileSize(TRIPLES_DATA_FILE), dbFileSize(VALUES_DATA_FILE)); + } + + private static boolean hasExpectedDbFileSizes(DbFileSizes expectedDbFileSizes) { + var currentDbFileSizes = currentDbFileSizes(); + return currentDbFileSizes.triplesDataSizeBytes == expectedDbFileSizes.triplesDataSizeBytes + && currentDbFileSizes.valuesDataSizeBytes == expectedDbFileSizes.valuesDataSizeBytes; + } + + private static File expectedDbFileSizeFile() { + return new File(storeDirectory(), EXPECTED_DB_FILE_SIZES_FILE); + } + + private static long dbFileSize(String relativePath) { + return new File(storeDirectory(), relativePath).length(); + } + + private static void loadData() throws IOException { + try (var connection = repository.getConnection()) { + connection.begin(IsolationLevels.READ_COMMITTED); + var inserter = new RDFInserter(connection); +// System.out.println("Loading theme dataset: " + theme); +// ThemeDataSetGenerator.generate(theme, inserter); + for (var themeDataset : Theme.values()) { + System.out.println("Loading theme dataset: " + themeDataset); + ThemeDataSetGenerator.generate(themeDataset, inserter); + } + connection.commit(); + } + } + + private static File storeDirectory() { +// return new File(STORE_DIRECTORY, theme.name().toLowerCase()); + return new File(STORE_DIRECTORY, "complete"); + } + + private record DbFileSizes(long triplesDataSizeBytes, long valuesDataSizeBytes) { + } + +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-2.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-2.md new file mode 100644 index 00000000000..b02579c4087 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-2.md @@ -0,0 +1,12094 @@ +Theme: MEDICAL_RECORDS z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 178 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 54 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=5.9K, firstRowTimeNanosActual=107.7M, openCountActual=1, lastRowTimeNanosActual=107.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=5.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=3.5K, firstRowTimeNanosActual=107.7M, openCountActual=1, lastRowTimeNanosActual=107.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=3.6K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=29.1K, firstRowTimeNanosActual=107.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=107.7M, maxGroupSizeActual=29.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=29.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=29.1K, rowsDroppedActual=29.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=250) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K, hasNextCallCountActual=29.1K, hasNextTrueCountActual=29.1K, hasNextTimeNanosActual=97.6M, nextCallCountActual=29.1K, nextTimeNanosActual=338.3K, joinRightIteratorsCreatedActual=14.5K, joinLeftBindingsConsumedActual=14.5K, joinRightBindingsConsumedActual=29.1K, firstRowTimeNanosActual=107.9K, leftRowsWithMatchActual=14.5K, openCountActual=1, lastRowTimeNanosActual=107.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=43.6K, rowsDroppedActual=14.5K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=12, leftRowsProbedActual=14.5K, rightRowsScannedActual=29.1K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=14.5K, hasNextCallCountActual=14.5K, hasNextTrueCountActual=14.5K, hasNextTimeNanosActual=75.9M, nextCallCountActual=14.5K, nextTimeNanosActual=208.0K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=14.5K, sourceRowsFilteredActual=10.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=87.0K, exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, openCountActual=1, exprTrueCountActual=14.5K, lastRowTimeNanosActual=107.3M, closeCountActual=1, exprEvalTimeNanosActual=18.1M, inputRowsActual=24.9K, rowsDroppedActual=10.4K, selectivityActual=0.58, expansionFactorActual=0.58, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.2K, avgNextNanosActual=14, filterRejectRateActual=0.42) [left] +│ ║ │ ╠══ Compare (>=) (exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, exprTrueCountActual=14.5K, exprEvalTimeNanosActual=15.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="2024-06-01"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=12.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=55.6M, nextCallCountActual=24.9K, nextTimeNanosActual=321.3K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=65.0K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=107.2M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=13, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=923.2K, nextCallCountActual=8.3K, nextTimeNanosActual=569.9K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=22.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=107.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=68, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=44.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=2.1K, openCountActual=8.3K, lastRowTimeNanosActual=8.3K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=668, avgNextNanosActual=46) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=958, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=8.2K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=183, avgNextNanosActual=50, indexHitRateActual=0.75) [left] +│ ║ │ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.6M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=792, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.4K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=253, avgNextNanosActual=48, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optDate) (hasNextFalseCountActual=0) +│ ║ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=29.1K, hasNextCallCountActual=72.9K, hasNextTrueCountActual=58.3K, hasNextTimeNanosActual=7.6M, nextCallCountActual=29.1K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=43.6K, sourceRowsMatchedActual=29.1K, sourceRowsFilteredActual=14.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=14.5K, openCountActual=14.5K, lastRowTimeNanosActual=2.0K, closeCountActual=14.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=14.5K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=104, avgNextNanosActual=40, indexHitRateActual=0.67) [right] +│ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (>=) +│ ║ │ ║ Var (name=optDate) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="2024-06-01"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) +│ ║ │ ║ o: Var (name=date) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optDate) +│ ║ │ Var (name=date) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] +│ ║ s: Var (name=patient) (bindingState=bound) +│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ o: Var (name=med) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?date . +BIND(?date AS ?optDate) +} +FILTER (?optDate >= "2024-06-01"^^) +OPTIONAL { +?patient ?med . +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 307 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 125 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=3.7K, firstRowTimeNanosActual=232.8M, openCountActual=1, lastRowTimeNanosActual=232.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=3.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=232.8M, openCountActual=1, lastRowTimeNanosActual=232.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=58.0K, firstRowTimeNanosActual=232.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=232.8M, maxGroupSizeActual=58.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=58.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=58.0K, rowsDroppedActual=58.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=542) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=190.7M, nextCallCountActual=58.0K, nextTimeNanosActual=669.0K, joinRightIteratorsCreatedActual=58.0K, joinLeftBindingsConsumedActual=58.0K, joinRightBindingsConsumedActual=58.0K, firstRowTimeNanosActual=120.2K, leftRowsWithMatchActual=58.0K, openCountActual=1, lastRowTimeNanosActual=232.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=116.1K, rowsDroppedActual=58.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=12, leftRowsProbedActual=58.0K, rightRowsScannedActual=58.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Union (resultSizeActual=58.0K, hasNextFalseCountActual=0, leftRowsConsumedActual=58.0K, rightRowsConsumedActual=0, leftRowsOutputContributionActual=58.0K, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=102.4M, nextCallCountActual=58.0K, nextTimeNanosActual=598.4K, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=41.6K, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=108.9K, exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, openCountActual=1, exprTrueCountActual=58.0K, lastRowTimeNanosActual=232.6M, closeCountActual=1, exprEvalTimeNanosActual=19.3M, inputRowsActual=99.6K, rowsDroppedActual=41.6K, selectivityActual=0.58, expansionFactorActual=0.58, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=10, filterRejectRateActual=0.42) +│ ║ │ ║ ├── Or (exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, exprTrueCountActual=58.0K, shortCircuitCountActual=41.6K, exprEvalTimeNanosActual=12.4M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=99.6K, exprFalseCountActual=58.0K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=4.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=58.0K, exprFalseCountActual=41.6K, exprTrueCountActual=16.4K, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, resultSizeActual=99.6K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=49.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=49.8K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.2K, nextCallCountActual=2, nextTimeNanosActual=667, firstRowTimeNanosActual=94.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=107.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=403, avgNextNanosActual=334) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=66.5K, joinLeftBindingsConsumedActual=66.5K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=116.3K, rowsDroppedActual=66.5K, expansionFactorActual=0.43, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=66.5K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=0.75, joinOutputPerLeftActual=0.75) [right] +│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=67.2K, resultSizeActual=66.5K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=66.5K, hasNextTimeNanosActual=7.5M, nextCallCountActual=66.5K, nextTimeNanosActual=3.0M, sourceRowsScannedActual=66.5K, sourceRowsMatchedActual=66.5K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=39.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=205.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=46, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.6K, resultSizeActual=49.8K, hasNextCallCountActual=116.3K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=27.8M, nextCallCountActual=49.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=116.3K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=66.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=66.5K, openCountActual=66.5K, lastRowTimeNanosActual=3.8K, closeCountActual=66.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.5K, nextPerHasNextRatioActual=0.43, avgHasNextNanosActual=239, avgNextNanosActual=40, indexHitRateActual=0.43) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=33.3K, rowsDroppedActual=33.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=4.3M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=500, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, resultSizeActual=33.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=16.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=16.7K) +│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.8K, nextCallCountActual=2, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=206.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=206.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=611, avgNextNanosActual=646) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=33.3K, rowsDroppedActual=16.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=16.6K, nextTimeNanosActual=661.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=206.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=232.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.1M, nextCallCountActual=16.6K, nextTimeNanosActual=530.4K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=417, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=1.2K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=243, avgNextNanosActual=32, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=58.0K, hasNextCallCountActual=116.1K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=22.8M, nextCallCountActual=58.0K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=116.1K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=58.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=58.0K, openCountActual=58.0K, lastRowTimeNanosActual=667, closeCountActual=58.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=197, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=alt) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=code) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="DX-202") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=code) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=code) (bindingState=bound) +│ ║ │ │ ValueConstant (value="DX-202") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ o: Var (name=alt) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity ?code . +?entity a . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +UNION +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity a . +?entity ?code . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +OPTIONAL { +?entity ?alt . +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 222 ms +Warmup execution 1/9 +Warmup execution 2/9 +Warmup execution 3/9 +Warmup execution 4/9 +Warmup execution 5/9 +Warmup execution 6/9 +Warmup execution 7/9 +Warmup execution 8/9 +Warmup execution 9/9 +Fastest execution time: 100 ms + +Projection (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=36.3K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=269) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "practitioner" (hasNextFalseCountActual=0) +║ ProjectionElem "encCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=19.6K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=146) +├── Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=11.1K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=83) +│ ╠══ Filter (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=2.3K, sourceRowsScannedActual=135, sourceRowsMatchedActual=135, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=173.0M, exprEvalCountActual=135, openCountActual=1, exprTrueCountActual=135, lastRowTimeNanosActual=173.2M, closeCountActual=1, exprEvalTimeNanosActual=88.1K, inputRowsActual=135, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=17, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=135, exprTrueCountActual=135, exprEvalTimeNanosActual=76.8K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=16.2K, hasNextFalseCountActual=0) +│ ║ └── Group (practitioner) (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.0M, nextCallCountActual=135, nextTimeNanosActual=3.5K, aggregateEvalCountActual=532, firstRowTimeNanosActual=173.0M, groupsCreatedActual=135, openCountActual=1, lastRowTimeNanosActual=173.2M, maxGroupSizeActual=3, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.97, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=266, rowsDroppedActual=131, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=26) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=266, hasNextCallCountActual=268, hasNextTrueCountActual=267, hasNextTimeNanosActual=172.2M, nextCallCountActual=266, nextTimeNanosActual=3.5K, joinRightIteratorsCreatedActual=135, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=266, firstRowTimeNanosActual=169.2K, leftRowsWithMatchActual=135, openCountActual=1, lastRowTimeNanosActual=172.8M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=401, rowsDroppedActual=135, expansionFactorActual=0.66, sampleCountActual=2, varianceActual=0.98, stddevActual=0.99, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=642.9K, avgNextNanosActual=13, leftRowsProbedActual=135, rightRowsScannedActual=266, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K, resultSizeActual=135, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=135, inputRowsActual=25.1K, rowsDroppedActual=24.9K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=19, stddevActual=4.38, confidenceScoreActual=0.27, hasNextFalseCountActual=0, leftRowsProbedActual=135, rightRowsScannedActual=135, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.7M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=16.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=172.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=148, avgNextNanosActual=41, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=17.6M, nextCallCountActual=24.9K, nextTimeNanosActual=688.5K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=6.7K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=353, avgNextNanosActual=28, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, resultSizeActual=135, hasNextCallCountActual=25.1K, hasNextTrueCountActual=135, hasNextTimeNanosActual=83.9M, nextCallCountActual=135, nextTimeNanosActual=1.9K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=135, sourceRowsFilteredActual=24.8K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=666, exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, openCountActual=24.9K, exprTrueCountActual=135, lastRowTimeNanosActual=4.2K, closeCountActual=24.9K, exprEvalTimeNanosActual=20.5M, inputRowsActual=24.9K, rowsDroppedActual=24.8K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=3.3K, avgNextNanosActual=14, filterRejectRateActual=0.99) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, exprTrueCountActual=135, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=731.8K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2024-02-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=643.8K, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=10.0M, nextCallCountActual=24.9K, nextTimeNanosActual=671.2K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=202, avgNextNanosActual=27, indexHitRateActual=0.50) +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=266, hasNextCallCountActual=663, hasNextTrueCountActual=528, hasNextTimeNanosActual=83.1K, nextCallCountActual=266, nextTimeNanosActual=9.2K, sourceRowsScannedActual=401, sourceRowsMatchedActual=266, sourceRowsFilteredActual=135, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=135, openCountActual=135, lastRowTimeNanosActual=2.5K, closeCountActual=135, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=135, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=125, avgNextNanosActual=35, indexHitRateActual=0.66) [right] +│ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (encCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (encCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (practitioner) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=date) (bindingState=bound) +│ ║ │ │ ValueConstant (value="2024-01-01"^^) +│ ║ │ │ ValueConstant (value="2024-02-01"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) +│ ║ │ o: Var (name=date) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] +│ ║ s: Var (name=enc) (bindingState=bound) +│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ o: Var (name=cond) (bindingState=unbound) +│ ║ GroupElem (_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=enc) (bindingState=bound) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=enc) (bindingState=unbound) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc ?practitioner . +?enc a . +?enc ?date . +FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) +OPTIONAL { +?enc ?cond . +} +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + + +Theme: MEDICAL_RECORDS z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 194 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 93 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=152.9M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=152.9M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=708) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=38.7K, firstRowTimeNanosActual=152.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=152.9M, maxGroupSizeActual=38.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=38.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38.7K, rowsDroppedActual=38.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=542) +│ ╠══ Difference (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=141.6M, nextCallCountActual=38.7K, nextTimeNanosActual=366.9K, firstRowTimeNanosActual=18.8M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=9.47, leftRowsConsumedActual=38.7K, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=117.7M, nextCallCountActual=38.7K, nextTimeNanosActual=459.8K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=38.7K, sourceRowsFilteredActual=10.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=37.2K, exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, openCountActual=1, exprTrueCountActual=38.7K, lastRowTimeNanosActual=152.8M, closeCountActual=1, exprEvalTimeNanosActual=15.8M, inputRowsActual=49.6K, rowsDroppedActual=10.8K, selectivityActual=0.78, expansionFactorActual=0.78, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=12, filterRejectRateActual=0.22) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, exprTrueCountActual=38.7K, exprEvalTimeNanosActual=12.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=17.9K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=98.6M, nextCallCountActual=49.6K, nextTimeNanosActual=549.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=49.6K, firstRowTimeNanosActual=35.9K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=152.8M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=57.9K, rowsDroppedActual=8.3K, expansionFactorActual=0.86, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=11, leftRowsProbedActual=8.3K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=5.96, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.96, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=933.4K, nextCallCountActual=8.3K, nextTimeNanosActual=500.8K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=152.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=60, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=49.6K, hasNextCallCountActual=140.6K, hasNextTrueCountActual=132.3K, hasNextTimeNanosActual=87.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, firstRowTimeNanosActual=2.2K, openCountActual=8.3K, lastRowTimeNanosActual=11.8K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=620, avgNextNanosActual=41) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=49.6K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=99.3K, rowsDroppedActual=49.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] +│ ║ │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.4M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=11.6K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=193, avgNextNanosActual=42, indexHitRateActual=0.75) [left] +│ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ o: Var (name=_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=12.6M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=958, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.6K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=170, avgNextNanosActual=41, indexHitRateActual=0.67) [right] +│ ║ │ ║ │ s: Var (name=_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.2K, resultSizeActual=49.6K, hasNextCallCountActual=99.3K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=20.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=99.3K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=49.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=49.6K, openCountActual=49.6K, lastRowTimeNanosActual=1.1K, closeCountActual=49.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=203, avgNextNanosActual=43, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=18.7M, sourceRowsScannedActual=21.4K, sourceRowsFilteredActual=21.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, openCountActual=1, lastRowTimeNanosActual=18.7M, closeCountActual=1, exprEvalTimeNanosActual=15.7M, inputRowsActual=21.4K, rowsDroppedActual=21.4K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=18.7M, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, exprEvalTimeNanosActual=14.6M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=12.2M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=10.6M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="test") (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=679.8K, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=21.4K, resultSizeActual=21.4K, hasNextCallCountActual=21.4K, hasNextTrueCountActual=21.4K, hasNextTimeNanosActual=1.2M, nextCallCountActual=21.4K, nextTimeNanosActual=664.5K, sourceRowsScannedActual=21.4K, sourceRowsMatchedActual=21.4K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=18.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=60, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="60"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] +│ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) +│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ │ ║ o: Var (name=_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=unbound) +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ │ s: Var (name=_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=obs) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optValue) +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="test") +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) +│ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient / ?obs . +?obs ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 60) +MINUS { +?patient ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "test")) +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 429 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 221 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=3.0K, firstRowTimeNanosActual=413.3M, openCountActual=1, lastRowTimeNanosActual=413.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=3.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=413.3M, openCountActual=1, lastRowTimeNanosActual=413.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=1.4K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=709, aggregateEvalCountActual=41.6K, firstRowTimeNanosActual=413.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=413.3M, maxGroupSizeActual=41.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=41.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=41.6K, rowsDroppedActual=41.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=709) +│ ╠══ Filter (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=389.4M, nextCallCountActual=41.6K, nextTimeNanosActual=542.3K, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.1K, exprEvalCountActual=41.6K, openCountActual=1, exprTrueCountActual=41.6K, lastRowTimeNanosActual=413.1M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=37.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=41.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.4K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Exists (exprEvalCountActual=41.6K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=34.7M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=0, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=14.5M, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, plannedIndexName=spoc, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=291, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=351, indexHitRateActual=1.00) +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=347.6M, nextCallCountActual=41.6K, nextTimeNanosActual=546.9K, joinRightIteratorsCreatedActual=41.6K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, firstRowTimeNanosActual=31.1K, leftRowsWithMatchActual=41.6K, openCountActual=1, lastRowTimeNanosActual=413.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=83.2K, rowsDroppedActual=41.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.09, stddevActual=0.30, confidenceScoreActual=0.61, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.4K, avgNextNanosActual=13, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K, resultSizeActual=41.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, inputRowsActual=91.4K, rowsDroppedActual=49.8K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=74.8K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=25.3K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=10.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=413.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=125, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.7K, resultSizeActual=49.8K, hasNextCallCountActual=74.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=17.1M, nextCallCountActual=49.8K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.0K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=21.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=229, avgNextNanosActual=44, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=44.1K, resultSizeActual=41.6K, hasNextCallCountActual=91.4K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=151.7M, nextCallCountActual=41.6K, nextTimeNanosActual=521.5K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=8.2K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=792, exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, openCountActual=49.8K, exprTrueCountActual=41.6K, lastRowTimeNanosActual=3.3K, closeCountActual=49.8K, exprEvalTimeNanosActual=11.3M, inputRowsActual=49.8K, rowsDroppedActual=8.2K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.17) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, exprTrueCountActual=41.6K, shortCircuitCountActual=24.9K, exprEvalTimeNanosActual=7.8M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=49.8K, exprFalseCountActual=24.8K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=3.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="DX-200") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=24.8K, exprFalseCountActual=8.2K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=22.0M, nextCallCountActual=49.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=666, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=1.0K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=222, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=41.6K, hasNextCallCountActual=83.2K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=16.3M, nextCallCountActual=41.6K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=83.2K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=41.6K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=1.4K, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=41.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=196, avgNextNanosActual=38, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.7K) +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ o: Var (name=obs) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ ║ │ o: Var (name=cond) (bindingState=unbound) +│ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=code) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="DX-200") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=code) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="DX-201") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ ║ s: Var (name=cond) (bindingState=bound) +│ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ ║ o: Var (name=code) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] +│ ║ s: Var (name=enc) (bindingState=bound) +│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ o: Var (name=practitioner) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=enc) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a . +?enc ?cond . +?cond ?code . +FILTER ((?code = "DX-200") || (?code = "DX-201")) +OPTIONAL { +?enc ?practitioner . +} +FILTER EXISTS { +?enc ?obs . +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 92 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 51 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=50.0M, openCountActual=1, lastRowTimeNanosActual=50.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=2.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=50.0M, openCountActual=1, lastRowTimeNanosActual=50.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=50.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=50.0M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=667, avgGroupSizeActual=0) +│ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, resultSizeActual=0, joinType=Cartesian product, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ├── Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=49.9M, sourceRowsScannedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, openCountActual=1, lastRowTimeNanosActual=49.9M, closeCountActual=1, exprEvalTimeNanosActual=3.5M, inputRowsActual=3.0K, rowsDroppedActual=3.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=49.9M, filterRejectRateActual=1.00) [left] +│ ║ │ ╠══ Not (exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, exprEvalTimeNanosActual=3.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Exists (exprEvalCountActual=3.0K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=3.1M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.6M, sourceRowsScannedActual=3.0K, sourceRowsMatchedActual=3.0K, plannedIndexName=spoc, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=625, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=527, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=8.05, stddevActual=2.84, confidenceScoreActual=0.34, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=13, stddevActual=3.58, confidenceScoreActual=0.30, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinLeftBindingsConsumedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=58, stddevActual=7.63, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=3.0K, rightRowsScannedActual=3.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, resultSizeActual=3.0K, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=34.7M, nextCallCountActual=3.0K, nextTimeNanosActual=36.7K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=46.6K, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=48.5K, exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, openCountActual=1, exprTrueCountActual=3.0K, lastRowTimeNanosActual=49.9M, optimizer.candidateCount=16, closeCountActual=1, optimizer.score=25.4K, exprEvalTimeNanosActual=26.5M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=49.6K, rowsDroppedActual=46.6K, selectivityActual=0.06, expansionFactorActual=0.06, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.4K, avgNextNanosActual=12, filterRejectRateActual=0.94) [left] +│ ║ │ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) (exprEvalCountActual=49.6K, exprTrueCountActual=49.6K, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=48.6K, exprTrueCountActual=48.6K, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) (exprEvalCountActual=47.5K, exprTrueCountActual=47.5K, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.2M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=17.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=49.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=63, avgNextNanosActual=45, indexHitRateActual=1.00) +│ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ └── StatementPattern [index: ospc] (costEstimate=111, resultSizeEstimate=49.7K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=2.4M, nextCallCountActual=3.0K, nextTimeNanosActual=128.0K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=ospc, firstRowTimeNanosActual=459, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=3.5K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=397, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: ospc] (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.2M, nextCallCountActual=3.0K, nextTimeNanosActual=119.3K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=ospc, firstRowTimeNanosActual=417, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=2.6K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=39, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=8.3K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=2.5M, nextCallCountActual=3.0K, nextTimeNanosActual=106.9K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=1.7K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=411, avgNextNanosActual=35, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +│ ║ │ ╠══ Not +│ ║ │ ║ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ ║ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ ║ o: Var (name=cond) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ │ ║ │ ╠══ ListMemberOperator +│ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) +│ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) +│ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) +│ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) +│ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) +│ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) +│ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) +│ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] +│ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) +│ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ │ o: Var (name=enc) (bindingState=bound) +│ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] +│ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?obs ?value . +FILTER (?value IN (50, 60, 70)) +?enc ?obs . +?patient ?enc . +?patient a . +FILTER NOT EXISTS { +?enc ?cond . +} +VALUES ?limit { 55 } +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 150 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 69 ms + +Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.5M, nextCallCountActual=8.3K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=140) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "patient" (hasNextFalseCountActual=0) +║ ProjectionElem "medCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.3M, nextCallCountActual=8.3K, nextTimeNanosActual=886.7K, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=106) +├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.1M, nextCallCountActual=8.3K, nextTimeNanosActual=451.3K, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=54) +│ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=117.9M, nextCallCountActual=8.3K, nextTimeNanosActual=87.5K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=115.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=120.7M, closeCountActual=1, exprEvalTimeNanosActual=1.5M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.1K, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=904.0K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=36.0K, hasNextFalseCountActual=0) +│ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=115.7M, nextCallCountActual=8.3K, nextTimeNanosActual=122.4K, aggregateEvalCountActual=133.6K, firstRowTimeNanosActual=115.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=120.7M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=8.02, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.8K, rowsDroppedActual=58.4K, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.9K, avgNextNanosActual=15) +│ ║ Filter (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=78.6M, nextCallCountActual=66.8K, nextTimeNanosActual=959.0K, sourceRowsScannedActual=66.8K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.3K, exprEvalCountActual=66.8K, openCountActual=1, exprTrueCountActual=66.8K, lastRowTimeNanosActual=113.1M, closeCountActual=1, exprEvalTimeNanosActual=7.4M, inputRowsActual=66.8K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=66.8K, exprTrueCountActual=66.8K, exprEvalTimeNanosActual=2.6M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optMed) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=66.5M, nextCallCountActual=66.8K, nextTimeNanosActual=866.5K, joinRightIteratorsCreatedActual=33.3K, joinLeftBindingsConsumedActual=33.3K, joinRightBindingsConsumedActual=66.8K, firstRowTimeNanosActual=38.0K, leftRowsWithMatchActual=33.3K, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=100.1K, rowsDroppedActual=33.3K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=996, avgNextNanosActual=13, leftRowsProbedActual=33.3K, rightRowsScannedActual=66.8K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=33.3K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=33.3K, hasNextTimeNanosActual=6.7M, nextCallCountActual=33.3K, nextTimeNanosActual=608.3K, firstRowTimeNanosActual=21.7K, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=201, avgNextNanosActual=18, leftRowsConsumedActual=8.3K, rightRowsConsumedActual=24.9K, leftRowsOutputContributionActual=8.3K, rightRowsOutputContributionActual=24.9K) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=772.8K, nextCallCountActual=8.3K, nextTimeNanosActual=401.5K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=19.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=33.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=48, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=2.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=33.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=87, avgNextNanosActual=56, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=33.3M, nextCallCountActual=66.8K, nextTimeNanosActual=7.6M, firstRowTimeNanosActual=709, openCountActual=33.3K, lastRowTimeNanosActual=1.9K, closeCountActual=33.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=199, avgNextNanosActual=115) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=22.2M, nextCallCountActual=66.8K, nextTimeNanosActual=4.1M, sourceRowsScannedActual=100.1K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=33.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=33.3K, openCountActual=33.3K, lastRowTimeNanosActual=1.7K, closeCountActual=33.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=133, avgNextNanosActual=62, indexHitRateActual=0.67) +│ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optMed) (hasNextFalseCountActual=0) +│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (medCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (medCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (patient) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optMed) (bindingState=bound) +│ ║ │ Var (name=patient) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) +│ ║ ║ │ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) +│ ║ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ o: Var (name=enc) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ o: Var (name=med) (bindingState=unbound) +│ ║ └── ExtensionElem (optMed) +│ ║ Var (name=med) (bindingState=bound) +│ ║ GroupElem (_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123) +│ ║ Count +│ ║ Var (name=med) (bindingState=bound) +│ ║ GroupElem (medCount) +│ ║ Count (Distinct) +│ ║ Var (name=med) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123) +│ Count +│ Var (name=med) (bindingState=unbound) +└── ExtensionElem (medCount) +Count (Distinct) +Var (name=med) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ +?patient a . +} +UNION +{ +?patient ?enc . +} +OPTIONAL { +?patient ?med . +BIND(?med AS ?optMed) +} +FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + + +Theme: MEDICAL_RECORDS z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 185 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 89 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=147.8M, openCountActual=1, lastRowTimeNanosActual=147.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=147.8M, openCountActual=1, lastRowTimeNanosActual=147.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=875) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=500, firstRowTimeNanosActual=147.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=147.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=500, avgGroupSizeActual=0) +│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=147.7M, openCountActual=1, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=30.5K, rowsDroppedActual=30.5K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=147.8M, leftRowsConsumedActual=13.8K, rightRowsConsumedActual=16.6K, overlapRowsActual=13.8K) +│ ║ ├── Filter (resultSizeActual=13.8K, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=113.4M, nextCallCountActual=13.8K, nextTimeNanosActual=169.9K, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=21.8K, exprEvalCountActual=13.8K, openCountActual=1, exprTrueCountActual=13.8K, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=15.0M, metricOrigin.varsAddedActual=derived, inputRowsActual=13.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.2K, avgNextNanosActual=12, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=13.8K, exprTrueCountActual=13.8K, exprEvalTimeNanosActual=14.2M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=0, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=7.5M, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, plannedIndexName=ospc, indexLookupCountActual=13.8K, openCountActual=13.8K, lastRowTimeNanosActual=459, closeCountActual=13.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=544, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K, resultSizeActual=13.8K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=13.8K, inputRowsActual=30.5K, rowsDroppedActual=16.6K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=13.8K, avgRightRowsPerLeftActual=0.83, joinOutputPerLeftActual=0.83) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.7M, nextCallCountActual=16.6K, nextTimeNanosActual=698.2K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ │ Var (name=patient) +│ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ Var (name=med) +│ ║ │ │ , firstRowTimeNanosActual=7.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=42, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=13.7K, resultSizeActual=13.8K, hasNextCallCountActual=30.5K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=54.9M, nextCallCountActual=13.8K, nextTimeNanosActual=165.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=2.7K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, openCountActual=16.6K, exprTrueCountActual=13.8K, lastRowTimeNanosActual=5.4K, closeCountActual=16.6K, exprEvalTimeNanosActual=3.7M, inputRowsActual=16.6K, rowsDroppedActual=2.7K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.8K, avgNextNanosActual=12, filterRejectRateActual=0.17) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, exprTrueCountActual=13.8K, shortCircuitCountActual=8.3K, exprEvalTimeNanosActual=2.5M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=16.6K, exprFalseCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="MED-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.1K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=8.3K, exprFalseCountActual=2.7K, exprTrueCountActual=5.5K, exprEvalTimeNanosActual=429.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="MED-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=10.6M, nextCallCountActual=16.6K, nextTimeNanosActual=559.9K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=3.1K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=318, avgNextNanosActual=34, indexHitRateActual=0.50) +│ ║ │ s: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=7.4M, nextCallCountActual=16.6K, nextTimeNanosActual=161.8K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.8K, exprEvalCountActual=16.6K, openCountActual=1, exprTrueCountActual=16.6K, lastRowTimeNanosActual=15.2M, closeCountActual=1, exprEvalTimeNanosActual=4.6M, inputRowsActual=16.6K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=449, avgNextNanosActual=9.70, filterRejectRateActual=0) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=3.8M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=841.7K, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=dose) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="x") (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=443.1K, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=16.6K, nextTimeNanosActual=593.5K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=15.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=36, indexHitRateActual=1.00) +│ ║ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=dose) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ ║ o: Var (name=med) (bindingState=bound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ │ Var (name=patient) +│ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ Var (name=med) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=med) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=code) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="MED-1000") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=code) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="MED-1001") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ s: Var (name=med) (bindingState=bound) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=dose) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="x") +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) +│ ║ s: Var (name=med) (bindingState=unbound) +│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) +│ ║ o: Var (name=dose) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=med) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=med) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a . +?med ?code . +FILTER ((?code = "MED-1000") || (?code = "MED-1001")) +FILTER EXISTS { +?patient ?med . +} +MINUS { +?med ?dose . +FILTER (CONTAINS(LCASE(STR(?dose)), "x")) +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 106 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 64 ms + +Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=94.2M, nextCallCountActual=8.3K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=144) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "patient" (hasNextFalseCountActual=0) +║ ProjectionElem "encCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=94.0M, nextCallCountActual=8.3K, nextTimeNanosActual=907.0K, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=109) +├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.8M, nextCallCountActual=8.3K, nextTimeNanosActual=412.0K, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=49) +│ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.6M, nextCallCountActual=8.3K, nextTimeNanosActual=60.2K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=91.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=96.5M, closeCountActual=1, exprEvalTimeNanosActual=1.2M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.2K, avgNextNanosActual=7.23, filterRejectRateActual=0) +│ ║ ├── Compare (>=) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=611.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.7K, hasNextFalseCountActual=0) +│ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=91.7M, nextCallCountActual=8.3K, nextTimeNanosActual=137.4K, aggregateEvalCountActual=49.9K, firstRowTimeNanosActual=91.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=96.5M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24.9K, rowsDroppedActual=16.6K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.0K, avgNextNanosActual=16) +│ ║ Filter (resultSizeActual=24.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=24.9K, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=887.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optPractitioner) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=19.3M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=8.1M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, plannedIndexName=spoc, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=416, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=326, indexHitRateActual=1.00) +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=44.6M, nextCallCountActual=24.9K, nextTimeNanosActual=323.3K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=18.7K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=87.9M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=13, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=837.2K, nextCallCountActual=8.3K, nextTimeNanosActual=476.6K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=100, avgNextNanosActual=57, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=36.3M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=1.0K, openCountActual=8.3K, lastRowTimeNanosActual=8.1K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=545, avgNextNanosActual=42) [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=7.9K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=166, avgNextNanosActual=45, indexHitRateActual=0.75) [left] +│ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.0K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.8K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242, avgNextNanosActual=43, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optPractitioner) (hasNextFalseCountActual=0) +│ ║ Var (name=practitioner) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (encCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (encCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (patient) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) +│ ║ │ ║ Var (name=patient) (bindingState=bound) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ o: Var (name=cond) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ s: Var (name=patient) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ o: Var (name=enc) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound) +│ ║ └── ExtensionElem (optPractitioner) +│ ║ Var (name=practitioner) (bindingState=bound) +│ ║ GroupElem (_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0) +│ ║ Count +│ ║ Var (name=enc) (bindingState=bound) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0) +│ Count +│ Var (name=enc) (bindingState=unbound) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + + +Theme: MEDICAL_RECORDS z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 600 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 322 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=575.3M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=2.2K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=575.3M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=65.3K, firstRowTimeNanosActual=575.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=575.3M, maxGroupSizeActual=65.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=65.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=65.3K, rowsDroppedActual=65.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=708) +│ ╠══ Difference (resultSizeActual=65.3K, hasNextCallCountActual=65.3K, hasNextTrueCountActual=65.3K, hasNextTimeNanosActual=563.8M, nextCallCountActual=65.3K, nextTimeNanosActual=940.4K, firstRowTimeNanosActual=63.5M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, varsDroppedActual=4, metricOrigin.varsDroppedActual=derived, inputRowsActual=109.5K, rowsDroppedActual=44.1K, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.6K, avgNextNanosActual=14, leftRowsConsumedActual=99.6K, rightRowsConsumedActual=9.8K, overlapRowsActual=34.3K) +│ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=99.6K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=454.8M, nextCallCountActual=99.6K, nextTimeNanosActual=1.3M, joinRightIteratorsCreatedActual=99.6K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, firstRowTimeNanosActual=41.6K, leftRowsWithMatchActual=99.6K, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=199.3K, rowsDroppedActual=99.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.04, stddevActual=1.02, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.6K, avgNextNanosActual=14, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.1K, resultSizeActual=99.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, optimizer.candidateCount=9, optimizer.score=51.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=149.5K, rowsDroppedActual=49.8K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=2483.5M, stddevActual=49.8K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.1K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.8K) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=49.0K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.15, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=49.8K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=112, resultSizeEstimate=49.8K, resultSizeActual=49.8K, hasNextCallCountActual=49.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=5.6M, nextCallCountActual=49.8K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=575.3M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=47, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ └── Filter (costEstimate=255, resultSizeEstimate=65.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=148.5M, nextCallCountActual=49.8K, nextTimeNanosActual=648.7K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.97, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=1.5K, exprEvalCountActual=49.8K, openCountActual=49.8K, exprTrueCountActual=49.8K, lastRowTimeNanosActual=10.3K, closeCountActual=49.8K, exprEvalTimeNanosActual=11.8M, inputRowsActual=49.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.5K, avgNextNanosActual=13, filterRejectRateActual=0) [right] +│ ║ │ ║ │ ║ ╠══ ListMemberOperator (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=8.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=1.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=24.8K, exprTrueCountActual=24.8K, exprEvalTimeNanosActual=790.5K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") (exprEvalCountActual=8.2K, exprTrueCountActual=8.2K, exprEvalTimeNanosActual=358.8K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=26.2M, nextCallCountActual=49.8K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=7.7K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=74.9K, resultSizeEstimate=25.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=20.2M, nextCallCountActual=49.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=5.5K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=204, avgNextNanosActual=37, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=99.6K, hasNextCallCountActual=149.5K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=10.6M, nextCallCountActual=99.6K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=208, openCountActual=49.8K, bindingsProvidedActual=99.6K, lastRowTimeNanosActual=4.2K, closeCountActual=49.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=71, avgNextNanosActual=11) [right] +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=99.6K, hasNextCallCountActual=199.3K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=40.8M, nextCallCountActual=99.6K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=199.3K, sourceRowsMatchedActual=99.6K, sourceRowsFilteredActual=99.6K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=99.6K, openCountActual=99.6K, lastRowTimeNanosActual=1.4K, closeCountActual=99.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=99.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K, resultSizeActual=9.8K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=49.6K, joinRightBindingsConsumedActual=9.8K, inputRowsActual=59.5K, rowsDroppedActual=49.6K, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=49.6K, rightRowsScannedActual=9.8K, avgRightRowsPerLeftActual=0.20, joinOutputPerLeftActual=0.20) +│ ║ ╠══ StatementPattern [index: psoc] (costEstimate=3721.4M, resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.1M, nextCallCountActual=49.6K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=21.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=57.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=32, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Filter (new scope) (resultSizeActual=9.8K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.8K, hasNextTimeNanosActual=19.8M, nextCallCountActual=9.8K, nextTimeNanosActual=124.9K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=9.8K, sourceRowsFilteredActual=39.7K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.5K, exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, openCountActual=1, exprTrueCountActual=9.8K, lastRowTimeNanosActual=21.6M, closeCountActual=1, exprEvalTimeNanosActual=11.5M, inputRowsActual=49.6K, rowsDroppedActual=39.7K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, filterRejectRateActual=0.80) [right] +│ ║ ├── Compare (<) (exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, exprTrueCountActual=9.8K, exprEvalTimeNanosActual=8.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=6.6K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.2M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=9.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=41, indexHitRateActual=1.00) +│ ║ s: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── LeftJoin +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.3K, optimizer.candidateCount=9, optimizer.score=51.3K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.3K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=49.1K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) +│ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) +│ ║ │ ║ │ ║ └── Filter (costEstimate=255, resultSizeEstimate=65.2K, plannedFilterPassRatio=0.97, filterSelectivitySource=learned_filter) [right] +│ ║ │ ║ │ ║ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") +│ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) +│ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) +│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) +│ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] +│ ║ ║ s: Var (name=enc) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) (bindingState=unbound) +│ ║ ╚══ Filter (new scope) (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) [right] +│ ║ ├── Compare (<) +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ │ ValueConstant (value="60"^^) +│ ║ └── StatementPattern (resultSizeEstimate=49.7K) +│ ║ s: Var (name=obs) (bindingState=unbound) +│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ o: Var (name=value) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=enc) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc ?cond . +?cond ?condCode . +FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) +?enc a . +VALUES ?code { "DX-200" "DX-201" } +OPTIONAL { +?enc ?practitioner . +} +MINUS { +?enc ?obs . +{ +{ +?obs ?value . +FILTER (?value < 60) +} +} +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 754 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 384 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=739.5M, openCountActual=1, lastRowTimeNanosActual=739.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=739.5M, openCountActual=1, lastRowTimeNanosActual=739.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=1.2K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=66.3K, firstRowTimeNanosActual=739.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=739.5M, maxGroupSizeActual=66.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=66.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.3K, rowsDroppedActual=66.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=66.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=66.3K, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=15.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=559.8M, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=66.3K, exprFalseCountActual=66.3K, exprEvalTimeNanosActual=556.5M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=8.2K, resultSizeActual=0, joinRightIteratorsCreatedActual=138.8K, joinLeftBindingsConsumedActual=138.8K, inputRowsActual=138.8K, rowsDroppedActual=138.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=138.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) +│ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=138.8K, hasNextCallCountActual=205.1K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=33.1M, nextCallCountActual=138.8K, nextTimeNanosActual=5.7M, sourceRowsScannedActual=205.1K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=66.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=708, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=7.4K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=162, avgNextNanosActual=41, indexHitRateActual=0.68) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=m2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeActual=0, hasNextCallCountActual=138.8K, hasNextTimeNanosActual=273.8M, sourceRowsScannedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedFilterPassRatio=0.50, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern, exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=1.8K, closeCountActual=138.8K, exprEvalTimeNanosActual=16.0M, inputRowsActual=138.8K, rowsDroppedActual=138.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.0K, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Compare (=) (exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, exprEvalTimeNanosActual=9.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="MED-1005") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=138.8K, hasNextCallCountActual=277.6K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=54.1M, nextCallCountActual=138.8K, nextTimeNanosActual=5.4M, sourceRowsScannedActual=277.6K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) +│ ║ │ Var (name=c) +│ ║ │ ValueConstant (value="MED-1005") +│ ║ │ , plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=708, closeCountActual=138.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=195, avgNextNanosActual=39, indexHitRateActual=0.50) +│ ║ │ s: Var (name=m2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=131.4M, nextCallCountActual=66.3K, nextTimeNanosActual=883.4K, joinRightIteratorsCreatedActual=66.3K, joinLeftBindingsConsumedActual=66.3K, joinRightBindingsConsumedActual=66.3K, firstRowTimeNanosActual=27.7K, leftRowsWithMatchActual=66.3K, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=132.7K, rowsDroppedActual=66.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, leftRowsProbedActual=66.3K, rightRowsScannedActual=66.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=66.3M, nextCallCountActual=66.3K, nextTimeNanosActual=809.2K, firstRowTimeNanosActual=26.0K, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1000, avgNextNanosActual=12, leftRowsConsumedActual=16.6K, rightRowsConsumedActual=49.6K, leftRowsOutputContributionActual=16.6K, rightRowsOutputContributionActual=49.6K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=25.0K, rowsDroppedActual=8.3K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.3K, nextTimeNanosActual=404.9K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=17.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=203.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=127, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=25.0K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.4M, nextCallCountActual=16.6K, nextTimeNanosActual=700.3K, sourceRowsScannedActual=25.0K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=21.1K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=336, avgNextNanosActual=42, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] +│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.3K, nextTimeNanosActual=451.0K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=203.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=123, avgNextNanosActual=54, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.2K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.9M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=709, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=43.0K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=209, avgNextNanosActual=43, indexHitRateActual=0.75) [right] +│ ║ ║ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=17.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.7K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=11.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=230, avgNextNanosActual=44, indexHitRateActual=0.67) [right] +│ ║ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=21.4K, resultSizeActual=66.3K, hasNextCallCountActual=132.7K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=27.6M, nextCallCountActual=66.3K, nextTimeNanosActual=3.2M, sourceRowsScannedActual=132.7K, sourceRowsMatchedActual=66.3K, sourceRowsFilteredActual=66.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=8.7K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=49, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=7.9K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ o: Var (name=m2) (bindingState=unbound) +│ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=c) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="MED-1005") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) +│ ║ │ Var (name=c) +│ ║ │ ValueConstant (value="MED-1005") +│ ║ │ , plannedLookupComponents=[S, P]) +│ ║ │ s: Var (name=m2) (bindingState=bound) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=c) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ ║ │ o: Var (name=med) (bindingState=unbound) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ s: Var (name=patient) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[S, P]) [right] +│ ║ ║ s: Var (name=enc) (bindingState=bound) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] +│ ║ s: Var (name=patient) (bindingState=bound) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ +?patient a . +?patient ?med . +} +UNION +{ +?patient a . +?patient ?enc . +?enc ?obs . +} +OPTIONAL { +?patient ?optName . +} +FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 3 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=717.3K, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=730.1K, openCountActual=1, lastRowTimeNanosActual=734.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358.7K, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=716.6K, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=745.4K, openCountActual=1, lastRowTimeNanosActual=749.0K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358.3K, avgNextNanosActual=1000) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=714.8K, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=6, firstRowTimeNanosActual=744.9K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=747.7K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=357.4K, avgNextNanosActual=250) +│ ╠══ Extension (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=638.5K, nextCallCountActual=6, nextTimeNanosActual=41.2K, firstRowTimeNanosActual=129.4K, openCountActual=1, lastRowTimeNanosActual=697.2K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=79.8K, avgNextNanosActual=6.9K) +│ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=632.5K, nextCallCountActual=6, nextTimeNanosActual=249, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=119.7K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=679.7K, closeCountActual=1, exprEvalTimeNanosActual=34.3K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=79.1K, avgNextNanosActual=42, filterRejectRateActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=33.4K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user0") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=29.0K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user1") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=957, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user2") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=458, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=585.8K, nextCallCountActual=6, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=96.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=673.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=83.7K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=517.9K, nextCallCountActual=6, nextTimeNanosActual=418, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=86.5K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=665.1K, closeCountActual=1, exprEvalTimeNanosActual=25.2K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=74.0K, avgNextNanosActual=70, filterRejectRateActual=0) [left] +│ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=23.9K, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=6, joinRightIteratorsCreatedActual=33, joinRightBindingsConsumedActual=6, inputRowsActual=39, rowsDroppedActual=33, expansionFactorActual=0.15, sampleCountActual=2, varianceActual=0.05, stddevActual=0.22, confidenceScoreActual=0.62, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=33, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=33, inputRowsActual=36, rowsDroppedActual=3, expansionFactorActual=0.92, sampleCountActual=2, varianceActual=4.7M, stddevActual=2.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=33, avgRightRowsPerLeftActual=11, joinOutputPerLeftActual=11) [left] +│ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=2.4K, nextCallCountActual=3, nextTimeNanosActual=1.0K, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.5K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=657.1K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=604, avgNextNanosActual=347) [left] +│ ║ │ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=36, hasNextTrueCountActual=33, hasNextTimeNanosActual=298.9K, nextCallCountActual=33, nextTimeNanosActual=10.4K, sourceRowsScannedActual=513, sourceRowsMatchedActual=33, sourceRowsFilteredActual=480, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ │ │ │ Var (name=u) +│ ║ │ │ │ Var (name=v) +│ ║ │ │ │ , firstRowTimeNanosActual=3.0K, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=154.9K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=8.3K, avgNextNanosActual=316, indexHitRateActual=0.06) +│ ║ │ │ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, resultSizeActual=6, hasNextCallCountActual=39, hasNextTrueCountActual=6, hasNextTimeNanosActual=30.2K, nextCallCountActual=6, nextTimeNanosActual=165, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=292, openCountActual=33, bindingsProvidedActual=6, lastRowTimeNanosActual=1.4K, closeCountActual=33, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.15, avgHasNextNanosActual=776, avgNextNanosActual=28) [right] +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=22.8K, nextCallCountActual=6, nextTimeNanosActual=1.5K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=2.7K, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=11.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.9K, avgNextNanosActual=264, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (pair) (hasNextFalseCountActual=0) +│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=30.1K, hasNextFalseCountActual=0) +│ ║ ├── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=14.9K, hasNextFalseCountActual=0) +│ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=pair) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=pair) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Extension +│ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="user0") +│ ║ │ ║ ValueConstant (value="user1") +│ ║ │ ║ ValueConstant (value="user2") +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ │ │ ╠══ Compare (!=) +│ ║ │ │ ║ Var (name=u) (bindingState=bound) +│ ║ │ │ ║ Var (name=v) (bindingState=bound) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) +│ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] +│ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ │ │ │ Var (name=u) +│ ║ │ │ │ Var (name=v) +│ ║ │ │ │ ) +│ ║ │ │ │ s: Var (name=u) (bindingState=unbound) +│ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ │ o: Var (name=v) (bindingState=bound) +│ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] +│ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ │ s: Var (name=u) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (pair) +│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) +│ ║ ├── Str +│ ║ │ Var (name=u) (bindingState=bound) +│ ║ └── Str +│ ║ Var (name=v) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=pair) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=pair) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +VALUES ?u { } +FILTER (?u != ?v) +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 173 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 139 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=8.7M, openCountActual=1, lastRowTimeNanosActual=8.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=1.6K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=958, firstRowTimeNanosActual=8.7M, openCountActual=1, lastRowTimeNanosActual=8.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=958) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=459, aggregateEvalCountActual=4, firstRowTimeNanosActual=8.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.7M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=459) +│ ╠══ Difference (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=8.6M, nextCallCountActual=4, nextTimeNanosActual=166, firstRowTimeNanosActual=8.4M, openCountActual=1, lastRowTimeNanosActual=8.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.4M, avgNextNanosActual=42, leftRowsConsumedActual=4, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, resultSizeActual=4, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=4, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=10, rowsDroppedActual=6, expansionFactorActual=0.40, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) +│ ║ │ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=28.5K, nextCallCountActual=6, nextTimeNanosActual=375, sourceRowsScannedActual=9, sourceRowsMatchedActual=6, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=17.9K, exprEvalCountActual=9, exprFalseCountActual=3, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=8.6M, closeCountActual=1, exprEvalTimeNanosActual=4.5K, inputRowsActual=9, rowsDroppedActual=3, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=4.1K, avgNextNanosActual=63, filterRejectRateActual=0.33) [left] +│ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=9, exprFalseCountActual=3, exprTrueCountActual=6, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=9, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=9, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=12, rowsDroppedActual=3, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=9.00, stddevActual=3.00, confidenceScoreActual=0.33, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=9, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) +│ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=2.2K, nextCallCountActual=3, nextTimeNanosActual=958, firstRowTimeNanosActual=4.4K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=8.6M, optimizer.candidateCount=64, closeCountActual=1, varsAddedActual=1, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=553, avgNextNanosActual=319) +│ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=9, hasNextCallCountActual=12, hasNextTrueCountActual=9, hasNextTimeNanosActual=12.8K, nextCallCountActual=9, nextTimeNanosActual=541, firstRowTimeNanosActual=375, openCountActual=3, bindingsProvidedActual=9, lastRowTimeNanosActual=64.8K, closeCountActual=3, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.1K, avgNextNanosActual=60) +│ ║ │ ╚══ Filter (resultSizeActual=4, hasNextCallCountActual=10, hasNextTrueCountActual=4, hasNextTimeNanosActual=175.5K, nextCallCountActual=4, nextTimeNanosActual=125, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=13.1K, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, exprTrueCountActual=4, lastRowTimeNanosActual=19.5K, closeCountActual=6, varsAddedActual=2, exprEvalTimeNanosActual=63.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, rowsDroppedActual=2, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=17.6K, avgNextNanosActual=31, filterRejectRateActual=0.33) [right] +│ ║ │ ├── Exists (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, exprEvalTimeNanosActual=62.6K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ │ Filter (resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=4, hasNextTimeNanosActual=18.3K, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, lastRowTimeNanosActual=4.1K, exprTrueCountActual=4, closeCountActual=6, exprEvalTimeNanosActual=6.3K, inputRowsActual=6, rowsDroppedActual=6, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.1K, filterRejectRateActual=0.33) +│ ║ │ │ ├── Or (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=6, exprFalseCountActual=4, exprTrueCountActual=2, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ ValueConstant (value="user0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=4, exprFalseCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) +│ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ValueConstant (value="user1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.0K, nextCallCountActual=6, nextTimeNanosActual=1.1K, sourceRowsScannedActual=8, sourceRowsMatchedActual=6, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=505, avgNextNanosActual=194, indexHitRateActual=0.75) +│ ║ │ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3.54554037480904E13M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=2.466497186E8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.9440932578245E12M, stddevActual=1715.8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.8K, stddevActual=43, confidenceScoreActual=0.04, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.2K, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ │ ║ │ ╠══ Filter (resultSizeActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, inputRowsActual=18, rowsDroppedActual=12, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ │ ║ │ ║ │ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ╚══ Compare (!=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=916, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=18, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=18, inputRowsActual=24, rowsDroppedActual=6, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=143.3M, stddevActual=12.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=18, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) +│ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=12.7K, nextCallCountActual=6, nextTimeNanosActual=2.5K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=16.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1K, avgNextNanosActual=417, indexHitRateActual=0.50) [left] +│ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=5.0K, nextCallCountActual=18, nextTimeNanosActual=292, firstRowTimeNanosActual=208, openCountActual=6, bindingsProvidedActual=18, lastRowTimeNanosActual=14.6K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=212, avgNextNanosActual=16) [right] +│ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.2K, nextCallCountActual=6, nextTimeNanosActual=458, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=12.0K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=76, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.8K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=10.9K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.1K, nextCallCountActual=6, nextTimeNanosActual=458, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=9.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=431, avgNextNanosActual=76, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, nextCallCountActual=6, nextTimeNanosActual=376, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=8.6K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=63, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.2K, nextCallCountActual=6, nextTimeNanosActual=293, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=7.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=274, avgNextNanosActual=49, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.3M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.3M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.3M, indexHitRateActual=0) +│ ║ ║ s: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ ExtensionElem (_anon_path_1473f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) +│ ║ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] +│ ║ │ ║ ├── Compare (!=) +│ ║ │ ║ │ Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ Var (name=u2) (bindingState=bound) +│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] +│ ║ │ ├── Exists +│ ║ │ │ Filter (plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) +│ ║ │ │ ├── Or +│ ║ │ │ │ ╠══ Compare (=) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ║ ValueConstant (value="user0") +│ ║ │ │ │ ╚══ Compare (=) +│ ║ │ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ValueConstant (value="user1") +│ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ │ s: Var (name=u1) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] +│ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.2K) [left] +│ ║ │ ║ │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) [left] +│ ║ │ ║ │ ║ │ ║ ├── And +│ ║ │ ║ │ ║ │ ║ │ ╠══ Compare (!=) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u2) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ │ ╚══ Compare (!=) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K) +│ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] +│ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) +│ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) +│ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ s: Var (name=u2) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ o: Var (name=u3) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ s: Var (name=u3) (bindingState=bound) +│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ o: Var (name=u2) (bindingState=bound) +│ ║ └── Extension +│ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ s: Var (name=u1) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=u1) (bindingState=unbound) +│ ║ ╚══ ExtensionElem (_anon_path_0573f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Var (name=u1) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u1) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u1) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES (?u1 ?u2) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u1 != ?u2) +?u1 ?u2 . +VALUES ?u3 { } +FILTER ((?u2 != ?u3) && (?u1 != ?u3)) +?u1 ?u3 . +?u2 ?u1 . +?u3 ?u1 . +?u2 ?u3 . +?u3 ?u2 . +FILTER EXISTS { +?u1 ?name . +FILTER ((?name = "user0") || (?name = "user1")) +} +MINUS { +?u1 ?u1 . +BIND(?u1 AS ?_anon_path_0573f2fe36952f541b08a42a7b8ce15e70d) +} +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 6 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 3 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=299.1K, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=304.6K, openCountActual=1, lastRowTimeNanosActual=310.3K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.6K, avgNextNanosActual=1.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.0K, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=314.0K, openCountActual=1, lastRowTimeNanosActual=318.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.0K, avgNextNanosActual=584) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=295.7K, nextCallCountActual=1, nextTimeNanosActual=83, aggregateEvalCountActual=6, firstRowTimeNanosActual=314.2K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=316.1K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=147.9K, avgNextNanosActual=83) +│ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=261.8K, nextCallCountActual=6, nextTimeNanosActual=168, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=85.5K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=278.1K, closeCountActual=1, exprEvalTimeNanosActual=3.0K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=32.7K, avgNextNanosActual=28, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=251.3K, nextCallCountActual=6, nextTimeNanosActual=84, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=82.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=258.9K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=35.9K, avgNextNanosActual=14, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=234.5K, nextCallCountActual=6, nextTimeNanosActual=209, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root, firstRowTimeNanosActual=80.6K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=253.6K, closeCountActual=1, exprEvalTimeNanosActual=13.8K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=33.5K, avgNextNanosActual=35, filterRejectRateActual=0) [left] +│ ║ ║ ├── Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=13.1K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.7K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=458, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=959, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=57, joinRightBindingsConsumedActual=6, inputRowsActual=63, rowsDroppedActual=57, expansionFactorActual=0.10, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105, resultSizeActual=57, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=57, inputRowsActual=61, rowsDroppedActual=4, expansionFactorActual=0.93, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=57, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.2K, nextCallCountActual=4, nextTimeNanosActual=583, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.6K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=245.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=442, avgNextNanosActual=146) [left] +│ ║ ║ ║ └── Filter (resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=120.7K, nextCallCountActual=57, nextTimeNanosActual=1.0K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=1.3K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=40.0K, closeCountActual=4, exprEvalTimeNanosActual=53.4K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=2.0K, avgNextNanosActual=19, filterRejectRateActual=0) [right] +│ ║ ║ ║ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=47.3K, hasNextFalseCountActual=0) +│ ║ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=34.4K, nextCallCountActual=57, nextTimeNanosActual=18.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ , Compare (!=) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ , firstRowTimeNanosActual=1000, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=38.5K, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=566, avgNextNanosActual=325, indexHitRateActual=0.08) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, resultSizeActual=6, hasNextCallCountActual=63, hasNextTrueCountActual=6, hasNextTimeNanosActual=18.0K, nextCallCountActual=6, nextTimeNanosActual=210, plannedWorkRows=12, plannedBoundVars=[u, v], firstRowTimeNanosActual=250, openCountActual=57, bindingsProvidedActual=6, lastRowTimeNanosActual=375, closeCountActual=57, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.10, avgHasNextNanosActual=287, avgNextNanosActual=35) [right] +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.7K, nextCallCountActual=6, nextTimeNanosActual=583, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=875, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=313, avgNextNanosActual=97, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root) [left] +│ ║ ║ ├── Exists +│ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ s: Var (name=v) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=u) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [right] +│ ║ ║ ║ ╠══ Compare (!=) +│ ║ ║ ║ ║ Var (name=u) (bindingState=bound) +│ ║ ║ ║ ║ Var (name=v) (bindingState=bound) +│ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ , Compare (!=) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ ) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER EXISTS { +?v ?u . +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 5 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 4 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.9K, openCountActual=1, lastRowTimeNanosActual=187.8K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "u" (hasNextFalseCountActual=0) +║ ProjectionElem "degree" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.4K, openCountActual=1, lastRowTimeNanosActual=192.7K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.5K) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.1K, openCountActual=1, lastRowTimeNanosActual=192.5K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.2K) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=176.8K, sourceRowsScannedActual=3, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=3, exprFalseCountActual=3, openCountActual=1, lastRowTimeNanosActual=187.5K, closeCountActual=1, exprEvalTimeNanosActual=1.3K, inputRowsActual=3, rowsDroppedActual=3, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=176.9K, filterRejectRateActual=1.00) +│ ║ ├── Compare (>=) (exprEvalCountActual=3, exprFalseCountActual=3, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) +│ ║ └── Group (u) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=172.4K, nextCallCountActual=3, nextTimeNanosActual=126, aggregateEvalCountActual=12, firstRowTimeNanosActual=182.9K, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=185.0K, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=3, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=43.1K, avgNextNanosActual=42) +│ ║ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=149.6K, nextCallCountActual=6, nextTimeNanosActual=249, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=48.4K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=158.2K, closeCountActual=1, exprEvalTimeNanosActual=3.5K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=18.7K, avgNextNanosActual=42, filterRejectRateActual=0) +│ ║ ├── ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.7K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user3") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=667, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user4") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=294, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user5") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user6") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=142.4K, nextCallCountActual=6, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=44.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=151.3K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=20.3K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=122.6K, nextCallCountActual=6, nextTimeNanosActual=84, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=41.8K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=148.2K, closeCountActual=1, exprEvalTimeNanosActual=1.7K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=17.5K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=57, joinRightBindingsConsumedActual=6, inputRowsActual=63, rowsDroppedActual=57, expansionFactorActual=0.10, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105, resultSizeActual=57, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=57, inputRowsActual=61, rowsDroppedActual=4, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.6M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=57, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.8K, nextCallCountActual=4, nextTimeNanosActual=626, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.0K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=143.5K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=567, avgNextNanosActual=157) [left] +│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=28.3K, nextCallCountActual=57, nextTimeNanosActual=5.3K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ , firstRowTimeNanosActual=750, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=30.8K, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=464, avgNextNanosActual=94, indexHitRateActual=0.08) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, resultSizeActual=6, hasNextCallCountActual=63, hasNextTrueCountActual=6, hasNextTimeNanosActual=33.4K, nextCallCountActual=6, nextTimeNanosActual=125, plannedWorkRows=12, plannedBoundVars=[u, v], firstRowTimeNanosActual=334, openCountActual=57, bindingsProvidedActual=6, lastRowTimeNanosActual=750, closeCountActual=57, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.10, avgHasNextNanosActual=530, avgNextNanosActual=21) [right] +│ ║ ╚══ Extension (resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=6.6K, nextCallCountActual=6, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=625, openCountActual=6, lastRowTimeNanosActual=1.7K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=552, avgNextNanosActual=167) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.2K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.4K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358, avgNextNanosActual=42, indexHitRateActual=0.50) +│ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) +│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (degree) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (degree) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── Group (u) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optAlias) (bindingState=bound) +│ ║ │ ValueConstant (value="user3") +│ ║ │ ValueConstant (value="user4") +│ ║ │ ValueConstant (value="user5") +│ ║ │ ValueConstant (value="user6") +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ ║ ├── Compare (!=) +│ ║ ║ │ Var (name=u) (bindingState=bound) +│ ║ ║ │ Var (name=v) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ ) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=u) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (optAlias) +│ ║ Var (name=optName) (bindingState=bound) +│ ║ GroupElem (_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ║ GroupElem (degree) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567) +│ Count (Distinct) +│ Var (name=v) (bindingState=unbound) +└── ExtensionElem (degree) +Count (Distinct) +Var (name=v) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES ?v { } +?u ?v . +VALUES ?u { } +FILTER (?u != ?v) +OPTIONAL { +?u ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + + +Theme: SOCIAL_MEDIA z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 7 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 6 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=607.1K, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=604.9K, openCountActual=1, lastRowTimeNanosActual=614.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=303.6K, avgNextNanosActual=666) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=601.3K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=610.6K, openCountActual=1, lastRowTimeNanosActual=613.2K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=300.7K, avgNextNanosActual=292) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=599.5K, nextCallCountActual=1, nextTimeNanosActual=125, aggregateEvalCountActual=9, firstRowTimeNanosActual=610.7K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=611.8K, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=299.8K, avgNextNanosActual=125) +│ ╠══ Filter (resultSizeActual=9, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=575.8K, nextCallCountActual=9, nextTimeNanosActual=251, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=64.7K, exprEvalCountActual=9, openCountActual=1, exprTrueCountActual=9, lastRowTimeNanosActual=585.8K, closeCountActual=1, exprEvalTimeNanosActual=2.5K, inputRowsActual=9, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.82, avgHasNextNanosActual=52.4K, avgNextNanosActual=28, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.8K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=563.5K, nextCallCountActual=9, nextTimeNanosActual=209, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, firstRowTimeNanosActual=62.9K, leftRowsWithMatchActual=9, openCountActual=1, lastRowTimeNanosActual=570.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18, rowsDroppedActual=9, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=754.2K, stddevActual=868, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=56.4K, avgNextNanosActual=23, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, resultSizeActual=9, joinRightIteratorsCreatedActual=70, joinLeftBindingsConsumedActual=79, joinRightBindingsConsumedActual=9, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=79, rowsDroppedActual=70, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=79, rightRowsScannedActual=9, avgRightRowsPerLeftActual=0.11, joinOutputPerLeftActual=0.11) [left] +│ ║ ║ ├── Filter (resultSizeActual=70, hasNextCallCountActual=71, hasNextTrueCountActual=70, hasNextTimeNanosActual=126.0K, nextCallCountActual=70, nextTimeNanosActual=1.2K, sourceRowsScannedActual=70, sourceRowsMatchedActual=70, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=18.2K, exprEvalCountActual=70, openCountActual=1, exprTrueCountActual=70, lastRowTimeNanosActual=567.2K, closeCountActual=1, exprEvalTimeNanosActual=47.5K, inputRowsActual=70, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.8K, avgNextNanosActual=18, filterRejectRateActual=0) [left] +│ ║ ║ │ ╠══ Compare (!=) (exprEvalCountActual=70, exprTrueCountActual=70, exprEvalTimeNanosActual=42.3K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, resultSizeActual=70, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=75, rowsDroppedActual=5, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.0M, stddevActual=1.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=70, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) +│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.2K, nextCallCountActual=5, nextTimeNanosActual=10.7K, firstRowTimeNanosActual=9.9K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=564.1K, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=1, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=201, avgNextNanosActual=2.2K) [left] +│ ║ ║ │ └── StatementPattern [index: ospc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=70, hasNextCallCountActual=75, hasNextTrueCountActual=70, hasNextTimeNanosActual=37.0K, nextCallCountActual=70, nextTimeNanosActual=7.5K, sourceRowsScannedActual=897, sourceRowsMatchedActual=70, sourceRowsFilteredActual=827, plannedIndexName=ospc, firstRowTimeNanosActual=750, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=125.0K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=493, avgNextNanosActual=108, indexHitRateActual=0.08) [right] +│ ║ ║ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=88.9K, nextCallCountActual=9, nextTimeNanosActual=250, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=1.7K, exprEvalCountActual=9, openCountActual=70, exprTrueCountActual=9, lastRowTimeNanosActual=875, closeCountActual=70, exprEvalTimeNanosActual=16.5K, inputRowsActual=9, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=1.1K, avgNextNanosActual=28, filterRejectRateActual=0) [right] +│ ║ ║ ╠══ Not (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=15.7K, hasNextFalseCountActual=0) +│ ║ ║ ║ Exists (exprEvalCountActual=9, exprFalseCountActual=9, exprEvalTimeNanosActual=14.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ ║ Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=9, hasNextTimeNanosActual=4.5K, sourceRowsScannedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=583, closeCountActual=9, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0, avgHasNextNanosActual=505, indexHitRateActual=0) +│ ║ ║ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── ExtensionElem (_anon_path_5783f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=26.3K, nextCallCountActual=9, nextTimeNanosActual=250, firstRowTimeNanosActual=375, openCountActual=70, bindingsProvidedActual=9, lastRowTimeNanosActual=375, closeCountActual=70, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=334, avgNextNanosActual=28) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9, hasNextCallCountActual=18, hasNextTrueCountActual=9, hasNextTimeNanosActual=4.9K, nextCallCountActual=9, nextTimeNanosActual=459, sourceRowsScannedActual=18, sourceRowsMatchedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.0K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=276, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ Var (name=u) (bindingState=bound) +│ ║ ║ │ ║ Var (name=v) (bindingState=bound) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=u) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=v) (bindingState=bound) +│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [right] +│ ║ ║ ╠══ Not +│ ║ ║ ║ Exists +│ ║ ║ ║ Extension +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) +│ ║ ║ ║ └── ExtensionElem (_anon_path_9783f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ ║ ║ Var (name=u) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER NOT EXISTS { +?u ?u . +BIND(?u AS ?_anon_path_9783f2fe36952f541b08a42a7b8ce15e70d012345678) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 1091 ms +Warmup execution 1/1 +Fastest execution time: 769 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=1036.0M, openCountActual=1, lastRowTimeNanosActual=1036.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=1.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=1036.0M, openCountActual=1, lastRowTimeNanosActual=1036.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=494, firstRowTimeNanosActual=1036.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1036.0M, maxGroupSizeActual=494, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=494, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=494, rowsDroppedActual=493, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=625) +│ ╠══ Filter (resultSizeActual=494, hasNextCallCountActual=496, hasNextTrueCountActual=495, hasNextTimeNanosActual=1035.2M, nextCallCountActual=494, nextTimeNanosActual=10.9K, sourceRowsScannedActual=494, sourceRowsMatchedActual=494, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=231.2K, exprEvalCountActual=494, openCountActual=1, exprTrueCountActual=494, lastRowTimeNanosActual=1036.0M, closeCountActual=1, exprEvalTimeNanosActual=312.4K, inputRowsActual=494, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1M, avgNextNanosActual=22, filterRejectRateActual=0) +│ ║ ├── ListMemberOperator (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=242.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user7") (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=47.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user8") (exprEvalCountActual=415, exprTrueCountActual=415, exprEvalTimeNanosActual=30.8K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user9") (exprEvalCountActual=313, exprTrueCountActual=313, exprEvalTimeNanosActual=27.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user10") (exprEvalCountActual=216, exprTrueCountActual=216, exprEvalTimeNanosActual=18.1K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user11") (exprEvalCountActual=106, exprTrueCountActual=106, exprEvalTimeNanosActual=17.9K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=494, hasNextCallCountActual=495, hasNextTrueCountActual=494, hasNextTimeNanosActual=1034.7M, nextCallCountActual=494, nextTimeNanosActual=7.0K, joinRightIteratorsCreatedActual=494, joinLeftBindingsConsumedActual=494, joinRightBindingsConsumedActual=494, firstRowTimeNanosActual=226.7K, leftRowsWithMatchActual=494, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=988, rowsDroppedActual=494, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1M, avgNextNanosActual=14, leftRowsProbedActual=494, rightRowsScannedActual=494, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (HashJoinIteration) (resultSizeActual=494, joinLeftBindingsConsumedActual=499, inputRowsActual=1.4M, rowsDroppedActual=1.4M, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=499, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.99) [left] +│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.4K, nextCallCountActual=5, nextTimeNanosActual=834, firstRowTimeNanosActual=53.6K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=77.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=243, avgNextNanosActual=167) [left] +│ ║ ║ └── Union (new scope) (resultSizeActual=1.4M, hasNextFalseCountActual=0, leftRowsConsumedActual=192, rightRowsConsumedActual=1.4M, leftRowsOutputContributionActual=192, rightRowsOutputContributionActual=1.4M) [right] +│ ║ ║ ╠══ Extension (new scope) (resultSizeActual=192, hasNextCallCountActual=193, hasNextTrueCountActual=192, hasNextTimeNanosActual=152.8M, nextCallCountActual=192, nextTimeNanosActual=11.0K, firstRowTimeNanosActual=37.2K, openCountActual=1, lastRowTimeNanosActual=153.3M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=792.0K, avgNextNanosActual=57) +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M, resultSizeActual=192, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=192, inputRowsActual=143.9K, rowsDroppedActual=143.7K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=139.8K, stddevActual=374, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=192, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) +│ ║ ║ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=13.3M, nextCallCountActual=143.7K, nextTimeNanosActual=6.2M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=25.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=153.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=44, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=192, hasNextCallCountActual=143.9K, hasNextTrueCountActual=192, hasNextTimeNanosActual=67.6M, nextCallCountActual=192, nextTimeNanosActual=13.7K, sourceRowsScannedActual=143.9K, sourceRowsMatchedActual=192, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=417, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=470, avgNextNanosActual=72, indexHitRateActual=0.00) [right] +│ ║ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ Extension (new scope) (resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=149.6M, nextCallCountActual=1.4M, nextTimeNanosActual=107.8M, firstRowTimeNanosActual=153.3M, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=75) +│ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=1.4M, resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=119.9M, nextCallCountActual=1.4M, nextTimeNanosActual=52.0M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.4M, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=153.3M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=36, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=post) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=post) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=494, hasNextCallCountActual=988, hasNextTrueCountActual=494, hasNextTimeNanosActual=301.8K, nextCallCountActual=494, nextTimeNanosActual=32.4K, sourceRowsScannedActual=988, sourceRowsMatchedActual=494, sourceRowsFilteredActual=494, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=494, openCountActual=494, lastRowTimeNanosActual=2.7K, closeCountActual=494, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=494, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=306, avgNextNanosActual=66, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=activity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=activity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="user7") +│ ║ │ ValueConstant (value="user8") +│ ║ │ ValueConstant (value="user9") +│ ║ │ ValueConstant (value="user10") +│ ║ │ ValueConstant (value="user11") +│ ║ └── LeftJoin +│ ║ ╠══ Join (HashJoinIteration) [left] +│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union (new scope) [right] +│ ║ ║ ╠══ Extension (new scope) +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) +│ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] +│ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) +│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) +│ ║ ║ ║ └── ExtensionElem (activity) +│ ║ ║ ║ Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ Extension (new scope) +│ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) +│ ║ ║ │ s: Var (name=post) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) +│ ║ ║ │ o: Var (name=u) (bindingState=unbound) +│ ║ ║ └── ExtensionElem (activity) +│ ║ ║ Var (name=post) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=activity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=activity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { } +{ +?u ?v . +?v ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post ?u . +BIND(?post AS ?activity) +} +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 5 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 3 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.5K, openCountActual=1, lastRowTimeNanosActual=274.7K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "u" (hasNextFalseCountActual=0) +║ ProjectionElem "connections" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.3K, openCountActual=1, lastRowTimeNanosActual=278.9K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.4K) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.0K, openCountActual=1, lastRowTimeNanosActual=278.7K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.0K) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=260.2K, sourceRowsScannedActual=5, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=5, exprFalseCountActual=5, openCountActual=1, lastRowTimeNanosActual=273.5K, closeCountActual=1, exprEvalTimeNanosActual=1.3K, inputRowsActual=5, rowsDroppedActual=5, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=260.3K, filterRejectRateActual=1.00) +│ ║ ├── Compare (>=) (exprEvalCountActual=5, exprFalseCountActual=5, exprEvalTimeNanosActual=748, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ └── Group (u) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=255.9K, nextCallCountActual=5, nextTimeNanosActual=124, aggregateEvalCountActual=40, firstRowTimeNanosActual=268.9K, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=271.1K, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=4, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=15, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=42.7K, avgNextNanosActual=25) +│ ║ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=234.4K, nextCallCountActual=20, nextTimeNanosActual=334, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.7K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=244.1K, closeCountActual=1, exprEvalTimeNanosActual=3.7K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=10.7K, avgNextNanosActual=17, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=224.2K, nextCallCountActual=20, nextTimeNanosActual=249, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=17.5K, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=236.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=10.7K, avgNextNanosActual=12, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=193.5K, nextCallCountActual=20, nextTimeNanosActual=542, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=15.7K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=232.6K, closeCountActual=1, exprEvalTimeNanosActual=3.3K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=9.2K, avgNextNanosActual=27, filterRejectRateActual=0) [left] +│ ║ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=87, joinRightBindingsConsumedActual=20, inputRowsActual=107, rowsDroppedActual=87, expansionFactorActual=0.19, sampleCountActual=2, varianceActual=1.58, stddevActual=1.26, confidenceScoreActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=87, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=87, inputRowsActual=93, rowsDroppedActual=6, expansionFactorActual=0.94, sampleCountActual=2, varianceActual=681.7K, stddevActual=826, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=87, avgRightRowsPerLeftActual=15, joinOutputPerLeftActual=15) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=834, nextCallCountActual=6, nextTimeNanosActual=374, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.7K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=227.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=119, avgNextNanosActual=62) [left] +│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=43.2K, nextCallCountActual=87, nextTimeNanosActual=7.3K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=87, sourceRowsFilteredActual=1.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ , firstRowTimeNanosActual=667, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=18.6K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=465, avgNextNanosActual=84, indexHitRateActual=0.07) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, resultSizeActual=20, hasNextCallCountActual=107, hasNextTrueCountActual=20, hasNextTimeNanosActual=57.1K, nextCallCountActual=20, nextTimeNanosActual=415, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=292, openCountActual=87, bindingsProvidedActual=20, lastRowTimeNanosActual=375, closeCountActual=87, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=87, nextPerHasNextRatioActual=0.19, avgHasNextNanosActual=534, avgNextNanosActual=21) [right] +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=10.6K, nextCallCountActual=20, nextTimeNanosActual=917, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1000, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=46, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (connections) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (connections) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="5"^^) +│ ║ └── Group (u) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ ║ ├── Compare (!=) +│ ║ ║ │ Var (name=u) (bindingState=bound) +│ ║ ║ │ Var (name=v) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ ) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ GroupElem (_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ║ GroupElem (connections) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count (Distinct) +│ Var (name=v) (bindingState=unbound) +└── ExtensionElem (connections) +Count (Distinct) +Var (name=v) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES ?v { } +?u ?v . +VALUES ?u { } +FILTER (?u != ?v) +OPTIONAL { +?u ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + + +Theme: SOCIAL_MEDIA z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 13 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 11 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=833) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=459, aggregateEvalCountActual=20, firstRowTimeNanosActual=9.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.0M, maxGroupSizeActual=20, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=20, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=19, selectivityActual=0.05, expansionFactorActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=459) +│ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=581, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=8.6M, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.9M, closeCountActual=1, exprEvalTimeNanosActual=14.3K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=408.0K, avgNextNanosActual=29, filterRejectRateActual=0) +│ ║ ├── ListMemberOperator (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=11.6K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user12") (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user13") (exprEvalCountActual=16, exprTrueCountActual=16, exprEvalTimeNanosActual=960, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user14") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=665, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user15") (exprEvalCountActual=8, exprTrueCountActual=8, exprEvalTimeNanosActual=627, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user16") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=374, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user17") (hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=666, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=8.5M, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=8.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=426.1K, avgNextNanosActual=33, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Difference (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=583, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=424.3K, avgNextNanosActual=29, leftRowsConsumedActual=20, rightRowsConsumedActual=0, overlapRowsActual=0) [left] +│ ║ ║ ├── Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=339.4K, nextCallCountActual=20, nextTimeNanosActual=414, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root, firstRowTimeNanosActual=30.1K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.9M, closeCountActual=1, exprEvalTimeNanosActual=45.4K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=16.2K, avgNextNanosActual=21, filterRejectRateActual=0) +│ ║ ║ │ ╠══ Exists (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=43.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=20, hasNextTrueCountActual=20, hasNextTimeNanosActual=11.7K, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, plannedIndexName=spoc, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=500, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=586, indexHitRateActual=1.00) +│ ║ ║ │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=87, joinRightBindingsConsumedActual=20, inputRowsActual=107, rowsDroppedActual=87, expansionFactorActual=0.19, sampleCountActual=2, varianceActual=1.58, stddevActual=1.26, confidenceScoreActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) +│ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=87, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=87, inputRowsActual=93, rowsDroppedActual=6, expansionFactorActual=0.94, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=87, avgRightRowsPerLeftActual=15, joinOutputPerLeftActual=15) [left] +│ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=1.6K, nextCallCountActual=6, nextTimeNanosActual=460, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.0K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=8.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=238, avgNextNanosActual=77) [left] +│ ║ ║ │ │ ╚══ Filter (resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=143.7K, nextCallCountActual=87, nextTimeNanosActual=1.4K, sourceRowsScannedActual=87, sourceRowsMatchedActual=87, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=1.0K, exprEvalCountActual=87, openCountActual=6, exprTrueCountActual=87, lastRowTimeNanosActual=24.2K, closeCountActual=6, exprEvalTimeNanosActual=61.6K, inputRowsActual=87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=1.5K, avgNextNanosActual=17, filterRejectRateActual=0) [right] +│ ║ ║ │ │ ├── Compare (!=) (exprEvalCountActual=87, exprTrueCountActual=87, exprEvalTimeNanosActual=55.1K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=49.6K, nextCallCountActual=87, nextTimeNanosActual=8.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=87, sourceRowsFilteredActual=1.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ , Compare (!=) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ , firstRowTimeNanosActual=833, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=22.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=534, avgNextNanosActual=99, indexHitRateActual=0.07) +│ ║ ║ │ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, resultSizeActual=20, hasNextCallCountActual=107, hasNextTrueCountActual=20, hasNextTimeNanosActual=30.0K, nextCallCountActual=20, nextTimeNanosActual=541, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=250, openCountActual=87, bindingsProvidedActual=20, lastRowTimeNanosActual=375, closeCountActual=87, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=87, nextPerHasNextRatioActual=0.19, avgHasNextNanosActual=280, avgNextNanosActual=27) [right] +│ ║ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.5M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.5M, indexHitRateActual=0) +│ ║ ║ ║ s: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ ExtensionElem (_anon_path_4993f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=12.7K, nextCallCountActual=20, nextTimeNanosActual=2.1K, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1.5K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=318, avgNextNanosActual=108, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="user12") +│ ║ │ ValueConstant (value="user13") +│ ║ │ ValueConstant (value="user14") +│ ║ │ ValueConstant (value="user15") +│ ║ │ ValueConstant (value="user16") +│ ║ │ ValueConstant (value="user17") +│ ║ └── LeftJoin +│ ║ ╠══ Difference [left] +│ ║ ║ ├── Filter (plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root) +│ ║ ║ │ ╠══ Exists +│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) +│ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] +│ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ │ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [right] +│ ║ ║ │ │ ├── Compare (!=) +│ ║ ║ │ │ │ Var (name=u) (bindingState=bound) +│ ║ ║ │ │ │ Var (name=v) (bindingState=bound) +│ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ , Compare (!=) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ ) +│ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) +│ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ o: Var (name=v) (bindingState=bound) +│ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] +│ ║ ║ └── Extension +│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ s: Var (name=v) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=unbound) +│ ║ ║ ╚══ ExtensionElem (_anon_path_9993f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ ║ Var (name=v) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER EXISTS { +?v ?u . +} +MINUS { +?v ?v . +BIND(?v AS ?_anon_path_9993f2fe36952f541b08a42a7b8ce15e70d012345678) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 1523 ms +Warmup execution 1/1 +Fastest execution time: 963 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=1472.6M, openCountActual=1, lastRowTimeNanosActual=1472.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=750, firstRowTimeNanosActual=1472.6M, openCountActual=1, lastRowTimeNanosActual=1472.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=750) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=18, firstRowTimeNanosActual=1472.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1472.6M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=541) +│ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=1472.5M, nextCallCountActual=18, nextTimeNanosActual=542, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=18, sourceRowsFilteredActual=1.1K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=37.7K, exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=1472.5M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=1.1K, rowsDroppedActual=1.1K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=73.6M, avgNextNanosActual=30, filterRejectRateActual=0.98) +│ ║ ├── ListMemberOperator (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=18, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user0") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=75.0K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user1") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=50.3K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user2") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=56.1K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1470.8M, nextCallCountActual=1.1K, nextTimeNanosActual=20.9K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=1.1K, firstRowTimeNanosActual=26.4K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=1472.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=2.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2M, avgNextNanosActual=18, leftRowsProbedActual=1.1K, rightRowsScannedActual=1.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1469.3M, nextCallCountActual=1.1K, nextTimeNanosActual=81.8K, firstRowTimeNanosActual=25.7K, openCountActual=1, lastRowTimeNanosActual=1472.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2M, avgNextNanosActual=70) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=1.2M, joinRightBindingsConsumedActual=1.1K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.2M, rowsDroppedActual=1.2M, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=3.7K, stddevActual=61, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=1.2M, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=1.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4M, rowsDroppedActual=143.7K, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=16, stddevActual=4.01, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=1.2M, avgRightRowsPerLeftActual=9.02, joinOutputPerLeftActual=9.02) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=47.9K, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=14.7M, nextCallCountActual=143.7K, nextTimeNanosActual=7.2M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1472.5M, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=3, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=50, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=1.2M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.2M, hasNextTimeNanosActual=160.9M, nextCallCountActual=1.2M, nextTimeNanosActual=57.6M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.2M, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=7.4K, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=112, avgNextNanosActual=44, indexHitRateActual=0.90) [right] +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=1.1K, hasNextCallCountActual=1.2M, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=548.3M, nextCallCountActual=1.1K, nextTimeNanosActual=51.2K, sourceRowsScannedActual=1.2M, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.2M, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=1.2M, openCountActual=1.2M, lastRowTimeNanosActual=500, closeCountActual=1.2M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2M, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=423, avgNextNanosActual=44, indexHitRateActual=0.00) [right] +│ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ExtensionElem (cycleStart) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=1.1K, hasNextCallCountActual=2.3K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=602.1K, nextCallCountActual=1.1K, nextTimeNanosActual=65.7K, sourceRowsScannedActual=2.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1.7K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="user0") +│ ║ │ ValueConstant (value="user1") +│ ║ │ ValueConstant (value="user2") +│ ║ └── LeftJoin +│ ║ ╠══ Extension [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=c) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=a) (bindingState=bound) +│ ║ ║ └── ExtensionElem (cycleStart) +│ ║ ║ Var (name=a) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=a) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a ?b . +?b ?c . +?c ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { +?a ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 52 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 46 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=14.9M, openCountActual=1, lastRowTimeNanosActual=14.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=1.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=14.9M, openCountActual=1, lastRowTimeNanosActual=14.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=542) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=343, firstRowTimeNanosActual=14.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=14.9M, maxGroupSizeActual=343, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=343, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=343, rowsDroppedActual=342, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=375) +│ ╠══ Filter (resultSizeActual=343, hasNextCallCountActual=345, hasNextTrueCountActual=344, hasNextTimeNanosActual=14.8M, nextCallCountActual=343, nextTimeNanosActual=4.4K, sourceRowsScannedActual=343, sourceRowsMatchedActual=343, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=35.6K, exprEvalCountActual=343, openCountActual=1, exprTrueCountActual=343, lastRowTimeNanosActual=14.9M, closeCountActual=1, exprEvalTimeNanosActual=55.8K, inputRowsActual=343, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=43.1K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=343, exprTrueCountActual=343, exprEvalTimeNanosActual=23.8K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=834, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=343, hasNextCallCountActual=344, hasNextTrueCountActual=343, hasNextTimeNanosActual=14.7M, nextCallCountActual=343, nextTimeNanosActual=5.7K, joinRightIteratorsCreatedActual=343, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, firstRowTimeNanosActual=32.9K, leftRowsWithMatchActual=343, openCountActual=1, lastRowTimeNanosActual=14.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=686, rowsDroppedActual=343, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=43.0K, avgNextNanosActual=17, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, resultSizeActual=343, joinRightIteratorsCreatedActual=8.9K, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=9.2K, rowsDroppedActual=8.9K, expansionFactorActual=0.04, sampleCountActual=2, varianceActual=191.5K, stddevActual=438, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, resultSizeActual=8.9K, joinLeftBindingsConsumedActual=4, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=8.9K, rowsDroppedActual=4, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.2K) [left] +│ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.7K, nextCallCountActual=4, nextTimeNanosActual=625, firstRowTimeNanosActual=3.9K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=14.8M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=1, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=358, avgNextNanosActual=156) [left] +│ ║ ║ │ ╚══ Filter (resultSizeActual=8.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, rowsDroppedActual=67, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprFalseCountActual=67, exprTrueCountActual=8.9K, exprEvalTimeNanosActual=333.9K, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M, resultSizeActual=9.0K, inputRowsActual=9.8K, rowsDroppedActual=850, expansionFactorActual=0.91, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=850, joinLeftBindingsConsumedActual=57, inputRowsActual=907, rowsDroppedActual=57, expansionFactorActual=0.94, hasNextFalseCountActual=0, leftRowsProbedActual=57, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=15) [left] +│ ║ ║ │ ║ ├── Filter (resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=98.8K, nextCallCountActual=57, nextTimeNanosActual=1.1K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.4K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=4.6M, closeCountActual=4, exprEvalTimeNanosActual=41.2K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.6K, avgNextNanosActual=20, filterRejectRateActual=0) [left] +│ ║ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=37.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (costEstimate=189, resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=34.5K, nextCallCountActual=57, nextTimeNanosActual=8.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexName=ospc, firstRowTimeNanosActual=1.1K, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=4.6M, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=566, avgNextNanosActual=151, indexHitRateActual=0.08) +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── Filter (resultSizeActual=850, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=850, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ║ ╠══ Compare (!=) (exprEvalCountActual=850, exprTrueCountActual=850, exprEvalTimeNanosActual=202.4K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=850, hasNextCallCountActual=907, hasNextTrueCountActual=850, hasNextTimeNanosActual=104.5K, nextCallCountActual=850, nextTimeNanosActual=32.7K, sourceRowsScannedActual=907, sourceRowsMatchedActual=850, sourceRowsFilteredActual=57, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=57, openCountActual=57, lastRowTimeNanosActual=260.1K, closeCountActual=57, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=115, avgNextNanosActual=39, indexHitRateActual=0.94) +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ Filter (resultSizeActual=9.0K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprTrueCountActual=9.0K, exprEvalTimeNanosActual=445.4K, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=9.0K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.0K, hasNextTimeNanosActual=1.0M, nextCallCountActual=9.0K, nextTimeNanosActual=452.1K, sourceRowsScannedActual=9.8K, sourceRowsMatchedActual=9.0K, sourceRowsFilteredActual=850, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=850, openCountActual=850, lastRowTimeNanosActual=7.5K, closeCountActual=850, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=850, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=102, avgNextNanosActual=50, indexHitRateActual=0.91) +│ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=d) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=343, hasNextCallCountActual=9.2K, hasNextTrueCountActual=343, hasNextTimeNanosActual=3.5M, nextCallCountActual=343, nextTimeNanosActual=19.7K, sourceRowsScannedActual=9.2K, sourceRowsMatchedActual=343, sourceRowsFilteredActual=8.9K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=8.9K, openCountActual=8.9K, lastRowTimeNanosActual=459, closeCountActual=8.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.9K, nextPerHasNextRatioActual=0.04, avgHasNextNanosActual=386, avgNextNanosActual=58, indexHitRateActual=0.04) [right] +│ ║ ║ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=239.4K, nextCallCountActual=343, nextTimeNanosActual=51.3K, firstRowTimeNanosActual=916, openCountActual=343, lastRowTimeNanosActual=3.2K, closeCountActual=343, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=349, avgNextNanosActual=150) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=143.4K, nextCallCountActual=343, nextTimeNanosActual=25.1K, sourceRowsScannedActual=686, sourceRowsMatchedActual=343, sourceRowsFilteredActual=343, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=343, openCountActual=343, lastRowTimeNanosActual=2.8K, closeCountActual=343, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=73, indexHitRateActual=0.50) +│ ║ │ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) +│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optAlias) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] +│ ║ ║ │ ├── Compare (!=) +│ ║ ║ │ │ Var (name=d) (bindingState=bound) +│ ║ ║ │ │ Var (name=a) (bindingState=bound) +│ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] +│ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] +│ ║ ║ │ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) +│ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [right] +│ ║ ║ │ ║ ╠══ Compare (!=) +│ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) +│ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) +│ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [right] +│ ║ ║ │ ├── Compare (!=) +│ ║ ║ │ │ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ Var (name=d) (bindingState=bound) +│ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) +│ ║ ║ │ s: Var (name=c) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=d) (bindingState=unbound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=d) (bindingState=bound) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=a) (bindingState=bound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=b) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (optAlias) +│ ║ Var (name=optName) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { } +?a ?b . +FILTER (?a != ?b) +?b ?c . +FILTER (?b != ?c) +?c ?d . +FILTER (?c != ?d) +FILTER (?d != ?a) +?d ?a . +OPTIONAL { +?b ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias != "") +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 130 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 122 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=589.2K, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=594.3K, openCountActual=1, lastRowTimeNanosActual=600.8K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=294.6K, avgNextNanosActual=1.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=588.0K, nextCallCountActual=1, nextTimeNanosActual=500, firstRowTimeNanosActual=604.0K, openCountActual=1, lastRowTimeNanosActual=608.5K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=294.0K, avgNextNanosActual=500) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=585.0K, nextCallCountActual=1, nextTimeNanosActual=209, aggregateEvalCountActual=12, firstRowTimeNanosActual=604.4K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=606.2K, maxGroupSizeActual=12, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=12, rowsDroppedActual=11, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292.5K, avgNextNanosActual=209) +│ ╠══ Filter (resultSizeActual=12, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=18, rowsDroppedActual=6, selectivityActual=0.67, expansionFactorActual=0.67, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=5.4K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user7") (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=373, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user9") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user10") (hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user11") (hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=129.9K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=18, hasNextTrueCountActual=12, hasNextTimeNanosActual=32.1K, sourceRowsScannedActual=18, sourceRowsMatchedActual=12, sourceRowsFilteredActual=6, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=18, exprFalseCountActual=6, openCountActual=18, lastRowTimeNanosActual=3.5K, exprTrueCountActual=12, closeCountActual=18, exprEvalTimeNanosActual=5.6K, inputRowsActual=18, rowsDroppedActual=18, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.8K, filterRejectRateActual=0.33) +│ ║ │ ╠══ Or (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, shortCircuitCountActual=6, exprEvalTimeNanosActual=4.7K, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=18, exprFalseCountActual=12, exprTrueCountActual=6, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="user7") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=708, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=752, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=7.3K, nextCallCountActual=18, nextTimeNanosActual=1.2K, sourceRowsScannedActual=24, sourceRowsMatchedActual=18, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=958, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=306, avgNextNanosActual=70, indexHitRateActual=0.75) +│ ║ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=413.1K, nextCallCountActual=18, nextTimeNanosActual=414, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=35.0K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=557.1K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.20451578E7M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=21.7K, avgNextNanosActual=23, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, resultSizeActual=18, joinRightIteratorsCreatedActual=33, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51, rowsDroppedActual=33, expansionFactorActual=0.35, sampleCountActual=2, varianceActual=3.89992814938E10M, stddevActual=197.5M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, resultSizeActual=33, joinLeftBindingsConsumedActual=20, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=53, rowsDroppedActual=20, expansionFactorActual=0.62, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.65) [left] +│ ║ ║ │ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=22.9K, nextCallCountActual=20, nextTimeNanosActual=667, sourceRowsScannedActual=25, sourceRowsMatchedActual=20, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=8.8K, exprEvalCountActual=25, exprFalseCountActual=5, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=554.2K, closeCountActual=1, exprEvalTimeNanosActual=4.6K, inputRowsActual=25, rowsDroppedActual=5, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=1.1K, avgNextNanosActual=33, filterRejectRateActual=0.20) [left] +│ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=25, exprFalseCountActual=5, exprTrueCountActual=20, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=25, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=25, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=30, rowsDroppedActual=5, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=100, stddevActual=10, confidenceScoreActual=0.15, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=25, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) +│ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.3K, nextCallCountActual=5, nextTimeNanosActual=542, firstRowTimeNanosActual=3.5K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=553.2K, optimizer.candidateCount=81, closeCountActual=1, varsAddedActual=1, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=222, avgNextNanosActual=108) +│ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=25, hasNextCallCountActual=30, hasNextTrueCountActual=25, hasNextTimeNanosActual=6.8K, nextCallCountActual=25, nextTimeNanosActual=667, firstRowTimeNanosActual=250, openCountActual=5, bindingsProvidedActual=25, lastRowTimeNanosActual=16.3K, closeCountActual=5, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=228, avgNextNanosActual=27) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=33, joinRightIteratorsCreatedActual=68, joinRightBindingsConsumedActual=33, inputRowsActual=101, rowsDroppedActual=68, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=33) [right] +│ ║ ║ │ ├── Filter (resultSizeActual=68, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.80, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=85, rowsDroppedActual=17, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=85, exprFalseCountActual=17, exprTrueCountActual=68, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) +│ ║ ║ │ │ ║ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ ║ Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=85, joinRightIteratorsCreatedActual=17, joinRightBindingsConsumedActual=85, inputRowsActual=102, rowsDroppedActual=17, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=17.9M, stddevActual=4.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=85) +│ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=17, joinRightIteratorsCreatedActual=36, joinRightBindingsConsumedActual=17, inputRowsActual=53, rowsDroppedActual=36, expansionFactorActual=0.32, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=17) [left] +│ ║ ║ │ │ │ ╠══ Filter (resultSizeActual=36, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=45, rowsDroppedActual=9, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ ║ │ │ │ ║ ├── Compare (!=) (exprEvalCountActual=45, exprFalseCountActual=9, exprTrueCountActual=36, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=64.7M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=45) +│ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=9, joinRightIteratorsCreatedActual=27, joinRightBindingsConsumedActual=9, inputRowsActual=36, rowsDroppedActual=27, expansionFactorActual=0.25, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9) [left] +│ ║ ║ │ │ │ ║ ║ ├── Filter (resultSizeActual=27, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.60, filterSelectivitySource=learned_filter, inputRowsActual=45, rowsDroppedActual=18, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ ║ │ │ │ ║ ║ │ ╠══ And (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=45, exprFalseCountActual=9, exprTrueCountActual=36, exprEvalTimeNanosActual=2.6K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) (exprEvalCountActual=36, exprFalseCountActual=9, exprTrueCountActual=27, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=63.4M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=45, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) +│ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=29, hasNextTrueCountActual=9, hasNextTimeNanosActual=13.3K, nextCallCountActual=9, nextTimeNanosActual=1.3K, sourceRowsScannedActual=29, sourceRowsMatchedActual=9, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=875, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=6.1K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=461, avgNextNanosActual=153, indexHitRateActual=0.31) [left] +│ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=6.7K, nextCallCountActual=45, nextTimeNanosActual=750, firstRowTimeNanosActual=208, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=4.3K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=125, avgNextNanosActual=17) [right] +│ ║ ║ │ │ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=36, hasNextTrueCountActual=9, hasNextTimeNanosActual=10.2K, nextCallCountActual=9, nextTimeNanosActual=417, sourceRowsScannedActual=36, sourceRowsMatchedActual=9, sourceRowsFilteredActual=27, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=27, openCountActual=27, lastRowTimeNanosActual=333, closeCountActual=27, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=27, nextPerHasNextRatioActual=0.25, avgHasNextNanosActual=286, avgNextNanosActual=46, indexHitRateActual=0.25) [right] +│ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=6.4K, nextCallCountActual=45, nextTimeNanosActual=792, firstRowTimeNanosActual=250, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=53.3K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=119, avgNextNanosActual=18) [right] +│ ║ ║ │ │ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=17, hasNextCallCountActual=53, hasNextTrueCountActual=17, hasNextTimeNanosActual=14.5K, nextCallCountActual=17, nextTimeNanosActual=793, sourceRowsScannedActual=53, sourceRowsMatchedActual=17, sourceRowsFilteredActual=36, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=36, openCountActual=36, lastRowTimeNanosActual=375, closeCountActual=36, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=36, nextPerHasNextRatioActual=0.32, avgHasNextNanosActual=275, avgNextNanosActual=47, indexHitRateActual=0.32) [right] +│ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=85, hasNextCallCountActual=102, hasNextTrueCountActual=85, hasNextTimeNanosActual=12.1K, nextCallCountActual=85, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=250, openCountActual=17, bindingsProvidedActual=85, lastRowTimeNanosActual=6.2K, closeCountActual=17, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=17, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=119, avgNextNanosActual=19) [right] +│ ║ ║ │ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=101, hasNextTrueCountActual=33, hasNextTimeNanosActual=26.7K, nextCallCountActual=33, nextTimeNanosActual=1.4K, sourceRowsScannedActual=101, sourceRowsMatchedActual=33, sourceRowsFilteredActual=68, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=68, openCountActual=68, lastRowTimeNanosActual=1.6K, closeCountActual=68, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=68, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=264, avgNextNanosActual=43, indexHitRateActual=0.33) [right] +│ ║ ║ │ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=18, hasNextCallCountActual=51, hasNextTrueCountActual=18, hasNextTimeNanosActual=12.1K, nextCallCountActual=18, nextTimeNanosActual=1.1K, sourceRowsScannedActual=51, sourceRowsMatchedActual=18, sourceRowsFilteredActual=33, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=33, openCountActual=33, lastRowTimeNanosActual=375, closeCountActual=33, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=239, avgNextNanosActual=62, indexHitRateActual=0.35) [right] +│ ║ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=9.2K, nextCallCountActual=18, nextTimeNanosActual=1.3K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=6.9K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=257, avgNextNanosActual=77, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="user7") +│ ║ │ ║ ValueConstant (value="user8") +│ ║ │ ║ ValueConstant (value="user9") +│ ║ │ ║ ValueConstant (value="user10") +│ ║ │ ║ ValueConstant (value="user11") +│ ║ │ ╚══ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="user7") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="user8") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=a) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] +│ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) +│ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] +│ ║ ║ │ ├── Filter (plannedFilterPassRatio=0.80, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] +│ ║ ║ │ │ ╠══ Compare (!=) +│ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) +│ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) +│ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) +│ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] +│ ║ ║ │ │ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] +│ ║ ║ │ │ │ ║ ├── Compare (!=) +│ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) +│ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) +│ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] +│ ║ ║ │ │ │ ║ ║ ├── Filter (plannedFilterPassRatio=0.60, filterSelectivitySource=learned_filter) [left] +│ ║ ║ │ │ │ ║ ║ │ ╠══ And +│ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) +│ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] +│ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) +│ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=d) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=e) (bindingState=bound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=e) (bindingState=bound) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=a) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=e) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES (?a ?b) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?a != ?b) +?a ?b . +VALUES ?c { } +FILTER ((?a != ?c) && (?b != ?c)) +?b ?c . +VALUES ?d { } +FILTER (?c != ?d) +?c ?d . +VALUES ?e { } +FILTER (?d != ?e) +?d ?e . +?e ?a . +OPTIONAL { +?e ?optName . +} +FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + + +Theme: LIBRARY z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 1465 ms +Warmup execution 1/1 +Fastest execution time: 775 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=1388.6M, openCountActual=1, lastRowTimeNanosActual=1388.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=1.4K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=1388.6M, openCountActual=1, lastRowTimeNanosActual=1388.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=833) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=770.9K, firstRowTimeNanosActual=1388.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1388.6M, maxGroupSizeActual=770.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=770.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=770.9K, rowsDroppedActual=770.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=625) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=770.9K, hasNextCallCountActual=770.9K, hasNextTrueCountActual=770.9K, hasNextTimeNanosActual=1236.7M, nextCallCountActual=770.9K, nextTimeNanosActual=10.9M, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=770.9K, firstRowTimeNanosActual=27.2K, leftRowsWithMatchActual=386.3K, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=1.1M, rowsDroppedActual=386.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=14, leftRowsProbedActual=386.3K, rightRowsScannedActual=770.9K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=753.3M, nextCallCountActual=386.3K, nextTimeNanosActual=5.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.2K, exprEvalCountActual=386.3K, openCountActual=1, exprTrueCountActual=386.3K, lastRowTimeNanosActual=1388.5M, closeCountActual=1, exprEvalTimeNanosActual=42.2M, inputRowsActual=386.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.9K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=15.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optBranch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=683.8M, nextCallCountActual=386.3K, nextTimeNanosActual=5.5M, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=386.3K, firstRowTimeNanosActual=24.4K, leftRowsWithMatchActual=128.8K, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=515.1K, rowsDroppedActual=128.8K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, leftRowsProbedActual=128.8K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=13.9M, nextCallCountActual=128.8K, nextTimeNanosActual=8.5M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=10.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=66, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=386.3K, hasNextCallCountActual=1.0M, hasNextTrueCountActual=901.3K, hasNextTimeNanosActual=551.2M, nextCallCountActual=386.3K, nextTimeNanosActual=17.5M, firstRowTimeNanosActual=1.2K, openCountActual=128.8K, lastRowTimeNanosActual=9.1K, closeCountActual=128.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=535, avgNextNanosActual=45) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=515.1K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=80.1M, nextCallCountActual=386.3K, nextTimeNanosActual=22.4M, sourceRowsScannedActual=515.1K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=128.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=583, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=8.9K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=156, avgNextNanosActual=58, indexHitRateActual=0.75) [left] +│ ║ │ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=166.9M, nextCallCountActual=386.3K, nextTimeNanosActual=21.2M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=1.9K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=216, avgNextNanosActual=55, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optBranch) (hasNextFalseCountActual=0) +│ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=257.2K, resultSizeActual=770.9K, hasNextCallCountActual=1.9M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=202.8M, nextCallCountActual=770.9K, nextTimeNanosActual=34.9M, sourceRowsScannedActual=1.1M, sourceRowsMatchedActual=770.9K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=833, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=105, avgNextNanosActual=45, indexHitRateActual=0.67) [right] +│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optBranch) (bindingState=bound) +│ ║ │ ║ Var (name=book) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] +│ ║ │ │ s: Var (name=book) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ s: Var (name=book) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=copy) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optBranch) +│ ║ │ Var (name=branch) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) (bindingState=bound) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=book) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=book) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +OPTIONAL { +?book ?copy . +?copy ?branch . +BIND(?branch AS ?optBranch) +} +FILTER (?optBranch != ?book) +OPTIONAL { +?book ?author . +} +} + + +Theme: LIBRARY z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 324 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 201 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=306.8M, openCountActual=1, lastRowTimeNanosActual=306.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=2.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=306.8M, openCountActual=1, lastRowTimeNanosActual=306.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=4, firstRowTimeNanosActual=306.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=306.8M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=541) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=306.7M, nextCallCountActual=4, nextTimeNanosActual=83, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.2K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=306.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=51.1M, avgNextNanosActual=21, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=11.0M, nextCallCountActual=4, nextTimeNanosActual=291, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=10.1K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=54.4K, exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=306.7M, closeCountActual=1, exprEvalTimeNanosActual=4.6M, inputRowsActual=10.1K, rowsDroppedActual=10.1K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=2.2M, avgNextNanosActual=73, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=3.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=3.0M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=425.6K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, resultSizeActual=10.1K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=5.0K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.21, stddevActual=0.46, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=5.1K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.3K, nextCallCountActual=2, nextTimeNanosActual=917, firstRowTimeNanosActual=32.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=44.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=445, avgNextNanosActual=459) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K, resultSizeActual=5.0K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=5.0K, inputRowsActual=10.1K, rowsDroppedActual=5.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16, stddevActual=3.96, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=5.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.1K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=447.2K, nextCallCountActual=5.0K, nextTimeNanosActual=228.5K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=11.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=88, avgNextNanosActual=45, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5.0K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=2.1M, nextCallCountActual=5.0K, nextTimeNanosActual=257.2K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=5.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=1.6K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, inputRowsActual=257.7K, rowsDroppedActual=257.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=107.9M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=81.8M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=11.4M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, resultSizeActual=257.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=128.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=128.9K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=625, nextCallCountActual=2, nextTimeNanosActual=500, firstRowTimeNanosActual=11.1M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=11.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=208, avgNextNanosActual=250) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=128.8K, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=128.8K, inputRowsActual=257.7K, rowsDroppedActual=128.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=128.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=130.6K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=11.7M, nextCallCountActual=128.8K, nextTimeNanosActual=5.5M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=11.1M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=306.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=43, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=133.3K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=67.6M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=1.4K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.9K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=500, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=490, indexHitRateActual=0) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Member 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Member 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ o: Var (name=copy) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +UNION +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity ?name . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +OPTIONAL { +?entity ?copy . +} +} + + +Theme: LIBRARY z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 242 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 123 ms + +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=5.7K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "author" (hasNextFalseCountActual=0) +║ ProjectionElem "bookCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=4.3K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.4K) +├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=4.2K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.4K) +│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=3.6K, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=227.3M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=227.3M, closeCountActual=1, exprEvalTimeNanosActual=4.9K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.2K, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=4.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) +│ ║ └── Group (author) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=541, aggregateEvalCountActual=30, firstRowTimeNanosActual=227.3M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=227.3M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=5.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=15, rowsDroppedActual=12, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=180) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=15, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=227.2M, nextCallCountActual=15, nextTimeNanosActual=459, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=15, firstRowTimeNanosActual=54.2K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=227.2M, closeCountActual=1, maxRightRowsPerLeftActual=5, inputRowsActual=18, rowsDroppedActual=3, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=67.7M, stddevActual=8.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.88, avgHasNextNanosActual=13.4M, avgNextNanosActual=31, leftRowsProbedActual=3, rightRowsScannedActual=15, avgRightRowsPerLeftActual=5.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K, resultSizeActual=3, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=3, inputRowsActual=40.2K, rowsDroppedActual=40.2K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=118.5K, stddevActual=344, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=12.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=227.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, resultSizeActual=3, hasNextCallCountActual=40.2K, hasNextTrueCountActual=3, hasNextTimeNanosActual=135.1M, nextCallCountActual=3, nextTimeNanosActual=83, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=40.2K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.6K, exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, openCountActual=40.2K, exprTrueCountActual=3, lastRowTimeNanosActual=3.2K, closeCountActual=40.2K, exprEvalTimeNanosActual=31.8M, inputRowsActual=40.2K, rowsDroppedActual=40.2K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, exprTrueCountActual=3, exprEvalTimeNanosActual=29.2M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Author 1") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Author 2") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Author 3") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=40.2K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=19.0M, nextCallCountActual=40.2K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=1.4K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=257.2K, resultSizeActual=15, hasNextCallCountActual=42, hasNextTrueCountActual=39, hasNextTimeNanosActual=5.0K, nextCallCountActual=15, nextTimeNanosActual=666, sourceRowsScannedActual=18, sourceRowsMatchedActual=15, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=625, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.2K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=119, avgNextNanosActual=44, indexHitRateActual=0.83) [right] +│ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (bookCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (bookCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (author) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=author) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) +│ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=authorName) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Author 1") +│ ║ │ │ ValueConstant (value="Author 2") +│ ║ │ │ ValueConstant (value="Author 3") +│ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) +│ ║ │ s: Var (name=author) (bindingState=bound) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ o: Var (name=authorName) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) (bindingState=unbound) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) (bindingState=bound) +│ ║ GroupElem (_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=book) (bindingState=bound) +│ ║ GroupElem (bookCount) +│ ║ Count (Distinct) +│ ║ Var (name=book) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=book) (bindingState=unbound) +└── ExtensionElem (bookCount) +Count (Distinct) +Var (name=book) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a . +?author ?authorName . +FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { +?book ?author . +} +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + + +Theme: LIBRARY z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 92 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 54 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=82.3M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=709, firstRowTimeNanosActual=82.3M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=709) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.9K, firstRowTimeNanosActual=82.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=82.3M, maxGroupSizeActual=7.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=8.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.9K, rowsDroppedActual=7.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=542) +│ ╠══ Difference (resultSizeActual=7.9K, hasNextCallCountActual=7.9K, hasNextTrueCountActual=7.9K, hasNextTimeNanosActual=77.7M, nextCallCountActual=7.9K, nextTimeNanosActual=91.6K, firstRowTimeNanosActual=39.8M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.2K, rowsDroppedActual=3.3K, selectivityActual=0.71, expansionFactorActual=0.71, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.8K, avgNextNanosActual=12, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=1.1K, overlapRowsActual=2.1K) +│ ║ ├── Filter (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=33.1M, nextCallCountActual=10.1K, nextTimeNanosActual=127.9K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.5K, exprEvalCountActual=10.1K, openCountActual=1, exprTrueCountActual=10.1K, lastRowTimeNanosActual=82.3M, closeCountActual=1, exprEvalTimeNanosActual=6.2M, inputRowsActual=10.1K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=10.1K, exprTrueCountActual=10.1K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=26.1M, nextCallCountActual=10.1K, nextTimeNanosActual=107.7K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, firstRowTimeNanosActual=48.2K, leftRowsWithMatchActual=10.1K, openCountActual=1, lastRowTimeNanosActual=82.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=11, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=20.3K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=20.3K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=579.3K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=23.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=82.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=57, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.4M, nextCallCountActual=10.1K, nextTimeNanosActual=521.8K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=541, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=7.2M, nextCallCountActual=10.1K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=500, openCountActual=10.1K, lastRowTimeNanosActual=2.7K, closeCountActual=10.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=359, avgNextNanosActual=148) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=649.6K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=2.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233, avgNextNanosActual=64, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optDue) (hasNextFalseCountActual=0) +│ ║ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=38.4M, nextCallCountActual=1.1K, nextTimeNanosActual=15.8K, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=44.2K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=33.8M, exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=39.2M, closeCountActual=1, exprEvalTimeNanosActual=31.5M, inputRowsActual=45.3K, rowsDroppedActual=44.2K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=34.6K, avgNextNanosActual=14, filterRejectRateActual=0.98) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=29.0M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=24.2M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=20.5M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="member 1") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.5M, nextCallCountActual=45.3K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=39.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=78, avgNextNanosActual=29, indexHitRateActual=1.00) +│ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optDue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="2024-01-10"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ ║ s: Var (name=loan) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ ║ o: Var (name=due) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optDue) +│ ║ │ Var (name=due) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="member 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=member) (bindingState=unbound) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan ?member . +?loan a . +OPTIONAL { +?loan ?due . +BIND(?due AS ?optDue) +} +FILTER (?optDue > "2024-01-10"^^) +MINUS { +?member ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) +} +} + + +Theme: LIBRARY z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 848 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 447 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.1M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=836.1M, openCountActual=1, lastRowTimeNanosActual=836.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.1M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.1M, nextCallCountActual=1, nextTimeNanosActual=958, firstRowTimeNanosActual=836.1M, openCountActual=1, lastRowTimeNanosActual=836.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.1M, avgNextNanosActual=958) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.0M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=836.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=836.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.0M, avgNextNanosActual=542, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=836.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=836.0M) +│ ║ ├── Exists (hasNextFalseCountActual=0) +│ ║ │ StatementPattern (resultSizeEstimate=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=836.0M, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=836.0M, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=0, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, inputRowsActual=128.8K, rowsDroppedActual=128.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=15.1M, nextCallCountActual=128.8K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=47, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=133.3K, resultSizeActual=0, hasNextCallCountActual=128.8K, hasNextTimeNanosActual=500.3M, sourceRowsScannedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], filterSelectivitySource=cardinality, plannedLookupComponents=[S, O, P], exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=3.8K, closeCountActual=128.8K, exprEvalTimeNanosActual=105.6M, inputRowsActual=128.8K, rowsDroppedActual=128.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.9K, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=97.6M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=82.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Book 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Book 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=76.8M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=1.5K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=298, avgNextNanosActual=39, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=title) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ s: Var (name=book) (bindingState=bound) +│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=book) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], filterSelectivitySource=cardinality, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=title) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Book 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=title) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Book 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) +│ ║ ║ s: Var (name=book) (bindingState=bound) +│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ ║ o: Var (name=title) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) (bindingState=bound) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=book) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=book) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +?book ?title . +FILTER ((?title = "Book 1") || (?title = "Book 2")) +OPTIONAL { +?book ?author . +} +FILTER EXISTS { +?book ?copy . +} +} + + +Theme: LIBRARY z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 66 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 35 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=61.6M, openCountActual=1, lastRowTimeNanosActual=61.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=61.6M, openCountActual=1, lastRowTimeNanosActual=61.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=217, firstRowTimeNanosActual=61.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=61.6M, maxGroupSizeActual=217, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=217, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=217, rowsDroppedActual=216, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=708) +│ ╠══ Filter (resultSizeActual=217, hasNextCallCountActual=219, hasNextTrueCountActual=218, hasNextTimeNanosActual=61.3M, nextCallCountActual=217, nextTimeNanosActual=2.7K, sourceRowsScannedActual=217, sourceRowsMatchedActual=217, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=845.5K, exprEvalCountActual=217, openCountActual=1, exprTrueCountActual=217, lastRowTimeNanosActual=61.6M, closeCountActual=1, exprEvalTimeNanosActual=924.3K, inputRowsActual=217, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=280.0K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Not (exprEvalCountActual=217, exprTrueCountActual=217, exprEvalTimeNanosActual=907.9K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=890.1K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=217, hasNextTimeNanosActual=549.8K, sourceRowsScannedActual=217, sourceRowsFilteredActual=217, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=217, exprFalseCountActual=217, openCountActual=217, lastRowTimeNanosActual=2.7K, closeCountActual=217, exprEvalTimeNanosActual=107.1K, inputRowsActual=217, rowsDroppedActual=217, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.5K, filterRejectRateActual=1.00) +│ ║ │ ╠══ Compare (<) (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=97.8K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=217, hasNextCallCountActual=434, hasNextTrueCountActual=217, hasNextTimeNanosActual=98.5K, nextCallCountActual=217, nextTimeNanosActual=7.9K, sourceRowsScannedActual=434, sourceRowsMatchedActual=217, sourceRowsFilteredActual=217, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=217, openCountActual=217, lastRowTimeNanosActual=1.5K, closeCountActual=217, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M, resultSizeActual=217, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=217, inputRowsActual=10.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.02, sampleCountActual=2, varianceActual=0.46, stddevActual=0.68, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=217) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=10.1K, joinType=Cartesian product, inputRowsActual=10.1K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.06, stddevActual=0.25, confidenceScoreActual=0.62, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=10.2K, joinOutputPerLeftActual=10.2K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=17.2K, nextCallCountActual=1, nextTimeNanosActual=5.2K, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=7.8K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=61.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.6K, avgNextNanosActual=5.3K) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=15.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.5M, nextCallCountActual=10.1K, nextTimeNanosActual=892.0K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=due) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=10.2K) +│ ║ ║ Var (name=loan) +│ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ ║ Var (name=due) +│ ║ ║ , firstRowTimeNanosActual=12.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=61.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=156, avgNextNanosActual=88, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=511, resultSizeActual=217, hasNextCallCountActual=10.3K, hasNextTrueCountActual=217, hasNextTimeNanosActual=34.3M, nextCallCountActual=217, nextTimeNanosActual=3.8K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=217, sourceRowsFilteredActual=9.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=917, exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, openCountActual=10.1K, exprTrueCountActual=217, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, exprEvalTimeNanosActual=6.5M, inputRowsActual=10.1K, rowsDroppedActual=9.9K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.02, avgHasNextNanosActual=3.3K, avgNextNanosActual=18, filterRejectRateActual=0.98) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, exprTrueCountActual=217, exprEvalTimeNanosActual=5.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=loanDate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=10.1K, exprEvalTimeNanosActual=231.6K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2024-01-02"^^) (exprEvalCountActual=10.0K, exprEvalTimeNanosActual=260.4K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.5M, nextCallCountActual=10.1K, nextTimeNanosActual=384.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=1.1K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=272, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=loanDate) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=due) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ o: Var (name=due) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=due) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=10.2K) +│ ║ ║ Var (name=loan) +│ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ ║ Var (name=due) +│ ║ ║ ) +│ ║ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=511, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=loanDate) (bindingState=bound) +│ ║ │ ValueConstant (value="2024-01-01"^^) +│ ║ │ ValueConstant (value="2024-01-02"^^) +│ ║ └── StatementPattern (resultSizeEstimate=10.2K) +│ ║ s: Var (name=loan) (bindingState=bound) +│ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) +│ ║ o: Var (name=loanDate) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +VALUES ?threshold { "2024-01-01"^^ } +?loan a . +?loan ?loanDate . +FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) +FILTER NOT EXISTS { +?loan ?due . +FILTER (?due < ?threshold) +} +} + + +Theme: LIBRARY z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 30007 ms + +Timed out while retrieving explanation! Explanation may be incomplete! +You can change the timeout by setting .setMaxExecutionTime(...) on your query. + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "member" (hasNextFalseCountActual=0) +║ ProjectionElem "loanCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +│ ║ ├── Compare (>) (hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.4K, hasNextFalseCountActual=0) +│ ║ └── Group (member) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29998.6M, aggregateEvalCountActual=54.0M, groupsCreatedActual=5.0K, openCountActual=1, lastRowTimeNanosActual=29998.6M, maxGroupSizeActual=10.1K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=5.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=27.0M, rowsDroppedActual=27.0M, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +│ ║ Filter (resultSizeActual=27.0M, hasNextCallCountActual=27.0M, hasNextTrueCountActual=27.0M, hasNextTimeNanosActual=15679.6M, nextCallCountActual=27.0M, nextTimeNanosActual=306.4M, sourceRowsScannedActual=27.0M, sourceRowsMatchedActual=27.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=74.1K, exprEvalCountActual=27.0M, openCountActual=1, exprTrueCountActual=27.0M, lastRowTimeNanosActual=29997.6M, closeCountActual=1, exprEvalTimeNanosActual=3264.2M, inputRowsActual=27.0M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=581, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=27.0M, exprTrueCountActual=27.0M, exprEvalTimeNanosActual=1277.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=27.0M, hasNextCallCountActual=27.0M, hasNextTrueCountActual=27.0M, hasNextTimeNanosActual=10018.4M, nextCallCountActual=27.0M, nextTimeNanosActual=350.3M, joinRightIteratorsCreatedActual=12.8K, joinLeftBindingsConsumedActual=12.8K, joinRightBindingsConsumedActual=27.0M, firstRowTimeNanosActual=21.4K, leftRowsWithMatchActual=12.8K, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, maxRightRowsPerLeftActual=10.1K, inputRowsActual=27.0M, rowsDroppedActual=12.8K, expansionFactorActual=1.00, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=371, avgNextNanosActual=13, leftRowsProbedActual=12.8K, rightRowsScannedActual=27.0M, avgRightRowsPerLeftActual=2.1K, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.1K, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=12.8K, hasNextCallCountActual=12.8K, hasNextTrueCountActual=12.8K, hasNextTimeNanosActual=16.8M, nextCallCountActual=12.8K, nextTimeNanosActual=322.0K, firstRowTimeNanosActual=17.7K, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, sampleCountActual=2, varianceActual=0.20, stddevActual=0.45, confidenceScoreActual=0.58, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=25, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=2.6K, leftRowsOutputContributionActual=10.1K, rightRowsOutputContributionActual=2.6K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=569.7K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=13.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=39.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=107, avgNextNanosActual=56, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.9M, nextCallCountActual=10.1K, nextTimeNanosActual=548.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=459, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=291, avgNextNanosActual=54, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.1K, resultSizeActual=2.6K, hasNextCallCountActual=2.6K, hasNextTrueCountActual=2.6K, hasNextTimeNanosActual=1.4M, nextCallCountActual=2.6K, nextTimeNanosActual=329.0K, sourceRowsScannedActual=2.6K, sourceRowsMatchedActual=2.6K, plannedIndexName=ospc, firstRowTimeNanosActual=39.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=564, avgNextNanosActual=124, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=27.0M, hasNextCallCountActual=81.0M, hasNextTrueCountActual=80.9M, hasNextTimeNanosActual=5461.0M, nextCallCountActual=27.0M, nextTimeNanosActual=2403.3M, firstRowTimeNanosActual=1.3K, openCountActual=12.8K, lastRowTimeNanosActual=5.4M, closeCountActual=12.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12.8K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=67, avgNextNanosActual=89) [right] +│ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=27.0M, hasNextCallCountActual=81.0M, hasNextTrueCountActual=80.9M, hasNextTimeNanosActual=3327.1M, nextCallCountActual=27.0M, nextTimeNanosActual=1122.4M, sourceRowsScannedActual=27.0M, sourceRowsMatchedActual=27.0M, sourceRowsFilteredActual=12.8K, plannedIndexName=psoc, firstRowTimeNanosActual=1.2K, indexLookupCountActual=12.8K, openCountActual=12.8K, lastRowTimeNanosActual=5.4M, closeCountActual=12.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12.8K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=41, avgNextNanosActual=42, indexHitRateActual=1.00) +│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optCopy) (hasNextFalseCountActual=0) +│ ║ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (loanCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (member) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optCopy) (bindingState=bound) +│ ║ │ Var (name=member) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) +│ ║ ║ s: Var (name=member) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ └── ExtensionElem (optCopy) +│ ║ Var (name=copy) (bindingState=bound) +│ ║ GroupElem (_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567) +│ ║ Count +│ ║ Var (name=loan) (bindingState=bound) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567) +│ Count +│ Var (name=loan) (bindingState=unbound) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ +?loan ?member . +?loan a . +} +UNION +{ +?member a . +} +OPTIONAL { +?loan ?copy . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + + +Theme: LIBRARY z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 3469 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=3450.3M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=5.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=3450.3M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=2.9K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, aggregateEvalCountActual=77.2K, firstRowTimeNanosActual=3450.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3450.3M, maxGroupSizeActual=77.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=77.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=77.2K, rowsDroppedActual=77.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=1.2K) +│ ╠══ Difference (resultSizeActual=77.2K, hasNextCallCountActual=77.2K, hasNextTrueCountActual=77.2K, hasNextTimeNanosActual=3424.0M, nextCallCountActual=77.2K, nextTimeNanosActual=1.5M, firstRowTimeNanosActual=285.5M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, inputRowsActual=231.5K, rowsDroppedActual=154.2K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=44.3K, avgNextNanosActual=20, leftRowsConsumedActual=154.4K, rightRowsConsumedActual=77.1K, overlapRowsActual=77.1K) +│ ║ ├── Filter (resultSizeActual=154.4K, hasNextCallCountActual=154.4K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=2974.6M, nextCallCountActual=154.4K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=154.4K, sourceRowsMatchedActual=154.4K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=84.3K, exprEvalCountActual=154.4K, openCountActual=1, exprTrueCountActual=154.4K, lastRowTimeNanosActual=3450.2M, closeCountActual=1, exprEvalTimeNanosActual=142.5M, inputRowsActual=154.4K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.3K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=154.4K, exprTrueCountActual=154.4K, exprEvalTimeNanosActual=133.4M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=154.4K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=54.5M, sourceRowsScannedActual=154.4K, sourceRowsMatchedActual=154.4K, plannedIndexName=spoc, indexLookupCountActual=154.4K, openCountActual=154.4K, lastRowTimeNanosActual=417, closeCountActual=154.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=154.4K, joinRightIteratorsCreatedActual=386.3K, joinRightBindingsConsumedActual=154.4K, inputRowsActual=540.7K, rowsDroppedActual=386.3K, expansionFactorActual=0.29, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=154.4K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=389.0K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=48.6M, nextCallCountActual=386.3K, nextTimeNanosActual=17.0M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ │ ║ Var (name=copy) +│ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ │ ║ , firstRowTimeNanosActual=23.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3450.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=126, avgNextNanosActual=44, indexHitRateActual=1.00) +│ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=202.7M, nextCallCountActual=386.3K, nextTimeNanosActual=14.5M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=6.3K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=262, avgNextNanosActual=38, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=0, resultSizeActual=154.4K, hasNextCallCountActual=540.7K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=1336.7M, nextCallCountActual=154.4K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=154.4K, sourceRowsFilteredActual=231.9K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=386.3K, exprFalseCountActual=231.9K, openCountActual=386.3K, exprTrueCountActual=154.4K, lastRowTimeNanosActual=3.4K, closeCountActual=386.3K, exprEvalTimeNanosActual=93.3M, inputRowsActual=386.3K, rowsDroppedActual=231.9K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.29, avgHasNextNanosActual=2.5K, avgNextNanosActual=13, filterRejectRateActual=0.60) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=386.3K, exprFalseCountActual=231.9K, exprTrueCountActual=154.4K, shortCircuitCountActual=77.1K, exprEvalTimeNanosActual=69.4M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Branch 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=309.2K, exprFalseCountActual=231.9K, exprTrueCountActual=77.2K, exprEvalTimeNanosActual=14.9M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Branch 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=181.0M, nextCallCountActual=386.3K, nextTimeNanosActual=16.7M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=1.0K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=43, indexHitRateActual=0.50) +│ ║ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=branchName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=77.1K, hasNextCallCountActual=77.1K, hasNextTrueCountActual=77.1K, hasNextTimeNanosActual=155.0M, nextCallCountActual=77.1K, nextTimeNanosActual=731.4K, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=77.1K, sourceRowsFilteredActual=309.2K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.1K, exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, openCountActual=1, exprTrueCountActual=77.1K, lastRowTimeNanosActual=200.7M, closeCountActual=1, exprEvalTimeNanosActual=93.8M, inputRowsActual=386.3K, rowsDroppedActual=309.2K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=9.49, filterRejectRateActual=0.80) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=70.2M, hasNextFalseCountActual=0) +│ ║ ║ ├── Str (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=21.1M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="branch/0") (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=26.6M, nextCallCountActual=386.3K, nextTimeNanosActual=12.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=200.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=69, avgNextNanosActual=32, indexHitRateActual=1.00) +│ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ ║ s: Var (name=copy) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ │ ║ Var (name=copy) +│ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ │ ║ ) +│ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=copy) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=0, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=branchName) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Branch 0") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=branchName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="Branch 1") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ │ s: Var (name=branch) (bindingState=bound) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ o: Var (name=branchName) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=branch) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="branch/0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) +│ ║ s: Var (name=copy) (bindingState=unbound) +│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ o: Var (name=branch) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=copy) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=copy) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?copy ?branch . +?copy a . +?branch ?branchName . +FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) +FILTER EXISTS { +?copy a . +} +MINUS { +?copy ?branch . +FILTER (CONTAINS(STR(?branch), "branch/0")) +} +} + + +Theme: LIBRARY z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 171 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 117 ms + +Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=317) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "author" (hasNextFalseCountActual=0) +║ ProjectionElem "loanCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=179) +├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=108) +│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=375, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=124.4M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=124.5M, closeCountActual=1, exprEvalTimeNanosActual=6.4K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=38, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=5.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.7K, hasNextFalseCountActual=0) +│ ║ └── Group (author) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=709, aggregateEvalCountActual=20, firstRowTimeNanosActual=124.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=124.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=15, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=71) +│ ║ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=208, sourceRowsScannedActual=20.2K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=20.2K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=104.0K, exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=124.4M, closeCountActual=1, exprEvalTimeNanosActual=9.8M, inputRowsActual=20.2K, rowsDroppedActual=20.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=10.4M, avgNextNanosActual=21, filterRejectRateActual=1.00) +│ ║ ├── ListMemberOperator (exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, exprTrueCountActual=10, exprEvalTimeNanosActual=7.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Member 1") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=592.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Member 2") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=672.0K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=794.3K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20.2K, hasNextCallCountActual=20.2K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=113.1M, nextCallCountActual=20.2K, nextTimeNanosActual=177.9K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, firstRowTimeNanosActual=28.4K, leftRowsWithMatchActual=20.2K, openCountActual=1, lastRowTimeNanosActual=124.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=30, stddevActual=5.46, confidenceScoreActual=0.24, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=8.79, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=30.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.01, stddevActual=0.11, confidenceScoreActual=0.64, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20.2K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=38, stddevActual=6.16, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=342, stddevActual=18, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=343, stddevActual=19, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.4M, nextCallCountActual=10.1K, nextTimeNanosActual=546.4K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=7.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=124.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=144, avgNextNanosActual=54, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.5M, nextCallCountActual=10.1K, nextTimeNanosActual=541.9K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=10.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=275, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=13.1M, nextCallCountActual=10.1K, nextTimeNanosActual=578.5K, sourceRowsScannedActual=30.7K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=20.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O], firstRowTimeNanosActual=625, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=9.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=650, avgNextNanosActual=57, indexHitRateActual=0.33) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=12.6M, nextCallCountActual=10.1K, nextTimeNanosActual=578.3K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.2K, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=8.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=620, avgNextNanosActual=57, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=135.9K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=476.3K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=6.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=47, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=266.2K, resultSizeActual=20.2K, hasNextCallCountActual=30.3K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=5.2M, nextCallCountActual=20.2K, nextTimeNanosActual=987.6K, sourceRowsScannedActual=30.3K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=5.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=173, avgNextNanosActual=49, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=265.2K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=8.4M, nextCallCountActual=20.2K, nextTimeNanosActual=851.0K, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=375, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1.8K, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=8.9M, nextCallCountActual=20.2K, nextTimeNanosActual=980.9K, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1000, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=48, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (loanCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (author) +│ ║ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="Member 1") +│ ║ │ ValueConstant (value="Member 2") +│ ║ │ ValueConstant (value="Member 3") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) +│ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=book) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ ║ │ o: Var (name=author) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=loan) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] +│ ║ s: Var (name=member) (bindingState=bound) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ GroupElem (_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count +│ ║ Var (name=loan) (bindingState=bound) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count +│ Var (name=loan) (bindingState=unbound) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?loan ?member . +?loan ?copy . +?book ?copy . +?copy ?branch . +?book a . +?book ?author . +?loan a . +OPTIONAL { +?member ?optName . +} +FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + + +Theme: LIBRARY z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 163 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 107 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=110.0M, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=110.0M, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=2, firstRowTimeNanosActual=110.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=110.0M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=17, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=708) +│ ╠══ Filter (resultSizeActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=2, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=5.9K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTitle) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=28.2K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=27.4K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=2, hasNextTimeNanosActual=18.5K, sourceRowsScannedActual=2, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=2, exprFalseCountActual=2, openCountActual=2, lastRowTimeNanosActual=9.1K, closeCountActual=2, exprEvalTimeNanosActual=8.3K, inputRowsActual=2, rowsDroppedActual=2, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.3K, filterRejectRateActual=1.00) +│ ║ │ ├── Compare (<) (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=8.0K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=4.8K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=104, indexHitRateActual=0.50) +│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.9M, nextCallCountActual=2, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=93.1K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=9.223372036854776E17M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=36.7M, avgNextNanosActual=104, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=9.223372036854776E17M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.866511454927122E15M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.776968444044E11M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M, resultSizeActual=2, joinRightIteratorsCreatedActual=30, joinRightBindingsConsumedActual=2, inputRowsActual=32, rowsDroppedActual=30, expansionFactorActual=0.06, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3792528.1M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M, resultSizeActual=30, joinRightIteratorsCreatedActual=10, joinRightBindingsConsumedActual=30, inputRowsActual=40, rowsDroppedActual=10, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=8.665262962E8M, stddevActual=29.4M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=30) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M, resultSizeActual=10, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=10, inputRowsActual=12, rowsDroppedActual=2, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=153.1M, stddevActual=12.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.2K, nextCallCountActual=2, nextTimeNanosActual=1.0K, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=6.3K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=110.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=750, avgNextNanosActual=521) [left] +│ ║ ║ │ ║ │ ║ │ ║ └── Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.8M, nextCallCountActual=2, nextTimeNanosActual=375, sourceRowsScannedActual=90.6K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=90.6K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=18.9K, exprEvalCountActual=90.6K, predicateErrorCountActual=90.6K, openCountActual=2, exprTrueCountActual=2, lastRowTimeNanosActual=55.5M, closeCountActual=2, exprEvalTimeNanosActual=85.9M, inputRowsActual=90.6K, rowsDroppedActual=90.6K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=27.5M, avgNextNanosActual=188, filterRejectRateActual=1.00) [right] +│ ║ ║ │ ║ │ ║ │ ║ ╠══ Or (exprEvalCountActual=90.6K, exprTrueCountActual=2, exprErrorCountActual=90.6K, exprEvalTimeNanosActual=74.6M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) (exprEvalCountActual=90.6K, exprErrorCountActual=90.6K, exprEvalTimeNanosActual=9.2M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) (exprEvalCountActual=90.6K, exprFalseCountActual=90.6K, exprTrueCountActual=2, exprEvalTimeNanosActual=46.5M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=91.6K, resultSizeActual=90.6K, hasNextCallCountActual=90.6K, hasNextTrueCountActual=90.6K, hasNextTimeNanosActual=8.4M, nextCallCountActual=90.6K, nextTimeNanosActual=10.9M, sourceRowsScannedActual=90.6K, sourceRowsMatchedActual=90.6K, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=target) +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") +│ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P], firstRowTimeNanosActual=8.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=55.4M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=121, indexHitRateActual=1.00) +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=259.0K, resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.9K, nextCallCountActual=10, nextTimeNanosActual=1.2K, sourceRowsScannedActual=12, sourceRowsMatchedActual=10, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O], firstRowTimeNanosActual=3.2K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=73.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=660, avgNextNanosActual=121, indexHitRateActual=0.83) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=761.7K, resultSizeActual=30, hasNextCallCountActual=40, hasNextTrueCountActual=30, hasNextTimeNanosActual=21.5K, nextCallCountActual=30, nextTimeNanosActual=2.2K, sourceRowsScannedActual=40, sourceRowsMatchedActual=30, sourceRowsFilteredActual=10, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.7K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=7.6K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=538, avgNextNanosActual=75, indexHitRateActual=0.75) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=32, hasNextTrueCountActual=2, hasNextTimeNanosActual=25.5K, nextCallCountActual=2, nextTimeNanosActual=41, sourceRowsScannedActual=62, sourceRowsMatchedActual=2, sourceRowsFilteredActual=60, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O], firstRowTimeNanosActual=1.2K, indexLookupCountActual=30, openCountActual=30, lastRowTimeNanosActual=500, closeCountActual=30, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=30, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=800, avgNextNanosActual=21, indexHitRateActual=0.03) [right] +│ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=4.9K, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.2K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=31.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2K, avgNextNanosActual=104, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.1K, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=27.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=281, avgNextNanosActual=105, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.6K, nextCallCountActual=2, nextTimeNanosActual=41, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.1K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=25.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=667, avgNextNanosActual=21, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.6K, nextCallCountActual=2, nextTimeNanosActual=125, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=709, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=22.5K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=417, avgNextNanosActual=63, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optTitle) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTitle) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ├── Compare (<) +│ ║ │ │ Var (name=due) (bindingState=bound) +│ ║ │ │ ValueConstant (value="2024-01-10"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ o: Var (name=due) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] +│ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ ║ │ ║ │ ║ │ ║ ╠══ Or +│ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") +│ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=target) +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") +│ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ o: Var (name=member) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=member) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] +│ ║ s: Var (name=book) (bindingState=bound) +│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ o: Var (name=optTitle) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=member) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=member) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +VALUES ?target { "Author 1" "Author 2" } +?author ?authorName . +FILTER ((?authorName = ?target) || (?authorName = "Author 3")) +?book ?author . +?book ?copy . +?loan ?copy . +?loan a . +?loan ?member . +?member a . +OPTIONAL { +?book ?optTitle . +} +FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + + +Theme: LIBRARY z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 713 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 289 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.5M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=708.5M, openCountActual=1, lastRowTimeNanosActual=708.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.3M, avgNextNanosActual=2.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.5M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=708.5M, openCountActual=1, lastRowTimeNanosActual=708.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.3M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.4M, nextCallCountActual=1, nextTimeNanosActual=875, aggregateEvalCountActual=618.4K, firstRowTimeNanosActual=708.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=708.5M, maxGroupSizeActual=618.4K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=618.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=618.4K, rowsDroppedActual=618.4K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.2M, avgNextNanosActual=875) +│ ╠══ Difference (resultSizeActual=618.4K, hasNextCallCountActual=618.4K, hasNextTrueCountActual=618.4K, hasNextTimeNanosActual=656.9M, nextCallCountActual=618.4K, nextTimeNanosActual=6.8M, firstRowTimeNanosActual=97.1M, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=772.6K, rowsDroppedActual=154.2K, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.1K, avgNextNanosActual=11, leftRowsConsumedActual=772.6K, rightRowsConsumedActual=1, overlapRowsActual=154.2K) +│ ║ ├── Filter (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=427.3M, nextCallCountActual=772.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.5K, exprEvalCountActual=772.6K, openCountActual=1, exprTrueCountActual=772.6K, lastRowTimeNanosActual=708.4M, closeCountActual=1, exprEvalTimeNanosActual=84.7M, inputRowsActual=772.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=553, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=772.6K, exprTrueCountActual=772.6K, exprEvalTimeNanosActual=32.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=281.9M, nextCallCountActual=772.6K, nextTimeNanosActual=10.2M, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=772.6K, firstRowTimeNanosActual=13.1K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, maxRightRowsPerLeftActual=77.3K, inputRowsActual=772.6K, rowsDroppedActual=10, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=365, avgNextNanosActual=13, leftRowsProbedActual=10, rightRowsScannedActual=772.6K, avgRightRowsPerLeftActual=77.3K, joinMatchRateActual=1.00, joinOutputPerLeftActual=77.3K, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Union (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=81.2K, nextCallCountActual=10, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=8.0K, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=7.4K, avgNextNanosActual=133, leftRowsConsumedActual=5, rightRowsConsumedActual=5, leftRowsOutputContributionActual=5, rightRowsOutputContributionActual=5) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=4.9K, nextCallCountActual=5, nextTimeNanosActual=1.1K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=5.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=365.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=820, avgNextNanosActual=225, indexHitRateActual=0.83) +│ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00, resultSizeActual=5, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=10, rowsDroppedActual=5, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=20.5M, stddevActual=4.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=7.9K, nextCallCountActual=5, nextTimeNanosActual=1.0K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=365.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.3K, avgNextNanosActual=208, indexHitRateActual=0.83) [left] +│ ║ │ │ │ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5, hasNextCallCountActual=10, hasNextTrueCountActual=5, hasNextTimeNanosActual=16.2K, nextCallCountActual=5, nextTimeNanosActual=1.2K, sourceRowsScannedActual=10, sourceRowsMatchedActual=5, sourceRowsFilteredActual=5, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[S, P], firstRowTimeNanosActual=2.1K, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=72.1M, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.6K, avgNextNanosActual=242, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=157.7M, nextCallCountActual=772.6K, nextTimeNanosActual=65.5M, firstRowTimeNanosActual=1.7K, openCountActual=10, lastRowTimeNanosActual=72.1M, closeCountActual=10, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=85) [right] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=99.7M, nextCallCountActual=772.6K, nextTimeNanosActual=30.9M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=10, plannedIndexName=ospc, firstRowTimeNanosActual=1.7K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=72.1M, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=43, avgNextNanosActual=40, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optCopy) (hasNextFalseCountActual=0) +│ ║ │ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=37.5M, nextCallCountActual=1, nextTimeNanosActual=167, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=45.3K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=33.3M, exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=37.5M, closeCountActual=1, exprEvalTimeNanosActual=30.8M, inputRowsActual=45.3K, rowsDroppedActual=45.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=18.8M, avgNextNanosActual=167, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=28.2M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=23.9M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=20.4M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="branch 0") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.3M, nextCallCountActual=45.3K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=37.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optCopy) (bindingState=bound) +│ ║ │ ║ Var (name=branch) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) +│ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) +│ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) +│ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=branch) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ ║ s: Var (name=copy) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) (bindingState=bound) +│ ║ │ ╚══ ExtensionElem (optCopy) +│ ║ │ Var (name=copy) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="branch 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=branch) (bindingState=unbound) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=branch) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=branch) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ +?branch a . +} +UNION +{ +?branch a . +?branch ?name . +} +OPTIONAL { +?copy ?branch . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?branch) +MINUS { +?branch ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) +} +} + + +Theme: ENGINEERING z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 471 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 252 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=452.7M, openCountActual=1, lastRowTimeNanosActual=452.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=452.7M, openCountActual=1, lastRowTimeNanosActual=452.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=667, aggregateEvalCountActual=132.6K, firstRowTimeNanosActual=452.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=452.7M, maxGroupSizeActual=132.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=132.7K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=667) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=368.0M, nextCallCountActual=132.6K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=43.4K, leftRowsWithMatchActual=132.6K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=11, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) +│ ║ ├── Filter (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=228.1M, nextCallCountActual=132.6K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.0K, exprEvalCountActual=132.6K, openCountActual=1, exprTrueCountActual=132.6K, lastRowTimeNanosActual=452.6M, closeCountActual=1, exprEvalTimeNanosActual=13.6M, inputRowsActual=132.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=132.6K, exprTrueCountActual=132.6K, exprEvalTimeNanosActual=5.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optAssembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=204.1M, nextCallCountActual=132.6K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=19.9K, leftRowsWithMatchActual=132.6K, openCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5K, avgNextNanosActual=8.95, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.9M, nextCallCountActual=132.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=11.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=64, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=93.0M, nextCallCountActual=132.6K, nextTimeNanosActual=20.9M, firstRowTimeNanosActual=625, openCountActual=132.6K, lastRowTimeNanosActual=2.9K, closeCountActual=132.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=351, avgNextNanosActual=158) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=59.3M, nextCallCountActual=132.6K, nextTimeNanosActual=9.4M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=2.7K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=72, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optAssembly) (hasNextFalseCountActual=0) +│ ║ │ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=55.7M, nextCallCountActual=132.6K, nextTimeNanosActual=7.4M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optAssembly) (bindingState=bound) +│ ║ │ ║ Var (name=component) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] +│ ║ │ │ s: Var (name=component) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ ║ s: Var (name=component) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optAssembly) +│ ║ │ Var (name=assembly) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) (bindingState=bound) +│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ o: Var (name=dep) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=component) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=component) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +OPTIONAL { +?component ?assembly . +BIND(?assembly AS ?optAssembly) +} +FILTER (?optAssembly != ?component) +OPTIONAL { +?component ?dep . +} +} + + +Theme: ENGINEERING z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 298 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 190 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=298.9M, openCountActual=1, lastRowTimeNanosActual=298.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=298.9M, openCountActual=1, lastRowTimeNanosActual=299.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=4, firstRowTimeNanosActual=298.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=299.0M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=500) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=298.9M, nextCallCountActual=4, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=42.0K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=298.9M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=49.8M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.2M, nextCallCountActual=4, nextTimeNanosActual=250, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=1.0K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=42.2K, exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=298.9M, closeCountActual=1, exprEvalTimeNanosActual=484.4K, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=242.5K, avgNextNanosActual=63, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=410.0K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=312.1K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=38.4K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, resultSizeActual=1.0K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=522, expansionFactorActual=1.99, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=520) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=749, firstRowTimeNanosActual=28.2K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=38.7K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=361, avgNextNanosActual=375) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.5K, stddevActual=128, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=51.8K, nextCallCountActual=520, nextTimeNanosActual=25.7K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=14.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=229.9K, nextCallCountActual=520, nextTimeNanosActual=27.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=265.3K, rowsDroppedActual=265.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=107.6M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=80.2M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=9.9M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, resultSizeActual=265.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=132.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=132.7K) +│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=208, nextCallCountActual=2, nextTimeNanosActual=126, firstRowTimeNanosActual=2.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=2.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=69, avgNextNanosActual=63) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K, resultSizeActual=132.6K, joinRightIteratorsCreatedActual=134.1K, joinLeftBindingsConsumedActual=134.1K, joinRightBindingsConsumedActual=132.6K, inputRowsActual=266.7K, rowsDroppedActual=134.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.1K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=0.99, joinOutputPerLeftActual=0.99) [right] +│ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=134.2K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=14.6M, nextCallCountActual=134.1K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=1.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=298.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=45, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=137.2K, resultSizeActual=132.6K, hasNextCallCountActual=266.7K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=60.6M, nextCallCountActual=132.6K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=266.7K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=134.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=134.1K, openCountActual=134.1K, lastRowTimeNanosActual=375, closeCountActual=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=134.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.2K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=333, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=323, indexHitRateActual=0) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="REQ-1002") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="REQ-1002") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +UNION +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity ?name . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +OPTIONAL { +?entity ?assembly . +} +} + + +Theme: ENGINEERING z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 10 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 5 ms + +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=917, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=306) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "assembly" (hasNextFalseCountActual=0) +║ ProjectionElem "componentCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=542, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=181) +├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=335, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=112) +│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=41, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=5.7M, closeCountActual=1, exprEvalTimeNanosActual=1.4K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=957, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.1K, hasNextFalseCountActual=0) +│ ║ └── Group (assembly) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.6M, nextCallCountActual=3, nextTimeNanosActual=83, aggregateEvalCountActual=840, firstRowTimeNanosActual=5.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=5.7M, maxGroupSizeActual=148, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=140, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=420, rowsDroppedActual=417, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=28) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=420, hasNextCallCountActual=422, hasNextTrueCountActual=421, hasNextTimeNanosActual=5.4M, nextCallCountActual=420, nextTimeNanosActual=6.4K, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=420, firstRowTimeNanosActual=21.4K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=5.6M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=423, rowsDroppedActual=3, expansionFactorActual=0.99, sampleCountActual=2, varianceActual=22.5K, stddevActual=150, confidenceScoreActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=15, leftRowsProbedActual=3, rightRowsScannedActual=420, avgRightRowsPerLeftActual=140, joinMatchRateActual=1.00, joinOutputPerLeftActual=140, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=3, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=924, joinRightBindingsConsumedActual=3, inputRowsActual=924, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=924, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=84.9K, nextCallCountActual=921, nextTimeNanosActual=36.4K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=92, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=3, hasNextCallCountActual=924, hasNextTrueCountActual=3, hasNextTimeNanosActual=3.1M, nextCallCountActual=3, nextTimeNanosActual=84, sourceRowsScannedActual=921, sourceRowsMatchedActual=3, sourceRowsFilteredActual=918, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.8K, exprEvalCountActual=921, exprFalseCountActual=918, openCountActual=921, exprTrueCountActual=3, lastRowTimeNanosActual=3.3K, closeCountActual=921, exprEvalTimeNanosActual=699.6K, inputRowsActual=921, rowsDroppedActual=918, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=921, exprFalseCountActual=918, exprTrueCountActual=3, exprEvalTimeNanosActual=645.5K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=assemblyName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Assembly 1") (exprEvalCountActual=921, exprTrueCountActual=921, exprEvalTimeNanosActual=28.2K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=920, exprTrueCountActual=920, exprEvalTimeNanosActual=28.3K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Assembly 3") (exprEvalCountActual=919, exprTrueCountActual=919, exprEvalTimeNanosActual=36.2K, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=426.8K, nextCallCountActual=921, nextTimeNanosActual=34.8K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=ListMemberOperator +│ ║ │ Var (name=assemblyName) +│ ║ │ ValueConstant (value="Assembly 1") +│ ║ │ ValueConstant (value="Assembly 2") +│ ║ │ ValueConstant (value="Assembly 3") +│ ║ │ , firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.4K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=232, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=assemblyName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=420, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=47.3K, nextCallCountActual=420, nextTimeNanosActual=15.0K, sourceRowsScannedActual=423, sourceRowsMatchedActual=420, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=709, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=106.3K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=38, avgNextNanosActual=36, indexHitRateActual=0.99) [right] +│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (componentCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (componentCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (assembly) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=assemblyName) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ ValueConstant (value="Assembly 3") +│ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=ListMemberOperator +│ ║ │ Var (name=assemblyName) +│ ║ │ ValueConstant (value="Assembly 1") +│ ║ │ ValueConstant (value="Assembly 2") +│ ║ │ ValueConstant (value="Assembly 3") +│ ║ │ ) +│ ║ │ s: Var (name=assembly) (bindingState=bound) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=assemblyName) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) (bindingState=unbound) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) (bindingState=bound) +│ ║ GroupElem (_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count +│ ║ Var (name=component) (bindingState=bound) +│ ║ GroupElem (componentCount) +│ ║ Count (Distinct) +│ ║ Var (name=component) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count +│ Var (name=component) (bindingState=unbound) +└── ExtensionElem (componentCount) +Count (Distinct) +Var (name=component) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a . +?assembly ?assemblyName . +FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { +?component ?assembly . +} +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + + +Theme: ENGINEERING z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 207 ms +Warmup execution 1/9 +Warmup execution 2/9 +Warmup execution 3/9 +Warmup execution 4/9 +Warmup execution 5/9 +Warmup execution 6/9 +Warmup execution 7/9 +Warmup execution 8/9 +Warmup execution 9/9 +Fastest execution time: 143 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=185.1M, openCountActual=1, lastRowTimeNanosActual=185.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=185.2M, openCountActual=1, lastRowTimeNanosActual=185.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=625) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=185.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=185.2M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=500) +│ ╠══ Difference (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=184.8M, nextCallCountActual=1.0K, nextTimeNanosActual=11.5K, firstRowTimeNanosActual=181.8M, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=45.3K, rowsDroppedActual=44.3K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=177.4K, avgNextNanosActual=11, leftRowsConsumedActual=1.5K, rightRowsConsumedActual=43.7K, overlapRowsActual=517) +│ ║ ├── Filter (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.5K, nextTimeNanosActual=20.2K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=21.5K, exprEvalCountActual=1.5K, openCountActual=1, exprTrueCountActual=1.5K, lastRowTimeNanosActual=185.1M, closeCountActual=1, exprEvalTimeNanosActual=183.7K, inputRowsActual=1.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=72.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTest) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.7M, nextCallCountActual=1.5K, nextTimeNanosActual=16.6K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=1.5K, firstRowTimeNanosActual=18.0K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=2.0K, rowsDroppedActual=520, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=11, leftRowsProbedActual=520, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=2.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.99, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=1.0K, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1.0K, rightRowsScannedActual=520, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=56.7K, nextCallCountActual=520, nextTimeNanosActual=32.3K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=9.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=62, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=239.1K, nextCallCountActual=520, nextTimeNanosActual=35.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=6.0K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=68, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=591.2K, nextCallCountActual=1.5K, nextTimeNanosActual=167.7K, firstRowTimeNanosActual=667, openCountActual=520, lastRowTimeNanosActual=5.0K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=142, avgNextNanosActual=108) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=369.2K, nextCallCountActual=1.5K, nextTimeNanosActual=76.3K, sourceRowsScannedActual=2.0K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.9K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=89, avgNextNanosActual=49, indexHitRateActual=0.75) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optTest) (hasNextFalseCountActual=0) +│ ║ │ Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=43.7K, hasNextCallCountActual=43.7K, hasNextTrueCountActual=43.7K, hasNextTimeNanosActual=111.9M, nextCallCountActual=43.7K, nextTimeNanosActual=562.8K, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=43.7K, sourceRowsFilteredActual=90.3K, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=700.1K, exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, openCountActual=1, exprTrueCountActual=43.7K, lastRowTimeNanosActual=150.8M, closeCountActual=1, exprEvalTimeNanosActual=88.2M, inputRowsActual=134.1K, rowsDroppedActual=90.3K, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=13, filterRejectRateActual=0.67) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, exprTrueCountActual=43.7K, exprEvalTimeNanosActual=80.4M, hasNextFalseCountActual=0) +│ ║ ║ ├── Str (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=65.3M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="Component 1") (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=4.2M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.1K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=10.7M, nextCallCountActual=134.1K, nextTimeNanosActual=4.8M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=150.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTest) (bindingState=bound) +│ ║ │ ║ Var (name=requirement) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=requirement) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ │ ║ o: Var (name=test) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optTest) +│ ║ │ Var (name=test) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="Component 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ s: Var (name=component) (bindingState=unbound) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement ?component . +?requirement a . +OPTIONAL { +?requirement ?test . +BIND(?test AS ?optTest) +} +FILTER (?optTest != ?requirement) +MINUS { +?component ?name . +FILTER (CONTAINS(STR(?name), "Component 1")) +} +} + + +Theme: ENGINEERING z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 857 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 455 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=848.1M, openCountActual=1, lastRowTimeNanosActual=848.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=6.4K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=5.4K, firstRowTimeNanosActual=848.1M, openCountActual=1, lastRowTimeNanosActual=848.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=5.5K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=2, firstRowTimeNanosActual=848.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=848.1M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=848.0M, nextCallCountActual=2, nextTimeNanosActual=83, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=64.2K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=848.0M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=3.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212.0M, avgNextNanosActual=42, filterRejectRateActual=0) +│ ║ ├── Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=3.0K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=708, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=417, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) +│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=848.0M, nextCallCountActual=2, nextTimeNanosActual=126, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=60.8K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=848.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=989.3M, stddevActual=31.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=282.7M, avgNextNanosActual=63, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K, resultSizeActual=2, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=2, inputRowsActual=132.6K, rowsDroppedActual=132.6K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=2.9M, stddevActual=1.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=132.6K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.9K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=13.7M, nextCallCountActual=132.6K, nextTimeNanosActual=5.3M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=848.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=6.9K, resultSizeActual=2, hasNextCallCountActual=132.6K, hasNextTrueCountActual=2, hasNextTimeNanosActual=498.5M, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=132.6K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.9K, exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, openCountActual=132.6K, exprTrueCountActual=2, lastRowTimeNanosActual=3.4K, closeCountActual=132.6K, exprEvalTimeNanosActual=98.8M, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=104, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=91.1M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=1, exprEvalTimeNanosActual=76.1M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Component 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Component 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=65.9M, nextCallCountActual=132.6K, nextTimeNanosActual=5.2M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=248, avgNextNanosActual=40, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.1K, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=6.6K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292, avgNextNanosActual=21, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=component) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Component 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Component 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ ║ s: Var (name=component) (bindingState=bound) +│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ ║ o: Var (name=name) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) (bindingState=bound) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=component) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=component) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +?component ?name . +FILTER ((?name = "Component 1") || (?name = "Component 2")) +OPTIONAL { +?component ?assembly . +} +FILTER EXISTS { +?component ?dep . +} +} + + +Theme: ENGINEERING z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 20 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 8 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=9.5K, firstRowTimeNanosActual=12.7M, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=9.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=7.4K, firstRowTimeNanosActual=12.7M, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=7.4K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=5.5K, firstRowTimeNanosActual=12.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=12.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=5.6K, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=12.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, openCountActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=12.7M) +│ ║ ├── Not (hasNextFalseCountActual=0) +│ ║ │ Exists (hasNextFalseCountActual=0) +│ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (<) (hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K, resultSizeActual=0, joinRightIteratorsCreatedActual=1.5K, inputRowsActual=1.5K, rowsDroppedActual=1.5K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=1.5K, joinType=Cartesian product, inputRowsActual=1.5K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=1.6K, joinOutputPerLeftActual=1.6K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.4K, nextCallCountActual=1, nextTimeNanosActual=333, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.1K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2K, avgNextNanosActual=333) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=164.6K, nextCallCountActual=1.5K, nextTimeNanosActual=152.5K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=value2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ Var (name=measurement) +│ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ Var (name=value2) +│ ║ ║ , firstRowTimeNanosActual=1.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=98, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=78, resultSizeActual=0, hasNextCallCountActual=1.5K, hasNextTimeNanosActual=8.5M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], filterSelectivitySource=heuristic, plannedLookupComponents=[S, O, P], exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1.5K, lastRowTimeNanosActual=3.8K, closeCountActual=1.5K, exprEvalTimeNanosActual=4.1M, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=5.5K, filterRejectRateActual=1.00) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=4.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=256.7K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=780.8K, nextCallCountActual=1.5K, nextTimeNanosActual=67.5K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=1.5K, openCountActual=1.5K, lastRowTimeNanosActual=1.7K, closeCountActual=1.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.5K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=251, avgNextNanosActual=43, indexHitRateActual=0.50) +│ ║ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=value2) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) +│ ║ │ s: Var (name=measurement) (bindingState=bound) +│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ │ o: Var (name=value2) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=value2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ Var (name=measurement) +│ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ Var (name=value2) +│ ║ ║ ) +│ ║ ║ s: Var (name=measurement) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=78, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], filterSelectivitySource=heuristic, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ │ ValueConstant (value="0.9"^^) +│ ║ │ ValueConstant (value="0.95"^^) +│ ║ └── StatementPattern (resultSizeEstimate=1.6K) +│ ║ s: Var (name=measurement) (bindingState=bound) +│ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ o: Var (name=value) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=measurement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=measurement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?measurement a . +?measurement ?value . +FILTER (?value IN (0.9, 0.95)) +FILTER NOT EXISTS { +?measurement ?value2 . +FILTER (?value2 < ?threshold) +} +} + + +Theme: ENGINEERING z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 441 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 262 ms + +Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=120.4K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.2K, avgNextNanosActual=232) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "component" (hasNextFalseCountActual=0) +║ ProjectionElem "reqCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=73.5K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.2K, avgNextNanosActual=141) +├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=44.5K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.1K, avgNextNanosActual=86) +│ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.3M, nextCallCountActual=520, nextTimeNanosActual=9.5K, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=132.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=391.7M, exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=430.6M, closeCountActual=1, exprEvalTimeNanosActual=27.0M, inputRowsActual=132.6K, rowsDroppedActual=132.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.1K, avgNextNanosActual=18, filterRejectRateActual=1.00) +│ ║ ├── Compare (>) (exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, exprTrueCountActual=520, exprEvalTimeNanosActual=7.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=4.5K, hasNextFalseCountActual=0) +│ ║ └── Group (component) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=392.6M, nextCallCountActual=132.6K, nextTimeNanosActual=4.2M, aggregateEvalCountActual=266.3K, firstRowTimeNanosActual=391.7M, groupsCreatedActual=132.6K, openCountActual=1, lastRowTimeNanosActual=430.6M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=133.1K, rowsDroppedActual=520, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=32) +│ ║ Filter (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=241.1M, nextCallCountActual=133.1K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=133.1K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=35.9K, exprEvalCountActual=133.1K, predicateErrorCountActual=1, openCountActual=1, exprTrueCountActual=133.1K, lastRowTimeNanosActual=347.7M, closeCountActual=1, exprEvalTimeNanosActual=15.5M, inputRowsActual=133.1K, rowsDroppedActual=1, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, filterRejectRateActual=0.00) +│ ║ ├── Compare (!=) (exprEvalCountActual=133.1K, exprTrueCountActual=133.1K, exprErrorCountActual=1, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=215.3M, nextCallCountActual=133.1K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=133.1K, joinLeftBindingsConsumedActual=133.1K, joinRightBindingsConsumedActual=133.1K, firstRowTimeNanosActual=30.0K, leftRowsWithMatchActual=133.1K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=266.3K, rowsDroppedActual=133.1K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=8.62, leftRowsProbedActual=133.1K, rightRowsScannedActual=133.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) +│ ║ ╠══ Union (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=25.7M, nextCallCountActual=133.1K, nextTimeNanosActual=2.5M, firstRowTimeNanosActual=24.3K, openCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=193, avgNextNanosActual=19, leftRowsConsumedActual=520, rightRowsConsumedActual=132.6K, leftRowsOutputContributionActual=520, rightRowsOutputContributionActual=132.6K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=63.2K, nextCallCountActual=520, nextTimeNanosActual=25.9K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=17.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=121, avgNextNanosActual=50, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=258.4K, nextCallCountActual=520, nextTimeNanosActual=29.8K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=791, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.1K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=57, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.3M, nextCallCountActual=132.6K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=3.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=45, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=97.5M, nextCallCountActual=133.1K, nextTimeNanosActual=20.7M, firstRowTimeNanosActual=583, openCountActual=133.1K, lastRowTimeNanosActual=2.0K, closeCountActual=133.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=366, avgNextNanosActual=156) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=62.9M, nextCallCountActual=133.1K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=266.3K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=133.1K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=133.1K, openCountActual=133.1K, lastRowTimeNanosActual=1.7K, closeCountActual=133.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=69, indexHitRateActual=0.50) +│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) +│ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (reqCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (component) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optDep) (bindingState=bound) +│ ║ │ Var (name=component) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) +│ ║ ║ s: Var (name=component) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) (bindingState=unbound) +│ ║ └── ExtensionElem (optDep) +│ ║ Var (name=dep) (bindingState=bound) +│ ║ GroupElem (_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=requirement) (bindingState=bound) +│ ║ GroupElem (reqCount) +│ ║ Count (Distinct) +│ ║ Var (name=requirement) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=requirement) (bindingState=unbound) +└── ExtensionElem (reqCount) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ +?requirement ?component . +?requirement a . +} +UNION +{ +?component a . +} +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + + +Theme: ENGINEERING z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 12 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 8 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=666) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=334) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=209, firstRowTimeNanosActual=8.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=209, avgGroupSizeActual=0) +│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsDroppedActual=3, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.5M, leftRowsConsumedActual=2, rightRowsConsumedActual=1.5K, overlapRowsActual=2) +│ ║ ├── Filter (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.2M, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=14.7K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=8.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.1M, avgNextNanosActual=21, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=8.3K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=874, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=542, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=437, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27, resultSizeActual=2, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=2, inputRowsActual=522, rowsDroppedActual=520, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=39, stddevActual=6.25, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=47.0K, nextCallCountActual=520, nextTimeNanosActual=19.0K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ │ Var (name=requirement) +│ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ Var (name=component) +│ ║ │ │ , firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=27, resultSizeActual=2, hasNextCallCountActual=522, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.9M, nextCallCountActual=2, sourceRowsScannedActual=520, sourceRowsMatchedActual=2, sourceRowsFilteredActual=518, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=4.1K, exprEvalCountActual=520, exprFalseCountActual=518, openCountActual=520, exprTrueCountActual=2, lastRowTimeNanosActual=3.4K, closeCountActual=520, exprEvalTimeNanosActual=379.6K, inputRowsActual=520, rowsDroppedActual=518, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=0, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=520, exprFalseCountActual=518, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=350.3K, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=520, exprFalseCountActual=519, exprTrueCountActual=1, exprEvalTimeNanosActual=290.0K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="REQ-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=791, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=519, exprFalseCountActual=518, exprTrueCountActual=1, exprEvalTimeNanosActual=22.2K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="REQ-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=244.9K, nextCallCountActual=520, nextTimeNanosActual=19.7K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.3K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=235, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=3.1K, joinLeftBindingsConsumedActual=3.1K, joinRightBindingsConsumedActual=1.5K, inputRowsActual=4.6K, rowsDroppedActual=3.1K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=3.1K, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) +│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=3.1K, resultSizeActual=3.1K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=3.1K, hasNextTimeNanosActual=209.7K, nextCallCountActual=3.1K, nextTimeNanosActual=122.3K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=3.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=1.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=4.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=67, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.6K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.1M, nextCallCountActual=1.5K, nextTimeNanosActual=81.7K, sourceRowsScannedActual=4.6K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=3.1K, openCountActual=3.1K, lastRowTimeNanosActual=333, closeCountActual=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.1K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=239, avgNextNanosActual=53, indexHitRateActual=0.33) [right] +│ ║ s: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=520) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ ║ o: Var (name=component) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) +│ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ │ Var (name=requirement) +│ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ Var (name=component) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=requirement) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=27, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="REQ-1000") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="REQ-1001") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) +│ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ o: Var (name=test) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[S, P]) [right] +│ ║ s: Var (name=test) (bindingState=bound) +│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ o: Var (name=measurement) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?name . +FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) +FILTER EXISTS { +?requirement ?component . +} +MINUS { +?requirement ?test . +?test ?measurement . +} +} + + +Theme: ENGINEERING z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 7 ms + +Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=85.0K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=164) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "component" (hasNextFalseCountActual=0) +║ ProjectionElem "reqCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=61.6K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=119) +├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=30.4K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=59) +│ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=4.9K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3.7M, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=4.0M, closeCountActual=1, exprEvalTimeNanosActual=82.0K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=9.54, filterRejectRateActual=0) +│ ║ ├── Compare (>=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=49.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ └── Group (component) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.7M, nextCallCountActual=520, nextTimeNanosActual=9.0K, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=3.7M, groupsCreatedActual=520, openCountActual=1, lastRowTimeNanosActual=4.0M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.1K, avgNextNanosActual=17) +│ ║ Filter (resultSizeActual=520, hasNextCallCountActual=522, hasNextTrueCountActual=521, hasNextTimeNanosActual=2.7M, nextCallCountActual=520, nextTimeNanosActual=8.6K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.0K, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=3.6M, closeCountActual=1, exprEvalTimeNanosActual=68.6K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3K, avgNextNanosActual=17, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=22.9K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=2.6M, nextCallCountActual=520, nextTimeNanosActual=6.8K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, firstRowTimeNanosActual=16.6K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=3.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.1K, avgNextNanosActual=13, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=520) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=57.3K, nextCallCountActual=520, nextTimeNanosActual=29.1K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=5.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=110, avgNextNanosActual=56, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=469.8K, nextCallCountActual=520, nextTimeNanosActual=27.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.8K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=452, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=236.5K, nextCallCountActual=520, nextTimeNanosActual=31.1K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, P], firstRowTimeNanosActual=459, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=60, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=656, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=243.7K, nextCallCountActual=520, nextTimeNanosActual=27.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=3.6K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=371.4K, nextCallCountActual=520, nextTimeNanosActual=67.2K, firstRowTimeNanosActual=667, openCountActual=520, lastRowTimeNanosActual=2.7K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=357, avgNextNanosActual=129) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=236.6K, nextCallCountActual=520, nextTimeNanosActual=24.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=2.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=228, avgNextNanosActual=47, indexHitRateActual=0.50) +│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) +│ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (reqCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (component) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optDep) (bindingState=bound) +│ ║ │ Var (name=component) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=requirement) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) (bindingState=unbound) +│ ║ └── ExtensionElem (optDep) +│ ║ Var (name=dep) (bindingState=bound) +│ ║ GroupElem (_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Count +│ ║ Var (name=requirement) (bindingState=bound) +│ ║ GroupElem (reqCount) +│ ║ Count (Distinct) +│ ║ Var (name=requirement) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d) +│ Count +│ Var (name=requirement) (bindingState=unbound) +└── ExtensionElem (reqCount) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?requirement ?component . +?component a . +?component ?assembly . +?requirement a . +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + + +Theme: ENGINEERING z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 15 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 11 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=2.1M, openCountActual=1, lastRowTimeNanosActual=2.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=584) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=2.1M, openCountActual=1, lastRowTimeNanosActual=2.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=334) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=125, firstRowTimeNanosActual=2.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=125, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.9K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (hasNextFalseCountActual=0) +│ ║ │ StatementPattern (resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.0M, openCountActual=1, lastRowTimeNanosActual=2.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1M, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.0M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterPassRatio=0.05, filterSelectivitySource=heuristic, exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1, lastRowTimeNanosActual=2.0M, optimizer.candidateCount=16, closeCountActual=1, exprEvalTimeNanosActual=1.8M, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1M, filterRejectRateActual=1.00) [left] +│ ║ ║ │ ║ │ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=85.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=92.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=83.5K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=124.0K, nextCallCountActual=1.5K, nextTimeNanosActual=49.4K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=32, indexHitRateActual=1.00) +│ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ o: Var (name=component) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, plannedFilterPassRatio=0.05, filterSelectivitySource=heuristic, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ║ ├── ListMemberOperator +│ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] +│ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] +│ ║ s: Var (name=component) (bindingState=unbound) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?measurement ?value . +FILTER (?value IN (0.85, 0.9, 0.95)) +?test ?measurement . +?requirement ?test . +?requirement a . +VALUES ?threshold { 0.85 } +OPTIONAL { +?component ?optName . +} +FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + + +Theme: ENGINEERING z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 6 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=7.5M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=1.2K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=7.5M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=708) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=283, firstRowTimeNanosActual=7.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=7.5M, maxGroupSizeActual=283, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=283, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=283, rowsDroppedActual=282, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=416) +│ ╠══ Difference (resultSizeActual=283, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=7.4M, nextCallCountActual=283, nextTimeNanosActual=3.7K, firstRowTimeNanosActual=959.2K, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=804, rowsDroppedActual=521, selectivityActual=0.35, expansionFactorActual=0.35, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=26.2K, avgNextNanosActual=13, leftRowsConsumedActual=284, rightRowsConsumedActual=520, overlapRowsActual=1) +│ ║ ├── Filter (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=4.1K, sourceRowsScannedActual=284, sourceRowsMatchedActual=284, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=42.7K, exprEvalCountActual=284, openCountActual=1, exprTrueCountActual=284, lastRowTimeNanosActual=7.4M, closeCountActual=1, exprEvalTimeNanosActual=34.4K, inputRowsActual=284, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.0K, avgNextNanosActual=15, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=284, exprTrueCountActual=284, exprEvalTimeNanosActual=15.6K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optComponent) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=5.5K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=284, firstRowTimeNanosActual=42.0K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=286, rowsDroppedActual=2, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=21.8K, avgNextNanosActual=20, leftRowsProbedActual=2, rightRowsScannedActual=284, avgRightRowsPerLeftActual=142, joinMatchRateActual=1.00, joinOutputPerLeftActual=142, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=2, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=923, joinRightBindingsConsumedActual=2, inputRowsActual=923, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=923, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=100.2K, nextCallCountActual=921, nextTimeNanosActual=36.1K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Filter (resultSizeActual=2, hasNextCallCountActual=923, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.5M, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=921, sourceRowsMatchedActual=2, sourceRowsFilteredActual=919, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=3.7K, exprEvalCountActual=921, exprFalseCountActual=919, openCountActual=921, exprTrueCountActual=2, lastRowTimeNanosActual=3.5K, closeCountActual=921, exprEvalTimeNanosActual=712.1K, inputRowsActual=921, rowsDroppedActual=919, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=21, filterRejectRateActual=1.00) [right] +│ ║ │ │ ├── Or (exprEvalCountActual=921, exprFalseCountActual=919, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=658.2K, hasNextFalseCountActual=0) +│ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=921, exprFalseCountActual=920, exprTrueCountActual=1, exprEvalTimeNanosActual=545.5K, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=920, exprFalseCountActual=919, exprTrueCountActual=1, exprEvalTimeNanosActual=39.6K, hasNextFalseCountActual=0) +│ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=477.5K, nextCallCountActual=921, nextTimeNanosActual=34.5K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=Or +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ , firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.2K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=259, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=57.4K, nextCallCountActual=284, nextTimeNanosActual=30.0K, firstRowTimeNanosActual=1.1K, openCountActual=2, lastRowTimeNanosActual=201.5K, closeCountActual=2, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=106) [right] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=33.1K, nextCallCountActual=284, nextTimeNanosActual=10.0K, sourceRowsScannedActual=286, sourceRowsMatchedActual=284, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=200.9K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=39, avgNextNanosActual=35, indexHitRateActual=0.99) +│ ║ │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optComponent) (hasNextFalseCountActual=0) +│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=43.1K, nextCallCountActual=520, nextTimeNanosActual=20.0K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=714.4K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=39, indexHitRateActual=1.00) +│ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optComponent) (bindingState=bound) +│ ║ │ ║ Var (name=assembly) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) +│ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ │ │ ├── Or +│ ║ │ │ │ ╠══ Compare (=) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") +│ ║ │ │ │ ╚══ Compare (=) +│ ║ │ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=Or +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ ) +│ ║ │ │ s: Var (name=assembly) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ ║ s: Var (name=component) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ │ ║ o: Var (name=assembly) (bindingState=bound) +│ ║ │ ╚══ ExtensionElem (optComponent) +│ ║ │ Var (name=component) (bindingState=bound) +│ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) +│ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ o: Var (name=component) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=assembly) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=assembly) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a . +?assembly ?name . +FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) +OPTIONAL { +?component ?assembly . +BIND(?component AS ?optComponent) +} +FILTER (?optComponent != ?assembly) +MINUS { +?requirement ?component . +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 958 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 424 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=935.3M, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=2.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=935.3M, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=1.5M, firstRowTimeNanosActual=935.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=935.3M, maxGroupSizeActual=1.5M, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.6M, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5M, rowsDroppedActual=1.5M, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=1.1K) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5M, hasNextCallCountActual=1.5M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=779.3M, nextCallCountActual=1.5M, nextTimeNanosActual=20.4M, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=267.2K, joinRightBindingsConsumedActual=1.5M, firstRowTimeNanosActual=22.7K, leftRowsWithMatchActual=267.2K, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=1.8M, rowsDroppedActual=267.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=497, avgNextNanosActual=13, leftRowsProbedActual=267.2K, rightRowsScannedActual=1.5M, avgRightRowsPerLeftActual=5.86, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.86, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=193.1M, nextCallCountActual=267.2K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.8K, exprEvalCountActual=267.2K, openCountActual=1, exprTrueCountActual=267.2K, lastRowTimeNanosActual=935.2M, closeCountActual=1, exprEvalTimeNanosActual=28.4M, inputRowsActual=267.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=722, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=267.2K, exprTrueCountActual=267.2K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optNeighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=143.9M, nextCallCountActual=267.2K, nextTimeNanosActual=3.4M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, firstRowTimeNanosActual=17.7K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=935.2M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=538, avgNextNanosActual=13, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinMatchRateActual=1.00, joinOutputPerLeftActual=6.64, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.3M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=935.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=73, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=71.5M, nextCallCountActual=267.2K, nextTimeNanosActual=25.2M, firstRowTimeNanosActual=666, openCountActual=40.2K, lastRowTimeNanosActual=28.9K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=94, avgNextNanosActual=94) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=41.9M, nextCallCountActual=267.2K, nextTimeNanosActual=11.3M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=28.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=55, avgNextNanosActual=42, indexHitRateActual=0.87) +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optNeighbor) (hasNextFalseCountActual=0) +│ ║ │ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=4.4M, hasNextTrueCountActual=4.1M, hasNextTimeNanosActual=242.8M, nextCallCountActual=1.5M, nextTimeNanosActual=75.7M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=2.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=55, avgNextNanosActual=48, indexHitRateActual=0.85) [right] +│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) +│ ║ │ ║ Var (name=node) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optNeighbor) +│ ║ │ Var (name=neighbor) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?neighbor . +BIND(?neighbor AS ?optNeighbor) +} +FILTER (?optNeighbor != ?node) +OPTIONAL { +?node ?w . +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 3024 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.7M, nextCallCountActual=1, nextTimeNanosActual=5.2K, firstRowTimeNanosActual=3021.7M, openCountActual=1, lastRowTimeNanosActual=3021.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.9M, avgNextNanosActual=5.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.7M, nextCallCountActual=1, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=3021.7M, openCountActual=1, lastRowTimeNanosActual=3021.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.9M, avgNextNanosActual=3.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.6M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=716.1K, firstRowTimeNanosActual=3021.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3021.7M, maxGroupSizeActual=716.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=716.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=716.1K, rowsDroppedActual=716.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.8M, avgNextNanosActual=1.1K) +│ ╠══ Filter (resultSizeActual=716.1K, hasNextCallCountActual=716.1K, hasNextTrueCountActual=716.1K, hasNextTimeNanosActual=2861.0M, nextCallCountActual=716.1K, nextTimeNanosActual=9.5M, sourceRowsScannedActual=3.5M, sourceRowsMatchedActual=716.1K, sourceRowsFilteredActual=2.8M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=108.6K, exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, openCountActual=1, exprTrueCountActual=716.1K, lastRowTimeNanosActual=3021.6M, closeCountActual=1, exprEvalTimeNanosActual=1010.8M, inputRowsActual=3.5M, rowsDroppedActual=2.8M, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=13, filterRejectRateActual=0.80) +│ ║ ├── Or (exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, exprTrueCountActual=716.1K, shortCircuitCountActual=358.5K, exprEvalTimeNanosActual=743.7M, hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (=) (exprEvalCountActual=3.5M, exprFalseCountActual=3.2M, exprTrueCountActual=358.5K, exprEvalTimeNanosActual=313.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Compare (=) (exprEvalCountActual=3.2M, exprFalseCountActual=2.8M, exprTrueCountActual=357.6K, exprEvalTimeNanosActual=242.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.1K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=3.5M, hasNextCallCountActual=3.5M, hasNextTrueCountActual=3.5M, hasNextTimeNanosActual=1564.1M, nextCallCountActual=3.5M, nextTimeNanosActual=44.2M, joinRightIteratorsCreatedActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinRightBindingsConsumedActual=3.5M, firstRowTimeNanosActual=52.9K, leftRowsWithMatchActual=615.0K, openCountActual=1, lastRowTimeNanosActual=3021.5M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=4.1M, rowsDroppedActual=615.0K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=437, avgNextNanosActual=12, leftRowsProbedActual=615.0K, rightRowsScannedActual=3.5M, avgRightRowsPerLeftActual=5.82, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.82, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinType=Cartesian product, inputRowsActual=615.0K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=615.0K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=6.9K, nextCallCountActual=2, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=10.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=3021.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=2.3K, avgNextNanosActual=1.5K) [left] +│ ║ ║ └── Union (resultSizeActual=615.0K, sampleCountActual=2, varianceActual=2.91, stddevActual=1.71, confidenceScoreActual=0.42, hasNextFalseCountActual=0, leftRowsConsumedActual=534.5K, rightRowsConsumedActual=80.5K, leftRowsOutputContributionActual=534.5K, rightRowsOutputContributionActual=80.5K) [right] +│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=534.5K, joinRightIteratorsCreatedActual=80.5K, joinLeftBindingsConsumedActual=80.5K, joinRightBindingsConsumedActual=534.5K, inputRowsActual=615.0K, rowsDroppedActual=80.5K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=80.5K, rightRowsScannedActual=534.5K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) +│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=9.0M, nextCallCountActual=80.5K, nextTimeNanosActual=8.0M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.5K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1315.8M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=100, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=534.5K, hasNextCallCountActual=615.0K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=71.8M, nextCallCountActual=534.5K, nextTimeNanosActual=37.9M, sourceRowsScannedActual=615.0K, sourceRowsMatchedActual=534.5K, sourceRowsFilteredActual=80.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=80.5K, openCountActual=80.5K, lastRowTimeNanosActual=40.2K, closeCountActual=80.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=80.5K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=117, avgNextNanosActual=71, indexHitRateActual=0.87) [right] +│ ║ ║ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=8.1M, nextCallCountActual=80.5K, nextTimeNanosActual=7.0M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1315.8M, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1520.6M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=87, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=3.5M, hasNextCallCountActual=10.1M, hasNextTrueCountActual=9.5M, hasNextTimeNanosActual=601.3M, nextCallCountActual=3.5M, nextTimeNanosActual=167.4M, sourceRowsScannedActual=4.1M, sourceRowsMatchedActual=3.5M, sourceRowsFilteredActual=615.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=615.0K, openCountActual=615.0K, lastRowTimeNanosActual=4.2K, closeCountActual=615.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=615.0K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=59, avgNextNanosActual=47, indexHitRateActual=0.85) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) +│ ║ ├── Or +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ╚══ Compare (=) +│ ║ │ Var (name=w) (bindingState=bound) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union [right] +│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ s: Var (name=entity) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) +│ ║ ║ s: Var (name=entity) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { 1 2 } +{ +?entity a . +?entity ?targetNode . +} +UNION +{ +?entity a . +} +OPTIONAL { +?entity ?w . +} +FILTER ((?w = ?target) || (?w = 3)) +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 3321 ms + +Projection (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3305.1M, nextCallCountActual=36.7K, nextTimeNanosActual=5.6M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.9K, avgNextNanosActual=154) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "node" (hasNextFalseCountActual=0) +║ ProjectionElem "neighborCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3304.4M, nextCallCountActual=36.7K, nextTimeNanosActual=3.9M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.9K, avgNextNanosActual=107) +├── Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3303.4M, nextCallCountActual=36.7K, nextTimeNanosActual=2.1M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.8K, avgNextNanosActual=59) +│ ╠══ Filter (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3302.3M, nextCallCountActual=36.7K, nextTimeNanosActual=445.5K, sourceRowsScannedActual=36.7K, sourceRowsMatchedActual=36.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3290.1M, exprEvalCountActual=36.7K, openCountActual=1, exprTrueCountActual=36.7K, lastRowTimeNanosActual=3314.9M, closeCountActual=1, exprEvalTimeNanosActual=8.6M, inputRowsActual=36.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.8K, avgNextNanosActual=12, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=36.7K, exprTrueCountActual=36.7K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=18.3K, hasNextFalseCountActual=0) +│ ║ └── Group (node) (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3290.5M, nextCallCountActual=36.7K, nextTimeNanosActual=985.0K, aggregateEvalCountActual=941.0K, firstRowTimeNanosActual=3290.1M, groupsCreatedActual=36.7K, openCountActual=1, lastRowTimeNanosActual=3314.8M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=470.5K, rowsDroppedActual=433.7K, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.5K, avgNextNanosActual=27) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=470.5K, hasNextCallCountActual=470.5K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=3085.4M, nextCallCountActual=470.5K, nextTimeNanosActual=6.4M, joinRightIteratorsCreatedActual=470.5K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=66, firstRowTimeNanosActual=50.0K, leftRowsWithMatchActual=66, openCountActual=1, emptyRightProbeCountActual=470.4K, lastRowTimeNanosActual=3281.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=470.5K, rowsDroppedActual=66, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=4.1M, stddevActual=2.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=14, leftRowsProbedActual=470.5K, rightRowsScannedActual=66, avgRightRowsPerLeftActual=0.00, joinMatchRateActual=0.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=470.4K) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K, resultSizeActual=470.5K, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=470.5K, inputRowsActual=737.8K, rowsDroppedActual=267.2K, expansionFactorActual=0.64, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=470.5K, rightRowsScannedActual=470.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.5M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=15.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3277.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=138, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=44.0M, nextCallCountActual=267.2K, nextTimeNanosActual=11.1M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=114.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=143, avgNextNanosActual=42, indexHitRateActual=0.87) [right] +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, resultSizeActual=470.5K, hasNextCallCountActual=737.8K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=1774.6M, nextCallCountActual=470.5K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=1.5M, sourceRowsMatchedActual=470.5K, sourceRowsFilteredActual=1.0M, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=1.5M, exprFalseCountActual=1.0M, openCountActual=267.2K, exprTrueCountActual=470.5K, lastRowTimeNanosActual=9.5K, closeCountActual=267.2K, exprEvalTimeNanosActual=637.4M, inputRowsActual=1.5M, rowsDroppedActual=1.0M, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.64, avgHasNextNanosActual=2.4K, avgNextNanosActual=12, filterRejectRateActual=0.70) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=1.5M, exprFalseCountActual=1.0M, exprTrueCountActual=470.5K, exprEvalTimeNanosActual=545.8M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="1"^^) (exprEvalCountActual=1.5M, exprTrueCountActual=1.5M, exprEvalTimeNanosActual=78.2M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2"^^) (exprEvalCountActual=1.4M, exprTrueCountActual=1.4M, exprEvalTimeNanosActual=73.0M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="3"^^) (exprEvalCountActual=1.2M, exprTrueCountActual=1.2M, exprEvalTimeNanosActual=59.4M, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=1.8M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=232.4M, nextCallCountActual=1.5M, nextTimeNanosActual=64.9M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=7.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=127, avgNextNanosActual=41, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=66, hasNextCallCountActual=470.5K, hasNextTrueCountActual=66, hasNextTimeNanosActual=242.5M, nextCallCountActual=66, nextTimeNanosActual=3.1K, sourceRowsScannedActual=470.5K, sourceRowsMatchedActual=66, sourceRowsFilteredActual=470.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=470.5K, openCountActual=470.5K, lastRowTimeNanosActual=417, closeCountActual=470.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=470.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=515, avgNextNanosActual=47, indexHitRateActual=0.00) [right] +│ ║ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (node) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ ║ └── Filter (resultSizeEstimate=67.1K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ ╠══ ListMemberOperator +│ ║ │ ║ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ ║ ValueConstant (value="1"^^) +│ ║ │ ║ ║ ValueConstant (value="2"^^) +│ ║ │ ║ ║ ValueConstant (value="3"^^) +│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node, w], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ o: Var (name=neighbor) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] +│ ║ s: Var (name=neighbor) (bindingState=bound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) (bindingState=bound) +│ ║ GroupElem (_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012) +│ ║ Count +│ ║ Var (name=neighbor) (bindingState=bound) +│ ║ GroupElem (neighborCount) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012) +│ Count +│ Var (name=neighbor) (bindingState=unbound) +└── ExtensionElem (neighborCount) +Count (Distinct) +Var (name=neighbor) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3)) +?node ?neighbor . +OPTIONAL { +?neighbor ?node . +} +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + + +Theme: HIGHLY_CONNECTED z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 320 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 136 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=304.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=1.6K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=304.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=750, aggregateEvalCountActual=111.5K, firstRowTimeNanosActual=304.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=304.2M, maxGroupSizeActual=111.5K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=111.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=111.5K, rowsDroppedActual=111.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=750) +│ ╠══ Difference (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=271.9M, nextCallCountActual=111.5K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=13, leftRowsConsumedActual=111.5K, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=190.0M, nextCallCountActual=111.5K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=111.5K, sourceRowsFilteredActual=111.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.6K, exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, openCountActual=1, exprTrueCountActual=111.5K, lastRowTimeNanosActual=304.2M, closeCountActual=1, exprEvalTimeNanosActual=40.4M, inputRowsActual=222.7K, rowsDroppedActual=111.2K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.50) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, exprTrueCountActual=111.5K, exprEvalTimeNanosActual=26.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=222.7K, hasNextCallCountActual=222.7K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=132.3M, nextCallCountActual=222.7K, nextTimeNanosActual=2.2M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=222.7K, firstRowTimeNanosActual=15.4K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=263.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=594, avgNextNanosActual=10, leftRowsProbedActual=40.2K, rightRowsScannedActual=222.7K, avgRightRowsPerLeftActual=5.53, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.53, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3.8M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=74, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=67.6M, nextCallCountActual=222.7K, nextTimeNanosActual=22.1M, firstRowTimeNanosActual=666, openCountActual=40.2K, lastRowTimeNanosActual=5.6K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=108, avgNextNanosActual=99) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=42.9M, nextCallCountActual=222.7K, nextTimeNanosActual=10.3M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=5.3K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=68, avgNextNanosActual=47, indexHitRateActual=0.85) +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optWeight) (hasNextFalseCountActual=0) +│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=65.2M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, exprEvalTimeNanosActual=24.4M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=65.2M, filterRejectRateActual=1.00) +│ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=9.4M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=17.0M, nextCallCountActual=267.2K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optWeight) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="5"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optWeight) +│ ║ │ Var (name=w) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) (bindingState=bound) +│ ║ ║ Var (name=node) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=node) (bindingState=unbound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=neighbor) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight > 5) +MINUS { +?node ?neighbor . +FILTER (?neighbor = ?node) +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 669 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 345 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=653.8M, openCountActual=1, lastRowTimeNanosActual=653.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=327.0M, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.9M, nextCallCountActual=1, nextTimeNanosActual=916, firstRowTimeNanosActual=653.8M, openCountActual=1, lastRowTimeNanosActual=653.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=327.0M, avgNextNanosActual=916) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.8M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=653.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=653.8M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=326.9M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=652.7M, nextCallCountActual=1.0K, nextTimeNanosActual=15.2K, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.1K, exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, openCountActual=1, exprTrueCountActual=1.0K, lastRowTimeNanosActual=653.8M, closeCountActual=1, exprEvalTimeNanosActual=190.6M, inputRowsActual=238.7K, rowsDroppedActual=237.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=602.2K, avgNextNanosActual=14, filterRejectRateActual=1.00) +│ ║ ├── Exists (exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, exprTrueCountActual=1.0K, exprEvalTimeNanosActual=176.6M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=238.7K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=70.3M, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedIndexName=spoc, indexLookupCountActual=238.7K, openCountActual=238.7K, lastRowTimeNanosActual=333, closeCountActual=238.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=237.6K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=295, indexHitRateActual=0.00) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=238.7K, hasNextCallCountActual=238.7K, hasNextTrueCountActual=238.7K, hasNextTimeNanosActual=445.6M, nextCallCountActual=238.7K, nextTimeNanosActual=3.2M, joinRightIteratorsCreatedActual=44.6K, joinLeftBindingsConsumedActual=44.6K, joinRightBindingsConsumedActual=237.7K, firstRowTimeNanosActual=19.9K, leftRowsWithMatchActual=43.5K, openCountActual=1, emptyRightProbeCountActual=1.0K, lastRowTimeNanosActual=653.8M, closeCountActual=1, maxRightRowsPerLeftActual=23.2K, inputRowsActual=282.3K, rowsDroppedActual=43.5K, expansionFactorActual=0.85, sampleCountActual=2, varianceActual=0.00, stddevActual=0.06, confidenceScoreActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.9K, avgNextNanosActual=14, leftRowsProbedActual=44.6K, rightRowsScannedActual=237.7K, avgRightRowsPerLeftActual=5.33, joinMatchRateActual=0.98, joinOutputPerLeftActual=5.35, leftJoinNullExtendedRowsActual=1.0K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K, resultSizeActual=44.6K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=84.8K, joinRightBindingsConsumedActual=44.6K, inputRowsActual=84.8K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=84.8K, rightRowsScannedActual=44.6K, avgRightRowsPerLeftActual=0.53, joinOutputPerLeftActual=0.53) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.2M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=5.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=653.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=41, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=44.8K, resultSizeActual=44.6K, hasNextCallCountActual=84.8K, hasNextTrueCountActual=44.6K, hasNextTimeNanosActual=233.7M, nextCallCountActual=44.6K, nextTimeNanosActual=694.9K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.6K, sourceRowsFilteredActual=178.1K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.6K, exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, openCountActual=40.2K, exprTrueCountActual=44.6K, lastRowTimeNanosActual=16.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=60.3M, inputRowsActual=222.7K, rowsDroppedActual=178.1K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=16, filterRejectRateActual=0.80) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, exprTrueCountActual=44.6K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=46.7M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.4K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=19.6M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=200.4K, exprFalseCountActual=178.1K, exprTrueCountActual=22.3K, exprEvalTimeNanosActual=15.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=37.1M, nextCallCountActual=222.7K, nextTimeNanosActual=9.4M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=14.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=141, avgNextNanosActual=43, indexHitRateActual=0.85) +│ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=267.3K, resultSizeActual=237.7K, hasNextCallCountActual=670.5K, hasNextTrueCountActual=625.9K, hasNextTimeNanosActual=46.8M, nextCallCountActual=237.7K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=282.3K, sourceRowsMatchedActual=237.7K, sourceRowsFilteredActual=44.6K, plannedIndexName=ospc, firstRowTimeNanosActual=542, indexLookupCountActual=44.6K, openCountActual=44.6K, lastRowTimeNanosActual=4.7K, closeCountActual=44.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44.6K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=70, avgNextNanosActual=42, indexHitRateActual=0.84) [right] +│ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ o: Var (name=neighbor) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=w) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="1"^^) +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=w) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="2"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ s: Var (name=node) (bindingState=bound) +│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ o: Var (name=w) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] +│ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 1) || (?w = 2)) +OPTIONAL { +?neighbor ?node . +} +FILTER EXISTS { +?node ?neighbor . +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 670 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 309 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=665.0M, openCountActual=1, lastRowTimeNanosActual=665.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=665.0M, openCountActual=1, lastRowTimeNanosActual=665.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=6.0K, firstRowTimeNanosActual=665.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=665.0M, maxGroupSizeActual=6.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6.0K, rowsDroppedActual=6.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=6.0K, hasNextCallCountActual=6.0K, hasNextTrueCountActual=6.0K, hasNextTimeNanosActual=661.0M, nextCallCountActual=6.0K, nextTimeNanosActual=83.7K, sourceRowsScannedActual=66.7K, sourceRowsMatchedActual=6.0K, sourceRowsFilteredActual=60.6K, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=78.2K, exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, openCountActual=1, exprTrueCountActual=6.0K, lastRowTimeNanosActual=664.9M, closeCountActual=1, exprEvalTimeNanosActual=274.2M, inputRowsActual=66.7K, rowsDroppedActual=60.6K, selectivityActual=0.09, expansionFactorActual=0.09, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109.0K, avgNextNanosActual=14, filterRejectRateActual=0.91) +│ ║ ├── Not (exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, exprTrueCountActual=6.0K, exprEvalTimeNanosActual=269.8M, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=66.7K, exprFalseCountActual=6.0K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=266.2M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=66.7K, hasNextTrueCountActual=60.6K, hasNextTimeNanosActual=85.0M, sourceRowsScannedActual=172.5K, sourceRowsMatchedActual=60.6K, sourceRowsFilteredActual=111.8K, plannedFilterPassRatio=0.26, filterSelectivitySource=learned_filter, exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, openCountActual=66.7K, lastRowTimeNanosActual=1.2K, exprTrueCountActual=60.6K, closeCountActual=66.7K, exprEvalTimeNanosActual=23.8M, inputRowsActual=172.5K, rowsDroppedActual=172.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.3K, filterRejectRateActual=0.65) +│ ║ │ ╠══ Compare (<) (exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=17.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=172.5K, hasNextCallCountActual=178.5K, hasNextTrueCountActual=172.5K, hasNextTimeNanosActual=33.4M, nextCallCountActual=172.5K, nextTimeNanosActual=7.7M, sourceRowsScannedActual=178.5K, sourceRowsMatchedActual=172.5K, sourceRowsFilteredActual=6.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=66.7K, openCountActual=66.7K, lastRowTimeNanosActual=2.2K, closeCountActual=66.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=188, avgNextNanosActual=45, indexHitRateActual=0.97) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M, resultSizeActual=66.7K, joinRightIteratorsCreatedActual=40.2K, joinRightBindingsConsumedActual=66.7K, inputRowsActual=106.9K, rowsDroppedActual=40.2K, expansionFactorActual=0.62, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=66.7K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, resultSizeActual=40.2K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=40.2K, joinType=Cartesian product, inputRowsActual=40.2K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=40.2K, avgRightRowsPerLeftActual=40.3K, joinOutputPerLeftActual=40.3K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.3K, nextCallCountActual=1, nextTimeNanosActual=500, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.8K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=664.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=667, avgNextNanosActual=500) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.0M, nextCallCountActual=40.2K, nextTimeNanosActual=3.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=w2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ Var (name=node) +│ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ Var (name=w2) +│ ║ ║ , firstRowTimeNanosActual=7.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=664.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=126, avgNextNanosActual=89, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=67.0K, resultSizeActual=66.7K, hasNextCallCountActual=106.9K, hasNextTrueCountActual=66.7K, hasNextTimeNanosActual=262.7M, nextCallCountActual=66.7K, nextTimeNanosActual=789.3K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=66.7K, sourceRowsFilteredActual=156.0K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=958, exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, openCountActual=40.2K, exprTrueCountActual=66.7K, lastRowTimeNanosActual=18.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=92.4M, inputRowsActual=222.7K, rowsDroppedActual=156.0K, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.62, avgHasNextNanosActual=2.5K, avgNextNanosActual=12, filterRejectRateActual=0.70) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, exprTrueCountActual=66.7K, exprEvalTimeNanosActual=78.1M, hasNextFalseCountActual=0) +│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="4"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=10.9M, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=200.5K, exprTrueCountActual=200.5K, exprEvalTimeNanosActual=10.2M, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="6"^^) (exprEvalCountActual=178.3K, exprTrueCountActual=178.3K, exprEvalTimeNanosActual=8.9M, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=41.2M, nextCallCountActual=222.7K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=16.1K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=157, avgNextNanosActual=41, indexHitRateActual=0.85) +│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.26, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=w2) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w2) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=w2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ Var (name=node) +│ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ Var (name=w2) +│ ║ ║ ) +│ ║ ║ s: Var (name=node) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=w) (bindingState=bound) +│ ║ │ ValueConstant (value="4"^^) +│ ║ │ ValueConstant (value="5"^^) +│ ║ │ ValueConstant (value="6"^^) +│ ║ └── StatementPattern (resultSizeEstimate=222.8K) +│ ║ s: Var (name=node) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 4 } +?node a . +?node ?w . +FILTER (?w IN (4, 5, 6)) +FILTER NOT EXISTS { +?node ?w2 . +FILTER (?w2 < ?threshold) +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 3289 ms + +Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3273.4M, nextCallCountActual=40.2K, nextTimeNanosActual=5.9M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=147) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "node" (hasNextFalseCountActual=0) +║ ProjectionElem "neighborCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3272.5M, nextCallCountActual=40.2K, nextTimeNanosActual=4.0M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=101) +├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3271.6M, nextCallCountActual=40.2K, nextTimeNanosActual=2.2M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=55) +│ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3270.4M, nextCallCountActual=40.2K, nextTimeNanosActual=562.5K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3256.0M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3283.6M, closeCountActual=1, exprEvalTimeNanosActual=9.9M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) +│ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3256.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.8M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3256.0M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3283.5M, maxGroupSizeActual=138.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80.9K, avgNextNanosActual=45) +│ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2603.6M, nextCallCountActual=2.9M, nextTimeNanosActual=33.6M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=45.2K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3247.5M, closeCountActual=1, exprEvalTimeNanosActual=489.0M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=886, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=270.8M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1885.7M, nextCallCountActual=2.9M, nextTimeNanosActual=34.1M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=26.7K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=642, avgNextNanosActual=12, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=163.6M, nextCallCountActual=534.5K, nextTimeNanosActual=9.7M, firstRowTimeNanosActual=24.5K, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0.73, stddevActual=0.85, confidenceScoreActual=0.52, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=306, avgNextNanosActual=18, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.7M, nextCallCountActual=40.2K, nextTimeNanosActual=2.8M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=17.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1643.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=119, avgNextNanosActual=72, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=39.9M, nextCallCountActual=267.2K, nextTimeNanosActual=14.9M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=53.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=130, avgNextNanosActual=56, indexHitRateActual=0.87) [right] +│ ║ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.3M, nextCallCountActual=267.2K, nextTimeNanosActual=16.5M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1643.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=62, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=913.9M, nextCallCountActual=2.9M, nextTimeNanosActual=307.9M, firstRowTimeNanosActual=958, openCountActual=534.5K, lastRowTimeNanosActual=8.0K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=110, avgNextNanosActual=105) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=574.4M, nextCallCountActual=2.9M, nextTimeNanosActual=134.4M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=7.7K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=69, avgNextNanosActual=46, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) +│ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (node) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optWeight) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── ExtensionElem (optWeight) +│ ║ Var (name=w) (bindingState=bound) +│ ║ GroupElem (_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count +│ ║ Var (name=neighbor) (bindingState=bound) +│ ║ GroupElem (neighborCount) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count +│ Var (name=neighbor) (bindingState=unbound) +└── ExtensionElem (neighborCount) +Count (Distinct) +Var (name=neighbor) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ +?node a . +?node ?neighbor . +} +UNION +{ +?neighbor ?node . +} +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + + +Theme: HIGHLY_CONNECTED z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 507 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 254 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=505.7M, openCountActual=1, lastRowTimeNanosActual=505.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=5.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=505.7M, openCountActual=1, lastRowTimeNanosActual=505.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=2.8K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, aggregateEvalCountActual=44.7K, firstRowTimeNanosActual=505.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=505.8M, maxGroupSizeActual=44.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=44.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=44.7K, rowsDroppedActual=44.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=1.0K) +│ ╠══ Difference (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=480.5M, nextCallCountActual=44.7K, nextTimeNanosActual=609.5K, firstRowTimeNanosActual=69.2M, openCountActual=1, lastRowTimeNanosActual=505.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.7K, avgNextNanosActual=14, leftRowsConsumedActual=44.7K, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=403.5M, nextCallCountActual=44.7K, nextTimeNanosActual=644.0K, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=61.9K, exprEvalCountActual=44.7K, openCountActual=1, exprTrueCountActual=44.7K, lastRowTimeNanosActual=505.6M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=43.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=44.7K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.0K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=44.7K, exprTrueCountActual=44.7K, exprEvalTimeNanosActual=40.9M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=17.2M, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, plannedIndexName=spoc, indexLookupCountActual=44.7K, openCountActual=44.7K, lastRowTimeNanosActual=459, closeCountActual=44.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=385, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K, resultSizeActual=44.7K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=44.7K, inputRowsActual=85.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=44.7K, avgRightRowsPerLeftActual=1.11, joinOutputPerLeftActual=1.11) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.3M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=neighbor) +│ ║ │ │ , firstRowTimeNanosActual=8.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=505.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=41, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=44.9K, resultSizeActual=44.7K, hasNextCallCountActual=85.0K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=237.3M, nextCallCountActual=44.7K, nextTimeNanosActual=631.2K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=177.9K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.5K, exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, openCountActual=40.2K, exprTrueCountActual=44.7K, lastRowTimeNanosActual=5.9K, closeCountActual=40.2K, exprEvalTimeNanosActual=60.2M, inputRowsActual=222.7K, rowsDroppedActual=177.9K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=14, filterRejectRateActual=0.80) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, exprTrueCountActual=44.7K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=46.7M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.5K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=18.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=200.5K, exprFalseCountActual=177.9K, exprTrueCountActual=22.5K, exprEvalTimeNanosActual=15.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="9"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=250, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=36.9M, nextCallCountActual=222.7K, nextTimeNanosActual=7.9M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=791, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=3.2K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=140, avgNextNanosActual=36, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=69.1M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=69.1M, closeCountActual=1, exprEvalTimeNanosActual=25.4M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=69.2M, filterRejectRateActual=1.00) +│ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=9.8M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=16.7M, nextCallCountActual=267.2K, nextTimeNanosActual=12.3M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=69.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=63, avgNextNanosActual=46, indexHitRateActual=1.00) +│ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=neighbor) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=w) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="8"^^) +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="9"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) (bindingState=bound) +│ ║ ║ Var (name=node) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 8) || (?w = 9)) +FILTER EXISTS { +?node ?neighbor . +} +MINUS { +?neighbor ?node . +FILTER (?neighbor = ?node) +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 2325 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=2320.2M, openCountActual=1, lastRowTimeNanosActual=2320.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=2.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=2320.2M, openCountActual=1, lastRowTimeNanosActual=2320.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=432, firstRowTimeNanosActual=2320.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2320.2M, maxGroupSizeActual=432, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=432, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=432, rowsDroppedActual=431, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=625) +│ ╠══ Filter (resultSizeActual=432, hasNextCallCountActual=434, hasNextTrueCountActual=433, hasNextTimeNanosActual=2319.8M, nextCallCountActual=432, nextTimeNanosActual=5.7K, sourceRowsScannedActual=1.6K, sourceRowsMatchedActual=432, sourceRowsFilteredActual=1.1K, plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=56.5K, exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=432, lastRowTimeNanosActual=2320.2M, closeCountActual=1, exprEvalTimeNanosActual=874.5K, inputRowsActual=1.6K, rowsDroppedActual=1.1K, selectivityActual=0.27, expansionFactorActual=0.27, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3M, avgNextNanosActual=13, filterRejectRateActual=0.73) +│ ║ ├── ListMemberOperator (exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, exprTrueCountActual=432, exprEvalTimeNanosActual=750.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="7"^^) (exprEvalCountActual=1.6K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=114.6K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1.4K, exprTrueCountActual=1.4K, exprEvalTimeNanosActual=90.3K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="9"^^) (exprEvalCountActual=1.3K, exprTrueCountActual=1.3K, exprEvalTimeNanosActual=82.9K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=2318.8M, nextCallCountActual=1.6K, nextTimeNanosActual=30.1K, joinRightIteratorsCreatedActual=294, joinLeftBindingsConsumedActual=294, joinRightBindingsConsumedActual=1.6K, firstRowTimeNanosActual=43.7K, leftRowsWithMatchActual=294, openCountActual=1, lastRowTimeNanosActual=2320.1M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=1.9K, rowsDroppedActual=294, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4M, avgNextNanosActual=19, leftRowsProbedActual=294, rightRowsScannedActual=1.6K, avgRightRowsPerLeftActual=5.54, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.54, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=294, hasNextCallCountActual=295, hasNextTrueCountActual=294, hasNextTimeNanosActual=2318.1M, nextCallCountActual=294, nextTimeNanosActual=15.0K, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=42.6K, exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, openCountActual=1, exprTrueCountActual=294, lastRowTimeNanosActual=2320.1M, closeCountActual=1, exprEvalTimeNanosActual=1613.0M, inputRowsActual=1.7M, rowsDroppedActual=1.7M, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.9M, avgNextNanosActual=51, filterRejectRateActual=1.00) [left] +│ ║ ║ ├── Exists (exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, exprTrueCountActual=294, exprEvalTimeNanosActual=1487.4M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1.7M, hasNextTrueCountActual=294, hasNextTimeNanosActual=735.1M, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedIndexName=spoc, indexLookupCountActual=1.7M, openCountActual=1.7M, lastRowTimeNanosActual=375, closeCountActual=1.7M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.7M, nextPerHasNextRatioActual=0, avgHasNextNanosActual=421, indexHitRateActual=0.00) +│ ║ ║ │ s: Var (name=end) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K, resultSizeActual=1.7M, joinRightIteratorsCreatedActual=267.2K, joinRightBindingsConsumedActual=1.7M, inputRowsActual=2.0M, rowsDroppedActual=267.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=3.67, stddevActual=1.92, confidenceScoreActual=0.41, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.7M) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] +│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.8M, nextCallCountActual=40.2K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2320.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=121, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=42.3M, nextCallCountActual=267.2K, nextTimeNanosActual=12.9M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=666, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=78.4K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=138, avgNextNanosActual=49, indexHitRateActual=0.87) [right] +│ ║ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=mid) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=1.7M, hasNextCallCountActual=2.0M, hasNextTrueCountActual=1.7M, hasNextTimeNanosActual=269.0M, nextCallCountActual=1.7M, nextTimeNanosActual=75.7M, sourceRowsScannedActual=2.0M, sourceRowsMatchedActual=1.7M, sourceRowsFilteredActual=267.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] +│ ║ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ Var (name=end) +│ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ Var (name=node) +│ ║ ║ , firstRowTimeNanosActual=666, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=14.3K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=134, avgNextNanosActual=43, indexHitRateActual=0.87) +│ ║ ║ s: Var (name=mid) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=end) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.6K, hasNextCallCountActual=4.5K, hasNextTrueCountActual=4.2K, hasNextTimeNanosActual=291.7K, nextCallCountActual=1.6K, nextTimeNanosActual=87.1K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=294, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=294, openCountActual=294, lastRowTimeNanosActual=10.6K, closeCountActual=294, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=294, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=64, avgNextNanosActual=53, indexHitRateActual=0.85) [right] +│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optWeight) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optWeight) (bindingState=bound) +│ ║ │ ValueConstant (value="7"^^) +│ ║ │ ValueConstant (value="8"^^) +│ ║ │ ValueConstant (value="9"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +│ ║ ║ ├── Exists +│ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=end) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=node) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ s: Var (name=node) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] +│ ║ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ Var (name=end) +│ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ Var (name=node) +│ ║ ║ ) +│ ║ ║ s: Var (name=mid) (bindingState=bound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=end) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=optWeight) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?mid . +?mid ?end . +FILTER EXISTS { +?end ?node . +} +OPTIONAL { +?node ?optWeight . +} +FILTER (?optWeight IN (7, 8, 9)) +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 3282 ms + +Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3270.3M, nextCallCountActual=40.2K, nextTimeNanosActual=5.4M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=135) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "node" (hasNextFalseCountActual=0) +║ ProjectionElem "degree" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3269.5M, nextCallCountActual=40.2K, nextTimeNanosActual=3.6M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=90) +├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3268.6M, nextCallCountActual=40.2K, nextTimeNanosActual=2.0M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=51) +│ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3267.3M, nextCallCountActual=40.2K, nextTimeNanosActual=566.1K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3252.0M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3279.6M, closeCountActual=1, exprEvalTimeNanosActual=11.0M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=6.2M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3252.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3252.0M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3279.6M, maxGroupSizeActual=134.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80.8K, avgNextNanosActual=41) +│ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2579.0M, nextCallCountActual=2.9M, nextTimeNanosActual=32.8M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=40.7K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3243.6M, closeCountActual=1, exprEvalTimeNanosActual=481.3M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=878, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=269.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1865.7M, nextCallCountActual=2.9M, nextTimeNanosActual=34.9M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=23.4K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=635, avgNextNanosActual=12, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=114.1M, nextCallCountActual=534.5K, nextTimeNanosActual=10.7M, firstRowTimeNanosActual=17.1K, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=213, avgNextNanosActual=20, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] +│ ║ ║ ├── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=26.9M, nextCallCountActual=267.2K, nextTimeNanosActual=15.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=20.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1519.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=59, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.4M, nextCallCountActual=267.2K, nextTimeNanosActual=17.4M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1519.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=65, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=942.9M, nextCallCountActual=2.9M, nextTimeNanosActual=310.0M, firstRowTimeNanosActual=625, openCountActual=534.5K, lastRowTimeNanosActual=5.9K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=114, avgNextNanosActual=106) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=596.8M, nextCallCountActual=2.9M, nextTimeNanosActual=139.4M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=5.6K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=72, avgNextNanosActual=47, indexHitRateActual=0.85) +│ ║ │ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) +│ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (degree) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (degree) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (node) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optWeight) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=neighbor) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── ExtensionElem (optWeight) +│ ║ Var (name=w) (bindingState=bound) +│ ║ GroupElem (_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=neighbor) (bindingState=bound) +│ ║ GroupElem (degree) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=neighbor) (bindingState=unbound) +└── ExtensionElem (degree) +Count (Distinct) +Var (name=neighbor) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +?node (|^) ?neighbor . +OPTIONAL { +?neighbor ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + + +Theme: HIGHLY_CONNECTED z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 1159 ms +Warmup execution 1/1 +Fastest execution time: 537 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=1120.7M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=5.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=1120.7M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=3.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=95, firstRowTimeNanosActual=1120.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1120.7M, maxGroupSizeActual=95, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=95, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=95, rowsDroppedActual=94, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=1.1K) +│ ╠══ Difference (resultSizeActual=95, hasNextCallCountActual=97, hasNextTrueCountActual=96, hasNextTimeNanosActual=1120.5M, nextCallCountActual=95, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=32.0M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=11.6M, avgNextNanosActual=18, leftRowsConsumedActual=95, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=95, hasNextCallCountActual=96, hasNextTrueCountActual=95, hasNextTimeNanosActual=1105.7M, nextCallCountActual=95, nextTimeNanosActual=1.7K, sourceRowsScannedActual=89.1K, sourceRowsMatchedActual=95, sourceRowsFilteredActual=89.0K, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=17.3M, exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, openCountActual=1, exprTrueCountActual=95, lastRowTimeNanosActual=1120.6M, closeCountActual=1, exprEvalTimeNanosActual=654.8M, inputRowsActual=89.1K, rowsDroppedActual=89.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=11.5M, avgNextNanosActual=18, filterRejectRateActual=1.00) +│ ║ │ ╠══ Not (exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, exprTrueCountActual=95, exprEvalTimeNanosActual=649.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Exists (exprEvalCountActual=89.1K, exprFalseCountActual=95, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=643.3M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.4K, resultSizeActual=0, joinRightIteratorsCreatedActual=115.3K, joinLeftBindingsConsumedActual=115.3K, joinRightBindingsConsumedActual=89.0K, inputRowsActual=204.3K, rowsDroppedActual=204.3K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=115.3K, rightRowsScannedActual=89.0K, avgRightRowsPerLeftActual=0.77, joinOutputPerLeftActual=0) +│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=115.3K, hasNextCallCountActual=115.4K, hasNextTrueCountActual=115.3K, hasNextTimeNanosActual=39.0M, nextCallCountActual=115.3K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=115.4K, sourceRowsMatchedActual=115.3K, sourceRowsFilteredActual=95, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=834, indexLookupCountActual=89.1K, openCountActual=89.1K, lastRowTimeNanosActual=2.6K, closeCountActual=89.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=95, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=338, avgNextNanosActual=52, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── Filter (resultSizeActual=89.0K, hasNextCallCountActual=115.3K, hasNextTrueCountActual=89.0K, hasNextTimeNanosActual=247.6M, nextCallCountActual=89.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=511.1K, sourceRowsMatchedActual=89.0K, sourceRowsFilteredActual=422.1K, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.4K, exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, openCountActual=115.3K, exprTrueCountActual=89.0K, lastRowTimeNanosActual=1.8K, closeCountActual=115.3K, exprEvalTimeNanosActual=69.6M, inputRowsActual=511.1K, rowsDroppedActual=422.1K, selectivityActual=0.17, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.77, avgHasNextNanosActual=2.1K, avgNextNanosActual=17, filterRejectRateActual=0.83) [right] +│ ║ │ ║ ╠══ Compare (<) (exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=51.1M, hasNextFalseCountActual=0) +│ ║ │ ║ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=511.1K, hasNextCallCountActual=537.5K, hasNextTrueCountActual=511.1K, hasNextTimeNanosActual=80.3M, nextCallCountActual=511.1K, nextTimeNanosActual=25.8M, sourceRowsScannedActual=537.5K, sourceRowsMatchedActual=511.1K, sourceRowsFilteredActual=26.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) +│ ║ │ ║ Var (name=w2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ║ , plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=115.3K, openCountActual=115.3K, lastRowTimeNanosActual=3.1K, closeCountActual=115.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=149, avgNextNanosActual=51, indexHitRateActual=0.95) +│ ║ │ ║ s: Var (name=n2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M, resultSizeActual=89.1K, joinRightIteratorsCreatedActual=40.2K, joinRightBindingsConsumedActual=89.1K, inputRowsActual=129.3K, rowsDroppedActual=40.2K, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=89.1K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, resultSizeActual=40.2K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=40.2K, joinType=Cartesian product, inputRowsActual=40.2K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=40.2K, avgRightRowsPerLeftActual=40.3K, joinOutputPerLeftActual=40.3K) [left] +│ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=4.6K, nextCallCountActual=1, nextTimeNanosActual=750, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.6K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=1120.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.3K, avgNextNanosActual=750) [left] +│ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.2M, nextCallCountActual=40.2K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ │ │ Exists +│ ║ │ │ Join (resultSizeEstimate=127.4K) +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Filter +│ ║ │ │ Compare (<) +│ ║ │ │ Var (name=w2) +│ ║ │ │ Var (name=threshold) +│ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ │ Var (name=w2) +│ ║ │ │ , firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1120.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=130, avgNextNanosActual=99, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=89.4K, resultSizeActual=89.1K, hasNextCallCountActual=129.3K, hasNextTrueCountActual=89.1K, hasNextTimeNanosActual=301.7M, nextCallCountActual=89.1K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=89.1K, sourceRowsFilteredActual=133.6K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, openCountActual=40.2K, exprTrueCountActual=89.1K, lastRowTimeNanosActual=24.1K, closeCountActual=40.2K, exprEvalTimeNanosActual=111.1M, inputRowsActual=222.7K, rowsDroppedActual=133.6K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.69, avgHasNextNanosActual=2.3K, avgNextNanosActual=12, filterRejectRateActual=0.60) [right] +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, exprTrueCountActual=89.1K, exprEvalTimeNanosActual=97.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="1"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="2"^^) (exprEvalCountActual=200.4K, exprTrueCountActual=200.4K, exprEvalTimeNanosActual=10.7M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="3"^^) (exprEvalCountActual=178.1K, exprTrueCountActual=178.1K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="4"^^) (exprEvalCountActual=155.9K, exprTrueCountActual=155.9K, exprEvalTimeNanosActual=8.0M, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=41.2M, nextCallCountActual=222.7K, nextTimeNanosActual=8.8M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=20.7K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=157, avgNextNanosActual=40, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=14.6M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=14.6M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=14.6M, indexHitRateActual=0) +│ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ ExtensionElem (_anon_path_56323f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ │ ╠══ Not +│ ║ │ ║ Exists +│ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=123.5K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) +│ ║ │ ║ └── Filter (plannedFilterPassRatio=0.23, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ │ ║ ╠══ Compare (<) +│ ║ │ ║ ║ Var (name=w2) (bindingState=bound) +│ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) +│ ║ │ ║ Var (name=w2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ║ , plannedLookupComponents=[S, P]) +│ ║ │ ║ s: Var (name=n2) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w2) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] +│ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ │ │ Exists +│ ║ │ │ Join (resultSizeEstimate=123.5K) +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Filter +│ ║ │ │ Compare (<) +│ ║ │ │ Var (name=w2) +│ ║ │ │ Var (name=threshold) +│ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ │ Var (name=w2) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="1"^^) +│ ║ │ ║ ValueConstant (value="2"^^) +│ ║ │ ║ ValueConstant (value="3"^^) +│ ║ │ ║ ValueConstant (value="4"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── Extension +│ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=node) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) (bindingState=unbound) +│ ║ ╚══ ExtensionElem (_anon_path_17323f2fe36952f541b08a42a7b8ce15e70d0) +│ ║ Var (name=node) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 3 } +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3, 4)) +FILTER NOT EXISTS { +?node ?n2 . +?n2 ?w2 . +FILTER (?w2 < ?threshold) +} +MINUS { +?node ?node . +BIND(?node AS ?_anon_path_17323f2fe36952f541b08a42a7b8ce15e70d0) +} +} + + +Theme: TRAIN z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 77 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 41 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.1M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=66.0M, openCountActual=1, lastRowTimeNanosActual=66.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.1M, avgNextNanosActual=1.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.1M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=66.1M, openCountActual=1, lastRowTimeNanosActual=66.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.1M, avgNextNanosActual=667) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.0M, nextCallCountActual=1, nextTimeNanosActual=333, aggregateEvalCountActual=18.0K, firstRowTimeNanosActual=66.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=66.1M, maxGroupSizeActual=18.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=18.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18.0K, rowsDroppedActual=18.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.0M, avgNextNanosActual=333) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=60.3M, nextCallCountActual=18.0K, nextTimeNanosActual=195.8K, joinRightIteratorsCreatedActual=18.0K, joinLeftBindingsConsumedActual=18.0K, joinRightBindingsConsumedActual=18.0K, firstRowTimeNanosActual=14.5K, leftRowsWithMatchActual=18.0K, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36.0K, rowsDroppedActual=18.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=11, leftRowsProbedActual=18.0K, rightRowsScannedActual=18.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=41.6M, nextCallCountActual=18.0K, nextTimeNanosActual=258.6K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=7.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=12.6K, exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, openCountActual=1, exprTrueCountActual=18.0K, lastRowTimeNanosActual=66.0M, closeCountActual=1, exprEvalTimeNanosActual=19.9M, inputRowsActual=25.8K, rowsDroppedActual=7.8K, selectivityActual=0.70, expansionFactorActual=0.70, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.3K, avgNextNanosActual=14, filterRejectRateActual=0.30) [left] +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, exprTrueCountActual=18.0K, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTime) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=1, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=19.7M, nextCallCountActual=25.8K, nextTimeNanosActual=283.6K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=7.7K, leftRowsWithMatchActual=8.6K, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=34.4K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=762, avgNextNanosActual=11, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=791.7K, nextCallCountActual=8.6K, nextTimeNanosActual=512.4K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=4.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=92, avgNextNanosActual=59, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=9.9M, nextCallCountActual=25.8K, nextTimeNanosActual=2.6M, firstRowTimeNanosActual=584, openCountActual=8.6K, lastRowTimeNanosActual=9.8K, closeCountActual=8.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=144, avgNextNanosActual=104) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=6.3M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=9.6K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=93, avgNextNanosActual=45, indexHitRateActual=0.75) +│ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optTime) (hasNextFalseCountActual=0) +│ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=18.0K, hasNextCallCountActual=36.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=7.6M, nextCallCountActual=18.0K, nextTimeNanosActual=886.0K, sourceRowsScannedActual=36.0K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=18.0K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=18.0K, openCountActual=18.0K, lastRowTimeNanosActual=584, closeCountActual=18.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=213, avgNextNanosActual=49, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optTime) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="08:00:00"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] +│ ║ │ │ s: Var (name=service) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ │ ║ s: Var (name=service) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ │ ║ o: Var (name=time) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optTime) +│ ║ │ Var (name=time) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=service) (bindingState=bound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +OPTIONAL { +?service ?time . +BIND(?time AS ?optTime) +} +FILTER (?optTime > "08:00:00"^^) +OPTIONAL { +?service ?name . +} +} + + +Theme: TRAIN z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 96 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 57 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=86.8M, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=86.8M, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=4, firstRowTimeNanosActual=86.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=86.8M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=375) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=86.8M, nextCallCountActual=4, nextTimeNanosActual=124, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.1K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=86.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=14.5M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=67.9M, nextCallCountActual=4, nextTimeNanosActual=208, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=59.7K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=52.2K, exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=86.8M, closeCountActual=1, exprEvalTimeNanosActual=28.0M, inputRowsActual=59.7K, rowsDroppedActual=59.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=13.6M, avgNextNanosActual=52, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=18.0M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, resultSizeActual=59.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=29.9K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=29.9K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=667, nextCallCountActual=2, nextTimeNanosActual=209, firstRowTimeNanosActual=16.9K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=38.3K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=222, avgNextNanosActual=105) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.5M, nextCallCountActual=29.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=67.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=46, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=13.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.6K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=16.9K, rowsDroppedActual=16.9K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=6.9M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=5.1M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=672.9K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, resultSizeActual=16.9K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=8.4K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=8.5K) +│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=541, nextCallCountActual=2, nextTimeNanosActual=292, firstRowTimeNanosActual=67.9M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=67.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=180, avgNextNanosActual=146) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K, resultSizeActual=8.4K, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=8.4K, inputRowsActual=16.9K, rowsDroppedActual=8.4K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=5.16, stddevActual=2.27, confidenceScoreActual=0.38, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=8.4K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=700.6K, nextCallCountActual=8.4K, nextTimeNanosActual=391.0K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=67.9M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=46, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.7M, nextCallCountActual=8.4K, nextTimeNanosActual=455.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=459, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.5K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=219, avgNextNanosActual=54, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.4K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=334, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=365, indexHitRateActual=0) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="OP 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="OP 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +UNION +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +OPTIONAL { +?entity ?op . +} +} + + +Theme: TRAIN z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 54 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 27 ms + +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=583) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "line" (hasNextFalseCountActual=0) +║ ProjectionElem "sectionCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=916, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=305) +├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=584, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=195) +│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=41, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=46.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=46.7M, closeCountActual=1, exprEvalTimeNanosActual=2.9K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) +│ ║ └── Group (line) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.6M, nextCallCountActual=3, nextTimeNanosActual=334, aggregateEvalCountActual=52, firstRowTimeNanosActual=46.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=46.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=8.67, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=26, rowsDroppedActual=23, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=111) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=26, hasNextCallCountActual=28, hasNextTrueCountActual=27, hasNextTimeNanosActual=46.6M, nextCallCountActual=26, nextTimeNanosActual=416, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=26, firstRowTimeNanosActual=27.1K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=46.6M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=29, rowsDroppedActual=3, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=1.5M, stddevActual=1.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.7M, avgNextNanosActual=16, leftRowsProbedActual=3, rightRowsScannedActual=26, avgRightRowsPerLeftActual=8.67, joinMatchRateActual=1.00, joinOutputPerLeftActual=8.67, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444, resultSizeActual=3, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=3, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=5.4K, stddevActual=73, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=816.8K, nextCallCountActual=8.4K, nextTimeNanosActual=298.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=46.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=35, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=444, resultSizeActual=3, hasNextCallCountActual=8.4K, hasNextTrueCountActual=3, hasNextTimeNanosActual=27.6M, nextCallCountActual=3, nextTimeNanosActual=250, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=8.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.9K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=3, lastRowTimeNanosActual=3.1K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.5M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=83, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=3, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=lineName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Line 0") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=234.8K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Line 1") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=231.3K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Line 2") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=333.0K, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=322.3K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=lineName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=67.4K, resultSizeActual=26, hasNextCallCountActual=75, hasNextTrueCountActual=72, hasNextTimeNanosActual=6.6K, nextCallCountActual=26, nextTimeNanosActual=2.5K, sourceRowsScannedActual=29, sourceRowsMatchedActual=26, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=791, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.0K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=88, avgNextNanosActual=98, indexHitRateActual=0.90) [right] +│ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (sectionCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (sectionCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (line) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=line) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=lineName) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Line 0") +│ ║ │ │ ValueConstant (value="Line 1") +│ ║ │ │ ValueConstant (value="Line 2") +│ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) +│ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=lineName) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] +│ ║ s: Var (name=section) (bindingState=unbound) +│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ o: Var (name=line) (bindingState=bound) +│ ║ GroupElem (_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=section) (bindingState=bound) +│ ║ GroupElem (sectionCount) +│ ║ Count (Distinct) +│ ║ Var (name=section) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=section) (bindingState=unbound) +└── ExtensionElem (sectionCount) +Count (Distinct) +Var (name=section) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a . +?line ?lineName . +FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { +?section ?line . +} +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + + +Theme: TRAIN z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 297 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 169 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=2.6K, firstRowTimeNanosActual=290.9M, openCountActual=1, lastRowTimeNanosActual=291.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=2.6K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=290.9M, openCountActual=1, lastRowTimeNanosActual=291.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=1.5K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=1000, aggregateEvalCountActual=67.3K, firstRowTimeNanosActual=290.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=291.0M, maxGroupSizeActual=67.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=67.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=67.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=1000) +│ ╠══ Difference (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=246.9M, nextCallCountActual=67.3K, nextTimeNanosActual=742.1K, firstRowTimeNanosActual=35.7M, openCountActual=1, lastRowTimeNanosActual=290.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=9, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=11, leftRowsConsumedActual=67.3K, rightRowsConsumedActual=1, overlapRowsActual=8) +│ ║ ├── Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=189.1M, nextCallCountActual=67.3K, nextTimeNanosActual=925.0K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.4K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=290.8M, closeCountActual=1, exprEvalTimeNanosActual=7.4M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTrack) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=176.6M, nextCallCountActual=67.3K, nextTimeNanosActual=587.2K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=67.3K, firstRowTimeNanosActual=17.4K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=290.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=8.71, leftRowsProbedActual=67.3K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=6.8M, nextCallCountActual=67.3K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=8.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=290.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=60, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.5K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.6M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=709, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.1K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=49.5M, nextCallCountActual=67.3K, nextTimeNanosActual=10.2M, firstRowTimeNanosActual=500, openCountActual=67.3K, lastRowTimeNanosActual=2.0K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=368, avgNextNanosActual=152) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=31.1M, nextCallCountActual=67.3K, nextTimeNanosActual=4.3M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=1.7K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=231, avgNextNanosActual=65, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optTrack) (hasNextFalseCountActual=0) +│ ║ │ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=35.6M, nextCallCountActual=1, nextTimeNanosActual=83, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=22.5M, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=35.6M, closeCountActual=1, exprEvalTimeNanosActual=28.5M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=17.8M, avgNextNanosActual=83, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=25.7M, hasNextFalseCountActual=0) +│ ║ ║ ├── Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=20.9M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="Line 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.3M, nextCallCountActual=46.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=35.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=71, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrack) (bindingState=bound) +│ ║ │ ║ Var (name=section) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=section) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ ║ s: Var (name=section) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ │ ║ o: Var (name=track) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optTrack) +│ ║ │ Var (name=track) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="Line 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=line) (bindingState=unbound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=section) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=section) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section ?line . +?section a . +OPTIONAL { +?section ?track . +BIND(?track AS ?optTrack) +} +FILTER (?optTrack != ?section) +MINUS { +?line ?name . +FILTER (CONTAINS(STR(?name), "Line 0")) +} +} + + +Theme: TRAIN z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 337 ms +Warmup execution 1/5 +Warmup execution 2/5 +Warmup execution 3/5 +Warmup execution 4/5 +Warmup execution 5/5 +Fastest execution time: 178 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=335.7M, openCountActual=1, lastRowTimeNanosActual=335.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=335.7M, openCountActual=1, lastRowTimeNanosActual=335.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=36, firstRowTimeNanosActual=335.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=335.7M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=36, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=36, rowsDroppedActual=35, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=542) +│ ╠══ Filter (resultSizeActual=36, hasNextCallCountActual=38, hasNextTrueCountActual=37, hasNextTimeNanosActual=335.7M, nextCallCountActual=36, nextTimeNanosActual=585, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=58.9K, exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, openCountActual=1, exprTrueCountActual=36, lastRowTimeNanosActual=335.7M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=209.8M, metricOrigin.varsAddedActual=derived, inputRowsActual=269.5K, rowsDroppedActual=269.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=8.8M, avgNextNanosActual=16, filterRejectRateActual=1.00) +│ ║ ├── Exists (exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, exprTrueCountActual=36, exprEvalTimeNanosActual=192.1M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=269.5K, hasNextTrueCountActual=36, hasNextTimeNanosActual=77.7M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedIndexName=spoc, indexLookupCountActual=269.5K, openCountActual=269.5K, lastRowTimeNanosActual=333, closeCountActual=269.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=269.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=288, indexHitRateActual=0.00) +│ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=106.9M, nextCallCountActual=269.5K, nextTimeNanosActual=4.2M, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=34.9K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=335.6M, closeCountActual=1, maxRightRowsPerLeftActual=134.7K, inputRowsActual=269.5K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=12.1K, stddevActual=110, confidenceScoreActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=397, avgNextNanosActual=16, leftRowsProbedActual=2, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=134.8K, joinMatchRateActual=1.00, joinOutputPerLeftActual=134.8K, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444, resultSizeActual=2, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=2, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=12.2K, stddevActual=110, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=886.8K, nextCallCountActual=8.4K, nextTimeNanosActual=327.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=4.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=335.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=444, resultSizeActual=2, hasNextCallCountActual=8.4K, hasNextTrueCountActual=2, hasNextTimeNanosActual=31.3M, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=8.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=11.9K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=2, lastRowTimeNanosActual=3.8K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.4M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=105, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=5.9M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Line 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=365.0K, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Line 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=351.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=42, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=808.6K, hasNextTrueCountActual=808.6K, hasNextTimeNanosActual=27.5M, nextCallCountActual=269.5K, nextTimeNanosActual=9.9M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=2, plannedIndexName=psoc, firstRowTimeNanosActual=3.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=142.1M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=34, avgNextNanosActual=37, indexHitRateActual=1.00) [right] +│ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ s: Var (name=section) (bindingState=bound) +│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ o: Var (name=line) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=line) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=444, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Line 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Line 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ ║ s: Var (name=line) (bindingState=bound) +│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ ║ o: Var (name=name) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=section) (bindingState=unbound) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?name . +FILTER ((?name = "Line 1") || (?name = "Line 2")) +OPTIONAL { +?section ?op . +} +FILTER EXISTS { +?section ?line . +} +} + + +Theme: TRAIN z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 74 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 43 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=68.1M, openCountActual=1, lastRowTimeNanosActual=68.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=1.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=68.1M, openCountActual=1, lastRowTimeNanosActual=68.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=792) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=24, firstRowTimeNanosActual=68.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=68.1M, maxGroupSizeActual=24, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=24, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24, rowsDroppedActual=23, selectivityActual=0.04, expansionFactorActual=0.04, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=500) +│ ╠══ Filter (resultSizeActual=24, hasNextCallCountActual=26, hasNextTrueCountActual=25, hasNextTimeNanosActual=68.0M, nextCallCountActual=24, nextTimeNanosActual=416, sourceRowsScannedActual=94, sourceRowsMatchedActual=24, sourceRowsFilteredActual=70, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=3.3M, exprEvalCountActual=94, exprFalseCountActual=70, openCountActual=1, exprTrueCountActual=24, lastRowTimeNanosActual=68.1M, closeCountActual=1, exprEvalTimeNanosActual=476.2K, inputRowsActual=94, rowsDroppedActual=70, selectivityActual=0.26, expansionFactorActual=0.26, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=2.6M, avgNextNanosActual=17, filterRejectRateActual=0.74) +│ ║ ├── Not (exprEvalCountActual=94, exprFalseCountActual=70, exprTrueCountActual=24, exprEvalTimeNanosActual=468.3K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=94, exprFalseCountActual=24, exprTrueCountActual=70, exprEvalTimeNanosActual=461.8K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=94, hasNextTrueCountActual=70, hasNextTimeNanosActual=201.6K, sourceRowsScannedActual=213, sourceRowsMatchedActual=70, sourceRowsFilteredActual=143, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, exprEvalCountActual=213, exprFalseCountActual=143, openCountActual=94, lastRowTimeNanosActual=875, exprTrueCountActual=70, closeCountActual=94, exprEvalTimeNanosActual=93.9K, inputRowsActual=213, rowsDroppedActual=213, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, filterRejectRateActual=0.67) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=213, exprFalseCountActual=143, exprTrueCountActual=70, exprEvalTimeNanosActual=86.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=late) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=213, hasNextCallCountActual=237, hasNextTrueCountActual=213, hasNextTimeNanosActual=46.3K, nextCallCountActual=213, nextTimeNanosActual=8.1K, sourceRowsScannedActual=237, sourceRowsMatchedActual=213, sourceRowsFilteredActual=24, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=94, openCountActual=94, lastRowTimeNanosActual=2.1K, closeCountActual=94, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=196, avgNextNanosActual=38, indexHitRateActual=0.90) +│ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=late) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M, resultSizeActual=94, joinRightIteratorsCreatedActual=8.6K, joinRightBindingsConsumedActual=94, inputRowsActual=8.7K, rowsDroppedActual=8.6K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=42, stddevActual=6.47, confidenceScoreActual=0.21, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=94) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, resultSizeActual=8.6K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=8.6K, joinType=Cartesian product, inputRowsActual=8.6K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=8.6K, avgRightRowsPerLeftActual=8.6K, joinOutputPerLeftActual=8.6K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=833, nextCallCountActual=1, nextTimeNanosActual=417, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.1K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=68.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=417, avgNextNanosActual=417) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=902.7K, nextCallCountActual=8.6K, nextTimeNanosActual=737.8K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (>) +│ ║ ║ Var (name=late) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=25.8K) +│ ║ ║ Var (name=service) +│ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ ║ Var (name=late) +│ ║ ║ , firstRowTimeNanosActual=4.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=68.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=86, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=1.3K, resultSizeActual=94, hasNextCallCountActual=8.7K, hasNextTrueCountActual=94, hasNextTimeNanosActual=46.6M, nextCallCountActual=94, nextTimeNanosActual=1.6K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=94, sourceRowsFilteredActual=25.7K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=4.3K, exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, openCountActual=8.6K, exprTrueCountActual=94, lastRowTimeNanosActual=6.4K, closeCountActual=8.6K, exprEvalTimeNanosActual=20.4M, inputRowsActual=25.8K, rowsDroppedActual=25.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=5.4K, avgNextNanosActual=18, filterRejectRateActual=1.00) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, exprTrueCountActual=94, exprEvalTimeNanosActual=18.8M, hasNextFalseCountActual=0) +│ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=618.1K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="09:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=550.0K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=34.4K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.3M, nextCallCountActual=25.8K, nextTimeNanosActual=929.8K, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=4.5K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=183, avgNextNanosActual=36, indexHitRateActual=0.75) +│ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=late) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ │ s: Var (name=service) (bindingState=bound) +│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ │ o: Var (name=late) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (>) +│ ║ ║ Var (name=late) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=25.8K) +│ ║ ║ Var (name=service) +│ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ ║ Var (name=late) +│ ║ ║ ) +│ ║ ║ s: Var (name=service) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=time) (bindingState=bound) +│ ║ │ ValueConstant (value="08:00:00"^^) +│ ║ │ ValueConstant (value="09:00:00"^^) +│ ║ └── StatementPattern (resultSizeEstimate=25.8K) +│ ║ s: Var (name=service) (bindingState=bound) +│ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ o: Var (name=time) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +VALUES ?threshold { "10:00:00"^^ } +?service a . +?service ?time . +FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) +FILTER NOT EXISTS { +?service ?late . +FILTER (?late > ?threshold) +} +} + + +Theme: TRAIN z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 167 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 109 ms + +Projection (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=149.2M, nextCallCountActual=7.8K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=149) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "line" (hasNextFalseCountActual=0) +║ ProjectionElem "serviceCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=149.0M, nextCallCountActual=7.8K, nextTimeNanosActual=759.3K, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=97) +├── Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=148.9M, nextCallCountActual=7.8K, nextTimeNanosActual=418.1K, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=53) +│ ╠══ Filter (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=148.6M, nextCallCountActual=7.8K, nextTimeNanosActual=103.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=7.8K, sourceRowsFilteredActual=624, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=146.2M, exprEvalCountActual=8.4K, exprFalseCountActual=624, openCountActual=1, exprTrueCountActual=7.8K, lastRowTimeNanosActual=151.1M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=8.4K, rowsDroppedActual=624, selectivityActual=0.93, expansionFactorActual=0.93, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=13, filterRejectRateActual=0.07) +│ ║ ├── Compare (>) (exprEvalCountActual=8.4K, exprFalseCountActual=624, exprTrueCountActual=7.8K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) +│ ║ └── Group (line) (resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=146.3M, nextCallCountActual=8.4K, nextTimeNanosActual=222.8K, aggregateEvalCountActual=68.6K, firstRowTimeNanosActual=146.2M, groupsCreatedActual=8.4K, openCountActual=1, lastRowTimeNanosActual=151.1M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=9, avgGroupSizeActual=4.06, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=34.3K, rowsDroppedActual=25.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=17.3K, avgNextNanosActual=26) +│ ║ Filter (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=116.7M, nextCallCountActual=34.3K, nextTimeNanosActual=469.5K, sourceRowsScannedActual=34.3K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=29.2K, exprEvalCountActual=34.3K, openCountActual=1, exprTrueCountActual=34.3K, lastRowTimeNanosActual=144.2M, closeCountActual=1, exprEvalTimeNanosActual=21.8M, inputRowsActual=34.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=34.3K, exprTrueCountActual=34.3K, exprEvalTimeNanosActual=19.3M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=92.0M, nextCallCountActual=34.3K, nextTimeNanosActual=278.7K, joinRightIteratorsCreatedActual=34.3K, joinLeftBindingsConsumedActual=34.3K, joinRightBindingsConsumedActual=34.3K, firstRowTimeNanosActual=20.0K, leftRowsWithMatchActual=34.3K, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=68.6K, rowsDroppedActual=34.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.7K, avgNextNanosActual=8.12, leftRowsProbedActual=34.3K, rightRowsScannedActual=34.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=53.1M, nextCallCountActual=34.3K, nextTimeNanosActual=771.9K, firstRowTimeNanosActual=16.5K, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5K, avgNextNanosActual=22, leftRowsConsumedActual=25.8K, rightRowsConsumedActual=8.4K, leftRowsOutputContributionActual=25.8K, rightRowsOutputContributionActual=8.4K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=34.5K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.6K, nextTimeNanosActual=501.4K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=122.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=124, avgNextNanosActual=58, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=26.0K, resultSizeActual=25.8K, hasNextCallCountActual=34.5K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=34.5K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[S, P], firstRowTimeNanosActual=833, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=18.9K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=195, avgNextNanosActual=53, indexHitRateActual=0.75) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=20.8M, nextCallCountActual=25.8K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[S, P], firstRowTimeNanosActual=916, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=3.8K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=402, avgNextNanosActual=60, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=807.7K, nextCallCountActual=8.4K, nextTimeNanosActual=369.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=122.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=44, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=34.3K, hasNextCallCountActual=68.6K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=17.8M, nextCallCountActual=34.3K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=68.6K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=34.3K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=34.3K, openCountActual=34.3K, lastRowTimeNanosActual=1.7K, closeCountActual=34.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=34.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=259, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (serviceCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (serviceCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (line) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] +│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=section) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ o: Var (name=line) (bindingState=unbound) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) +│ ║ ║ s: Var (name=line) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) (bindingState=bound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ GroupElem (_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01) +│ ║ Count +│ ║ Var (name=service) (bindingState=bound) +│ ║ GroupElem (serviceCount) +│ ║ Count (Distinct) +│ ║ Var (name=service) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01) +│ Count +│ Var (name=service) (bindingState=unbound) +└── ExtensionElem (serviceCount) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ +?service a . +?service ?section . +?section ?line . +} +UNION +{ +?line a . +} +OPTIONAL { +?line ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + + +Theme: TRAIN z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 235 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 124 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=223.8M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=223.8M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1, firstRowTimeNanosActual=223.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=223.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=583) +│ ╠══ Difference (resultSizeActual=1, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, firstRowTimeNanosActual=38.7M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=74.6M, avgNextNanosActual=0, leftRowsConsumedActual=1, rightRowsConsumedActual=1, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=65.7K, exprEvalCountActual=2, exprFalseCountActual=1, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=223.7M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=9.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=42, filterRejectRateActual=0.50) +│ ║ │ ╠══ Exists (exprEvalCountActual=2, exprFalseCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.0K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=25.9K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=4.1K, sourceRowsScannedActual=14, sourceRowsMatchedActual=1, sourceRowsFilteredActual=13, plannedIndexName=ospc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=2.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, indexHitRateActual=0.07) +│ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K, resultSizeActual=2, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=2, inputRowsActual=29.9K, rowsDroppedActual=29.8K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=147.1K, stddevActual=384, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=3.1M, nextCallCountActual=29.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ │ Var (name=service) +│ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ │ Var (name=op) +│ ║ │ │ , firstRowTimeNanosActual=12.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=223.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=107, avgNextNanosActual=39, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=1.5K, resultSizeActual=2, hasNextCallCountActual=29.9K, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.8M, nextCallCountActual=2, nextTimeNanosActual=250, sourceRowsScannedActual=29.8K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=29.8K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=8.4K, exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, openCountActual=29.8K, exprTrueCountActual=2, lastRowTimeNanosActual=3.3K, closeCountActual=29.8K, exprEvalTimeNanosActual=22.4M, inputRowsActual=29.8K, rowsDroppedActual=29.8K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=125, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=20.6M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=17.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="OP 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="OP 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.3K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=41, indexHitRateActual=0.50) +│ ║ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=38.6M, nextCallCountActual=1, nextTimeNanosActual=41, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=12.0K, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=38.6M, closeCountActual=1, exprEvalTimeNanosActual=31.6M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=19.3M, avgNextNanosActual=41, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=29.0M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=24.5M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=21.0M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="op 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.4M, nextCallCountActual=46.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=38.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ ║ s: Var (name=service) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ ║ o: Var (name=op) (bindingState=bound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ │ Var (name=service) +│ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ │ Var (name=op) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=op) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="OP 1") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="OP 2") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ │ s: Var (name=op) (bindingState=bound) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="op 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=op) (bindingState=unbound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=op) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=op) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a . +?op ?name . +FILTER ((?name = "OP 1") || (?name = "OP 2")) +FILTER EXISTS { +?service ?op . +} +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) +} +} + + +Theme: TRAIN z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 248 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 165 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.3M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=221.3M, openCountActual=1, lastRowTimeNanosActual=221.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.7M, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=917, firstRowTimeNanosActual=221.3M, openCountActual=1, lastRowTimeNanosActual=221.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=917) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=9, firstRowTimeNanosActual=221.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=221.3M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=500) +│ ╠══ Filter (resultSizeActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=25.8K, rowsDroppedActual=25.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.8K, exprTrueCountActual=9, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Line 0") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Line 1") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=653.2K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=30.5K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K, resultSizeActual=0, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, inputRowsActual=18, rowsDroppedActual=18, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.6K, nextCallCountActual=9, nextTimeNanosActual=458, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.5K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=403, avgNextNanosActual=51, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.4K, nextCallCountActual=9, nextTimeNanosActual=374, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.9K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=389, avgNextNanosActual=42, indexHitRateActual=1.00) [right] +│ ║ │ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=198.9M, nextCallCountActual=25.8K, nextTimeNanosActual=186.8K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=31.5K, leftRowsWithMatchActual=25.8K, openCountActual=1, lastRowTimeNanosActual=221.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=10187.2M, stddevActual=100.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.7K, avgNextNanosActual=7.21, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=83.4K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=83.4K, expansionFactorActual=0.24, sampleCountActual=2, varianceActual=0.58, stddevActual=0.76, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, resultSizeActual=83.4K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=83.4K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=25.8K, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=1.24, stddevActual=1.11, confidenceScoreActual=0.49, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=83.4K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.00, stddevActual=1.00, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=2.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=221.2M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=130, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=14.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=9.2K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=2.9K, resultSizeEstimate=8.6K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=12.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=8.2K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=44, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=83.4K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=83.4K, hasNextTimeNanosActual=15.6M, nextCallCountActual=83.4K, nextTimeNanosActual=3.6M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=83.4K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=7.3K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=143, avgNextNanosActual=43, indexHitRateActual=0.76) [right] +│ ║ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=s2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=37.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=83.4K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=83.4K, openCountActual=83.4K, lastRowTimeNanosActual=3.0K, closeCountActual=83.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=83.4K, nextPerHasNextRatioActual=0.24, avgHasNextNanosActual=347, avgNextNanosActual=43, indexHitRateActual=0.24) [right] +│ ║ ║ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=14.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=1.9K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=276, avgNextNanosActual=47, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="Line 0") +│ ║ │ ║ ValueConstant (value="Line 1") +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ s: Var (name=s1) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=s2) (bindingState=bound) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] +│ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) +│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] +│ ║ ║ │ s: Var (name=service) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ o: Var (name=s2) (bindingState=unbound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] +│ ║ ║ s: Var (name=s2) (bindingState=bound) +│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ o: Var (name=line) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) (bindingState=bound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service ?s1 . +?s1 ?line . +?service a . +?service ?s2 . +?s2 ?line . +OPTIONAL { +?line ?optName . +} +FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + + +Theme: TRAIN z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 443 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 272 ms + +Projection (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=449.6M, nextCallCountActual=67.3K, nextTimeNanosActual=9.9M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=147) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "section" (hasNextFalseCountActual=0) +║ ProjectionElem "trackCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=448.3M, nextCallCountActual=67.3K, nextTimeNanosActual=6.4M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=96) +├── Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=446.8M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=55) +│ ╠══ Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=444.7M, nextCallCountActual=67.3K, nextTimeNanosActual=917.7K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=420.0M, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=466.0M, closeCountActual=1, exprEvalTimeNanosActual=18.4M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=9.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.1K, hasNextFalseCountActual=0) +│ ║ └── Group (section) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=420.7M, nextCallCountActual=67.3K, nextTimeNanosActual=1.8M, aggregateEvalCountActual=269.5K, firstRowTimeNanosActual=420.0M, groupsCreatedActual=67.3K, openCountActual=1, lastRowTimeNanosActual=465.9M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=134.7K, rowsDroppedActual=67.3K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.2K, avgNextNanosActual=27) +│ ║ Filter (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=302.7M, nextCallCountActual=134.7K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=30.3K, exprEvalCountActual=134.7K, openCountActual=1, exprTrueCountActual=134.7K, lastRowTimeNanosActual=394.4M, closeCountActual=1, exprEvalTimeNanosActual=16.1M, inputRowsActual=134.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=134.7K, exprTrueCountActual=134.7K, exprEvalTimeNanosActual=6.3M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optOp) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=276.2M, nextCallCountActual=134.7K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=134.7K, firstRowTimeNanosActual=24.9K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=388.2M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=202.1K, rowsDroppedActual=67.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=11, leftRowsProbedActual=67.3K, rightRowsScannedActual=134.7K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ ║ ├── Filter (resultSizeEstimate=66.3K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=87.6M, nextCallCountActual=67.3K, nextTimeNanosActual=970.7K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, plannedLookupComponents=[P], firstRowTimeNanosActual=20.4K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=388.2M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=71.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=67.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ ║ │ ╠══ Exists (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=67.1M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.3M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, plannedIndexName=spoc, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=375, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=450, indexHitRateActual=1.00) +│ ║ ║ │ ║ s: Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=7.5M, nextCallCountActual=67.3K, nextTimeNanosActual=3.8M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=9.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=388.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=58, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=67.5K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=27.0M, nextCallCountActual=67.3K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.4K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=201, avgNextNanosActual=61, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=61.6M, nextCallCountActual=134.7K, nextTimeNanosActual=16.4M, firstRowTimeNanosActual=583, openCountActual=67.3K, lastRowTimeNanosActual=2.5K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=183, avgNextNanosActual=122) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=38.3M, nextCallCountActual=134.7K, nextTimeNanosActual=7.3M, sourceRowsScannedActual=202.1K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=2.3K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=114, avgNextNanosActual=54, indexHitRateActual=0.67) +│ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optOp) (hasNextFalseCountActual=0) +│ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (trackCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (trackCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (section) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optOp) (bindingState=bound) +│ ║ │ Var (name=section) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ╠══ Exists +│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) +│ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ ║ │ s: Var (name=section) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ ║ │ o: Var (name=track) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=section) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=134.8K) +│ ║ │ s: Var (name=section) (bindingState=bound) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) (bindingState=unbound) +│ ║ └── ExtensionElem (optOp) +│ ║ Var (name=op) (bindingState=bound) +│ ║ GroupElem (_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ Count +│ ║ Var (name=track) (bindingState=bound) +│ ║ GroupElem (trackCount) +│ ║ Count (Distinct) +│ ║ Var (name=track) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678) +│ Count +│ Var (name=track) (bindingState=unbound) +└── ExtensionElem (trackCount) +Count (Distinct) +Var (name=track) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section ?track . +FILTER EXISTS { +?track a . +} +?section a . +OPTIONAL { +?section ?op . +BIND(?op AS ?optOp) +} +FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + + +Theme: TRAIN z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 439 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 233 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=442.6M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=442.6M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=792) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=176.2K, firstRowTimeNanosActual=442.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=442.6M, maxGroupSizeActual=176.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=176.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=176.2K, rowsDroppedActual=176.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=583) +│ ╠══ Difference (resultSizeActual=176.2K, hasNextCallCountActual=176.2K, hasNextTrueCountActual=176.2K, hasNextTimeNanosActual=420.1M, nextCallCountActual=176.2K, nextTimeNanosActual=1.7M, firstRowTimeNanosActual=58.3M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=280.6K, rowsDroppedActual=104.4K, selectivityActual=0.63, expansionFactorActual=0.63, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=10, leftRowsConsumedActual=269.5K, rightRowsConsumedActual=11.1K, overlapRowsActual=93.3K) +│ ║ ├── Filter (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=262.1M, nextCallCountActual=269.5K, nextTimeNanosActual=3.0M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.2K, exprEvalCountActual=269.5K, openCountActual=1, exprTrueCountActual=269.5K, lastRowTimeNanosActual=442.6M, closeCountActual=1, exprEvalTimeNanosActual=29.4M, inputRowsActual=269.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=973, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=269.5K, exprTrueCountActual=269.5K, exprEvalTimeNanosActual=11.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optSection) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=212.0M, nextCallCountActual=269.5K, nextTimeNanosActual=3.0M, joinRightIteratorsCreatedActual=59.7K, joinLeftBindingsConsumedActual=59.7K, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=12.6K, leftRowsWithMatchActual=59.7K, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=329.3K, rowsDroppedActual=59.7K, expansionFactorActual=0.82, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=787, avgNextNanosActual=11, leftRowsProbedActual=59.7K, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=4.51, joinMatchRateActual=1.00, joinOutputPerLeftActual=4.51, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Union (resultSizeActual=59.7K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=59.7K, hasNextTimeNanosActual=45.4M, nextCallCountActual=59.7K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=8.3K, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=761, avgNextNanosActual=20, leftRowsConsumedActual=29.8K, rightRowsConsumedActual=29.8K, leftRowsOutputContributionActual=29.8K, rightRowsOutputContributionActual=29.8K) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=29.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=232.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=63, indexHitRateActual=1.00) +│ ║ │ │ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.7M, nextCallCountActual=29.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=232.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=61, indexHitRateActual=1.00) [left] +│ ║ │ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.7M, nextCallCountActual=29.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=5.5K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=247, avgNextNanosActual=64, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=91.4M, nextCallCountActual=269.5K, nextTimeNanosActual=26.3M, firstRowTimeNanosActual=542, openCountActual=59.7K, lastRowTimeNanosActual=4.5K, closeCountActual=59.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=122, avgNextNanosActual=98) [right] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=59.6M, nextCallCountActual=269.5K, nextTimeNanosActual=12.2M, sourceRowsScannedActual=381.1K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=111.5K, plannedIndexName=ospc, firstRowTimeNanosActual=500, indexLookupCountActual=59.7K, openCountActual=59.7K, lastRowTimeNanosActual=4.2K, closeCountActual=59.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=80, avgNextNanosActual=45, indexHitRateActual=0.71) +│ ║ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optSection) (hasNextFalseCountActual=0) +│ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=11.1K, hasNextCallCountActual=11.1K, hasNextTrueCountActual=11.1K, hasNextTimeNanosActual=43.0M, nextCallCountActual=11.1K, nextTimeNanosActual=143.0K, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=11.1K, sourceRowsFilteredActual=35.8K, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=14.6K, exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, openCountActual=1, exprTrueCountActual=11.1K, lastRowTimeNanosActual=51.8M, closeCountActual=1, exprEvalTimeNanosActual=34.8M, inputRowsActual=46.9K, rowsDroppedActual=35.8K, selectivityActual=0.24, expansionFactorActual=0.24, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=13, filterRejectRateActual=0.76) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, exprTrueCountActual=11.1K, exprEvalTimeNanosActual=31.9M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=26.9M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=23.0M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="op 1") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.9M, nextCallCountActual=46.9K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=51.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85, avgNextNanosActual=39, indexHitRateActual=1.00) +│ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optSection) (bindingState=bound) +│ ║ │ ║ Var (name=op) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) +│ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) +│ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ │ s: Var (name=op) (bindingState=unbound) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=op) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) +│ ║ │ ║ s: Var (name=section) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) (bindingState=bound) +│ ║ │ ╚══ ExtensionElem (optSection) +│ ║ │ Var (name=section) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="op 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=op) (bindingState=unbound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=op) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=op) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ +?op a . +} +UNION +{ +?op a . +?op ?name . +} +OPTIONAL { +?section ?op . +BIND(?section AS ?optSection) +} +FILTER (?optSection != ?op) +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 102 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 49 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=77.9M, openCountActual=1, lastRowTimeNanosActual=78.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=78.0M, openCountActual=1, lastRowTimeNanosActual=78.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=792) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.3K, firstRowTimeNanosActual=78.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=78.0M, maxGroupSizeActual=7.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=7.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.3K, rowsDroppedActual=7.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=542) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=73.1M, nextCallCountActual=7.3K, nextTimeNanosActual=50.5K, joinRightIteratorsCreatedActual=7.3K, joinLeftBindingsConsumedActual=7.3K, joinRightBindingsConsumedActual=7.3K, firstRowTimeNanosActual=46.5K, leftRowsWithMatchActual=7.3K, openCountActual=1, lastRowTimeNanosActual=77.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=14.7K, rowsDroppedActual=7.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.9K, avgNextNanosActual=6.84, leftRowsProbedActual=7.3K, rightRowsScannedActual=7.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=64.8M, nextCallCountActual=7.3K, nextTimeNanosActual=114.2K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=1.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=42.9K, exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, openCountActual=1, exprTrueCountActual=7.3K, lastRowTimeNanosActual=77.9M, closeCountActual=1, exprEvalTimeNanosActual=6.7M, inputRowsActual=9.3K, rowsDroppedActual=1.9K, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.8K, avgNextNanosActual=15, filterRejectRateActual=0.21) [left] +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, exprTrueCountActual=7.3K, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optCap) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=57.3M, nextCallCountActual=9.3K, nextTimeNanosActual=105.9K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, firstRowTimeNanosActual=35.3K, leftRowsWithMatchActual=9.3K, openCountActual=1, lastRowTimeNanosActual=77.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.1K, avgNextNanosActual=11, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=956.2K, nextCallCountActual=9.3K, nextTimeNanosActual=568.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=77.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=61, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=49.8M, nextCallCountActual=9.3K, nextTimeNanosActual=392.2K, firstRowTimeNanosActual=6.1K, openCountActual=9.3K, lastRowTimeNanosActual=7.5K, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.7K, avgNextNanosActual=42) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=37.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.25, joinOutputPerLeftActual=0.25) +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=8.8M, nextCallCountActual=37.3K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=750, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.4K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=190, avgNextNanosActual=54, indexHitRateActual=0.44) [left] +│ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=18.3M, nextCallCountActual=9.3K, nextTimeNanosActual=488.1K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[S, P], firstRowTimeNanosActual=833, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=1.9K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=393, avgNextNanosActual=52, indexHitRateActual=0.20) [right] +│ ║ │ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optCap) (hasNextFalseCountActual=0) +│ ║ │ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=7.3K, hasNextCallCountActual=14.7K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=3.7M, nextCallCountActual=7.3K, nextTimeNanosActual=402.6K, sourceRowsScannedActual=14.7K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=7.3K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=7.3K, openCountActual=7.3K, lastRowTimeNanosActual=1.2K, closeCountActual=7.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=7.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=255, avgNextNanosActual=54, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optCap) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] +│ ║ │ │ s: Var (name=substation) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=generator) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ o: Var (name=cap) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optCap) +│ ║ │ Var (name=cap) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] +│ ║ s: Var (name=substation) (bindingState=bound) +│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=substation) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=substation) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a . +OPTIONAL { +?generator ?substation . +?generator ?cap . +BIND(?cap AS ?optCap) +} +FILTER (?optCap > 600) +OPTIONAL { +?substation ?name . +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 93 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 57 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=87.4M, openCountActual=1, lastRowTimeNanosActual=87.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=87.4M, openCountActual=1, lastRowTimeNanosActual=87.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=1000) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=8, firstRowTimeNanosActual=87.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=87.4M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=500) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=87.4M, nextCallCountActual=8, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, firstRowTimeNanosActual=32.1K, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=87.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=8.7M, avgNextNanosActual=26, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=8, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=21.8M, nextCallCountActual=4, nextTimeNanosActual=208, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=29.9K, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=21.8M, closeCountActual=1, exprEvalTimeNanosActual=8.8M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=4.4M, avgNextNanosActual=52, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=7.6M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=775.5K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=626, nextCallCountActual=2, nextTimeNanosActual=542, firstRowTimeNanosActual=17.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=23.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=271) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=973.6K, nextCallCountActual=9.3K, nextTimeNanosActual=491.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=431.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=458, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=1.7K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=46, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=8.2M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=6.1M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=791.5K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=541, nextCallCountActual=2, nextTimeNanosActual=292, firstRowTimeNanosActual=21.8M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=21.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=180, avgNextNanosActual=146) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.3K) [right] +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K, resultSizeActual=37.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=37.3K, inputRowsActual=46.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=3.99, joinOutputPerLeftActual=3.99) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=9.3K, nextTimeNanosActual=488.5K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=21.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=52, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=9.3M, nextCallCountActual=37.3K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O], firstRowTimeNanosActual=583, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.1K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=199, avgNextNanosActual=53, indexHitRateActual=0.44) [right] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=16.4M, nextCallCountActual=9.3K, nextTimeNanosActual=453.3K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=958, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.1K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=351, avgNextNanosActual=48, indexHitRateActual=0.20) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=4.3K, nextCallCountActual=4, nextTimeNanosActual=499, sourceRowsScannedActual=12, sourceRowsMatchedActual=4, sourceRowsFilteredActual=8, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=875, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=365, avgNextNanosActual=125, indexHitRateActual=0.33) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=substation2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Substation 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Substation 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ │ o: Var (name=substation) (bindingState=bound) +│ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ o: Var (name=substation2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Substation 1" "Substation 2" } +{ +{ +?entity ?name . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +UNION +{ +VALUES ?target { "Substation 1" "Substation 2" } +{ +{ +?substation ?name . +?entity ?substation . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +OPTIONAL { +?entity ?substation2 . +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 199 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 99 ms + +Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=185.4M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=333) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "transformer" (hasNextFalseCountActual=0) +║ ProjectionElem "meterCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=185.5M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=175) +├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=185.5M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=138) +│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=376, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=185.5M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=185.5M, closeCountActual=1, exprEvalTimeNanosActual=5.5K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=38, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=4.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=5.1K, hasNextFalseCountActual=0) +│ ║ └── Group (transformer) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.4M, nextCallCountActual=10, nextTimeNanosActual=877, aggregateEvalCountActual=76, firstRowTimeNanosActual=185.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=185.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=3.80, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38, rowsDroppedActual=28, selectivityActual=0.26, expansionFactorActual=0.26, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=88) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=38, hasNextCallCountActual=40, hasNextTrueCountActual=39, hasNextTimeNanosActual=185.4M, nextCallCountActual=38, nextTimeNanosActual=499, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=38, firstRowTimeNanosActual=30.5K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=185.4M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=48, rowsDroppedActual=10, expansionFactorActual=0.79, sampleCountActual=2, varianceActual=1.7K, stddevActual=41, confidenceScoreActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=4.6M, avgNextNanosActual=13, leftRowsProbedActual=10, rightRowsScannedActual=38, avgRightRowsPerLeftActual=3.80, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.80, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=10, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=10, inputRowsActual=28.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=5.0K, stddevActual=71, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=10, rightRowsScannedActual=10, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.8M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=185.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=18.7M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P], firstRowTimeNanosActual=834, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=5.6K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=335, avgNextNanosActual=41, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, resultSizeActual=10, hasNextCallCountActual=28.0K, hasNextTrueCountActual=10, hasNextTimeNanosActual=86.6M, nextCallCountActual=10, nextTimeNanosActual=292, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=28.0K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=917, exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, openCountActual=28.0K, exprTrueCountActual=10, lastRowTimeNanosActual=2.7K, closeCountActual=28.0K, exprEvalTimeNanosActual=13.5M, inputRowsActual=28.0K, rowsDroppedActual=28.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.1K, avgNextNanosActual=29, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=10, exprEvalTimeNanosActual=11.9M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 0") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=836.9K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 1") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=919.6K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 2") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=12.2M, nextCallCountActual=28.0K, nextTimeNanosActual=994.8K, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=833, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=38, hasNextCallCountActual=104, hasNextTrueCountActual=94, hasNextTimeNanosActual=8.4K, nextCallCountActual=38, nextTimeNanosActual=2.5K, sourceRowsScannedActual=48, sourceRowsMatchedActual=38, sourceRowsFilteredActual=10, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=2.6K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.37, avgHasNextNanosActual=81, avgNextNanosActual=67, indexHitRateActual=0.79) [right] +│ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (meterCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (meterCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (transformer) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ o: Var (name=substation) (bindingState=unbound) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Substation 0") +│ ║ │ │ ValueConstant (value="Substation 1") +│ ║ │ │ ValueConstant (value="Substation 2") +│ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=substation) (bindingState=bound) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] +│ ║ s: Var (name=transformer) (bindingState=bound) +│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ o: Var (name=meter) (bindingState=unbound) +│ ║ GroupElem (_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ Count +│ ║ Var (name=meter) (bindingState=bound) +│ ║ GroupElem (meterCount) +│ ║ Count (Distinct) +│ ║ Var (name=meter) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678) +│ Count +│ Var (name=meter) (bindingState=unbound) +└── ExtensionElem (meterCount) +Count (Distinct) +Var (name=meter) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?transformer a . +?transformer ?substation . +?substation ?name . +FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) +OPTIONAL { +?transformer ?meter . +} +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + + +Theme: ELECTRICAL_GRID z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 608 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 379 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=568.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=7.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=568.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=791, aggregateEvalCountActual=59.6K, firstRowTimeNanosActual=568.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=568.7M, maxGroupSizeActual=59.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=59.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=59.6K, rowsDroppedActual=59.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=791) +│ ╠══ Difference (resultSizeActual=59.6K, hasNextCallCountActual=59.6K, hasNextTrueCountActual=59.6K, hasNextTimeNanosActual=557.3M, nextCallCountActual=59.6K, nextTimeNanosActual=701.1K, firstRowTimeNanosActual=153.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=88.2K, rowsDroppedActual=28.6K, selectivityActual=0.68, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.3K, avgNextNanosActual=12, leftRowsConsumedActual=73.9K, rightRowsConsumedActual=14.3K, overlapRowsActual=14.3K) +│ ║ ├── Filter (resultSizeActual=73.9K, hasNextCallCountActual=73.9K, hasNextTrueCountActual=73.9K, hasNextTimeNanosActual=346.1M, nextCallCountActual=73.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=73.9K, sourceRowsFilteredActual=38.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=18.2K, exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, openCountActual=1, exprTrueCountActual=73.9K, lastRowTimeNanosActual=568.6M, closeCountActual=1, exprEvalTimeNanosActual=52.0M, inputRowsActual=112.0K, rowsDroppedActual=38.1K, selectivityActual=0.66, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.7K, avgNextNanosActual=14, filterRejectRateActual=0.34) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, exprTrueCountActual=73.9K, exprEvalTimeNanosActual=44.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="100"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=285.9M, nextCallCountActual=112.0K, nextTimeNanosActual=859.8K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, firstRowTimeNanosActual=16.6K, leftRowsWithMatchActual=112.0K, openCountActual=1, lastRowTimeNanosActual=568.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=7.67, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.54, stddevActual=0.73, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=224.1K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=10.1M, nextCallCountActual=112.0K, nextTimeNanosActual=6.1M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=568.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=55, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=276.7K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=50.7M, nextCallCountActual=112.0K, nextTimeNanosActual=6.6M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.5K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=77.3M, nextCallCountActual=112.0K, nextTimeNanosActual=17.2M, firstRowTimeNanosActual=1.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.6K, closeCountActual=112.0K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=345, avgNextNanosActual=154) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=48.2M, nextCallCountActual=112.0K, nextTimeNanosActual=7.6M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.4K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=68, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K, resultSizeActual=14.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=14.3K, inputRowsActual=126.3K, rowsDroppedActual=112.0K, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=14.3K, avgRightRowsPerLeftActual=0.13, joinOutputPerLeftActual=0.13) +│ ║ ╠══ StatementPattern [index: psoc] (costEstimate=112.1K, resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.4M, nextCallCountActual=112.0K, nextTimeNanosActual=3.8M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=26.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=35, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Filter (new scope) (resultSizeActual=14.3K, hasNextCallCountActual=14.3K, hasNextTrueCountActual=14.3K, hasNextTimeNanosActual=62.7M, nextCallCountActual=14.3K, nextTimeNanosActual=228.8K, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=14.3K, sourceRowsFilteredActual=97.7K, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.4K, exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, openCountActual=1, exprTrueCountActual=14.3K, lastRowTimeNanosActual=65.5M, closeCountActual=1, exprEvalTimeNanosActual=42.4M, inputRowsActual=112.0K, rowsDroppedActual=97.7K, selectivityActual=0.13, expansionFactorActual=0.13, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=16, filterRejectRateActual=0.87) [right] +│ ║ ├── Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, exprTrueCountActual=14.3K, exprEvalTimeNanosActual=35.2M, hasNextFalseCountActual=0) +│ ║ │ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="180"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=8.1M, nextCallCountActual=112.0K, nextTimeNanosActual=4.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=19.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=73, avgNextNanosActual=44, indexHitRateActual=1.00) +│ ║ s: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="100"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=meter) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ │ │ o: Var (name=load) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ ║ s: Var (name=load) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optValue) +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) +│ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] +│ ║ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ o: Var (name=load2) (bindingState=unbound) +│ ║ ╚══ Filter (new scope) (plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter) [right] +│ ║ ├── Compare (>) +│ ║ │ Var (name=value2) (bindingState=bound) +│ ║ │ ValueConstant (value="180"^^) +│ ║ └── StatementPattern (resultSizeEstimate=112.1K) +│ ║ s: Var (name=load2) (bindingState=unbound) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ o: Var (name=value2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=meter) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=meter) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a . +?meter ?load . +OPTIONAL { +?load ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 100) +MINUS { +?meter ?load2 . +{ +{ +?load2 ?value2 . +FILTER (?value2 > 180) +} +} +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 278 ms +Warmup execution 1/7 +Warmup execution 2/7 +Warmup execution 3/7 +Warmup execution 4/7 +Warmup execution 5/7 +Warmup execution 6/7 +Warmup execution 7/7 +Fastest execution time: 149 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=267.1M, openCountActual=1, lastRowTimeNanosActual=267.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=1.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=959, firstRowTimeNanosActual=267.1M, openCountActual=1, lastRowTimeNanosActual=267.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=959) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=10, firstRowTimeNanosActual=267.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=267.1M, maxGroupSizeActual=10, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=10, rowsDroppedActual=9, selectivityActual=0.10, expansionFactorActual=0.10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=542) +│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=267.0M, nextCallCountActual=10, nextTimeNanosActual=250, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=53.7K, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=267.0M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=26.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=22.3M, avgNextNanosActual=25, filterRejectRateActual=0) +│ ║ ├── Exists (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=25.3K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=0, hasNextCallCountActual=10, hasNextTrueCountActual=10, hasNextTimeNanosActual=3.5K, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, plannedIndexName=spoc, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=458, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) +│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=other) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=267.0M, nextCallCountActual=10, nextTimeNanosActual=418, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=10, firstRowTimeNanosActual=36.0K, leftRowsWithMatchActual=5, openCountActual=1, lastRowTimeNanosActual=267.0M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=15, rowsDroppedActual=5, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.49, stddevActual=0.70, confidenceScoreActual=0.54, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=24.3M, avgNextNanosActual=42, leftRowsProbedActual=5, rightRowsScannedActual=10, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K, resultSizeActual=5, joinRightIteratorsCreatedActual=37.5K, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=37.5K, rowsDroppedActual=37.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=34.7K, stddevActual=186, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K, resultSizeActual=37.5K, joinRightIteratorsCreatedActual=18.7K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=37.5K, inputRowsActual=56.3K, rowsDroppedActual=18.7K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=37.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=18.8K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=18.7K, nextTimeNanosActual=720.6K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=18.7K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=267.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=128, avgNextNanosActual=38, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=37.5K, hasNextCallCountActual=56.3K, hasNextTrueCountActual=37.5K, hasNextTimeNanosActual=16.0M, nextCallCountActual=37.5K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=56.3K, sourceRowsMatchedActual=37.5K, sourceRowsFilteredActual=18.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=12.8K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=285, avgNextNanosActual=43, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=1.9K, resultSizeActual=5, hasNextCallCountActual=37.5K, hasNextTrueCountActual=5, hasNextTimeNanosActual=141.4M, nextCallCountActual=5, nextTimeNanosActual=752, sourceRowsScannedActual=37.5K, sourceRowsMatchedActual=5, sourceRowsFilteredActual=37.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.5K, exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, openCountActual=37.5K, exprTrueCountActual=5, lastRowTimeNanosActual=3.4K, closeCountActual=37.5K, exprEvalTimeNanosActual=26.4M, inputRowsActual=37.5K, rowsDroppedActual=37.5K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=150, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=5, shortCircuitCountActual=4, exprEvalTimeNanosActual=23.9M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=4, exprEvalTimeNanosActual=19.7M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=37.5K, hasNextCallCountActual=75.0K, hasNextTrueCountActual=37.5K, hasNextTimeNanosActual=19.9M, nextCallCountActual=37.5K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=75.0K, sourceRowsMatchedActual=37.5K, sourceRowsFilteredActual=37.5K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=37.5K, openCountActual=37.5K, lastRowTimeNanosActual=1.1K, closeCountActual=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.5K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=266, avgNextNanosActual=40, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=10, hasNextCallCountActual=25, hasNextTrueCountActual=20, hasNextTimeNanosActual=3.2K, nextCallCountActual=10, nextTimeNanosActual=413, sourceRowsScannedActual=15, sourceRowsMatchedActual=10, sourceRowsFilteredActual=5, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=6.6K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=132, avgNextNanosActual=41, indexHitRateActual=0.67) [right] +│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=other2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=37.5K) +│ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ │ o: Var (name=other) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound) +│ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Substation 0") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Substation 1") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ s: Var (name=substation) (bindingState=bound) +│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ ║ o: Var (name=name) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] +│ ║ s: Var (name=line) (bindingState=bound) +│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ o: Var (name=other2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?substation . +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +OPTIONAL { +?line ?other2 . +} +FILTER EXISTS { +?line ?other . +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 73 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 39 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=68.2M, openCountActual=1, lastRowTimeNanosActual=68.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=1.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=68.3M, openCountActual=1, lastRowTimeNanosActual=68.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=625) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=47, firstRowTimeNanosActual=68.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=68.3M, maxGroupSizeActual=47, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=47, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=47, rowsDroppedActual=46, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=375) +│ ╠══ Filter (resultSizeActual=47, hasNextCallCountActual=49, hasNextTrueCountActual=48, hasNextTimeNanosActual=68.2M, nextCallCountActual=47, nextTimeNanosActual=581, sourceRowsScannedActual=47, sourceRowsMatchedActual=47, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=1.2M, exprEvalCountActual=47, openCountActual=1, exprTrueCountActual=47, lastRowTimeNanosActual=68.2M, closeCountActual=1, exprEvalTimeNanosActual=191.6K, inputRowsActual=47, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=1.4M, avgNextNanosActual=12, filterRejectRateActual=0) +│ ║ ├── Not (exprEvalCountActual=47, exprTrueCountActual=47, exprEvalTimeNanosActual=188.0K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=183.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=47, hasNextTimeNanosActual=108.1K, sourceRowsScannedActual=47, sourceRowsFilteredActual=47, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, exprEvalCountActual=47, exprFalseCountActual=47, openCountActual=47, lastRowTimeNanosActual=2.0K, closeCountActual=47, exprEvalTimeNanosActual=10.1K, inputRowsActual=47, rowsDroppedActual=47, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.3K, filterRejectRateActual=1.00) +│ ║ │ ╠══ Compare (<) (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=7.0K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=47, hasNextCallCountActual=94, hasNextTrueCountActual=47, hasNextTimeNanosActual=19.8K, nextCallCountActual=47, nextTimeNanosActual=1.7K, sourceRowsScannedActual=94, sourceRowsMatchedActual=47, sourceRowsFilteredActual=47, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=47, openCountActual=47, lastRowTimeNanosActual=750, closeCountActual=47, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=211, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M, resultSizeActual=47, joinRightIteratorsCreatedActual=9.3K, joinRightBindingsConsumedActual=47, inputRowsActual=9.4K, rowsDroppedActual=9.3K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=20, stddevActual=4.50, confidenceScoreActual=0.27, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=47) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=9.3K, joinType=Cartesian product, inputRowsActual=9.3K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.4K, nextCallCountActual=1, nextTimeNanosActual=250, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.5K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=68.2M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=730, avgNextNanosActual=250) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=978.4K, nextCallCountActual=9.3K, nextTimeNanosActual=748.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=cap2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ Var (name=generator) +│ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ ║ Var (name=cap2) +│ ║ ║ , firstRowTimeNanosActual=5.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=68.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=80, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=470, resultSizeActual=47, hasNextCallCountActual=9.4K, hasNextTrueCountActual=47, hasNextTimeNanosActual=41.2M, nextCallCountActual=47, nextTimeNanosActual=748, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=47, sourceRowsFilteredActual=9.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.4K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=9.3K, exprTrueCountActual=47, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, exprEvalTimeNanosActual=8.6M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=16, filterRejectRateActual=0.99) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=47, exprEvalTimeNanosActual=8.1M, hasNextFalseCountActual=0) +│ ║ │ Var (name=capacity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=474.2K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="800"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=502.0K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="900"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=499.4K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=8.4M, nextCallCountActual=9.3K, nextTimeNanosActual=306.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.1K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=452, avgNextNanosActual=33, indexHitRateActual=0.50) +│ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=capacity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=cap2) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=generator) (bindingState=bound) +│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ o: Var (name=cap2) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=cap2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ Var (name=generator) +│ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ ║ Var (name=cap2) +│ ║ ║ ) +│ ║ ║ s: Var (name=generator) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=470, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=capacity) (bindingState=bound) +│ ║ │ ValueConstant (value="700"^^) +│ ║ │ ValueConstant (value="800"^^) +│ ║ │ ValueConstant (value="900"^^) +│ ║ └── StatementPattern (resultSizeEstimate=9.4K) +│ ║ s: Var (name=generator) (bindingState=bound) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ o: Var (name=capacity) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=generator) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=generator) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +VALUES ?threshold { 700 } +?generator a . +?generator ?capacity . +FILTER (?capacity IN (700, 800, 900)) +FILTER NOT EXISTS { +?generator ?cap2 . +FILTER (?cap2 < ?threshold) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 171 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 106 ms + +Projection (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.6M, nextCallCountActual=9.3K, nextTimeNanosActual=1.3M, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=147) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "substation" (hasNextFalseCountActual=0) +║ ProjectionElem "assetCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.4M, nextCallCountActual=9.3K, nextTimeNanosActual=878.7K, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=94) +├── Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.2M, nextCallCountActual=9.3K, nextTimeNanosActual=506.0K, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=54) +│ ╠══ Filter (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=156.9M, nextCallCountActual=9.3K, nextTimeNanosActual=104.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=154.4M, exprEvalCountActual=9.3K, openCountActual=1, exprTrueCountActual=9.3K, lastRowTimeNanosActual=159.8M, closeCountActual=1, exprEvalTimeNanosActual=1.7M, inputRowsActual=9.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) +│ ║ └── Group (substation) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=154.5M, nextCallCountActual=9.3K, nextTimeNanosActual=236.2K, aggregateEvalCountActual=74.7K, firstRowTimeNanosActual=154.4M, groupsCreatedActual=9.3K, openCountActual=1, lastRowTimeNanosActual=159.8M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=3.99, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=37.3K, rowsDroppedActual=28.0K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.5K, avgNextNanosActual=25) +│ ║ Filter (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=113.3M, nextCallCountActual=37.3K, nextTimeNanosActual=370.4K, sourceRowsScannedActual=37.3K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=33.2K, exprEvalCountActual=37.3K, openCountActual=1, exprTrueCountActual=37.3K, lastRowTimeNanosActual=152.1M, closeCountActual=1, exprEvalTimeNanosActual=4.0M, inputRowsActual=37.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=9.91, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=37.3K, exprTrueCountActual=37.3K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optSub) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=106.5M, nextCallCountActual=37.3K, nextTimeNanosActual=301.8K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=37.3K, firstRowTimeNanosActual=25.8K, leftRowsWithMatchActual=37.3K, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=74.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=8.08, leftRowsProbedActual=37.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=53.3M, nextCallCountActual=37.3K, nextTimeNanosActual=813.9K, firstRowTimeNanosActual=23.0K, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4K, avgNextNanosActual=22, leftRowsConsumedActual=28.0K, rightRowsConsumedActual=9.3K, leftRowsOutputContributionActual=28.0K, rightRowsOutputContributionActual=9.3K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.6M, nextCallCountActual=28.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=108.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=56, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=17.4M, nextCallCountActual=28.0K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=2.5K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=311, avgNextNanosActual=62, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=855.0K, nextCallCountActual=9.3K, nextTimeNanosActual=496.0K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=108.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ ║ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=6.5M, nextCallCountActual=9.3K, nextTimeNanosActual=594.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P], firstRowTimeNanosActual=959, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=348, avgNextNanosActual=63, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=27.0M, nextCallCountActual=37.3K, nextTimeNanosActual=5.5M, firstRowTimeNanosActual=666, openCountActual=37.3K, lastRowTimeNanosActual=3.0K, closeCountActual=37.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=362, avgNextNanosActual=149) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=17.1M, nextCallCountActual=37.3K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=74.7K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=37.3K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.8K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=62, indexHitRateActual=0.50) +│ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optSub) (hasNextFalseCountActual=0) +│ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (assetCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (assetCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (substation) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optSub) (bindingState=bound) +│ ║ │ Var (name=asset) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=asset) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) +│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] +│ ║ ║ s: Var (name=asset) (bindingState=bound) +│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ ║ o: Var (name=substation) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) +│ ║ │ s: Var (name=asset) (bindingState=bound) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ o: Var (name=substation) (bindingState=bound) +│ ║ └── ExtensionElem (optSub) +│ ║ Var (name=substation) (bindingState=bound) +│ ║ GroupElem (_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345) +│ ║ Count +│ ║ Var (name=asset) (bindingState=bound) +│ ║ GroupElem (assetCount) +│ ║ Count (Distinct) +│ ║ Var (name=asset) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345) +│ Count +│ Var (name=asset) (bindingState=unbound) +└── ExtensionElem (assetCount) +Count (Distinct) +Var (name=asset) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ +?asset a . +?asset ?substation . +} +UNION +{ +?asset a . +?asset ?substation . +} +OPTIONAL { +?asset ?substation . +BIND(?substation AS ?optSub) +} +FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + + +Theme: ELECTRICAL_GRID z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 253 ms +Warmup execution 1/7 +Warmup execution 2/7 +Warmup execution 3/7 +Warmup execution 4/7 +Warmup execution 5/7 +Warmup execution 6/7 +Warmup execution 7/7 +Fastest execution time: 135 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=244.5M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=244.5M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=1000) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=834, aggregateEvalCountActual=6, firstRowTimeNanosActual=244.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=244.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=834) +│ ╠══ Difference (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=244.5M, nextCallCountActual=6, nextTimeNanosActual=208, firstRowTimeNanosActual=42.8M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=30.6M, avgNextNanosActual=35, leftRowsConsumedActual=6, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=201.7M, nextCallCountActual=6, nextTimeNanosActual=208, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=26.1K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=13.4K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=28.8M, avgNextNanosActual=35, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=12.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.5K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=375, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=424, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=6, joinRightIteratorsCreatedActual=28.0K, joinRightBindingsConsumedActual=6, inputRowsActual=28.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=14.1K, stddevActual=119, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=3.1M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ │ ║ Var (name=transformer) +│ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ │ ║ Var (name=meter) +│ ║ │ │ ║ , firstRowTimeNanosActual=7.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=41, indexHitRateActual=1.00) +│ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=19.4M, nextCallCountActual=28.0K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P], firstRowTimeNanosActual=791, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=6.0K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=347, avgNextNanosActual=43, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=1.4K, resultSizeActual=6, hasNextCallCountActual=28.0K, hasNextTrueCountActual=6, hasNextTimeNanosActual=94.2M, nextCallCountActual=6, nextTimeNanosActual=166, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=6, sourceRowsFilteredActual=28.0K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, openCountActual=28.0K, exprTrueCountActual=6, lastRowTimeNanosActual=3.0K, closeCountActual=28.0K, exprEvalTimeNanosActual=12.3M, inputRowsActual=28.0K, rowsDroppedActual=28.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=6, shortCircuitCountActual=2, exprEvalTimeNanosActual=10.5M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=7.4M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=4, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=12.3M, nextCallCountActual=28.0K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=834, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=42.7M, sourceRowsScannedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=112.0K, predicateErrorCountActual=112.0K, openCountActual=1, lastRowTimeNanosActual=42.7M, closeCountActual=1, exprEvalTimeNanosActual=25.0M, inputRowsActual=112.0K, rowsDroppedActual=112.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=42.8M, filterRejectRateActual=1.00) +│ ║ ╠══ Compare (=) (exprEvalCountActual=112.0K, exprErrorCountActual=112.0K, exprEvalTimeNanosActual=11.1M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.3M, nextCallCountActual=112.0K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=42.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=36, indexHitRateActual=1.00) +│ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ ║ o: Var (name=meter) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ │ ║ Var (name=transformer) +│ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ │ ║ Var (name=meter) +│ ║ │ │ ║ ) +│ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=transformer) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ │ o: Var (name=substation) (bindingState=unbound) +│ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Substation 0") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="Substation 1") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=substation) (bindingState=bound) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=load) (bindingState=bound) +│ ║ ║ Var (name=substation) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) +│ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ o: Var (name=load) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=transformer) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=transformer) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?transformer a . +?transformer ?substation . +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +FILTER EXISTS { +?transformer ?meter . +} +MINUS { +?meter ?load . +FILTER (?load = ?substation) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 38 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 21 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.2M) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "substation" (hasNextFalseCountActual=0) +║ ProjectionElem "transformerCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) +│ ║ ├── Compare (>) (hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) +│ ║ └── Group (substation) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M, groupsCreatedActual=0) +│ ║ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=9.3K, exprErrorCountActual=9.3K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTransformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=7.7M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=3.4M, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, plannedIndexName=psoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=375, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=368, indexHitRateActual=1.00) +│ ║ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=19.6M, nextCallCountActual=9.3K, nextTimeNanosActual=137.1K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, firstRowTimeNanosActual=14.3K, openCountActual=1, emptyRightProbeCountActual=9.3K, lastRowTimeNanosActual=31.0M, closeCountActual=1, inputRowsActual=9.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=15, leftRowsProbedActual=9.3K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=9.3K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=929.2K, nextCallCountActual=9.3K, nextTimeNanosActual=460.0K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=4.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=31.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=421.7K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.6K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=45, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=4.8M, openCountActual=9.3K, lastRowTimeNanosActual=583, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=518) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=2.8M, sourceRowsScannedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=416, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=307, indexHitRateActual=0) +│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optTransformer) (hasNextFalseCountActual=0) +│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (transformerCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (transformerCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (substation) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTransformer) (bindingState=bound) +│ ║ │ ║ Var (name=substation) (bindingState=bound) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ s: Var (name=transformer) (bindingState=bound) +│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ o: Var (name=meter) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ s: Var (name=substation) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=substation) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) +│ ║ │ s: Var (name=substation) (bindingState=bound) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ o: Var (name=transformer) (bindingState=unbound) +│ ║ └── ExtensionElem (optTransformer) +│ ║ Var (name=transformer) (bindingState=bound) +│ ║ GroupElem (_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0) +│ ║ Count +│ ║ Var (name=transformer) (bindingState=bound) +│ ║ GroupElem (transformerCount) +│ ║ Count (Distinct) +│ ║ Var (name=transformer) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0) +│ Count +│ Var (name=transformer) (bindingState=unbound) +└── ExtensionElem (transformerCount) +Count (Distinct) +Var (name=transformer) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation ?name . +?substation a . +OPTIONAL { +?substation ?transformer . +BIND(?transformer AS ?optTransformer) +} +FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + + +Theme: ELECTRICAL_GRID z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 6 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=584) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=292) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=84, firstRowTimeNanosActual=9.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=84, avgGroupSizeActual=0) +│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=0, joinRightIteratorsCreatedActual=58, joinLeftBindingsConsumedActual=58, inputRowsActual=58, rowsDroppedActual=58, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=58, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] +│ ║ │ ║ ├── Filter (resultSizeActual=58, hasNextCallCountActual=59, hasNextTrueCountActual=58, hasNextTimeNanosActual=9.3M, nextCallCountActual=58, nextTimeNanosActual=1.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=58, sourceRowsFilteredActual=9.3K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=56.5K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=58, lastRowTimeNanosActual=9.4M, closeCountActual=1, exprEvalTimeNanosActual=7.8M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=159.1K, avgNextNanosActual=24, filterRejectRateActual=0.99) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=58, exprEvalTimeNanosActual=7.3M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ValueConstant (value="500"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=443.4K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=457.3K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=437.9K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=602.2K, nextCallCountActual=9.3K, nextTimeNanosActual=348.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator +│ ║ │ ║ │ Var (name=cap) +│ ║ │ ║ │ ValueConstant (value="500"^^) +│ ║ │ ║ │ ValueConstant (value="600"^^) +│ ║ │ ║ │ ValueConstant (value="700"^^) +│ ║ │ ║ │ , firstRowTimeNanosActual=3.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ │ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=18.8K, resultSizeActual=0, hasNextCallCountActual=58, hasNextTimeNanosActual=37.1K, sourceRowsScannedActual=58, sourceRowsFilteredActual=58, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[S, O, P], indexLookupCountActual=58, openCountActual=58, lastRowTimeNanosActual=625, closeCountActual=58, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58, nextPerHasNextRatioActual=0, avgHasNextNanosActual=641, indexHitRateActual=0) [right] +│ ║ │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) +│ ║ ╠══ Compare (<) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ValueConstant (value="500"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── LeftJoin +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] +│ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) +│ ║ │ ║ │ ║ ValueConstant (value="500"^^) +│ ║ │ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ║ │ ║ ValueConstant (value="700"^^) +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator +│ ║ │ ║ │ Var (name=cap) +│ ║ │ ║ │ ValueConstant (value="500"^^) +│ ║ │ ║ │ ValueConstant (value="600"^^) +│ ║ │ ║ │ ValueConstant (value="700"^^) +│ ║ │ ║ │ ) +│ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=line) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] +│ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ │ o: Var (name=substation) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) +│ ║ ╠══ Compare (<) +│ ║ ║ Var (name=cap2) (bindingState=bound) +│ ║ ║ ValueConstant (value="500"^^) +│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ s: Var (name=line) (bindingState=unbound) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ o: Var (name=cap2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line ?cap . +FILTER (?cap IN (500, 600, 700)) +?line a . +OPTIONAL { +?line ?substation . +} +MINUS { +?line ?cap2 . +FILTER (?cap2 < 500) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 737 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 457 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=4.0K, firstRowTimeNanosActual=720.7M, openCountActual=1, lastRowTimeNanosActual=720.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=4.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=2.1K, firstRowTimeNanosActual=720.7M, openCountActual=1, lastRowTimeNanosActual=720.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=2.2K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=720.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=720.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=875, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=224.1K, rowsDroppedActual=224.1K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=224.1K, exprFalseCountActual=224.1K, exprEvalTimeNanosActual=75.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="200"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (hasNextFalseCountActual=0) +│ ║ │ Exists (hasNextFalseCountActual=0) +│ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) +│ ║ │ ├── Compare (<) (hasNextFalseCountActual=0) +│ ║ │ │ Var (name=low) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="50"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=low) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=619.8M, nextCallCountActual=224.1K, nextTimeNanosActual=2.1M, joinRightIteratorsCreatedActual=224.1K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=224.1K, firstRowTimeNanosActual=15.3K, leftRowsWithMatchActual=224.1K, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=448.2K, rowsDroppedActual=224.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=9.52, leftRowsProbedActual=224.1K, rightRowsScannedActual=224.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=393.2M, nextCallCountActual=224.1K, nextTimeNanosActual=3.7M, firstRowTimeNanosActual=14.2K, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, sampleCountActual=2, varianceActual=0.10, stddevActual=0.32, confidenceScoreActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=17, leftRowsConsumedActual=112.0K, rightRowsConsumedActual=112.0K, leftRowsOutputContributionActual=112.0K, rightRowsOutputContributionActual=112.0K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.54, stddevActual=0.73, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=9.6M, nextCallCountActual=112.0K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=294.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=45, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=276.7K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=48.7M, nextCallCountActual=112.0K, nextTimeNanosActual=5.8M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.6K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=52, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.34, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=112.0K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.57, stddevActual=0.75, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=12.2M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=294.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=280.9K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=56.3M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O], firstRowTimeNanosActual=500, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.1K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=251, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=205.4K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=53.3M, nextCallCountActual=112.0K, nextTimeNanosActual=5.3M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.1K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=238, avgNextNanosActual=48, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=224.1K, hasNextCallCountActual=448.2K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=94.0M, nextCallCountActual=224.1K, nextTimeNanosActual=11.6M, sourceRowsScannedActual=448.2K, sourceRowsMatchedActual=224.1K, sourceRowsFilteredActual=224.1K, plannedIndexName=spoc, firstRowTimeNanosActual=833, indexLookupCountActual=224.1K, openCountActual=224.1K, lastRowTimeNanosActual=1.1K, closeCountActual=224.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=224.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=52, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optValue) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="200"^^) +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern) +│ ║ │ ├── Compare (<) +│ ║ │ │ Var (name=low) (bindingState=bound) +│ ║ │ │ ValueConstant (value="50"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ s: Var (name=load) (bindingState=bound) +│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ │ o: Var (name=low) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=meter) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ │ o: Var (name=load) (bindingState=unbound) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] +│ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ ║ o: Var (name=load) (bindingState=bound) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=meter) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] +│ ║ s: Var (name=load) (bindingState=bound) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ o: Var (name=optValue) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=meter) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=meter) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ +?meter a . +?meter ?load . +} +UNION +{ +?load ?value . +?meter ?load . +?meter a . +} +OPTIONAL { +?load ?optValue . +} +FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + + +Theme: PHARMA z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 42 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 25 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=347.3K, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=349.3K, openCountActual=1, lastRowTimeNanosActual=353.6K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=173.7K, avgNextNanosActual=625) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=346.8K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=352.9K, openCountActual=1, lastRowTimeNanosActual=355.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=173.4K, avgNextNanosActual=292) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=345.2K, nextCallCountActual=1, nextTimeNanosActual=167, aggregateEvalCountActual=18, firstRowTimeNanosActual=353.0K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=354.0K, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=172.6K, avgNextNanosActual=167) +│ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=296.7K, nextCallCountActual=18, nextTimeNanosActual=332, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=43.7K, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=314.6K, closeCountActual=1, exprEvalTimeNanosActual=13.3K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=14.8K, avgNextNanosActual=18, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=10.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=14.6K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=275.5K, nextCallCountActual=18, nextTimeNanosActual=628, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=39.5K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=305.6K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=14.5K, avgNextNanosActual=35, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=18, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=18, inputRowsActual=20, rowsDroppedActual=2, expansionFactorActual=0.90, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=18, avgRightRowsPerLeftActual=0.90, joinOutputPerLeftActual=0.90) [left] +│ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=626, nextCallCountActual=2, nextTimeNanosActual=126, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=303.1K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=63) [left] +│ ║ ║ └── Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=18, hasNextTimeNanosActual=214.0K, nextCallCountActual=18, nextTimeNanosActual=543, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=9.7K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=2, exprTrueCountActual=18, lastRowTimeNanosActual=122.0K, closeCountActual=2, exprEvalTimeNanosActual=56.4K, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=10.7K, avgNextNanosActual=30, filterRejectRateActual=0.31) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=52.9K, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=31.9K, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=17.2K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=8.4K, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) +│ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=14, stddevActual=3.79, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=26, inputRowsActual=34, rowsDroppedActual=8, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=18, stddevActual=4.21, confidenceScoreActual=0.28, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=8, inputRowsActual=16, rowsDroppedActual=8, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=8, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=8.7K, nextCallCountActual=8, nextTimeNanosActual=2.2K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O], firstRowTimeNanosActual=3.3K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=120.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=879, avgNextNanosActual=281, indexHitRateActual=0.09) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=8.5K, nextCallCountActual=8, nextTimeNanosActual=625, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.1K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=27.2K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=531, avgNextNanosActual=78, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=5.7K, nextCallCountActual=26, nextTimeNanosActual=1.6K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=417, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=25.5K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=169, avgNextNanosActual=62, indexHitRateActual=0.76) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=12.6K, nextCallCountActual=26, nextTimeNanosActual=1.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=7.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=243, avgNextNanosActual=70, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=6.5K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=70, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.9K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=5.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=74, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.6K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] +│ ║ ║ Compare (<) +│ ║ ║ Var (name=p) +│ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ Compare (>) +│ ║ ║ Var (name=effect) +│ ║ ║ ValueConstant (value="0.7"^^) +│ ║ ║ , firstRowTimeNanosActual=417, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=4.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=64, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=17.2K, nextCallCountActual=18, nextTimeNanosActual=3.2K, firstRowTimeNanosActual=541, openCountActual=18, lastRowTimeNanosActual=2.5K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=480, avgNextNanosActual=178) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=8.4K, nextCallCountActual=18, nextTimeNanosActual=1.4K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=1.7K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=79, indexHitRateActual=0.50) +│ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0) +│ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optMarker) (bindingState=bound) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] +│ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (<) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) +│ ║ ║ ║ └── Compare (>) +│ ║ ║ ║ Var (name=effect) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="0.7"^^) +│ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) +│ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=result) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ ║ │ o: Var (name=p) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] +│ ║ ║ Compare (<) +│ ║ ║ Var (name=p) +│ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ Compare (>) +│ ║ ║ Var (name=effect) +│ ║ ║ ValueConstant (value="0.7"^^) +│ ║ ║ ) +│ ║ ║ s: Var (name=result) (bindingState=bound) +│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ ║ o: Var (name=effect) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=result) (bindingState=bound) +│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ │ o: Var (name=marker) (bindingState=unbound) +│ ║ └── ExtensionElem (optMarker) +│ ║ Var (name=marker) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { } +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?drug . +?arm ?result . +?result ?p . +?result ?effect . +FILTER ((?p < 0.05) || (?effect > 0.7)) +OPTIONAL { +?result ?marker . +BIND(?marker AS ?optMarker) +} +FILTER (?optMarker != ) +} + + +Theme: PHARMA z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 16 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 8 ms + +Projection (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=17.1K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.3K, avgNextNanosActual=214) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "combo" (hasNextFalseCountActual=0) +║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=11.9K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.2K, avgNextNanosActual=149) +├── Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.2K, avgNextNanosActual=80) +│ ╠══ Filter (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=1.5K, sourceRowsScannedActual=134, sourceRowsMatchedActual=80, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=2.9M, exprEvalCountActual=134, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=80, lastRowTimeNanosActual=3.0M, closeCountActual=1, exprEvalTimeNanosActual=24.2K, inputRowsActual=134, rowsDroppedActual=54, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.1K, avgNextNanosActual=20, filterRejectRateActual=0.40) +│ ║ ├── Compare (>=) (exprEvalCountActual=134, exprFalseCountActual=54, exprTrueCountActual=80, exprEvalTimeNanosActual=14.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ └── Group (combo) (resultSizeActual=134, hasNextCallCountActual=135, hasNextTrueCountActual=134, hasNextTimeNanosActual=2.9M, nextCallCountActual=134, nextTimeNanosActual=2.6K, aggregateEvalCountActual=776, firstRowTimeNanosActual=2.9M, groupsCreatedActual=134, openCountActual=1, lastRowTimeNanosActual=3.0M, maxGroupSizeActual=7, closeCountActual=1, varsAddedActual=2, varsDroppedActual=11, avgGroupSizeActual=2.90, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=388, rowsDroppedActual=254, selectivityActual=0.35, expansionFactorActual=0.35, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=21.9K, avgNextNanosActual=20) +│ ║ Filter (resultSizeActual=388, hasNextCallCountActual=390, hasNextTrueCountActual=389, hasNextTimeNanosActual=2.6M, nextCallCountActual=388, nextTimeNanosActual=5.0K, sourceRowsScannedActual=593, sourceRowsMatchedActual=388, sourceRowsFilteredActual=205, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=30.3K, exprEvalCountActual=593, exprFalseCountActual=205, openCountActual=1, exprTrueCountActual=388, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=176.5K, inputRowsActual=593, rowsDroppedActual=205, selectivityActual=0.65, expansionFactorActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=6.7K, avgNextNanosActual=13, filterRejectRateActual=0.35) +│ ║ ├── ListMemberOperator (exprEvalCountActual=593, exprFalseCountActual=205, exprTrueCountActual=388, exprEvalTimeNanosActual=123.1K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optSeverity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Mild") (exprEvalCountActual=593, exprTrueCountActual=593, exprEvalTimeNanosActual=26.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Moderate") (exprEvalCountActual=385, exprTrueCountActual=385, exprEvalTimeNanosActual=16.5K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=593, hasNextCallCountActual=594, hasNextTrueCountActual=593, hasNextTimeNanosActual=2.3M, nextCallCountActual=593, nextTimeNanosActual=8.7K, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=593, firstRowTimeNanosActual=24.2K, leftRowsWithMatchActual=285, openCountActual=1, lastRowTimeNanosActual=2.8M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=878, rowsDroppedActual=285, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, leftRowsProbedActual=285, rightRowsScannedActual=593, avgRightRowsPerLeftActual=2.08, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.08, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=285, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=285, inputRowsActual=570, rowsDroppedActual=285, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.33, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=285, rightRowsScannedActual=285, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281, resultSizeActual=285, joinRightIteratorsCreatedActual=141, joinLeftBindingsConsumedActual=141, joinRightBindingsConsumedActual=285, inputRowsActual=426, rowsDroppedActual=141, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=1.36, stddevActual=1.16, confidenceScoreActual=0.48, hasNextFalseCountActual=0, leftRowsProbedActual=141, rightRowsScannedActual=285, avgRightRowsPerLeftActual=2.02, joinOutputPerLeftActual=2.02) [left] +│ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, resultSizeActual=141, hasNextCallCountActual=142, hasNextTrueCountActual=141, hasNextTimeNanosActual=563.4K, nextCallCountActual=141, nextTimeNanosActual=2.1K, sourceRowsScannedActual=477, sourceRowsMatchedActual=141, sourceRowsFilteredActual=336, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, plannedLookupComponents=[P], firstRowTimeNanosActual=12.9K, exprEvalCountActual=477, exprFalseCountActual=336, openCountActual=1, exprTrueCountActual=141, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=453.1K, inputRowsActual=477, rowsDroppedActual=336, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, filterRejectRateActual=0.70) [left] +│ ║ ║ │ ║ ├── Compare (>) (exprEvalCountActual=477, exprFalseCountActual=336, exprTrueCountActual=141, exprEvalTimeNanosActual=421.8K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=score) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=42.9K, nextCallCountActual=477, nextTimeNanosActual=25.6K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=54, indexHitRateActual=1.00) +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=285, hasNextCallCountActual=426, hasNextTrueCountActual=285, hasNextTimeNanosActual=101.1K, nextCallCountActual=285, nextTimeNanosActual=18.7K, sourceRowsScannedActual=426, sourceRowsMatchedActual=285, sourceRowsFilteredActual=141, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=141, openCountActual=141, lastRowTimeNanosActual=19.7K, closeCountActual=141, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=141, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=237, avgNextNanosActual=66, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=477, resultSizeActual=285, hasNextCallCountActual=570, hasNextTrueCountActual=285, hasNextTimeNanosActual=128.4K, nextCallCountActual=285, nextTimeNanosActual=18.2K, sourceRowsScannedActual=570, sourceRowsMatchedActual=285, sourceRowsFilteredActual=285, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=5.0K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=64, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=593, hasNextCallCountActual=1.4K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=1.0M, nextCallCountActual=593, nextTimeNanosActual=29.5K, firstRowTimeNanosActual=2.1K, openCountActual=285, lastRowTimeNanosActual=4.0K, closeCountActual=285, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=708, avgNextNanosActual=50) [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M, resultSizeActual=593, joinRightIteratorsCreatedActual=593, joinLeftBindingsConsumedActual=593, joinRightBindingsConsumedActual=593, inputRowsActual=1.1K, rowsDroppedActual=593, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=54, stddevActual=7.34, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=593, rightRowsScannedActual=593, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=593, hasNextCallCountActual=878, hasNextTrueCountActual=593, hasNextTimeNanosActual=249.1K, nextCallCountActual=593, nextTimeNanosActual=32.8K, sourceRowsScannedActual=878, sourceRowsMatchedActual=593, sourceRowsFilteredActual=285, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.3K, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=3.8K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=284, avgNextNanosActual=55, indexHitRateActual=0.68) [left] +│ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267, resultSizeActual=593, hasNextCallCountActual=1.1K, hasNextTrueCountActual=593, hasNextTimeNanosActual=291.5K, nextCallCountActual=593, nextTimeNanosActual=33.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=593, sourceRowsFilteredActual=593, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=593, openCountActual=593, lastRowTimeNanosActual=1.8K, closeCountActual=593, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=593, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=sev) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optSeverity) (hasNextFalseCountActual=0) +│ ║ Var (name=sev) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (combo) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optSeverity) (bindingState=bound) +│ ║ │ ValueConstant (value="Mild") +│ ║ │ ValueConstant (value="Moderate") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] +│ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ ├── Compare (>) +│ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) +│ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) +│ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=combo) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=combo) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ s: Var (name=drug) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=sideEffect) (bindingState=bound) +│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) +│ ║ │ o: Var (name=sev) (bindingState=unbound) +│ ║ └── ExtensionElem (optSeverity) +│ ║ Var (name=sev) (bindingState=bound) +│ ║ GroupElem (_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d) +│ Count (Distinct) +│ Var (name=drug) (bindingState=unbound) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo ?score . +FILTER (?score > 0.7) +?combo ?drug . +?combo a . +OPTIONAL { +?drug ?sideEffect . +?sideEffect ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + + +Theme: PHARMA z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 75 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 41 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "target" (hasNextFalseCountActual=0) +║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, sourceRowsScannedActual=63, sourceRowsFilteredActual=63, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=63, exprFalseCountActual=63, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, exprEvalTimeNanosActual=12.0K, inputRowsActual=63, rowsDroppedActual=63, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M, filterRejectRateActual=1.00) +│ ║ ├── Compare (>) (exprEvalCountActual=63, exprFalseCountActual=63, exprEvalTimeNanosActual=5.9K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=11.0K, hasNextFalseCountActual=0) +│ ║ └── Group (target) (resultSizeActual=63, hasNextCallCountActual=64, hasNextTrueCountActual=63, hasNextTimeNanosActual=54.2M, nextCallCountActual=63, nextTimeNanosActual=1.8K, aggregateEvalCountActual=126, firstRowTimeNanosActual=54.3M, groupsCreatedActual=63, openCountActual=1, lastRowTimeNanosActual=54.3M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=848.3K, avgNextNanosActual=30) +│ ║ Filter (resultSizeActual=63, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=19.7K, rowsDroppedActual=19.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=19.7K, exprFalseCountActual=19.6K, exprTrueCountActual=134, exprEvalTimeNanosActual=9.6M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=510.5K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=342.7K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=134, exprFalseCountActual=71, exprTrueCountActual=63, exprEvalTimeNanosActual=279.1K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=0, joinRightIteratorsCreatedActual=63, joinLeftBindingsConsumedActual=63, joinRightBindingsConsumedActual=63, inputRowsActual=126, rowsDroppedActual=126, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=63, rightRowsScannedActual=63, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=134, hasNextTrueCountActual=63, hasNextTimeNanosActual=98.4K, nextCallCountActual=63, nextTimeNanosActual=4.0K, sourceRowsScannedActual=147, sourceRowsMatchedActual=63, sourceRowsFilteredActual=84, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=833, indexLookupCountActual=134, openCountActual=134, lastRowTimeNanosActual=1.9K, closeCountActual=134, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=71, nextPerHasNextRatioActual=0.47, avgHasNextNanosActual=735, avgNextNanosActual=65, indexHitRateActual=0.43) [left] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=63, hasNextTrueCountActual=63, hasNextTimeNanosActual=42.8K, nextCallCountActual=63, nextTimeNanosActual=3.7K, sourceRowsScannedActual=63, sourceRowsMatchedActual=63, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O], firstRowTimeNanosActual=750, indexLookupCountActual=63, openCountActual=63, lastRowTimeNanosActual=1.2K, closeCountActual=63, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=680, avgNextNanosActual=59, indexHitRateActual=1.00) [right] +│ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=19.7K, hasNextCallCountActual=19.7K, hasNextTrueCountActual=19.7K, hasNextTimeNanosActual=41.8M, nextCallCountActual=19.7K, nextTimeNanosActual=243.5K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.7K, firstRowTimeNanosActual=28.9K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=54.2M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.7K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=12, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.7K, avgRightRowsPerLeftActual=1.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.99, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=20.0K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=29.9K, rowsDroppedActual=20.0K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K, resultSizeActual=20.0K, joinRightIteratorsCreatedActual=666, joinRightBindingsConsumedActual=20.0K, inputRowsActual=20.6K, rowsDroppedActual=666, expansionFactorActual=0.97, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20.0K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666, resultSizeActual=666, joinRightIteratorsCreatedActual=666, joinLeftBindingsConsumedActual=666, joinRightBindingsConsumedActual=666, inputRowsActual=1.3K, rowsDroppedActual=666, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=666, rightRowsScannedActual=666, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=667, hasNextTrueCountActual=666, hasNextTimeNanosActual=83.3K, nextCallCountActual=666, nextTimeNanosActual=43.0K, sourceRowsScannedActual=667, sourceRowsMatchedActual=666, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=5.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=54.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=125, avgNextNanosActual=65, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=1.3K, hasNextTrueCountActual=666, hasNextTimeNanosActual=407.0K, nextCallCountActual=666, nextTimeNanosActual=40.8K, sourceRowsScannedActual=1.3K, sourceRowsMatchedActual=666, sourceRowsFilteredActual=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=708, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=71.5K, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=306, avgNextNanosActual=61, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=20.3K, resultSizeActual=20.0K, hasNextCallCountActual=20.6K, hasNextTrueCountActual=20.0K, hasNextTimeNanosActual=2.0M, nextCallCountActual=20.0K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=20.6K, sourceRowsMatchedActual=20.0K, sourceRowsFilteredActual=666, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O], firstRowTimeNanosActual=625, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=70.1K, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=99, avgNextNanosActual=52, indexHitRateActual=0.97) [right] +│ ║ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.1K, resultSizeActual=9.9K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=9.3M, nextCallCountActual=9.9K, nextTimeNanosActual=572.5K, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=20.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=20.0K, openCountActual=20.0K, lastRowTimeNanosActual=3.2K, closeCountActual=20.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.0K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=311, avgNextNanosActual=58, indexHitRateActual=0.33) [right] +│ ║ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=9.1M, nextCallCountActual=19.7K, nextTimeNanosActual=2.3M, firstRowTimeNanosActual=500, openCountActual=9.9K, lastRowTimeNanosActual=2.2K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=185, avgNextNanosActual=121) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=5.7M, nextCallCountActual=19.7K, nextTimeNanosActual=936.6K, sourceRowsScannedActual=29.7K, sourceRowsMatchedActual=19.7K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=1.8K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=116, avgNextNanosActual=47, indexHitRateActual=0.67) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) +│ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (target) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optDisease) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ │ ║ o: Var (name=drug) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] +│ ║ │ s: Var (name=trial) (bindingState=unbound) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ │ o: Var (name=arm) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] +│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) +│ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] +│ ║ ║ │ s: Var (name=drug) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ o: Var (name=target) (bindingState=bound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=drug) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +│ ║ │ o: Var (name=disease) (bindingState=unbound) +│ ║ └── ExtensionElem (optDisease) +│ ║ Var (name=disease) (bindingState=bound) +│ ║ GroupElem (_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123) +│ Count (Distinct) +│ Var (name=drug) (bindingState=unbound) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target ?pathway . +?target a . +?drug ?target . +?drug a . +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + + +Theme: PHARMA z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 53 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 34 ms + +Projection (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=28.6M, nextCallCountActual=2.2K, nextTimeNanosActual=165.1K, firstRowTimeNanosActual=48.0K, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, varsDroppedActual=14, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=75) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "drug" (hasNextFalseCountActual=0) +║ ProjectionElem "disease" (hasNextFalseCountActual=0) +╚══ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=28.6M, nextCallCountActual=2.2K, nextTimeNanosActual=35.8K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.0K, exprEvalCountActual=2.2K, exprFalseCountActual=2, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=30.0M, closeCountActual=1, exprEvalTimeNanosActual=1.4M, inputRowsActual=2.2K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=16, filterRejectRateActual=0.00) +├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=2, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) +│ Var (name=optTarget) (bindingState=bound, hasNextFalseCountActual=0) +│ ValueConstant (value=http://example.com/theme/pharma/target/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=250, hasNextFalseCountActual=0) +└── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=26.9M, nextCallCountActual=2.2K, nextTimeNanosActual=37.0K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=47.9K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.2K, avgNextNanosActual=17, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) +╠══ Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.8M, nextCallCountActual=1.1K, nextTimeNanosActual=15.2K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=46.0K, exprEvalCountActual=1.1K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=30.0M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=1.1K, rowsDroppedActual=6, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.1K, avgNextNanosActual=14, filterRejectRateActual=0.01) [left] +║ ├── Not (exprEvalCountActual=1.1K, exprFalseCountActual=6, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +║ │ Exists (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=6, exprEvalTimeNanosActual=1.4M, inputRowsActual=0, hasNextFalseCountActual=0) +║ │ StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=0, hasNextCallCountActual=1.1K, hasNextTrueCountActual=6, hasNextTimeNanosActual=827.7K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=6, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1000, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=733, indexHitRateActual=0.01) +║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) +║ │ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +║ └── Join (JoinIterator) (resultSizeEstimate=1.1K, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=1.1K, inputRowsActual=4.0K, rowsDroppedActual=2.8K, expansionFactorActual=0.28, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) +║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=955, joinRightBindingsConsumedActual=2.8K, inputRowsActual=3.8K, rowsDroppedActual=955, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=955, joinRightIteratorsCreatedActual=955, joinLeftBindingsConsumedActual=955, joinRightBindingsConsumedActual=955, inputRowsActual=1.9K, rowsDroppedActual=955, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=955, rightRowsScannedActual=955, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=956, hasNextTrueCountActual=955, hasNextTimeNanosActual=127.2K, nextCallCountActual=955, nextTimeNanosActual=46.4K, sourceRowsScannedActual=956, sourceRowsMatchedActual=955, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=133, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=1.9K, hasNextTrueCountActual=955, hasNextTimeNanosActual=546.6K, nextCallCountActual=955, nextTimeNanosActual=49.8K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=955, sourceRowsFilteredActual=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=21.7K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=286, avgNextNanosActual=52, indexHitRateActual=0.50) [right] +║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=633.7K, nextCallCountActual=2.8K, nextTimeNanosActual=143.4K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=955, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=20.7K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=165, avgNextNanosActual=50, indexHitRateActual=0.75) [right] +║ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=151.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], unlockedFilters=Not [right] +║ ║ │ Exists +║ ║ │ StatementPattern (resultSizeEstimate=9.9K) +║ ║ │ Var (name=drug) +║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ ║ │ Var (name=disease) +║ ║ │ , firstRowTimeNanosActual=666, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=6.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=239, avgNextNanosActual=52, indexHitRateActual=0.50) +║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=144.9K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.0K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207, avgNextNanosActual=50, indexHitRateActual=0.50) [right] +║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +║ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +║ ╚══ Filter (resultSizeEstimate=1.1K, resultSizeActual=1.1K, hasNextCallCountActual=4.0K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=9.4M, nextCallCountActual=1.1K, nextTimeNanosActual=15.3K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.7K, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.4K, exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, openCountActual=2.8K, exprTrueCountActual=1.1K, lastRowTimeNanosActual=3.0K, closeCountActual=2.8K, exprEvalTimeNanosActual=3.0M, inputRowsActual=2.8K, rowsDroppedActual=1.7K, selectivityActual=0.39, expansionFactorActual=0.39, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.28, avgHasNextNanosActual=2.4K, avgNextNanosActual=14, filterRejectRateActual=0.61) [right] +║ ├── Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) +║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) +║ │ ValueConstant (value="0.6"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=127.3K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=1.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=44, indexHitRateActual=0.50) +║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) +║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=248.8K, firstRowTimeNanosActual=583, openCountActual=1.1K, lastRowTimeNanosActual=3.7K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=193, avgNextNanosActual=112) [right] +├── StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=635.1K, nextCallCountActual=2.2K, nextTimeNanosActual=108.7K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=3.5K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=115, avgNextNanosActual=49, indexHitRateActual=0.66) +│ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (optTarget) (hasNextFalseCountActual=0) +Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +├── Compare (!=) +│ Var (name=optTarget) (bindingState=bound) +│ ValueConstant (value=http://example.com/theme/pharma/target/0) +└── LeftJoin (LeftJoinIterator) +╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +║ ├── Not +║ │ Exists +║ │ StatementPattern (resultSizeEstimate=9.9K) +║ │ s: Var (name=drug) (bindingState=bound) +║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ │ o: Var (name=disease) (bindingState=bound) +║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) +║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] +║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] +║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) +║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) +║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P]) [right] +║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) +║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] +║ ║ │ ║ s: Var (name=trial) (bindingState=bound) +║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) +║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], unlockedFilters=Not [right] +║ ║ │ Exists +║ ║ │ StatementPattern (resultSizeEstimate=9.9K) +║ ║ │ Var (name=drug) +║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ ║ │ Var (name=disease) +║ ║ │ ) +║ ║ │ s: Var (name=arm) (bindingState=bound) +║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +║ ║ │ o: Var (name=drug) (bindingState=unbound) +║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] +║ ║ s: Var (name=arm) (bindingState=bound) +║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +║ ║ o: Var (name=result) (bindingState=unbound) +║ ╚══ Filter (resultSizeEstimate=1.1K, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P]) [right] +║ ├── Compare (>) +║ │ Var (name=rate) (bindingState=bound) +║ │ ValueConstant (value="0.6"^^) +║ └── StatementPattern (resultSizeEstimate=2.9K) +║ s: Var (name=result) (bindingState=bound) +║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) +║ o: Var (name=rate) (bindingState=unbound) +╚══ Extension [right] +├── StatementPattern (resultSizeEstimate=20.0K) +│ s: Var (name=drug) (bindingState=bound) +│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ o: Var (name=target) (bindingState=unbound) +└── ExtensionElem (optTarget) +Var (name=target) (bindingState=bound) + + +=== Rendered Optimized TupleExpr === +SELECT ?drug ?disease WHERE { +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?drug . +?arm ?result . +?result ?rate . +FILTER (?rate > 0.6) +FILTER NOT EXISTS { +?drug ?disease . +} +OPTIONAL { +?drug ?target . +BIND(?target AS ?optTarget) +} +FILTER (?optTarget != ) +} + + +Theme: PHARMA z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 83 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 52 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=64.1M, openCountActual=1, lastRowTimeNanosActual=64.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=64.1M, openCountActual=1, lastRowTimeNanosActual=64.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=708) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=11.8K, firstRowTimeNanosActual=64.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=64.1M, maxGroupSizeActual=11.8K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=13, avgGroupSizeActual=11.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.8K, rowsDroppedActual=11.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=416) +│ ╠══ Difference (resultSizeActual=11.8K, hasNextCallCountActual=11.8K, hasNextTrueCountActual=11.8K, hasNextTimeNanosActual=62.4M, nextCallCountActual=11.8K, nextTimeNanosActual=151.5K, firstRowTimeNanosActual=3.4M, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.9K, rowsDroppedActual=106, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3K, avgNextNanosActual=13, leftRowsConsumedActual=11.9K, rightRowsConsumedActual=34, overlapRowsActual=72) +│ ║ ├── Filter (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=53.0M, nextCallCountActual=11.9K, nextTimeNanosActual=176.2K, sourceRowsScannedActual=11.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=44.3K, exprEvalCountActual=11.9K, openCountActual=1, exprTrueCountActual=11.9K, lastRowTimeNanosActual=64.0M, closeCountActual=1, exprEvalTimeNanosActual=6.0M, inputRowsActual=11.9K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=15, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=11.9K, exprTrueCountActual=11.9K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optClassName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=46.0M, nextCallCountActual=11.9K, nextTimeNanosActual=109.7K, joinRightIteratorsCreatedActual=11.9K, joinLeftBindingsConsumedActual=11.9K, joinRightBindingsConsumedActual=11.9K, firstRowTimeNanosActual=33.5K, leftRowsWithMatchActual=11.9K, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=23.9K, rowsDroppedActual=11.9K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=9.18, leftRowsProbedActual=11.9K, rightRowsScannedActual=11.9K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Union (resultSizeActual=11.9K, sampleCountActual=2, varianceActual=0.41, stddevActual=0.64, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsConsumedActual=10.0K, rightRowsConsumedActual=1.9K, leftRowsOutputContributionActual=10.0K, rightRowsOutputContributionActual=1.9K) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.0K) +│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinLeftBindingsConsumedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.0K, rightRowsScannedActual=10.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.0K, resultSizeActual=10.0K, hasNextCallCountActual=10.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.0K, nextTimeNanosActual=546.7K, sourceRowsScannedActual=10.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=18.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=53.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=54, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.1K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.1M, nextCallCountActual=10.0K, nextTimeNanosActual=559.1K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=458, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=3.5K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.3M, nextCallCountActual=10.0K, nextTimeNanosActual=618.0K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=2.5K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=62, indexHitRateActual=0.50) [right] +│ ║ │ │ ║ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=1.9K, joinRightBindingsConsumedActual=1.9K, inputRowsActual=3.8K, rowsDroppedActual=1.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.65, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) +│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=1.9K, inputRowsActual=2.8K, rowsDroppedActual=949, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=4.48, stddevActual=2.12, confidenceScoreActual=0.39, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) [left] +│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=949, joinLeftBindingsConsumedActual=949, joinRightBindingsConsumedActual=949, inputRowsActual=1.8K, rowsDroppedActual=949, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=949, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=950, hasNextTrueCountActual=949, hasNextTimeNanosActual=93.9K, nextCallCountActual=949, nextTimeNanosActual=58.6K, sourceRowsScannedActual=949, sourceRowsMatchedActual=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=53.9M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=62, indexHitRateActual=1.00) [left] +│ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.8K, hasNextTrueCountActual=949, hasNextTimeNanosActual=514.6K, nextCallCountActual=949, nextTimeNanosActual=57.1K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=583, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=6.2K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=60, indexHitRateActual=0.50) [right] +│ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=1.9K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=693.7K, nextCallCountActual=1.9K, nextTimeNanosActual=115.5K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, P], firstRowTimeNanosActual=750, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=5.0K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=242, avgNextNanosActual=60, indexHitRateActual=0.67) [right] +│ ║ │ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=1.9K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=1.0M, nextCallCountActual=1.9K, nextTimeNanosActual=116.1K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=1.9K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.9K, openCountActual=1.9K, lastRowTimeNanosActual=3.7K, closeCountActual=1.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=261, avgNextNanosActual=61, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=8.6M, nextCallCountActual=11.9K, nextTimeNanosActual=1.8M, firstRowTimeNanosActual=584, openCountActual=11.9K, lastRowTimeNanosActual=2.6K, closeCountActual=11.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=363, avgNextNanosActual=154) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=11.9K, nextTimeNanosActual=787.1K, sourceRowsScannedActual=23.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=11.9K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=11.9K, openCountActual=11.9K, lastRowTimeNanosActual=2.5K, closeCountActual=11.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=229, avgNextNanosActual=66, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=class) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optClassName) (hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=34, hasNextCallCountActual=35, hasNextTrueCountActual=34, hasNextTimeNanosActual=3.2M, nextCallCountActual=34, nextTimeNanosActual=628, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=34, sourceRowsFilteredActual=4.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=261.5K, exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, openCountActual=1, exprTrueCountActual=34, lastRowTimeNanosActual=3.3M, closeCountActual=1, exprEvalTimeNanosActual=2.4M, inputRowsActual=5.0K, rowsDroppedActual=4.9K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=93.7K, avgNextNanosActual=18, filterRejectRateActual=0.99) +│ ║ ╠══ ListMemberOperator (exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, exprTrueCountActual=34, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) (exprEvalCountActual=5.0K, exprEvalTimeNanosActual=131.9K, hasNextFalseCountActual=0) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) (exprEvalCountActual=4.9K, exprEvalTimeNanosActual=83.2K, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=403.4K, nextCallCountActual=5.0K, nextTimeNanosActual=198.7K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81, avgNextNanosActual=40, indexHitRateActual=1.00) +│ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optClassName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) +│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) +│ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] +│ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) +│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) +│ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) +│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] +│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] +│ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) +│ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) +│ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) +│ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] +│ ║ │ │ s: Var (name=mol) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) +│ ║ │ │ o: Var (name=class) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) +│ ║ │ ║ s: Var (name=class) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) +│ ║ │ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optClassName) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ ListMemberOperator +│ ║ ║ Var (name=disease) (bindingState=bound) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) +│ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) +│ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ o: Var (name=disease) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +{ +{ +?drug ?mol . +?drug a . +} +} +?mol ?class . +} +UNION +{ +{ +{ +?combo ?drug . +?combo a . +?drug ?mol . +} +} +?mol ?class . +} +OPTIONAL { +?class ?optName . +BIND(?optName AS ?optClassName) +} +FILTER (?optClassName != "") +MINUS { +?drug ?disease . +FILTER (?disease IN (, )) +} +} + + +Theme: PHARMA z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 12 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 9 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=458, firstRowTimeNanosActual=1.1M, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=570.0K, avgNextNanosActual=458) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=1.1M, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=569.7K, avgNextNanosActual=250) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=167, aggregateEvalCountActual=32, firstRowTimeNanosActual=1.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1.1M, maxGroupSizeActual=32, closeCountActual=1, varsAddedActual=1, varsDroppedActual=14, avgGroupSizeActual=32, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=32, rowsDroppedActual=31, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=568.9K, avgNextNanosActual=167) +│ ╠══ Filter (resultSizeActual=32, hasNextCallCountActual=34, hasNextTrueCountActual=33, hasNextTimeNanosActual=1.1M, nextCallCountActual=32, nextTimeNanosActual=712, sourceRowsScannedActual=44, sourceRowsMatchedActual=32, sourceRowsFilteredActual=12, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=67.8K, exprEvalCountActual=44, exprFalseCountActual=12, openCountActual=1, exprTrueCountActual=32, lastRowTimeNanosActual=1.1M, closeCountActual=1, exprEvalTimeNanosActual=38.5K, inputRowsActual=44, rowsDroppedActual=12, selectivityActual=0.73, expansionFactorActual=0.73, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=32.5K, avgNextNanosActual=22, filterRejectRateActual=0.27) +│ ║ ├── Compare (>) (exprEvalCountActual=44, exprFalseCountActual=12, exprTrueCountActual=32, exprEvalTimeNanosActual=32.6K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0.3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=44, hasNextCallCountActual=45, hasNextTrueCountActual=44, hasNextTimeNanosActual=1.0M, nextCallCountActual=44, nextTimeNanosActual=1.0K, joinRightIteratorsCreatedActual=44, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, firstRowTimeNanosActual=65.1K, leftRowsWithMatchActual=44, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=88, rowsDroppedActual=44, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=23.5K, avgNextNanosActual=24, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=44, joinRightIteratorsCreatedActual=79, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, inputRowsActual=123, rowsDroppedActual=79, expansionFactorActual=0.36, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=312, stddevActual=18, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66, resultSizeActual=79, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=79, inputRowsActual=82, rowsDroppedActual=3, expansionFactorActual=0.96, sampleCountActual=2, varianceActual=315, stddevActual=18, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=79, avgRightRowsPerLeftActual=26, joinOutputPerLeftActual=26) [left] +│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=1.0K, nextCallCountActual=3, nextTimeNanosActual=333, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=2.3K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=1.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=271, avgNextNanosActual=111) [left] +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=82, hasNextTrueCountActual=79, hasNextTimeNanosActual=16.2K, nextCallCountActual=79, nextTimeNanosActual=9.6K, sourceRowsScannedActual=82, sourceRowsMatchedActual=79, sourceRowsFilteredActual=3, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O], firstRowTimeNanosActual=917, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=261.4K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=199, avgNextNanosActual=122, indexHitRateActual=0.96) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=70.1K, nextCallCountActual=79, nextTimeNanosActual=3.4K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O], firstRowTimeNanosActual=1.2K, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=13.8K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=444, avgNextNanosActual=44, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=34.0K, nextCallCountActual=79, nextTimeNanosActual=3.1K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O], firstRowTimeNanosActual=417, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=12.0K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=67.5K, nextCallCountActual=79, nextTimeNanosActual=2.8K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=667, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=11.1K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=428, avgNextNanosActual=36, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=1.6K, resultSizeActual=44, hasNextCallCountActual=123, hasNextTrueCountActual=44, hasNextTimeNanosActual=401.4K, nextCallCountActual=44, nextTimeNanosActual=1.1K, sourceRowsScannedActual=79, sourceRowsMatchedActual=44, sourceRowsFilteredActual=35, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=79, exprFalseCountActual=35, openCountActual=79, exprTrueCountActual=44, lastRowTimeNanosActual=7.8K, closeCountActual=79, exprEvalTimeNanosActual=107.7K, inputRowsActual=79, rowsDroppedActual=35, selectivityActual=0.56, expansionFactorActual=0.56, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=3.3K, avgNextNanosActual=27, filterRejectRateActual=0.44) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, shortCircuitCountActual=44, exprEvalTimeNanosActual=100.2K, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, exprEvalTimeNanosActual=86.5K, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=35, exprFalseCountActual=35, exprEvalTimeNanosActual=7.8K, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=42.6K, nextCallCountActual=79, nextTimeNanosActual=4.0K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=4.9K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=270, avgNextNanosActual=52, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=34.9K, nextCallCountActual=44, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=542, openCountActual=44, lastRowTimeNanosActual=2.4K, closeCountActual=44, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=397, avgNextNanosActual=161) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=19.8K, nextCallCountActual=44, nextTimeNanosActual=2.7K, sourceRowsScannedActual=88, sourceRowsMatchedActual=44, sourceRowsFilteredActual=44, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=44, openCountActual=44, lastRowTimeNanosActual=2.0K, closeCountActual=44, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=62, indexHitRateActual=0.50) +│ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optEffect) (hasNextFalseCountActual=0) +│ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=optEffect) (bindingState=bound) +│ ║ │ ValueConstant (value="0.3"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] +│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (<) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=p) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ ║ s: Var (name=result) (bindingState=bound) +│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ ║ o: Var (name=p) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=result) (bindingState=bound) +│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ │ o: Var (name=effect) (bindingState=unbound) +│ ║ └── ExtensionElem (optEffect) +│ ║ Var (name=effect) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=trial) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=trial) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { } +?result ?marker . +?arm ?result . +?trial ?arm . +?trial a . +?result ?p . +FILTER ((?p < 0.05) || (?p = 0.05)) +OPTIONAL { +?result ?effect . +BIND(?effect AS ?optEffect) +} +FILTER (?optEffect > 0.3) +} + + +Theme: PHARMA z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 22 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 18 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=666) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "combo" (hasNextFalseCountActual=0) +║ ProjectionElem "sharedTargets" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=333, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=333) +├── Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=250) +│ ╠══ Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=166, sourceRowsScannedActual=5, sourceRowsMatchedActual=1, sourceRowsFilteredActual=4, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.9M, exprEvalCountActual=5, exprFalseCountActual=4, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=2.9K, inputRowsActual=5, rowsDroppedActual=4, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=166, filterRejectRateActual=0.80) +│ ║ ├── Compare (>) (exprEvalCountActual=5, exprFalseCountActual=4, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) +│ ║ └── Group (combo) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=5.9M, nextCallCountActual=5, nextTimeNanosActual=250, aggregateEvalCountActual=44, firstRowTimeNanosActual=5.9M, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=5.9M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=4.40, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=22, rowsDroppedActual=17, selectivityActual=0.23, expansionFactorActual=0.23, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=991.1K, avgNextNanosActual=50) +│ ║ Filter (resultSizeActual=22, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=22, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=12.4K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optSideEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=416, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=21.3K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=22, hasNextTrueCountActual=22, hasNextTimeNanosActual=8.2K, sourceRowsScannedActual=22, sourceRowsMatchedActual=22, plannedIndexName=spoc, indexLookupCountActual=22, openCountActual=22, lastRowTimeNanosActual=334, closeCountActual=22, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=373, indexHitRateActual=1.00) +│ ║ │ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=sideEffect2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22, hasNextCallCountActual=23, hasNextTrueCountActual=22, hasNextTimeNanosActual=5.8M, nextCallCountActual=22, nextTimeNanosActual=504, joinRightIteratorsCreatedActual=12, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=22, firstRowTimeNanosActual=1.8M, leftRowsWithMatchActual=12, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=34, rowsDroppedActual=12, expansionFactorActual=0.65, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=255.4K, avgNextNanosActual=23, leftRowsProbedActual=12, rightRowsScannedActual=22, avgRightRowsPerLeftActual=1.83, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.83, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M, resultSizeActual=12, joinRightIteratorsCreatedActual=2.5K, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=12, inputRowsActual=2.5K, rowsDroppedActual=2.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=44.7M, stddevActual=6.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=12, rightRowsScannedActual=12, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M, resultSizeActual=2.5K, joinRightIteratorsCreatedActual=1.2K, joinLeftBindingsConsumedActual=1.2K, joinRightBindingsConsumedActual=2.5K, inputRowsActual=3.7K, rowsDroppedActual=1.2K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=1.2K, rightRowsScannedActual=2.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] +│ ║ ║ │ ╠══ Filter (resultSizeActual=1.2K, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.2K, nextTimeNanosActual=15.4K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=1.2K, sourceRowsFilteredActual=949, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=20.6K, exprEvalCountActual=2.2K, exprFalseCountActual=949, openCountActual=1, exprTrueCountActual=1.2K, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=239.3K, inputRowsActual=2.2K, rowsDroppedActual=949, selectivityActual=0.57, expansionFactorActual=0.57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=12, filterRejectRateActual=0.43) [left] +│ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=949, exprTrueCountActual=1.2K, exprEvalTimeNanosActual=94.7K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=2.2K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=2.2K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=3.1K, rowsDroppedActual=949, expansionFactorActual=0.70, sampleCountActual=2, varianceActual=0.44, stddevActual=0.66, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.2K) +│ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=477, joinLeftBindingsConsumedActual=477, joinRightBindingsConsumedActual=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4K, rowsDroppedActual=477, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=477, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] +│ ║ ║ │ ║ ║ ├── StatementPattern [index: ospc] (costEstimate=161, resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=55.6K, nextCallCountActual=477, nextTimeNanosActual=22.7K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=6.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.9M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=116, avgNextNanosActual=48, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.4K, hasNextTrueCountActual=949, hasNextTimeNanosActual=269.2K, nextCallCountActual=949, nextTimeNanosActual=47.8K, sourceRowsScannedActual=1.4K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=476, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=477, openCountActual=477, lastRowTimeNanosActual=1.7K, closeCountActual=477, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=477, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=189, avgNextNanosActual=50, indexHitRateActual=0.67) [right] +│ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=2.2K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=486.0K, nextCallCountActual=2.2K, nextTimeNanosActual=109.6K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=948, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=833, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.70, avgHasNextNanosActual=154, avgNextNanosActual=50, indexHitRateActual=0.70) [right] +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=2.5K, hasNextCallCountActual=3.7K, hasNextTrueCountActual=2.5K, hasNextTimeNanosActual=720.8K, nextCallCountActual=2.5K, nextTimeNanosActual=113.3K, sourceRowsScannedActual=3.7K, sourceRowsMatchedActual=2.5K, sourceRowsFilteredActual=1.2K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=1.2K, openCountActual=1.2K, lastRowTimeNanosActual=1.2K, closeCountActual=1.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=192, avgNextNanosActual=45, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=20.0K, resultSizeActual=12, hasNextCallCountActual=2.5K, hasNextTrueCountActual=12, hasNextTimeNanosActual=1.0M, nextCallCountActual=12, nextTimeNanosActual=583, sourceRowsScannedActual=2.5K, sourceRowsMatchedActual=12, sourceRowsFilteredActual=2.5K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=2.5K, openCountActual=2.5K, lastRowTimeNanosActual=416, closeCountActual=2.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=413, avgNextNanosActual=49, indexHitRateActual=0.00) [right] +│ ║ ║ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=11.9K, nextCallCountActual=22, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=541, openCountActual=12, lastRowTimeNanosActual=2.5K, closeCountActual=12, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=221, avgNextNanosActual=154) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=6.5K, nextCallCountActual=22, nextTimeNanosActual=1.1K, sourceRowsScannedActual=34, sourceRowsMatchedActual=22, sourceRowsFilteredActual=12, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=12, openCountActual=12, lastRowTimeNanosActual=2.3K, closeCountActual=12, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=121, avgNextNanosActual=53, indexHitRateActual=0.65) +│ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optSideEffect) (hasNextFalseCountActual=0) +│ ║ Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (sharedTargets) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (sharedTargets) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (combo) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drugB) (bindingState=bound) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] +│ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +│ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) +│ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) +│ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] +│ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) +│ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) +│ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ s: Var (name=drugA) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ o: Var (name=target) (bindingState=unbound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] +│ ║ ║ s: Var (name=drugB) (bindingState=bound) +│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ o: Var (name=target) (bindingState=bound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drugA) (bindingState=bound) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=sideEffect) (bindingState=unbound) +│ ║ └── ExtensionElem (optSideEffect) +│ ║ Var (name=sideEffect) (bindingState=bound) +│ ║ GroupElem (_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ║ GroupElem (sharedTargets) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123) +│ Count (Distinct) +│ Var (name=target) (bindingState=unbound) +└── ExtensionElem (sharedTargets) +Count (Distinct) +Var (name=target) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a . +?combo ?drugA . +?combo ?drugB . +FILTER (?drugA != ?drugB) +?drugA ?target . +?drugB ?target . +OPTIONAL { +?drugA ?sideEffect . +BIND(?sideEffect AS ?optSideEffect) +} +FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + + +Theme: PHARMA z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 91 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 47 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=833) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=416, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=416) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=292, aggregateEvalCountActual=5.7K, firstRowTimeNanosActual=65.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, maxGroupSizeActual=5.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=5.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=292) +│ ╠══ Filter (resultSizeActual=5.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=5.7K, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optCompName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=41.1M, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=40.8M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=144, resultSizeActual=0, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=5.7K, rowsDroppedActual=5.7K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) +│ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.5M, nextCallCountActual=5.7K, nextTimeNanosActual=355.5K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=6.1K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=62, indexHitRateActual=0.50) [left] +│ ║ │ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=r) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=1.00, resultSizeActual=0, hasNextCallCountActual=5.7K, hasNextTimeNanosActual=21.8M, sourceRowsScannedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_pattern, plannedLookupComponents=[S, O, P], exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=3.4K, closeCountActual=5.7K, exprEvalTimeNanosActual=6.1M, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.8K, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="0.08"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=518.7K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="0.09"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=575.7K, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=5.7K, nextTimeNanosActual=282.1K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=1.2K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212, avgNextNanosActual=49, indexHitRateActual=0.50) +│ ║ │ s: Var (name=r) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=5.7K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=18.7M, nextCallCountActual=5.7K, nextTimeNanosActual=34.9K, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, joinRightBindingsConsumedActual=5.7K, firstRowTimeNanosActual=37.6K, leftRowsWithMatchActual=5.7K, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=11.5K, rowsDroppedActual=5.7K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=6.06, leftRowsProbedActual=5.7K, rightRowsScannedActual=5.7K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=8.6K, rowsDroppedActual=2.8K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=352.2K, nextCallCountActual=2.8K, nextTimeNanosActual=115.6K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=122, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.5M, nextCallCountActual=2.8K, nextTimeNanosActual=92.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=584, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=21.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=32, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Union (resultSizeActual=5.7K, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsConsumedActual=2.8K, rightRowsConsumedActual=2.8K, leftRowsOutputContributionActual=2.8K, rightRowsOutputContributionActual=2.8K) [right] +│ ║ ║ ╠══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=128.8K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=10.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=45, indexHitRateActual=0.50) +│ ║ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=98.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=10.5K, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=19.7K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=238, avgNextNanosActual=34, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=4.6M, nextCallCountActual=5.7K, nextTimeNanosActual=808.4K, firstRowTimeNanosActual=792, openCountActual=5.7K, lastRowTimeNanosActual=8.6K, closeCountActual=5.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=405, avgNextNanosActual=140) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=3.3M, nextCallCountActual=5.7K, nextTimeNanosActual=328.9K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=8.4K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=57, indexHitRateActual=0.50) +│ ║ │ s: Var (name=comp) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optCompName) (hasNextFalseCountActual=0) +│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optCompName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=144) +│ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ │ s: Var (name=arm) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ │ │ o: Var (name=r) (bindingState=unbound) +│ ║ │ └── Filter (resultSizeEstimate=1.00, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_pattern, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=p) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="0.08"^^) +│ ║ │ ║ ValueConstant (value="0.09"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=r) (bindingState=bound) +│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ │ o: Var (name=p) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ └── Union [right] +│ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) +│ ║ ║ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) +│ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) +│ ║ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ o: Var (name=comp) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=13.2K) +│ ║ │ s: Var (name=comp) (bindingState=bound) +│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (optCompName) +│ ║ Var (name=optName) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=arm) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=arm) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial ?arm . +?trial a . +?arm (|) ?comp . +OPTIONAL { +?comp ?optName . +BIND(?optName AS ?optCompName) +} +FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + + +Theme: PHARMA z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 61 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 37 ms + +Projection (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.3M, nextCallCountActual=1.6K, nextTimeNanosActual=249.4K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=32.0K, avgNextNanosActual=153) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "drug" (hasNextFalseCountActual=0) +║ ProjectionElem "targetCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=163.3K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=32.0K, avgNextNanosActual=100) +├── Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=89.8K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.9K, avgNextNanosActual=55) +│ ╠══ Filter (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=20.0K, sourceRowsScannedActual=4.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=3.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.0M, exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, openCountActual=1, exprTrueCountActual=1.6K, lastRowTimeNanosActual=52.7M, closeCountActual=1, exprEvalTimeNanosActual=753.2K, inputRowsActual=4.9K, rowsDroppedActual=3.3K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.9K, avgNextNanosActual=12, filterRejectRateActual=0.67) +│ ║ ├── Compare (>=) (exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=418.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +│ ║ └── Group (drug) (resultSizeActual=4.9K, hasNextCallCountActual=4.9K, hasNextTrueCountActual=4.9K, hasNextTimeNanosActual=51.0M, nextCallCountActual=4.9K, nextTimeNanosActual=86.9K, aggregateEvalCountActual=39.6K, firstRowTimeNanosActual=51.0M, groupsCreatedActual=4.9K, openCountActual=1, lastRowTimeNanosActual=52.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.98, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.8K, rowsDroppedActual=14.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.3K, avgNextNanosActual=17) +│ ║ Difference (resultSizeActual=19.8K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=41.1M, nextCallCountActual=19.8K, nextTimeNanosActual=215.2K, firstRowTimeNanosActual=87.9K, openCountActual=1, lastRowTimeNanosActual=49.3M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.9K, rowsDroppedActual=166, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=11, leftRowsConsumedActual=19.9K, rightRowsConsumedActual=30, overlapRowsActual=136) +│ ║ ├── Filter (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=33.8M, nextCallCountActual=19.9K, nextTimeNanosActual=264.9K, sourceRowsScannedActual=19.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=17.0K, exprEvalCountActual=19.9K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=19.9K, lastRowTimeNanosActual=49.0M, closeCountActual=1, exprEvalTimeNanosActual=7.7M, inputRowsActual=19.9K, rowsDroppedActual=6, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.00) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=19.9K, exprFalseCountActual=6, exprTrueCountActual=19.9K, exprEvalTimeNanosActual=6.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optMol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=24.5M, nextCallCountActual=19.9K, nextTimeNanosActual=193.9K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.9K, firstRowTimeNanosActual=14.0K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=49.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.9K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=9.72, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.9K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=14.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=14.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=446.4K, nextCallCountActual=5.0K, nextTimeNanosActual=297.4K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=49.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89, avgNextNanosActual=59, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=2.8M, nextCallCountActual=9.9K, nextTimeNanosActual=566.6K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P], firstRowTimeNanosActual=583, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=6.9K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=188, avgNextNanosActual=57, indexHitRateActual=0.67) [right] +│ ║ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=8.8M, nextCallCountActual=19.9K, nextTimeNanosActual=2.4M, firstRowTimeNanosActual=542, openCountActual=9.9K, lastRowTimeNanosActual=5.8K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=177, avgNextNanosActual=122) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=19.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=5.5K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=110, avgNextNanosActual=55, indexHitRateActual=0.67) +│ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optMol) (hasNextFalseCountActual=0) +│ ║ │ Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Union (resultSizeActual=30, hasNextFalseCountActual=0, leftRowsConsumedActual=16, rightRowsConsumedActual=14, leftRowsOutputContributionActual=16, rightRowsOutputContributionActual=14) +│ ║ ╠══ Filter (resultSizeActual=16, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=16, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ ║ ├── SameTerm (hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) (exprEvalCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=16, resultSizeActual=16, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=4.5K, nextCallCountActual=16, nextTimeNanosActual=1.1K, sourceRowsScannedActual=48, sourceRowsMatchedActual=16, sourceRowsFilteredActual=32, plannedIndexName=ospc, firstRowTimeNanosActual=2.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=26.0K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=267, avgNextNanosActual=73, indexHitRateActual=0.33) +│ ║ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeActual=14, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=14, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ ├── SameTerm (hasNextFalseCountActual=0) +│ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) (exprEvalCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=14, resultSizeActual=14, hasNextCallCountActual=15, hasNextTrueCountActual=14, hasNextTimeNanosActual=3.5K, nextCallCountActual=14, nextTimeNanosActual=540, sourceRowsScannedActual=54, sourceRowsMatchedActual=14, sourceRowsFilteredActual=40, plannedIndexName=ospc, firstRowTimeNanosActual=31.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=47.1K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=236, avgNextNanosActual=39, indexHitRateActual=0.26) +│ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (targetCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (targetCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── Group (drug) +│ ║ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optMol) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ │ │ o: Var (name=target) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ ║ s: Var (name=drug) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ ║ o: Var (name=mol) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optMol) +│ ║ │ Var (name=mol) (bindingState=bound) +│ ║ └── Union +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ║ ├── SameTerm +│ ║ ║ │ Var (name=disease) (bindingState=bound) +│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) +│ ║ ║ └── StatementPattern (resultSizeEstimate=16) +│ ║ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) +│ ║ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── SameTerm +│ ║ │ Var (name=disease) (bindingState=bound) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) +│ ║ └── StatementPattern (resultSizeEstimate=14) +│ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) +│ ║ GroupElem (_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ║ GroupElem (targetCount) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d) +│ Count (Distinct) +│ Var (name=target) (bindingState=unbound) +└── ExtensionElem (targetCount) +Count (Distinct) +Var (name=target) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a . +?drug ?target . +OPTIONAL { +?drug ?mol . +BIND(?mol AS ?optMol) +} +FILTER (?optMol != ) +MINUS { +{ +?drug . +FILTER (sameTerm(?disease, )) +} +UNION +{ +?drug . +FILTER (sameTerm(?disease, )) +} +} +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + + +Theme: PHARMA z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 61 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 37 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=28.6M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=625) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=167, firstRowTimeNanosActual=28.7M, openCountActual=1, lastRowTimeNanosActual=28.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=167) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=84, aggregateEvalCountActual=13, firstRowTimeNanosActual=28.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=28.7M, maxGroupSizeActual=13, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=13, rowsDroppedActual=12, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=84) +│ ╠══ Filter (resultSizeActual=13, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=2.2K, rowsDroppedActual=2.2K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=2.2K, exprFalseCountActual=2.2K, exprTrueCountActual=13, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=54.8K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=40.1K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=13, exprTrueCountActual=13, exprEvalTimeNanosActual=15.5K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=13, hasNextTrueCountActual=13, hasNextTimeNanosActual=5.8K, sourceRowsScannedActual=13, sourceRowsMatchedActual=13, plannedIndexName=spoc, indexLookupCountActual=13, openCountActual=13, lastRowTimeNanosActual=417, closeCountActual=13, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=452, indexHitRateActual=1.00) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=se) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=27.2M, nextCallCountActual=2.2K, nextTimeNanosActual=24.4K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=24.1M, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.3K, avgNextNanosActual=11, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Projection (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=207.4K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.3K, avgNextNanosActual=188) [left] +│ ║ ║ ├── ProjectionElemList (hasNextFalseCountActual=0) +│ ║ ║ │ ProjectionElem "drug" (hasNextFalseCountActual=0) +│ ║ ║ │ ProjectionElem "avgEffect" (hasNextFalseCountActual=0) +│ ║ ║ └── Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=125.4K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.3K, avgNextNanosActual=113) +│ ║ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=72.7K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.2K, avgNextNanosActual=66) +│ ║ ║ ║ ├── Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.5M, nextCallCountActual=1.1K, nextTimeNanosActual=18.5K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=723, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.1M, exprEvalCountActual=1.8K, exprFalseCountActual=723, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=28.6M, closeCountActual=1, exprEvalTimeNanosActual=303.5K, inputRowsActual=1.8K, rowsDroppedActual=723, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.2K, avgNextNanosActual=17, filterRejectRateActual=0.40) +│ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=1.8K, exprFalseCountActual=723, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=159.5K, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ Var (name=_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=625, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ Group (drug) (resultSizeActual=1.8K, hasNextCallCountActual=1.8K, hasNextTrueCountActual=1.8K, hasNextTimeNanosActual=24.1M, nextCallCountActual=1.8K, nextTimeNanosActual=39.9K, aggregateEvalCountActual=4.5K, firstRowTimeNanosActual=24.1M, groupsCreatedActual=1.8K, openCountActual=1, lastRowTimeNanosActual=28.6M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=13, avgGroupSizeActual=1.25, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.2K, rowsDroppedActual=453, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.2K, avgNextNanosActual=22) +│ ║ ║ ║ │ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=19.5M, nextCallCountActual=2.2K, nextTimeNanosActual=31.6K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=603, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=93.0K, exprEvalCountActual=2.8K, exprFalseCountActual=603, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=23.3M, closeCountActual=1, exprEvalTimeNanosActual=3.1M, inputRowsActual=2.8K, rowsDroppedActual=603, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.6K, avgNextNanosActual=14, filterRejectRateActual=0.21) +│ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=603, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=333, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=16.1M, nextCallCountActual=2.8K, nextTimeNanosActual=27.0K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, firstRowTimeNanosActual=29.0K, leftRowsWithMatchActual=2.8K, openCountActual=1, lastRowTimeNanosActual=23.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=9.37, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.03, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +│ ║ ║ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +│ ║ ║ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=329.5K, nextCallCountActual=2.8K, nextTimeNanosActual=169.4K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=11.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=23.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=59, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=169.6K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=541, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=7.4K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=169.9K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=6.3K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=158.4K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.3K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=55, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=144.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=4.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207, avgNextNanosActual=50, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ └── Extension (resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.9M, nextCallCountActual=2.8K, nextTimeNanosActual=370.9K, firstRowTimeNanosActual=792, openCountActual=2.8K, lastRowTimeNanosActual=3.4K, closeCountActual=2.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=344, avgNextNanosActual=129) [right] +│ ║ ║ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=131.7K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=3.2K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=46, indexHitRateActual=0.50) +│ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ GroupElem (_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ GroupElem (avgEffect) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── ExtensionElem (_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ ║ ║ Avg (hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ ExtensionElem (avgEffect) (hasNextFalseCountActual=0) +│ ║ ║ Avg (hasNextFalseCountActual=0) +│ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.2K, nextTimeNanosActual=285.2K, firstRowTimeNanosActual=959, openCountActual=1.1K, lastRowTimeNanosActual=2.6K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=251, avgNextNanosActual=129) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=127.0K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=917, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=2.4K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=183, avgNextNanosActual=57, indexHitRateActual=0.67) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) +│ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optDisease) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=se) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Projection (new scope) [left] +│ ║ ║ ├── ProjectionElemList +│ ║ ║ │ ProjectionElem "drug" +│ ║ ║ │ ProjectionElem "avgEffect" +│ ║ ║ └── Extension +│ ║ ║ ╠══ Extension +│ ║ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ║ ║ │ ╠══ Compare (>) +│ ║ ║ ║ │ ║ Var (name=_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) +│ ║ ║ ║ │ ╚══ Group (drug) +│ ║ ║ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ║ ║ │ ╠══ Compare (>) +│ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) +│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) +│ ║ ║ ║ │ ╚══ LeftJoin +│ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] +│ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) +│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) +│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) +│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) +│ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) +│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) +│ ║ ║ ║ │ └── Extension [right] +│ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) +│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) +│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) +│ ║ ║ ║ │ Var (name=rate) (bindingState=bound) +│ ║ ║ ║ │ GroupElem (_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ ║ ║ │ Avg +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound) +│ ║ ║ ║ │ GroupElem (avgEffect) +│ ║ ║ ║ │ Avg +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound) +│ ║ ║ ║ └── ExtensionElem (_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ ║ ║ Avg +│ ║ ║ ║ Var (name=effect) (bindingState=unbound) +│ ║ ║ ╚══ ExtensionElem (avgEffect) +│ ║ ║ Avg +│ ║ ║ Var (name=effect) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +│ ║ │ o: Var (name=disease) (bindingState=unbound) +│ ║ └── ExtensionElem (optDisease) +│ ║ Var (name=disease) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial ?arm . +?trial a . +?arm ?drug . +?arm ?result . +?result ?effect . +OPTIONAL { +?result ?rate . +BIND(?rate AS ?optRate) +} +FILTER (?optRate > 0.2) +} +GROUP BY ?drug +HAVING (AVG(?effect) > 0.4) +} +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + + +Theme: PHARMA z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 479 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 294 ms + +Projection (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=11.6K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=228) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "pathway" (hasNextFalseCountActual=0) +║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=139) +├── Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=3.9K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=78) +│ ╠══ Filter (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.5M, nextCallCountActual=51, nextTimeNanosActual=1.0K, sourceRowsScannedActual=105, sourceRowsMatchedActual=51, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=470.5M, exprEvalCountActual=105, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=51, lastRowTimeNanosActual=470.6M, closeCountActual=1, exprEvalTimeNanosActual=33.3K, inputRowsActual=105, rowsDroppedActual=54, selectivityActual=0.49, expansionFactorActual=0.49, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.0M, avgNextNanosActual=20, filterRejectRateActual=0.51) +│ ║ ├── Compare (>) (exprEvalCountActual=105, exprFalseCountActual=54, exprTrueCountActual=51, exprEvalTimeNanosActual=24.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.5K, hasNextFalseCountActual=0) +│ ║ └── Group (pathway) (resultSizeActual=105, hasNextCallCountActual=106, hasNextTrueCountActual=105, hasNextTimeNanosActual=470.5M, nextCallCountActual=105, nextTimeNanosActual=2.7K, aggregateEvalCountActual=412, firstRowTimeNanosActual=470.5M, groupsCreatedActual=105, openCountActual=1, lastRowTimeNanosActual=470.6M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.96, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=206, rowsDroppedActual=101, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=4.4M, avgNextNanosActual=26) +│ ║ Filter (resultSizeActual=206, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, inputRowsActual=22.6K, rowsDroppedActual=22.4K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22.6K, exprFalseCountActual=6, exprTrueCountActual=11.3K, exprErrorCountActual=11.2K, exprEvalTimeNanosActual=4.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTrial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=22.6K, exprFalseCountActual=11.1K, exprTrueCountActual=11.4K, exprEvalTimeNanosActual=404.5M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=0, joinRightIteratorsCreatedActual=191.5K, joinRightBindingsConsumedActual=11.4K, inputRowsActual=203.0K, rowsDroppedActual=203.0K, expansionFactorActual=0, sampleCountActual=2, varianceActual=974, stddevActual=31, confidenceScoreActual=0.06, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=11.4K) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=191.5K, joinRightIteratorsCreatedActual=191.5K, joinLeftBindingsConsumedActual=191.5K, joinRightBindingsConsumedActual=191.5K, inputRowsActual=383.1K, rowsDroppedActual=191.5K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=191.5K, rightRowsScannedActual=191.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=191.5K, hasNextCallCountActual=202.7K, hasNextTrueCountActual=191.5K, hasNextTimeNanosActual=23.1M, nextCallCountActual=191.5K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=202.7K, sourceRowsMatchedActual=191.5K, sourceRowsFilteredActual=11.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=542, indexLookupCountActual=22.6K, openCountActual=22.6K, lastRowTimeNanosActual=2.2K, closeCountActual=22.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.1K, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=114, avgNextNanosActual=51, indexHitRateActual=0.94) [left] +│ ║ │ ║ │ s: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=191.5K, hasNextCallCountActual=371.7K, hasNextTrueCountActual=191.5K, hasNextTimeNanosActual=91.6M, nextCallCountActual=191.5K, nextTimeNanosActual=9.9M, sourceRowsScannedActual=371.7K, sourceRowsMatchedActual=191.5K, sourceRowsFilteredActual=180.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O], firstRowTimeNanosActual=542, indexLookupCountActual=191.5K, openCountActual=191.5K, lastRowTimeNanosActual=1.7K, closeCountActual=191.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=180.1K, nextPerHasNextRatioActual=0.52, avgHasNextNanosActual=247, avgNextNanosActual=52, indexHitRateActual=0.52) [right] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=11.4K, hasNextCallCountActual=191.5K, hasNextTrueCountActual=11.4K, hasNextTimeNanosActual=62.6M, nextCallCountActual=11.4K, nextTimeNanosActual=611.2K, sourceRowsScannedActual=191.5K, sourceRowsMatchedActual=11.4K, sourceRowsFilteredActual=180.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O], firstRowTimeNanosActual=500, indexLookupCountActual=191.5K, openCountActual=191.5K, lastRowTimeNanosActual=1000, closeCountActual=191.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=180.1K, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=327, avgNextNanosActual=53, indexHitRateActual=0.06) [right] +│ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22.6K, hasNextCallCountActual=22.6K, hasNextTrueCountActual=22.6K, hasNextTimeNanosActual=54.9M, nextCallCountActual=22.6K, nextTimeNanosActual=229.1K, joinRightIteratorsCreatedActual=19.8K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=11.3K, firstRowTimeNanosActual=20.9K, leftRowsWithMatchActual=8.6K, openCountActual=1, emptyRightProbeCountActual=11.2K, lastRowTimeNanosActual=470.4M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=31.2K, rowsDroppedActual=8.6K, expansionFactorActual=0.72, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=10, leftRowsProbedActual=19.8K, rightRowsScannedActual=11.3K, avgRightRowsPerLeftActual=0.57, joinMatchRateActual=0.43, joinOutputPerLeftActual=1.14, leftJoinNullExtendedRowsActual=11.2K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=19.8K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=19.8K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=29.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=98.9M, stddevActual=9.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=19.8K, rightRowsScannedActual=19.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=9.9K, joinRightBindingsConsumedActual=9.9K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=19.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=48, stddevActual=6.96, confidenceScoreActual=0.20, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=9.9K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=1.00, resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=697.7K, nextCallCountActual=5.0K, nextTimeNanosActual=254.0K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=7.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=470.4M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=139, avgNextNanosActual=51, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=3.3M, nextCallCountActual=9.9K, nextTimeNanosActual=544.6K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=12.6K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=226, avgNextNanosActual=55, indexHitRateActual=0.67) [right] +│ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=2.0K, resultSizeEstimate=666, resultSizeActual=9.9K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=9.9K, nextTimeNanosActual=527.3K, sourceRowsScannedActual=19.8K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=792, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=11.6K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=281, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=19.8K, hasNextCallCountActual=29.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=19.8K, nextTimeNanosActual=244.4K, firstRowTimeNanosActual=125, openCountActual=9.9K, bindingsProvidedActual=19.8K, lastRowTimeNanosActual=10.2K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=96, avgNextNanosActual=12) [right] +│ ║ ╚══ Extension (resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=14.0M, nextCallCountActual=11.3K, nextTimeNanosActual=1.6M, firstRowTimeNanosActual=667, openCountActual=19.8K, lastRowTimeNanosActual=667, closeCountActual=19.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=383, avgNextNanosActual=148) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=3.4K, resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=9.0M, nextCallCountActual=11.3K, nextTimeNanosActual=680.9K, sourceRowsScannedActual=31.2K, sourceRowsMatchedActual=11.3K, sourceRowsFilteredActual=19.8K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=19.8K, openCountActual=19.8K, lastRowTimeNanosActual=375, closeCountActual=19.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=247, avgNextNanosActual=60, indexHitRateActual=0.36) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optTrial) (hasNextFalseCountActual=0) +│ ║ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (pathway) +│ ║ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrial) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ │ ║ o: Var (name=result) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] +│ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ │ o: Var (name=arm) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] +│ ║ ║ │ s: Var (name=target) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) +│ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) +│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=3.4K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) +│ ║ │ o: Var (name=trial) (bindingState=unbound) +│ ║ └── ExtensionElem (optTrial) +│ ║ Var (name=trial) (bindingState=bound) +│ ║ GroupElem (_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012) +│ Count (Distinct) +│ Var (name=drug) (bindingState=unbound) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?drug a . +?drug ?target . +?target ?pathway . +VALUES ?marker { } +OPTIONAL { +?drug ?trial . +BIND(?trial AS ?optTrial) +} +FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-2.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-2.md new file mode 100644 index 00000000000..6c121e9137a --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-2.md @@ -0,0 +1,10248 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 51.642 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 131.174 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 87.341 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 87.625 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 197.667 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 41.515 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 64.600 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 82.216 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 58.618 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 305.043 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 346.322 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.136 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 98.569 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.777 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.099 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 4.688 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 731.486 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.374 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 10.024 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 874.961 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 31.329 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 90.552 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 708.021 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 166.127 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 100.388 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 46.993 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 354.255 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 30.031 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 31110.554 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1570.434 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 106.931 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 74.143 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 205.765 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 231.134 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 170.079 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 3.677 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 129.795 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 355.238 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 5.600 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.566 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 6.627 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.391 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 9.062 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 4.758 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 403.742 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1226.737 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 1058.682 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 125.490 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 305.396 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 271.242 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1450.803 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 223.728 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1337.609 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1441.020 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 474.020 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 37.792 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 48.570 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 21.925 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 159.637 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 162.086 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 38.264 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 104.919 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 103.340 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 160.139 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 244.542 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 212.075 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.019 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 53.870 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 89.466 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 335.819 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 123.834 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 34.315 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 93.504 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 107.823 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.677 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.979 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 387.730 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 16.866 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.253 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.167 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 27.848 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 38.642 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 6.773 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 10.949 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 35.563 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 29.450 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 20.363 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 258.264 ms/op +``` + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc010a88a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +Loading theme dataset: MEDICAL_RECORDS +Loading theme dataset: SOCIAL_MEDIA +Loading theme dataset: LIBRARY +Loading theme dataset: ENGINEERING +Loading theme dataset: HIGHLY_CONNECTED +Loading theme dataset: TRAIN +Loading theme dataset: ELECTRICAL_GRID +Loading theme dataset: PHARMA +73.296 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +51.642 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 51.642 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 01:47:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +187.068 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity ?code . + ?entity a . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +131.174 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 131.174 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 01:04:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +122.513 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=date) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ │ ValueConstant (value="2024-02-01"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?practitioner . + ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +87.341 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 87.341 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:49:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +123.707 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +87.625 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 87.625 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:42:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +286.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="DX-200") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=code) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="DX-201") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ s: Var (name=cond) (bindingState=bound) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +197.667 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 197.667 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:37:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +61.595 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ │ ╠══ ListMemberOperator + │ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ │ o: Var (name=enc) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + FILTER NOT EXISTS { + ?enc ?cond . + } + VALUES ?limit { 55 } +} + +41.515 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.515 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:34:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +68.068 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_40986d1530202c24961b195abcd7bd1a8760123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +64.600 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 64.600 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:32:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +119.731 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ │ Var (name=patient) + │ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ Var (name=med) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +82.216 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 82.216 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:30:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +86.699 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ ║ Var (name=patient) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +58.618 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 58.618 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:28:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +428.822 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ │ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.6K) [right] + │ ║ │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) + │ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc a . + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +305.043 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 305.043 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:27:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +506.120 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=8.0K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ o: Var (name=m2) (bindingState=unbound) + │ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1005") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) + │ ║ │ Var (name=c) + │ ║ │ ValueConstant (value="MED-1005") + │ ║ │ , plannedLookupComponents=[P, S]) + │ ║ │ s: Var (name=m2) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +346.322 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 346.322 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:26:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.093 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ Var (name=v) (bindingState=bound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ │ │ │ Var (name=u) + │ ║ │ │ │ Var (name=v) + │ ║ │ │ │ ) + │ ║ │ │ │ s: Var (name=u) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +2.136 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.136 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:25:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +145.759 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ │ ├── Exists + │ ║ │ │ Filter + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="user0") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="user1") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] + │ ║ │ ║ │ ║ ├── Filter [left] + │ ║ │ ║ │ ║ │ ╠══ And + │ ║ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ └── Compare (!=) + │ ║ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.2K) + │ ║ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ │ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ │ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ │ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ ║ │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + VALUES ?u3 { } + ?u1 ?u3 . + FILTER ((?u2 != ?u3) && (?u1 != ?u3)) + ?u2 ?u1 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) + } +} + +98.569 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 98.569 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:24:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.135 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] + │ ║ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ , Compare (!=) + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER EXISTS { + ?v ?u . + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +2.777 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.777 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:24:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.017 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?v { } + ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +2.099 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.099 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:23:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.842 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] + │ ║ ║ ╠══ Not + │ ║ ║ ║ Exists + │ ║ ║ ║ Extension + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +4.688 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.688 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:22:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1030.599 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Join (HashJoinIteration) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union (new scope) [right] + │ ║ ║ ╠══ Extension (new scope) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ Extension (new scope) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ └── ExtensionElem (activity) + │ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { } + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post ?u . + BIND(?post AS ?activity) + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +731.486 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 731.486 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:22:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.483 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?v { } + ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +2.374 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.374 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:21:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.313 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] + │ ║ ║ │ │ ├── Compare (!=) + │ ║ ║ │ │ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ │ │ Var (name=v) (bindingState=bound) + │ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists + │ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ │ Var (name=v) + │ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ Var (name=u) + │ ║ ║ │ │ , Compare (!=) + │ ║ ║ │ │ Var (name=u) + │ ║ ║ │ │ Var (name=v) + │ ║ ║ │ │ ) + │ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER EXISTS { + ?v ?u . + } + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +10.024 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.024 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:21:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1192.679 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +874.961 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 874.961 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:20:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +44.765 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ║ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +31.329 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.329 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:20:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +130.795 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] + │ ║ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) + │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ │ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ │ │ ║ ├── Compare (!=) + │ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) + │ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ │ │ ║ ║ ├── Filter [left] + │ ║ ║ │ │ │ ║ ║ │ ╠══ And + │ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) + │ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?a != ?c) && (?b != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +90.552 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 90.552 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:19:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1015.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +708.021 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 708.021 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:19:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +236.397 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +166.127 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 166.127 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:19:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +144.325 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4847357f353acef49b4b29328e6c6fcfa510123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=authorName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Author 1") + │ ║ │ │ ValueConstant (value="Author 2") + │ ║ │ │ ValueConstant (value="Author 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +100.388 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 100.388 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:18:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +74.725 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?member . + ?loan a . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +46.993 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.993 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:18:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +516.836 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +354.255 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 354.255 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:18:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.533 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=due) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ Var (name=loan) + │ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ ║ Var (name=due) + │ ║ ║ ) + │ ║ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=511, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], plannedLookupComponents=[S, P, O]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=loanDate) (bindingState=bound) + │ ║ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ ValueConstant (value="2024-01-02"^^) + │ ║ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ o: Var (name=loanDate) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^ } + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +30.031 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 30.031 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:17:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +34773.242 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) (bindingState=bound) + │ ║ │ Var (name=member) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) (bindingState=bound) + │ ║ GroupElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan ?member . + ?loan a . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +31110.554 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31110.554 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:18:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000600011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2262.774 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] + │ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ │ ║ Var (name=copy) + │ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ │ ║ ) + │ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy ?branch . + ?copy a . + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + FILTER EXISTS { + ?copy a . + } + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +1570.434 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1570.434 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:18:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +154.097 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ o: Var (name=author) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?member . + ?loan ?copy . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + ?loan a . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +106.931 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 106.931 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:18:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +109.110 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ │ ║ │ ║ │ ║ ╠══ Or + │ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or + │ ║ ║ │ ║ │ ║ │ ║ Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=target) + │ ║ ║ │ ║ │ ║ │ ║ Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ║ s: Var (name=member) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?author ?authorName . + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + ?book ?author . + ?book ?copy . + ?loan ?copy . + ?loan a . + ?loan ?member . + ?member a . + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +74.143 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 74.143 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:17:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +289.298 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[P, S]) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +205.765 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 205.765 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:17:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +243.518 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +231.134 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 231.134 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:16:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +239.181 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +170.079 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 170.079 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:16:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.507 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_02721af97b5d5797d4075b575bde9a4da065b, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=assemblyName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ValueConstant (value="Assembly 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=assemblyName) + │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ ValueConstant (value="Assembly 2") + │ ║ │ ValueConstant (value="Assembly 3") + │ ║ │ ) + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +3.677 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.677 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:16:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +189.436 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement ?component . + ?requirement a . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +129.795 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 129.795 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:15:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +518.212 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Component 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Component 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +355.238 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 355.238 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:15:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.504 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=value2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ Var (name=measurement) + │ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ Var (name=value2) + │ ║ ║ ) + │ ║ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=78, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], plannedLookupComponents=[P, S, O]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="0.9"^^) + │ ║ │ ValueConstant (value="0.95"^^) + │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +5.600 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.600 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:15:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +376.636 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement ?component . + ?requirement a . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +245.566 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 245.566 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:14:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.451 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) + │ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ │ Var (name=requirement) + │ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ Var (name=component) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=27, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[P, S]) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +6.627 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.627 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:14:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.476 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?component a . + ?component ?assembly . + ?requirement a . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +4.391 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.391 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:13:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.588 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +9.062 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.062 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:13:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.909 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=Or + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ) + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +4.758 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.758 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:13:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +419.733 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +403.742 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 403.742 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:12:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1721.876 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1226.737 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1226.737 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:12:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1563.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ ValueConstant (value="1"^^) + │ ║ │ │ ValueConstant (value="2"^^) + │ ║ │ │ ValueConstant (value="3"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?neighbor . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1058.682 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1058.682 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:12:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +131.387 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +125.490 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 125.490 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:11:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +442.220 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +305.396 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 305.396 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:11:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +378.359 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=w2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ Var (name=node) + │ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ Var (name=w2) + │ ║ ║ ) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="4"^^) + │ ║ │ ValueConstant (value="5"^^) + │ ║ │ ValueConstant (value="6"^^) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +271.242 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 271.242 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:11:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2102.107 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_058b31be46df25465c99c5913497ab9733, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_058b31be46df25465c99c5913497ab9733) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_058b31be46df25465c99c5913497ab9733) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1450.803 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1450.803 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:10:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +313.209 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=neighbor) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +223.728 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 223.728 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:10:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1835.098 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] + │ ║ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ Var (name=end) + │ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ Var (name=node) + │ ║ ║ ) + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1337.609 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1337.609 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:10:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1546.988 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8443e8b506d40048ad8022cd3559f864e101234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1441.020 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1441.020 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:10:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +679.480 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.0K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ ╠══ Compare (<) + │ ║ │ ║ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ║ , plannedLookupComponents=[S, P]) + │ ║ │ ║ s: Var (name=n2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] + │ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ │ │ Exists + │ ║ │ │ Join (resultSizeEstimate=127.0K) + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=n2) + │ ║ │ │ Filter + │ ║ │ │ Compare (<) + │ ║ │ │ Var (name=w2) + │ ║ │ │ Var (name=threshold) + │ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ Var (name=n2) + │ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ Var (name=w2) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ValueConstant (value="4"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_261b186d14e6aef456d8325c960be07cc6e01) + │ ║ Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_261b186d14e6aef456d8325c960be07cc6e01) + } +} + +474.020 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 474.020 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:09:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +39.698 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +37.792 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 37.792 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:09:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +68.254 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +48.570 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 48.570 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:09:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +32.847 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=lineName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Line 0") + │ ║ │ │ ValueConstant (value="Line 1") + │ ║ │ │ ValueConstant (value="Line 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +21.925 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 21.925 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:08:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +230.308 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section ?line . + ?section a . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +159.637 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 159.637 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:08:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +235.334 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +162.086 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 162.086 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:08:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (>) + │ ║ ║ Var (name=late) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ Var (name=service) + │ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ Var (name=late) + │ ║ ║ ) + │ ║ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], plannedLookupComponents=[P, O, S]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ └── StatementPattern (resultSizeEstimate=25.8K) + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ o: Var (name=time) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^ } + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +38.264 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.264 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:07:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +152.221 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_09631b95168022b44c782f4e22240fe1963, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_09631b95168022b44c782f4e22240fe1963) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_09631b95168022b44c782f4e22240fe1963) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +104.919 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 104.919 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:07:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +152.071 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ │ Var (name=service) + │ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ │ Var (name=op) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +103.340 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 103.340 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:07:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +233.351 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?s1 . + ?s1 ?line . + ?service a . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +160.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 160.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:06:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +360.407 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0526a87f6c473a74a5b8969e381c95d73eb, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[P, S, O]) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +244.542 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 244.542 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:06:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +308.411 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +212.075 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 212.075 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:06:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +66.485 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +46.019 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.019 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:06:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000301120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +78.989 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?substation ?name . + ?entity ?substation . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +53.870 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.870 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:05:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +130.219 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_076216e8764c0ae4eeabd25208dcd347bb4, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 0") + │ ║ │ │ ValueConstant (value="Substation 1") + │ ║ │ │ ValueConstant (value="Substation 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a . + ?transformer ?substation . + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +89.466 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 89.466 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:05:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +487.637 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) + │ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +335.819 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 335.819 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:05:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +179.928 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Substation 1") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?substation . + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +123.834 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 123.834 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:04:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.313 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=cap2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ Var (name=generator) + │ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ Var (name=cap2) + │ ║ ║ ) + │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=470, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], plannedLookupComponents=[O, S, P]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=capacity) (bindingState=bound) + │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ValueConstant (value="800"^^) + │ ║ │ ValueConstant (value="900"^^) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=capacity) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +34.315 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 34.315 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:04:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +136.375 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_47731a99100374d4267827330a3c2ecdd090123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +93.504 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 93.504 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +159.353 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ │ ║ Var (name=transformer) + │ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ │ ║ Var (name=meter) + │ ║ │ │ ║ ) + │ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a . + ?transformer ?substation . + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +107.823 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 107.823 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:03:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +21.250 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5604866bb553a18f43ff9cac17a76b74474901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) + │ ║ │ ║ Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation ?name . + ?substation a . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +14.677 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 14.677 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:03:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.627 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator + │ ║ │ ║ │ Var (name=cap) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ │ ) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +5.979 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.979 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +557.193 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?load ?value . + ?meter ?load . + ?meter a . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +387.730 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 387.730 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:03:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +25.228 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (>) + │ ║ ║ ║ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] + │ ║ ║ Compare (<) + │ ║ ║ Var (name=p) + │ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ Compare (>) + │ ║ ║ Var (name=effect) + │ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?drug . + ?arm ?result . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +16.866 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 16.866 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:02:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.982 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + ?combo a . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +3.253 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.253 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.883 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?target a . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +32.167 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.167 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +42.057 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + ║ ├── Not + ║ │ Exists + ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ o: Var (name=disease) (bindingState=bound) + ║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) + ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] + ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + ║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) + ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, S, P]) [right] + ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[P, S]) [right] + ║ ║ │ ║ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[P, S], unlockedFilters=Not [right] + ║ ║ │ Exists + ║ ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ ║ │ Var (name=drug) + ║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ ║ │ Var (name=disease) + ║ ║ │ ) + ║ ║ │ s: Var (name=arm) (bindingState=bound) + ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ ║ │ o: Var (name=drug) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[P, S]) [right] + ║ ║ s: Var (name=arm) (bindingState=bound) + ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ ║ o: Var (name=result) (bindingState=unbound) + ║ ╚══ Filter (resultSizeEstimate=1.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[P, S]) [right] + ║ ├── Compare (>) + ║ │ Var (name=rate) (bindingState=bound) + ║ │ ValueConstant (value="0.6"^^) + ║ └── StatementPattern (resultSizeEstimate=2.9K) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) + +SELECT ?drug ?disease WHERE { + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?drug . + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +27.848 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 27.848 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:01:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.198 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[P, S]) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + { + { + ?drug ?mol . + ?drug a . + } + } + ?mol ?class . + } + UNION + { + { + { + ?combo ?drug . + ?combo a . + ?drug ?mol . + } + } + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +38.642 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.642 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.393 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?trial ?arm . + ?trial a . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +6.773 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.773 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +16.467 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] + │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +10.949 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.949 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +53.799 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) + │ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ └── Filter (resultSizeEstimate=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) (bindingState=bound) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial ?arm . + ?trial a . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +35.563 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 35.563 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +41.725 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +29.450 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 29.450 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +30.263 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_0025d4a630759f094f50983e40d4cbd8113a, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial ?arm . + ?trial a . + ?arm ?drug . + ?arm ?result . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +20.363 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.363 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +374.084 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_483a537e636433f44b583e838d50a0511570123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] + │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_483a537e636433f44b583e838d50a0511570123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_483a537e636433f44b583e838d50a0511570123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?drug a . + ?drug ?target . + ?target ?pathway . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +258.264 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 258.264 ms/op + + +# Run complete. Total time: 00:24:42 +``` diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md new file mode 100644 index 00000000000..6c121e9137a --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md @@ -0,0 +1,10248 @@ +``` +Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 51.642 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 131.174 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 87.341 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 87.625 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 197.667 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 41.515 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 64.600 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 82.216 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 58.618 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 305.043 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 346.322 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.136 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 98.569 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.777 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.099 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 4.688 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 731.486 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.374 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 10.024 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 874.961 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 31.329 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 90.552 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 708.021 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 166.127 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 100.388 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 46.993 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 354.255 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 30.031 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 31110.554 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1570.434 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 106.931 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 74.143 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 205.765 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 231.134 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 170.079 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 3.677 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 129.795 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 355.238 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 5.600 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.566 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 6.627 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.391 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 9.062 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 4.758 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 403.742 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1226.737 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 1058.682 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 125.490 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 305.396 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 271.242 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1450.803 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 223.728 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1337.609 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1441.020 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 474.020 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 37.792 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 48.570 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 21.925 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 159.637 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 162.086 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 38.264 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 104.919 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 103.340 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 160.139 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 244.542 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 212.075 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.019 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 53.870 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 89.466 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 335.819 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 123.834 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 34.315 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 93.504 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 107.823 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.677 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.979 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 387.730 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 16.866 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.253 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.167 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 27.848 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 38.642 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 6.773 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 10.949 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 35.563 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 29.450 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 20.363 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 258.264 ms/op +``` + +``` +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 0) + +# Run progress: 0.00% complete, ETA 00:22:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:recordedOn ?date . + BIND(?date AS ?optDate) + } + FILTER(?optDate >= "2024-06-01"^^xsd:date) + OPTIONAL { ?patient med:hasMedication ?med . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc010a88a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +Loading theme dataset: MEDICAL_RECORDS +Loading theme dataset: SOCIAL_MEDIA +Loading theme dataset: LIBRARY +Loading theme dataset: ENGINEERING +Loading theme dataset: HIGHLY_CONNECTED +Loading theme dataset: TRAIN +Loading theme dataset: ELECTRICAL_GRID +Loading theme dataset: PHARMA +73.296 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} + +51.642 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 51.642 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) + +# Run progress: 1.14% complete, ETA 01:47:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "DX-200" "DX-201" } + { ?entity a med:Condition ; med:code ?code . } + UNION + { ?entity a med:Medication ; med:code ?code . } + FILTER(?code = ?target || ?code = "DX-202") + OPTIONAL { ?entity med:code ?alt . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +187.068 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity ?code . + ?entity a . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } +} + +131.174 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 131.174 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) + +# Run progress: 2.27% complete, ETA 01:04:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc a med:Encounter ; med:handledBy ?practitioner ; med:recordedOn ?date . + FILTER(?date IN ("2024-01-01"^^xsd:date, "2024-02-01"^^xsd:date)) + OPTIONAL { ?enc med:hasCondition ?cond . } +} +GROUP BY ?practitioner +HAVING(COUNT(?enc) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +122.513 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=date) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ │ ValueConstant (value="2024-02-01"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?enc ?practitioner . + ?enc a . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + OPTIONAL { + ?enc ?cond . + } +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + +87.341 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 87.341 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) + +# Run progress: 3.41% complete, ETA 00:49:31 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter/med:hasObservation ?obs . + ?obs med:value ?value . + BIND(?value AS ?optValue) + } + FILTER(?optValue > 60) + MINUS { ?patient med:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "test")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +123.707 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] + │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } +} + +87.625 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 87.625 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) + +# Run progress: 4.55% complete, ETA 00:42:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?code . + FILTER(?code = "DX-200" || ?code = "DX-201") + FILTER EXISTS { ?enc med:hasObservation ?obs . } + OPTIONAL { ?enc med:handledBy ?practitioner . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +286.625 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="DX-200") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=code) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="DX-201") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ s: Var (name=cond) (bindingState=bound) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } +} + +197.667 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 197.667 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) + +# Run progress: 5.68% complete, ETA 00:37:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + VALUES ?limit { 55 } + ?patient a med:Patient ; med:hasEncounter ?enc . + ?enc med:hasObservation ?obs . + ?obs med:value ?value . + FILTER(?value IN (50, 60, 70)) + FILTER NOT EXISTS { ?enc med:hasCondition ?cond . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +61.595 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ │ ╠══ ListMemberOperator + │ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ │ o: Var (name=enc) (bindingState=bound) + │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + ?enc ?obs . + ?patient ?enc . + ?patient a . + FILTER NOT EXISTS { + ?enc ?cond . + } + VALUES ?limit { 55 } +} + +41.515 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 41.515 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) + +# Run progress: 6.82% complete, ETA 00:34:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { ?patient a med:Patient . } + UNION + { ?patient med:hasEncounter ?enc . } + OPTIONAL { + ?patient med:hasMedication ?med . + BIND(?med AS ?optMed) + } + FILTER(?optMed != ?patient) +} +GROUP BY ?patient +HAVING(COUNT(?med) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +68.068 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_40986d1530202c24961b195abcd7bd1a8760123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + +64.600 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 64.600 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) + +# Run progress: 7.95% complete, ETA 00:32:08 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a med:Medication ; med:code ?code . + FILTER(?code = "MED-1000" || ?code = "MED-1001") + FILTER EXISTS { ?patient med:hasMedication ?med . } + MINUS { ?med med:dosage ?dose . FILTER(CONTAINS(LCASE(STR(?dose)), "x")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +119.731 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ │ Var (name=patient) + │ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ Var (name=med) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} + +82.216 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 82.216 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) + +# Run progress: 9.09% complete, ETA 00:30:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a med:Patient . + OPTIONAL { + ?patient med:hasEncounter ?enc . + ?enc med:handledBy ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER(?optPractitioner != ?patient) + FILTER EXISTS { ?enc med:hasCondition ?cond . } +} +GROUP BY ?patient +HAVING(COUNT(?enc) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +86.699 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ ║ Var (name=patient) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + +58.618 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 58.618 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) + +# Run progress: 10.23% complete, ETA 00:28:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + VALUES ?code { "DX-200" "DX-201" } + ?enc a med:Encounter ; med:hasCondition ?cond . + ?cond med:code ?condCode . + FILTER(?condCode IN ("DX-200", "DX-201", "DX-202")) + OPTIONAL { ?enc med:handledBy ?practitioner . } + MINUS { ?enc med:hasObservation ?obs . ?obs med:value ?value . FILTER(?value < 60) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +428.822 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ │ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.6K) [right] + │ ║ │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) + │ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] + │ ║ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (<) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="60"^^) + │ ║ └── StatementPattern (resultSizeEstimate=49.7K) + │ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc a . + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + { + { + ?obs ?value . + FILTER (?value < 60) + } + } + } +} + +305.043 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 305.043 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) + +# Run progress: 11.36% complete, ETA 00:27:44 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX med: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { ?patient a med:Patient ; med:hasMedication ?med . } + UNION + { ?patient a med:Patient ; med:hasEncounter ?enc . ?enc med:hasObservation ?obs . } + OPTIONAL { ?patient med:name ?optName . } + FILTER(?optName != "") + FILTER NOT EXISTS { ?patient med:hasMedication ?m2 . ?m2 med:code ?c . + FILTER(?c = "MED-1005") } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +506.120 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=8.0K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ o: Var (name=m2) (bindingState=unbound) + │ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1005") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) + │ ║ │ Var (name=c) + │ ║ │ ValueConstant (value="MED-1005") + │ ║ │ , plannedLookupComponents=[P, S]) + │ ║ │ s: Var (name=m2) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + +346.322 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 346.322 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) + +# Run progress: 12.50% complete, ETA 00:26:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?u { + + } + VALUES ?v { + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.093 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u) (bindingState=bound) + │ ║ │ │ ║ Var (name=v) (bindingState=bound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ │ │ │ Var (name=u) + │ ║ │ │ │ Var (name=v) + │ ║ │ │ │ ) + │ ║ │ │ │ s: Var (name=u) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + +2.136 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.136 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) + +# Run progress: 13.64% complete, ETA 00:25:48 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES ?u1 { + + } + VALUES ?u2 { + + } + VALUES ?u3 { + + } + FILTER(?u1 != ?u2 && ?u1 != ?u3 && ?u2 != ?u3) + ?u1 social:follows ?u2 . + ?u2 social:follows ?u1 . + ?u1 social:follows ?u3 . + ?u3 social:follows ?u1 . + ?u2 social:follows ?u3 . + ?u3 social:follows ?u2 . + FILTER EXISTS { ?u1 social:name ?name . + FILTER(?name = "user0" || ?name = "user1") } + MINUS { ?u1 social:follows ?u1 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +145.759 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ │ ├── Exists + │ ║ │ │ Filter + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="user0") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="user1") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] + │ ║ │ ║ │ ║ ├── Filter [left] + │ ║ │ ║ │ ║ │ ╠══ And + │ ║ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ └── Compare (!=) + │ ║ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.2K) + │ ║ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ │ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ │ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ │ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ │ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ ║ │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + VALUES ?u3 { } + ?u1 ?u3 . + FILTER ((?u2 != ?u3) && (?u1 != ?u3)) + ?u2 ?u1 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER EXISTS { + ?u1 ?name . + FILTER ((?name = "user0") || (?name = "user1")) + } + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) + } +} + +98.569 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 98.569 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) + +# Run progress: 14.77% complete, ETA 00:24:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") + FILTER EXISTS { ?v social:follows ?u . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.135 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] + │ ║ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ , Compare (!=) + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER EXISTS { + ?v ?u . + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +2.777 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.777 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) + +# Run progress: 15.91% complete, ETA 00:24:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?u { + + + } + VALUES ?v { + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.017 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { + VALUES ?v { } + ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + +2.099 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.099 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) + +# Run progress: 17.05% complete, ETA 00:23:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + } + VALUES ?v { + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER NOT EXISTS { ?u social:follows ?u . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.842 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] + │ ║ ║ ╠══ Not + │ ║ ║ ║ Exists + │ ║ ║ ║ Extension + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") +} + +4.688 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.688 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) + +# Run progress: 18.18% complete, ETA 00:22:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { + + + + } + { + ?u social:follows ?v . + ?v social:follows ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post social:authored ?u . + BIND(?post AS ?activity) + } + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1030.599 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Join (HashJoinIteration) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union (new scope) [right] + │ ║ ║ ╠══ Extension (new scope) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ Extension (new scope) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ └── ExtensionElem (activity) + │ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { + VALUES ?u { } + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post ?u . + BIND(?post AS ?activity) + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +731.486 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 731.486 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) + +# Run progress: 19.32% complete, ETA 00:22:23 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + OPTIONAL { ?u social:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?u +HAVING(COUNT(DISTINCT ?v) >= 5) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +3.483 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] + │ ║ ║ ║ Var (name=u) + │ ║ ║ ║ Var (name=v) + │ ║ ║ ║ ) + │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) + +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { + VALUES ?v { } + ?u ?v . + VALUES ?u { } + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + +2.374 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 2.374 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) + +# Run progress: 20.45% complete, ETA 00:21:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?u { + + + + + } + VALUES ?v { + + + + + } + FILTER(?u != ?v) + ?u social:follows ?v . + FILTER EXISTS { ?v social:follows ?u . } + MINUS { ?v social:follows ?v . } + OPTIONAL { ?v social:name ?optName . } + FILTER(?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +14.313 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] + │ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] + │ ║ ║ │ │ ├── Compare (!=) + │ ║ ║ │ │ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ │ │ Var (name=v) (bindingState=bound) + │ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists + │ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ │ Var (name=v) + │ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ Var (name=u) + │ ║ ║ │ │ , Compare (!=) + │ ║ ║ │ │ Var (name=u) + │ ║ ║ │ │ Var (name=v) + │ ║ ║ │ │ ) + │ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) + │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + VALUES ?u { } + FILTER EXISTS { + ?v ?u . + } + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + +10.024 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.024 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) + +# Run progress: 21.59% complete, ETA 00:21:19 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { ?a social:name ?optName . } + FILTER(?optName IN ("user0", "user1", "user2")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1192.679 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} + +874.961 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 874.961 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) + +# Run progress: 22.73% complete, ETA 00:20:53 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?a) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?a . + OPTIONAL { ?b social:name ?optName . BIND(?optName AS ?optAlias) } + FILTER(?optAlias != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +44.765 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ║ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") +} + +31.329 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31.329 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) + +# Run progress: 23.86% complete, ETA 00:20:25 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX social: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES ?a { + + + + } + VALUES ?b { + + + + } + VALUES ?c { + + + + } + VALUES ?d { + + + + } + VALUES ?e { + + + + } + FILTER(?a != ?b && ?b != ?c && ?c != ?d && ?d != ?e && ?a != ?c) + ?a social:follows ?b . + ?b social:follows ?c . + ?c social:follows ?d . + ?d social:follows ?e . + ?e social:follows ?a . + FILTER EXISTS { ?a social:name ?name . + FILTER(?name = "user7" || ?name = "user8") } + OPTIONAL { ?e social:name ?optName . } + FILTER(?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +130.795 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] + │ ║ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ │ ╠══ Compare (!=) + │ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) + │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) + │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ │ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ │ │ ║ ├── Compare (!=) + │ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) + │ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] + │ ║ ║ │ │ │ ║ ║ ├── Filter [left] + │ ║ ║ │ │ │ ║ ║ │ ╠══ And + │ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) + │ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + FILTER ((?a != ?c) && (?b != ?c)) + ?b ?c . + VALUES ?d { } + FILTER (?c != ?d) + ?c ?d . + VALUES ?e { } + FILTER (?d != ?e) + ?d ?e . + ?e ?a . + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + +90.552 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 90.552 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 0) + +# Run progress: 25.00% complete, ETA 00:19:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book . + OPTIONAL { + ?book lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + BIND(?branch AS ?optBranch) + } + FILTER(?optBranch != ?book) + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1015.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} + +708.021 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 708.021 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 1) + +# Run progress: 26.14% complete, ETA 00:19:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Member 1" "Member 2" } + { ?entity a lib:Member ; lib:name ?name . } + UNION + { ?entity a lib:Book ; lib:title ?name . } + FILTER(?name = ?target || ?name = "Member 3") + OPTIONAL { ?entity lib:hasCopy ?copy . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +236.397 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } +} + +166.127 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 166.127 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 2) + +# Run progress: 27.27% complete, ETA 00:19:10 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a lib:Author ; lib:name ?authorName . + FILTER(?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { ?book lib:writtenBy ?author . } +} +GROUP BY ?author +HAVING(COUNT(?book) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +144.325 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4847357f353acef49b4b29328e6c6fcfa510123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=authorName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Author 1") + │ ║ │ │ ValueConstant (value="Author 2") + │ ║ │ │ ValueConstant (value="Author 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author a . + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + +100.388 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 100.388 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 3) + +# Run progress: 28.41% complete, ETA 00:18:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan a lib:Loan ; lib:borrowedBy ?member . + OPTIONAL { + ?loan lib:dueDate ?due . + BIND(?due AS ?optDue) + } + FILTER(?optDue > "2024-01-10"^^xsd:date) + MINUS { ?member lib:name ?name . FILTER(CONTAINS(LCASE(STR(?name)), "member 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +74.725 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?member . + ?loan a . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } +} + +46.993 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.993 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 4) + +# Run progress: 29.55% complete, ETA 00:18:22 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a lib:Book ; lib:title ?title . + FILTER(?title = "Book 1" || ?title = "Book 2") + FILTER EXISTS { ?book lib:hasCopy ?copy . } + OPTIONAL { ?book lib:writtenBy ?author . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +516.836 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Book 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=title) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Book 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} + +354.255 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 354.255 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 5) + +# Run progress: 30.68% complete, ETA 00:18:00 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^xsd:date } + ?loan a lib:Loan ; lib:loanDate ?loanDate . + FILTER(?loanDate IN ("2024-01-01"^^xsd:date, "2024-01-02"^^xsd:date)) + FILTER NOT EXISTS { ?loan lib:dueDate ?due . FILTER(?due < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +43.533 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=due) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ Var (name=loan) + │ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ ║ Var (name=due) + │ ║ ║ ) + │ ║ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=511, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], plannedLookupComponents=[S, P, O]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=loanDate) (bindingState=bound) + │ ║ │ ValueConstant (value="2024-01-01"^^) + │ ║ │ ValueConstant (value="2024-01-02"^^) + │ ║ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ o: Var (name=loanDate) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + VALUES ?threshold { "2024-01-01"^^ } + ?loan a . + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} + +30.031 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 30.031 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 6) + +# Run progress: 31.82% complete, ETA 00:17:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { ?loan a lib:Loan ; lib:borrowedBy ?member . } + UNION + { ?member a lib:Member . } + OPTIONAL { + ?loan lib:loanedCopy ?copy . + BIND(?copy AS ?optCopy) + } + FILTER(?optCopy != ?member) +} +GROUP BY ?member +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +34773.242 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) (bindingState=bound) + │ ║ │ Var (name=member) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) (bindingState=bound) + │ ║ GroupElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + { + ?loan ?member . + ?loan a . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + +31110.554 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 31110.554 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 7) + +# Run progress: 32.95% complete, ETA 00:18:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy a lib:Copy ; lib:locatedAt ?branch . + ?branch lib:name ?branchName . + FILTER(?branchName = "Branch 0" || ?branchName = "Branch 1") + FILTER EXISTS { ?copy a lib:Copy . } + MINUS { ?copy lib:locatedAt ?branch . FILTER(CONTAINS(STR(?branch), "branch/0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000600011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2262.774 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] + │ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ │ ║ Var (name=copy) + │ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ │ ║ ) + │ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?copy ?branch . + ?copy a . + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + FILTER EXISTS { + ?copy a . + } + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} + +1570.434 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1570.434 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 8) + +# Run progress: 34.09% complete, ETA 00:18:37 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?book a lib:Book ; lib:writtenBy ?author ; lib:hasCopy ?copy . + ?copy lib:locatedAt ?branch . + ?loan a lib:Loan ; lib:loanedCopy ?copy ; lib:borrowedBy ?member . + OPTIONAL { ?member lib:name ?optName . } + FILTER(?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING(COUNT(?loan) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +154.097 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ o: Var (name=author) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) + +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?member . + ?loan ?copy . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + ?loan a . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + +106.931 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 106.931 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 9) + +# Run progress: 35.23% complete, ETA 00:18:11 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?member a lib:Member . + ?loan a lib:Loan ; lib:borrowedBy ?member ; lib:loanedCopy ?copy . + ?book lib:hasCopy ?copy ; lib:writtenBy ?author . + ?author lib:name ?authorName . + FILTER(?authorName = ?target || ?authorName = "Author 3") + FILTER NOT EXISTS { ?loan lib:dueDate ?due . + FILTER(?due < "2024-01-10"^^xsd:date) } + OPTIONAL { ?book lib:title ?optTitle . } + FILTER(?optTitle != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +109.110 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ │ ║ │ ║ │ ║ ╠══ Or + │ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or + │ ║ ║ │ ║ │ ║ │ ║ Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=target) + │ ║ ║ │ ║ │ ║ │ ║ Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) + │ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ o: Var (name=member) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ║ s: Var (name=member) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + VALUES ?target { "Author 1" "Author 2" } + ?author ?authorName . + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + ?book ?author . + ?book ?copy . + ?loan ?copy . + ?loan a . + ?loan ?member . + ?member a . + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + +74.143 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 74.143 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = LIBRARY, z_queryIndex = 10) + +# Run progress: 36.36% complete, ETA 00:17:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX lib: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { ?branch a lib:Branch . } + UNION + { ?branch a lib:Branch ; lib:name ?name . } + OPTIONAL { ?copy lib:locatedAt ?branch . BIND(?copy AS ?optCopy) } + FILTER(?optCopy != ?branch) + MINUS { ?branch lib:name ?name2 . + FILTER(CONTAINS(LCASE(STR(?name2)), "branch 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +289.298 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[P, S]) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } +} + +205.765 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 205.765 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 0) + +# Run progress: 37.50% complete, ETA 00:17:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component . + OPTIONAL { ?component eng:partOf ?assembly . BIND(?assembly AS ?optAssembly) } + FILTER(?optAssembly != ?component) + OPTIONAL { ?component eng:dependsOn ?dep . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +243.518 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } +} + +231.134 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 231.134 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 1) + +# Run progress: 38.64% complete, ETA 00:16:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "REQ-1000" "REQ-1001" } + { ?entity a eng:Requirement ; eng:name ?name . } + UNION + { ?entity a eng:Component ; eng:name ?name . } + FILTER(?name = ?target || ?name = "REQ-1002") + OPTIONAL { ?entity eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +239.181 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } +} + +170.079 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 170.079 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 2) + +# Run progress: 39.77% complete, ETA 00:16:32 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a eng:Assembly ; eng:name ?assemblyName . + FILTER(?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { ?component eng:partOf ?assembly . } +} +GROUP BY ?assembly +HAVING(COUNT(?component) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +5.507 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_02721af97b5d5797d4075b575bde9a4da065b, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=assemblyName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ValueConstant (value="Assembly 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=assemblyName) + │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ ValueConstant (value="Assembly 2") + │ ║ │ ValueConstant (value="Assembly 3") + │ ║ │ ) + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + +3.677 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.677 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 3) + +# Run progress: 40.91% complete, ETA 00:16:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:satisfies ?component . + OPTIONAL { ?requirement eng:verifiedBy ?test . BIND(?test AS ?optTest) } + FILTER(?optTest != ?requirement) + MINUS { ?component eng:name ?name . FILTER(CONTAINS(STR(?name), "Component 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +189.436 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement ?component . + ?requirement a . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} + +129.795 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 129.795 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 4) + +# Run progress: 42.05% complete, ETA 00:15:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a eng:Component ; eng:name ?name . + FILTER(?name = "Component 1" || ?name = "Component 2") + FILTER EXISTS { ?component eng:dependsOn ?dep . } + OPTIONAL { ?component eng:partOf ?assembly . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +518.212 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Component 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Component 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { + ?component a . + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } +} + +355.238 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 355.238 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 5) + +# Run progress: 43.18% complete, ETA 00:15:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a eng:Measurement ; eng:measuredValue ?value . + FILTER(?value IN (0.9, 0.95)) + FILTER NOT EXISTS { ?measurement eng:measuredValue ?value2 . FILTER(?value2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.504 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=value2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ Var (name=measurement) + │ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ Var (name=value2) + │ ║ ║ ) + │ ║ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=78, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], plannedLookupComponents=[P, S, O]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ │ ValueConstant (value="0.9"^^) + │ ║ │ ValueConstant (value="0.95"^^) + │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?measurement a . + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} + +5.600 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.600 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 6) + +# Run progress: 44.32% complete, ETA 00:15:01 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { ?requirement a eng:Requirement ; eng:satisfies ?component . } + UNION + { ?component a eng:Component . } + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) +} +GROUP BY ?component +HAVING(COUNT(?requirement) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +376.636 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + { + ?requirement ?component . + ?requirement a . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + +245.566 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 245.566 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 7) + +# Run progress: 45.45% complete, ETA 00:14:40 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a eng:Requirement ; eng:name ?name . + FILTER(?name = "REQ-1000" || ?name = "REQ-1001") + FILTER EXISTS { ?requirement eng:satisfies ?component . } + MINUS { ?requirement eng:verifiedBy ?test . ?test eng:verifiedBy ?measurement . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +9.451 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) + │ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ │ Var (name=requirement) + │ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ Var (name=component) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=27, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[P, S]) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } +} + +6.627 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.627 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 8) + +# Run progress: 46.59% complete, ETA 00:14:18 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?component a eng:Component ; eng:partOf ?assembly . + OPTIONAL { ?component eng:dependsOn ?dep . BIND(?dep AS ?optDep) } + FILTER(?optDep != ?component) + ?requirement a eng:Requirement ; eng:satisfies ?component . +} +GROUP BY ?component +HAVING(COUNT(?requirement) >= 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.476 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { + ?requirement ?component . + ?component a . + ?component ?assembly . + ?requirement a . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + +4.391 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.391 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 9) + +# Run progress: 47.73% complete, ETA 00:13:57 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + VALUES ?threshold { 0.85 } + ?requirement a eng:Requirement ; eng:verifiedBy ?test . + ?test eng:verifiedBy ?measurement . + ?measurement eng:measuredValue ?value . + FILTER(?value IN (0.85, 0.9, 0.95)) + FILTER EXISTS { ?requirement eng:satisfies ?component . } + OPTIONAL { ?component eng:name ?optName . } + FILTER(?optName != "") +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +13.588 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + +9.062 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 9.062 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ENGINEERING, z_queryIndex = 10) + +# Run progress: 48.86% complete, ETA 00:13:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX eng: +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a eng:Assembly ; eng:name ?name . + FILTER(?name = "Assembly 1" || ?name = "Assembly 2") + OPTIONAL { ?component eng:partOf ?assembly . BIND(?component AS ?optComponent) } + FILTER(?optComponent != ?assembly) + MINUS { ?requirement eng:satisfies ?component . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +6.909 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=Or + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ) + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } +} + +4.758 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 4.758 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) + +# Run progress: 50.00% complete, ETA 00:13:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:connectsTo ?neighbor . BIND(?neighbor AS ?optNeighbor) } + FILTER(?optNeighbor != ?node) + OPTIONAL { ?node conn:weight ?w . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +419.733 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } +} + +403.742 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 403.742 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) + +# Run progress: 51.14% complete, ETA 00:12:54 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { ?entity a conn:Node ; conn:connectsTo ?targetNode . } + UNION + { ?entity a conn:Node . } + OPTIONAL { ?entity conn:weight ?w . } + FILTER(?w = ?target || ?w = 3) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1721.876 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} + +1226.737 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1226.737 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) + +# Run progress: 52.27% complete, ETA 00:12:35 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a conn:Node ; conn:connectsTo ?neighbor . + ?node conn:weight ?w . + FILTER(?w IN (1, 2, 3)) + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1563.614 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ ValueConstant (value="1"^^) + │ ║ │ │ ValueConstant (value="2"^^) + │ ║ │ │ ValueConstant (value="3"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node a . + ?node ?neighbor . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1058.682 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1058.682 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) + +# Run progress: 53.41% complete, ETA 00:12:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node . + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight > 5) + MINUS { ?node conn:connectsTo ?neighbor . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +131.387 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } +} + +125.490 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 125.490 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) + +# Run progress: 54.55% complete, ETA 00:11:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 1 || ?w = 2) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + OPTIONAL { ?neighbor conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +442.220 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } +} + +305.396 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 305.396 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) + +# Run progress: 55.68% complete, ETA 00:11:36 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (4, 5, 6)) + FILTER NOT EXISTS { ?node conn:weight ?w2 . FILTER(?w2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +378.359 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=w2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ Var (name=node) + │ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ Var (name=w2) + │ ║ ║ ) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="4"^^) + │ ║ │ ValueConstant (value="5"^^) + │ ║ │ ValueConstant (value="6"^^) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 4 } + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } +} + +271.242 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 271.242 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) + +# Run progress: 56.82% complete, ETA 00:11:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { ?node a conn:Node ; conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?node conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +2102.107 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_058b31be46df25465c99c5913497ab9733, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_058b31be46df25465c99c5913497ab9733) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_058b31be46df25465c99c5913497ab9733) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + +1450.803 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1450.803 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) + +# Run progress: 57.95% complete, ETA 00:10:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:weight ?w . + FILTER(?w = 8 || ?w = 9) + FILTER EXISTS { ?node conn:connectsTo ?neighbor . } + MINUS { ?neighbor conn:connectsTo ?node . FILTER(?neighbor = ?node) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +313.209 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=neighbor) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } +} + +223.728 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 223.728 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) + +# Run progress: 59.09% complete, ETA 00:10:39 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a conn:Node ; conn:connectsTo ?mid . + ?mid conn:connectsTo ?end . + OPTIONAL { ?node conn:weight ?optWeight . } + FILTER(?optWeight IN (7, 8, 9)) + FILTER EXISTS { ?end conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1835.098 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] + │ ║ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ Var (name=end) + │ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ Var (name=node) + │ ║ ║ ) + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) +} + +1337.609 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1337.609 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) + +# Run progress: 60.23% complete, ETA 00:10:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + { ?node conn:connectsTo ?neighbor . } + UNION + { ?neighbor conn:connectsTo ?node . } + OPTIONAL { ?neighbor conn:weight ?w . BIND(?w AS ?optWeight) } + FILTER(?optWeight != 0) +} +GROUP BY ?node +HAVING(COUNT(?neighbor) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +1546.988 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8443e8b506d40048ad8022cd3559f864e101234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) + +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + +1441.020 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 1441.020 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) + +# Run progress: 61.36% complete, ETA 00:10:02 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX conn: +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a conn:Node ; conn:weight ?w . + FILTER(?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { ?node conn:connectsTo ?n2 . + ?n2 conn:weight ?w2 . FILTER(?w2 < ?threshold) } + MINUS { ?node conn:connectsTo ?node . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +679.480 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.0K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ ╠══ Compare (<) + │ ║ │ ║ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ║ , plannedLookupComponents=[S, P]) + │ ║ │ ║ s: Var (name=n2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] + │ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ │ │ Exists + │ ║ │ │ Join (resultSizeEstimate=127.0K) + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=n2) + │ ║ │ │ Filter + │ ║ │ │ Compare (<) + │ ║ │ │ Var (name=w2) + │ ║ │ │ Var (name=threshold) + │ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ Var (name=n2) + │ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ Var (name=w2) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ValueConstant (value="4"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_261b186d14e6aef456d8325c960be07cc6e01) + │ ║ Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { + VALUES ?threshold { 3 } + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_261b186d14e6aef456d8325c960be07cc6e01) + } +} + +474.020 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 474.020 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 0) + +# Run progress: 62.50% complete, ETA 00:09:43 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService . + OPTIONAL { + ?service train:scheduledTime ?time . + BIND(?time AS ?optTime) + } + FILTER(?optTime > "08:00:00"^^xsd:time) + OPTIONAL { ?service train:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +39.698 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } +} + +37.792 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 37.792 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 1) + +# Run progress: 63.64% complete, ETA 00:09:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "OP 1" "OP 2" } + { ?entity a train:OperationalPoint ; train:name ?name . } + UNION + { ?entity a train:Line ; train:name ?name . } + FILTER(?name = ?target || ?name = "OP 3") + OPTIONAL { ?entity train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +68.254 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } +} + +48.570 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 48.570 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 2) + +# Run progress: 64.77% complete, ETA 00:09:05 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a train:Line ; train:name ?lineName . + FILTER(?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { ?section train:partOfLine ?line . } +} +GROUP BY ?line +HAVING(COUNT(?section) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +32.847 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=lineName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Line 0") + │ ║ │ │ ValueConstant (value="Line 1") + │ ║ │ │ ValueConstant (value="Line 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + +21.925 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 21.925 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 3) + +# Run progress: 65.91% complete, ETA 00:08:46 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section a train:SectionOfLine ; train:partOfLine ?line . + OPTIONAL { ?section train:hasTrackSection ?track . BIND(?track AS ?optTrack) } + FILTER(?optTrack != ?section) + MINUS { ?line train:name ?name . FILTER(CONTAINS(STR(?name), "Line 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +230.308 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { + ?section ?line . + ?section a . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } +} + +159.637 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 159.637 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 4) + +# Run progress: 67.05% complete, ETA 00:08:28 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a train:Line ; train:name ?name . + FILTER(?name = "Line 1" || ?name = "Line 2") + FILTER EXISTS { ?section train:partOfLine ?line . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +235.334 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } +} + +162.086 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 162.086 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 5) + +# Run progress: 68.18% complete, ETA 00:08:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^xsd:time } + ?service a train:TrainService ; train:scheduledTime ?time . + FILTER(?time IN ("08:00:00"^^xsd:time, "09:00:00"^^xsd:time)) + FILTER NOT EXISTS { ?service train:scheduledTime ?late . FILTER(?late > ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +54.073 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (>) + │ ║ ║ Var (name=late) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ Var (name=service) + │ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ Var (name=late) + │ ║ ║ ) + │ ║ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], plannedLookupComponents=[P, O, S]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ └── StatementPattern (resultSizeEstimate=25.8K) + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ o: Var (name=time) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + VALUES ?threshold { "10:00:00"^^ } + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} + +38.264 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.264 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 6) + +# Run progress: 69.32% complete, ETA 00:07:51 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { ?service a train:TrainService ; train:runsOnSection ?section . + ?section train:partOfLine ?line . } + UNION + { ?line a train:Line . } + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName != "") +} +GROUP BY ?line +HAVING(COUNT(?service) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +152.221 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_09631b95168022b44c782f4e22240fe1963, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_09631b95168022b44c782f4e22240fe1963) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_09631b95168022b44c782f4e22240fe1963) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + +104.919 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 104.919 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 7) + +# Run progress: 70.45% complete, ETA 00:07:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a train:OperationalPoint ; train:name ?name . + FILTER(?name = "OP 1" || ?name = "OP 2") + FILTER EXISTS { ?service train:passesThrough ?op . } + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 0")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +152.071 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ │ Var (name=service) + │ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ │ Var (name=op) + │ ║ │ │ ) + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} + +103.340 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 103.340 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 8) + +# Run progress: 71.59% complete, ETA 00:07:14 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a train:TrainService ; train:runsOnSection ?s1 ; train:runsOnSection ?s2 . + ?s1 train:partOfLine ?line . + ?s2 train:partOfLine ?line . + OPTIONAL { ?line train:name ?optName . } + FILTER(?optName IN ("Line 0", "Line 1")) + FILTER EXISTS { ?s1 train:connectsOperationalPoint ?op . + ?s2 train:connectsOperationalPoint ?op . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +233.351 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?s1 . + ?s1 ?line . + ?service a . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + +160.139 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 160.139 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 9) + +# Run progress: 72.73% complete, ETA 00:06:56 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section a train:SectionOfLine ; train:hasTrackSection ?track . + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?op AS ?optOp) } + FILTER(?optOp != ?section) + FILTER EXISTS { ?track a train:TrackSection . } +} +GROUP BY ?section +HAVING(COUNT(?track) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +360.407 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0526a87f6c473a74a5b8969e381c95d73eb, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[P, S, O]) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) + +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + +244.542 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 244.542 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = TRAIN, z_queryIndex = 10) + +# Run progress: 73.86% complete, ETA 00:06:38 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX train: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { ?op a train:OperationalPoint . } + UNION + { ?op a train:OperationalPoint ; train:name ?name . } + OPTIONAL { ?section train:connectsOperationalPoint ?op . BIND(?section AS ?optSection) } + FILTER(?optSection != ?op) + MINUS { ?op train:name ?name2 . FILTER(CONTAINS(LCASE(STR(?name2)), "op 1")) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +308.411 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } +} + +212.075 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 212.075 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) + +# Run progress: 75.00% complete, ETA 00:06:20 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a grid:Substation . + OPTIONAL { ?generator grid:feeds ?substation ; grid:capacity ?cap . BIND(?cap AS ?optCap) } + FILTER(?optCap > 600) + OPTIONAL { ?substation grid:name ?name . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +66.485 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } +} + +46.019 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 46.019 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) + +# Run progress: 76.14% complete, ETA 00:06:03 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + VALUES ?target { "Substation 1" "Substation 2" } + { ?entity a grid:Substation ; grid:name ?name . } + UNION + { ?entity a grid:Generator ; grid:feeds ?substation . ?substation grid:name ?name . } + FILTER(?name = ?target || ?name = "Substation 3") + OPTIONAL { ?entity grid:feeds ?substation2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000301120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +78.989 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?substation ?name . + ?entity ?substation . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} + +53.870 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 53.870 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) + +# Run progress: 77.27% complete, ETA 00:05:45 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?transformer +HAVING(COUNT(?meter) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +130.219 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_076216e8764c0ae4eeabd25208dcd347bb4, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 0") + │ ║ │ │ ValueConstant (value="Substation 1") + │ ║ │ │ ValueConstant (value="Substation 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { + ?transformer a . + ?transformer ?substation . + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + OPTIONAL { + ?transformer ?meter . + } +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + +89.466 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 89.466 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) + +# Run progress: 78.41% complete, ETA 00:05:27 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a grid:Meter ; grid:measures ?load . + OPTIONAL { ?load grid:loadValue ?value . BIND(?value AS ?optValue) } + FILTER(?optValue > 100) + MINUS { ?meter grid:measures ?load2 . ?load2 grid:loadValue ?value2 . FILTER(?value2 > 180) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +487.637 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) + │ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } +} + +335.819 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 335.819 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) + +# Run progress: 79.55% complete, ETA 00:05:09 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:connectsTo ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?line grid:connectsTo ?other . } + OPTIONAL { ?line grid:connectsTo ?other2 . } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +179.928 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Substation 0") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Substation 1") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a . + ?line ?substation . + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } +} + +123.834 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 123.834 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) + +# Run progress: 80.68% complete, ETA 00:04:52 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a grid:Generator ; grid:capacity ?capacity . + FILTER(?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { ?generator grid:capacity ?cap2 . FILTER(?cap2 < ?threshold) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.313 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] + │ ║ ║ Exists + │ ║ ║ Filter + │ ║ ║ Compare (<) + │ ║ ║ Var (name=cap2) + │ ║ ║ Var (name=threshold) + │ ║ ║ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ Var (name=generator) + │ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ Var (name=cap2) + │ ║ ║ ) + │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ Filter (resultSizeEstimate=470, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], plannedLookupComponents=[O, S, P]) [right] + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=capacity) (bindingState=bound) + │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ValueConstant (value="800"^^) + │ ║ │ ValueConstant (value="900"^^) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=capacity) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + VALUES ?threshold { 700 } + ?generator a . + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} + +34.315 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 34.315 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) + +# Run progress: 81.82% complete, ETA 00:04:34 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { ?asset a grid:Transformer ; grid:feeds ?substation . } + UNION + { ?asset a grid:Generator ; grid:feeds ?substation . } + OPTIONAL { ?asset grid:feeds ?substation . BIND(?substation AS ?optSub) } + FILTER(?optSub != ?asset) +} +GROUP BY ?substation +HAVING(COUNT(?asset) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +136.375 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_47731a99100374d4267827330a3c2ecdd090123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + +93.504 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 93.504 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) + +# Run progress: 82.95% complete, ETA 00:04:17 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a grid:Transformer ; grid:feeds ?substation . + ?substation grid:name ?name . + FILTER(?name = "Substation 0" || ?name = "Substation 1") + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } + MINUS { ?meter grid:measures ?load . FILTER(?load = ?substation) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +159.353 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ │ ║ Var (name=transformer) + │ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ │ ║ Var (name=meter) + │ ║ │ │ ║ ) + │ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?transformer a . + ?transformer ?substation . + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} + +107.823 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 107.823 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) + +# Run progress: 84.09% complete, ETA 00:03:59 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation a grid:Substation ; grid:name ?name . + OPTIONAL { ?substation grid:feeds ?transformer . BIND(?transformer AS ?optTransformer) } + FILTER(?optTransformer != ?substation) + FILTER EXISTS { ?transformer grid:hasMeter ?meter . } +} +GROUP BY ?substation +HAVING(COUNT(?transformer) > 0) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +21.250 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5604866bb553a18f43ff9cac17a76b74474901234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) + │ ║ │ ║ Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) + +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { + ?substation ?name . + ?substation a . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + +14.677 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 14.677 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) + +# Run progress: 85.23% complete, ETA 00:03:42 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line a grid:Line ; grid:capacity ?cap . + FILTER(?cap IN (500, 600, 700)) + OPTIONAL { ?line grid:connectsTo ?substation . } + MINUS { ?line grid:capacity ?cap2 . FILTER(?cap2 < 500) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +8.627 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator + │ ║ │ ║ │ Var (name=cap) + │ ║ │ ║ │ ValueConstant (value="500"^^) + │ ║ │ ║ │ ValueConstant (value="600"^^) + │ ║ │ ║ │ ValueConstant (value="700"^^) + │ ║ │ ║ │ ) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } +} + +5.979 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 5.979 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) + +# Run progress: 86.36% complete, ETA 00:03:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX grid: +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { ?meter a grid:Meter ; grid:measures ?load . } + UNION + { ?meter a grid:Meter ; grid:measures ?load . ?load grid:loadValue ?value . } + OPTIONAL { ?load grid:loadValue ?optValue . } + FILTER(?optValue > 200) + FILTER NOT EXISTS { ?load grid:loadValue ?low . FILTER(?low < 50) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +557.193 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?load ?value . + ?meter ?load . + ?meter a . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + +387.730 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 387.730 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 0) + +# Run progress: 87.50% complete, ETA 00:03:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { + } + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:pValue ?p ; pharma:effectSize ?effect . + OPTIONAL { ?result pharma:biomarker ?marker . BIND(?marker AS ?optMarker) } + FILTER(?optMarker != ) + FILTER(?p < 0.05 || ?effect > 0.7) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +25.228 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (>) + │ ║ ║ ║ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] + │ ║ ║ Compare (<) + │ ║ ║ Var (name=p) + │ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ Compare (>) + │ ║ ║ Var (name=effect) + │ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?drug . + ?arm ?result . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) +} + +16.866 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 16.866 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 1) + +# Run progress: 88.64% complete, ETA 00:02:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drug ; pharma:synergyScore ?score . + OPTIONAL { + ?drug pharma:hasSideEffect ?sideEffect . + ?sideEffect pharma:severity ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER(?optSeverity IN ("Mild", "Moderate")) + FILTER(?score > 0.7) +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?drug) >= 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +4.982 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + ?combo a . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + +3.253 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 3.253 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 2) + +# Run progress: 89.77% complete, ETA 00:02:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a pharma:Target ; pharma:inPathway ?pathway . + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:armDrug ?drug . } +} +GROUP BY ?target +HAVING(COUNT(DISTINCT ?drug) > 2) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +49.883 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=bound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target ?pathway . + ?target a . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + +32.167 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 32.167 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 3) + +# Run progress: 90.91% complete, ETA 00:02:15 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug ?disease WHERE { + ?trial a pharma:ClinicalTrial ; pharma:studiesDisease ?disease ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:responseRate ?rate . + FILTER(?rate > 0.6) + FILTER NOT EXISTS { ?drug pharma:indicatedFor ?disease . } + OPTIONAL { ?drug pharma:targets ?target . BIND(?target AS ?optTarget) } + FILTER(?optTarget != ) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +42.057 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + ║ ├── Not + ║ │ Exists + ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ o: Var (name=disease) (bindingState=bound) + ║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) + ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] + ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + ║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) + ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, S, P]) [right] + ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[P, S]) [right] + ║ ║ │ ║ s: Var (name=trial) (bindingState=bound) + ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[P, S], unlockedFilters=Not [right] + ║ ║ │ Exists + ║ ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ ║ │ Var (name=drug) + ║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ ║ │ Var (name=disease) + ║ ║ │ ) + ║ ║ │ s: Var (name=arm) (bindingState=bound) + ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ ║ │ o: Var (name=drug) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[P, S]) [right] + ║ ║ s: Var (name=arm) (bindingState=bound) + ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ ║ o: Var (name=result) (bindingState=unbound) + ║ ╚══ Filter (resultSizeEstimate=1.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[P, S]) [right] + ║ ├── Compare (>) + ║ │ Var (name=rate) (bindingState=bound) + ║ │ ValueConstant (value="0.6"^^) + ║ └── StatementPattern (resultSizeEstimate=2.9K) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) + +SELECT ?drug ?disease WHERE { + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?drug . + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} + +27.848 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 27.848 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 4) + +# Run progress: 92.05% complete, ETA 00:01:58 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { ?drug a pharma:Drug ; pharma:hasMolecule ?mol . } + UNION + { ?combo a pharma:Combination ; pharma:combinationOf ?drug . + ?drug pharma:hasMolecule ?mol . } + ?mol pharma:inClass ?class . + OPTIONAL { ?class pharma:name ?optName . BIND(?optName AS ?optClassName) } + FILTER(?optClassName != "") + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease IN (, + )) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +57.198 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[P, S]) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + { + { + ?drug ?mol . + ?drug a . + } + } + ?mol ?class . + } + UNION + { + { + { + ?combo ?drug . + ?combo a . + ?drug ?mol . + } + } + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} + +38.642 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 38.642 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 5) + +# Run progress: 93.18% complete, ETA 00:01:41 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { + + } + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker ; pharma:pValue ?p . + OPTIONAL { ?result pharma:effectSize ?effect . BIND(?effect AS ?optEffect) } + FILTER(?optEffect > 0.3) + FILTER(?p < 0.05 || ?p = 0.05) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +10.393 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] + │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { + VALUES ?marker { } + ?result ?marker . + ?arm ?result . + ?trial ?arm . + ?trial a . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) +} + +6.773 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 6.773 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 6) + +# Run progress: 94.32% complete, ETA 00:01:24 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a pharma:Combination ; pharma:combinationOf ?drugA ; pharma:combinationOf ?drugB . + FILTER(?drugA != ?drugB) + ?drugA pharma:targets ?target . + ?drugB pharma:targets ?target . + OPTIONAL { ?drugA pharma:hasSideEffect ?sideEffect . BIND(?sideEffect AS ?optSideEffect) } + FILTER(?optSideEffect != ) + FILTER EXISTS { ?drugB pharma:hasSideEffect ?sideEffect2 . } +} +GROUP BY ?combo +HAVING(COUNT(DISTINCT ?target) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +16.467 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] + │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + +10.949 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 10.949 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 7) + +# Run progress: 95.45% complete, ETA 00:01:07 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + { ?arm pharma:armComparator ?comp . } + UNION + { ?arm pharma:armDrug ?comp . } + OPTIONAL { ?comp pharma:name ?optName . BIND(?optName AS ?optCompName) } + FILTER(?optCompName != "") + FILTER NOT EXISTS { ?arm pharma:hasResult ?r . ?r pharma:pValue ?p . + FILTER(?p IN (0.08, 0.09)) } +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +53.799 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) + │ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ └── Filter (resultSizeEstimate=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) (bindingState=bound) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial ?arm . + ?trial a . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + +35.563 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 35.563 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 8) + +# Run progress: 96.59% complete, ETA 00:00:50 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a pharma:Drug ; pharma:targets ?target . + OPTIONAL { ?drug pharma:hasMolecule ?mol . BIND(?mol AS ?optMol) } + FILTER(?optMol != ) + MINUS { ?drug pharma:contraindicatedFor ?disease . + FILTER(?disease = + || ?disease = ) } +} +GROUP BY ?drug +HAVING(COUNT(DISTINCT ?target) >= 3) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +41.725 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) + +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + +29.450 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 29.450 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 9) + +# Run progress: 97.73% complete, ETA 00:00:33 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a pharma:ClinicalTrial ; pharma:hasArm ?arm . + ?arm pharma:armDrug ?drug ; pharma:hasResult ?result . + ?result pharma:effectSize ?effect . + OPTIONAL { ?result pharma:responseRate ?rate . BIND(?rate AS ?optRate) } + FILTER(?optRate > 0.2) + } + GROUP BY ?drug + HAVING(AVG(?effect) > 0.4) + } + FILTER EXISTS { ?drug pharma:hasSideEffect ?se . } + OPTIONAL { ?drug pharma:indicatedFor ?disease . BIND(?disease AS ?optDisease) } + FILTER(?optDisease IN (, + )) +} + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +30.263 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_0025d4a630759f094f50983e40d4cbd8113a, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial ?arm . + ?trial a . + ?arm ?drug . + ?arm ?result . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + +20.363 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 20.363 ms/op + + +# JMH version: 1.37 +# VM version: JDK 25, OpenJDK 64-Bit Server VM, 25+36-LTS +# VM invoker: /Users/havardottestad/.sdkman/candidates/java/25-zulu/zulu-25.jdk/Contents/Home/bin/java +# VM options: -Xms1G -Xmx32G +# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable) +# Warmup: 1 iterations, 10 s each +# Measurement: 1 iterations, 5 s each +# Timeout: 10 min per iteration +# Threads: 1 thread, will synchronize iterations +# Benchmark mode: Average time, time/op +# Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery +# Parameters: (themeName = PHARMA, z_queryIndex = 10) + +# Run progress: 98.86% complete, ETA 00:00:16 +# Fork: 1 of 1 +WARNING: A terminally deprecated method in sun.misc.Unsafe has been called +WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) +WARNING: Please consider reporting this to the maintainers of class org.openjdk.jmh.util.Utils +WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release +# Warmup Iteration 1: /Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/target/lmdb-theme-query-benchmark/complete +### Original Query ### +PREFIX pharma: +PREFIX xsd: +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + VALUES ?marker { + } + ?drug a pharma:Drug ; pharma:targets ?target . + ?target pharma:inPathway ?pathway . + OPTIONAL { ?drug pharma:testedIn ?trial . BIND(?trial AS ?optTrial) } + FILTER(?optTrial != ) + FILTER EXISTS { ?trial pharma:hasArm ?arm . ?arm pharma:hasResult ?result . + ?result pharma:biomarker ?marker . } +} +GROUP BY ?pathway +HAVING(COUNT(DISTINCT ?drug) > 1) + +WARNING: A restricted method in java.lang.System has been called +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module +WARNING: Restricted methods will be blocked in a future release unless native access is enabled + +374.084 ms/op +Iteration 1: ### Optimized Query ### +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_483a537e636433f44b583e838d50a0511570123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] + │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_483a537e636433f44b583e838d50a0511570123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_483a537e636433f44b583e838d50a0511570123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) + +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?drug a . + ?drug ?target . + ?target ?pathway . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) + +258.264 ms/op + + +Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": + 258.264 ms/op + + +# Run complete. Total time: 00:24:42 +``` From adbd443f2fa0a6baf3554e337ef9b922e66c2f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 20:26:30 +0200 Subject: [PATCH 25/43] slower and faster --- .../query/explanation/GenericPlanNode.java | 134 + .../explanation/TelemetryMetricNames.java | 23 + .../explanation/GenericPlanNodeTest.java | 21 + .../evaluation/impl/EvaluationStatistics.java | 45 + .../evaluation/optimizer/FilterOptimizer.java | 38 +- .../optimizer/FilterSelectivityKeys.java | 14 +- .../optimizer/FilterSelectivityTelemetry.java | 79 + .../optimizer/JoinFactorCostModel.java | 67 + .../optimizer/JoinOrderPlanner.java | 209 + .../optimizer/JoinStatsProvider.java | 16 + .../optimizer/QueryJoinOptimizer.java | 609 ++- .../evaluation/impl/FilterOptimizerTest.java | 42 + .../impl/QueryJoinOptimizerTest.java | 273 ++ .../query/algebra/AbstractQueryModelNode.java | 73 + .../rdf4j/query/algebra/QueryModelNode.java | 46 + .../QueryModelTreeToGenericPlanNode.java | 20 +- .../sail/base/SketchBasedJoinEstimator.java | 159 +- .../sail/base/SketchJoinOrderPlanner.java | 293 +- .../sail/base/SketchJoinOrderReorderer.java | 38 +- .../sail/lmdb/LmdbEvaluationStatistics.java | 199 +- .../sail/lmdb/LmdbFilterSelectivityStats.java | 28 +- .../rdf4j/sail/lmdb/LmdbSailStore.java | 3 +- .../LmdbIndexAwareJoinOrderPlanningTest.java | 279 ++ .../LmdbSketchAwareFilterPlacementTest.java | 71 + .../lmdb/benchmark/results-2026-04-20-3.md | 4198 +++++++++-------- ...b03f00c95-20260419-230722364-461a7724.json | 479 ++ 26 files changed, 5408 insertions(+), 2048 deletions(-) create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityTelemetry.java create mode 100644 core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinFactorCostModel.java create mode 100644 testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-social_media-q4-a2e7123ce1edb4e6b0ea2149dd73e2879f0f6ee4022d56069c1590ab03f00c95-20260419-230722364-461a7724.json diff --git a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java index 09dcaada665..2712b62cc1f 100644 --- a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java +++ b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java @@ -144,6 +144,9 @@ public class GenericPlanNode { private Map longMetricsActual = new LinkedHashMap<>(); private Map doubleMetricsActual = new LinkedHashMap<>(); private Map stringMetricsActual = new LinkedHashMap<>(); + private Map longMetricsPlanned = new LinkedHashMap<>(); + private Map doubleMetricsPlanned = new LinkedHashMap<>(); + private Map stringMetricsPlanned = new LinkedHashMap<>(); // true if this node introduces a new scope private Boolean newScope; @@ -403,6 +406,11 @@ public void setRuntimeTelemetryEnabled(boolean runtimeTelemetryEnabled) { this.runtimeTelemetryEnabled = runtimeTelemetryEnabled; } + @JsonIgnore + public boolean isRuntimeTelemetryEnabled() { + return runtimeTelemetryEnabled; + } + public void setEstimateStabilityMetricsEnabled(boolean estimateStabilityMetricsEnabled) { this.estimateStabilityMetricsEnabled = estimateStabilityMetricsEnabled; } @@ -502,6 +510,66 @@ public void setStringMetricActual(String metricName, String metricValue) { stringMetricsActual.put(metricName, metricValue); } + public Map getLongMetricsPlanned() { + return longMetricsPlanned.isEmpty() ? null : longMetricsPlanned; + } + + public void setLongMetricsPlanned(Map longMetricsPlanned) { + this.longMetricsPlanned = longMetricsPlanned == null ? new LinkedHashMap<>() + : new LinkedHashMap<>(longMetricsPlanned); + } + + public Long getLongMetricPlanned(String metricName) { + return longMetricsPlanned.get(metricName); + } + + public void setLongMetricPlanned(String metricName, Long metricValue) { + if (metricName == null || metricValue == null || metricValue < 0) { + return; + } + longMetricsPlanned.put(metricName, metricValue); + } + + public Map getDoubleMetricsPlanned() { + return doubleMetricsPlanned.isEmpty() ? null : doubleMetricsPlanned; + } + + public void setDoubleMetricsPlanned(Map doubleMetricsPlanned) { + this.doubleMetricsPlanned = doubleMetricsPlanned == null ? new LinkedHashMap<>() + : new LinkedHashMap<>(doubleMetricsPlanned); + } + + public Double getDoubleMetricPlanned(String metricName) { + return doubleMetricsPlanned.get(metricName); + } + + public void setDoubleMetricPlanned(String metricName, Double metricValue) { + if (metricName == null || metricValue == null || metricValue < 0) { + return; + } + doubleMetricsPlanned.put(metricName, metricValue); + } + + public Map getStringMetricsPlanned() { + return stringMetricsPlanned.isEmpty() ? null : stringMetricsPlanned; + } + + public void setStringMetricsPlanned(Map stringMetricsPlanned) { + this.stringMetricsPlanned = stringMetricsPlanned == null ? new LinkedHashMap<>() + : new LinkedHashMap<>(stringMetricsPlanned); + } + + public String getStringMetricPlanned(String metricName) { + return stringMetricsPlanned.get(metricName); + } + + public void setStringMetricPlanned(String metricName, String metricValue) { + if (metricName == null || metricValue == null || metricValue.isEmpty()) { + return; + } + stringMetricsPlanned.put(metricName, metricValue); + } + public void setTimedOut(Boolean timedOut) { this.timedOut = timedOut; } @@ -919,6 +987,8 @@ private Long sourceRowsFilteredForDisplay() { } private void appendMapTelemetry(Map metrics) { + appendPlannedMapTelemetry(metrics); + Map visibleLongMetrics = getLongMetricsActual(); if (visibleLongMetrics != null) { for (Map.Entry entry : visibleLongMetrics.entrySet()) { @@ -962,6 +1032,53 @@ private void appendMapTelemetry(Map metrics) { } } + private void appendPlannedMapTelemetry(Map metrics) { + for (Map.Entry entry : longMetricsPlanned.entrySet()) { + Long metricValue = entry.getValue(); + if (metricValue == null || metricValue < 0 || metrics.containsKey(entry.getKey())) { + continue; + } + putIfKnown(metrics, entry.getKey(), toHumanReadableNumber(metricValue)); + } + for (Map.Entry entry : doubleMetricsPlanned.entrySet()) { + Double metricValue = entry.getValue(); + if (metricValue == null || metricValue < 0 || metrics.containsKey(entry.getKey())) { + continue; + } + putIfKnown(metrics, entry.getKey(), toHumanReadableNumber(metricValue)); + } + for (Map.Entry entry : orderedStringMetricsPlanned()) { + String metricName = entry.getKey(); + String metricValue = entry.getValue(); + if (metricValue == null || metricValue.isEmpty() || metrics.containsKey(metricName)) { + continue; + } + metrics.put(metricName, metricValue); + } + } + + private List> orderedStringMetricsPlanned() { + List> orderedEntries = new ArrayList<>(); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, TelemetryMetricNames.PLANNED_INDEX_NAME); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, + TelemetryMetricNames.PLANNED_INDEX_ACCESS_MODE); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, + TelemetryMetricNames.PLANNED_LOOKUP_COMPONENTS); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, + TelemetryMetricNames.PLANNED_MISSING_LOOKUP_COMPONENTS); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, TelemetryMetricNames.PLANNED_BOUND_VARS); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, TelemetryMetricNames.PLANNER_ID); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, TelemetryMetricNames.PLANNER_ALGORITHM); + appendPreferredStringMetric(orderedEntries, stringMetricsPlanned, TelemetryMetricNames.PLANNER_PATH); + for (Map.Entry entry : stringMetricsPlanned.entrySet()) { + if (orderedEntries.stream().anyMatch(ordered -> ordered.getKey().equals(entry.getKey()))) { + continue; + } + orderedEntries.add(entry); + } + return orderedEntries; + } + private List> orderedStringMetricsActual() { Map visibleStringMetrics = visibleStringMetricsActual(); List> orderedEntries = new ArrayList<>(); @@ -969,6 +1086,12 @@ private List> orderedStringMetricsActual() { appendPreferredStringMetric(orderedEntries, visibleStringMetrics, TelemetryMetricNames.JOIN_TYPE); appendPreferredStringMetric(orderedEntries, visibleStringMetrics, TelemetryMetricNames.INDEX_NAME); appendPreferredStringMetric(orderedEntries, visibleStringMetrics, TelemetryMetricNames.INDEX_NAMES); + appendPreferredStringMetric(orderedEntries, visibleStringMetrics, TelemetryMetricNames.OPTIMIZER_PLANNER_ID); + appendPreferredStringMetric(orderedEntries, visibleStringMetrics, TelemetryMetricNames.OPTIMIZER_PLANNER_PATH); + appendPreferredStringMetric(orderedEntries, visibleStringMetrics, + TelemetryMetricNames.OPTIMIZER_PLANNER_REJECTED_FACTOR); + appendPreferredStringMetric(orderedEntries, visibleStringMetrics, + TelemetryMetricNames.OPTIMIZER_PLANNER_DIAGNOSTICS); for (Map.Entry entry : visibleStringMetrics.entrySet()) { if (isPreferredExplainAnnotationMetric(entry.getKey())) { continue; @@ -1470,6 +1593,8 @@ private String toDotInternal(double maxResultSizeActual, double maxTotalTime, do private void appendExplainAnnotationDotRows(List rows) { appendExplainAnnotationDotRow(rows, "Binding state", TelemetryMetricNames.BINDING_STATE); appendExplainAnnotationDotRow(rows, "Join type", TelemetryMetricNames.JOIN_TYPE); + appendPlannedExplainAnnotationDotRow(rows, "Planned index", TelemetryMetricNames.PLANNED_INDEX_NAME); + appendPlannedExplainAnnotationDotRow(rows, "Planned bound vars", TelemetryMetricNames.PLANNED_BOUND_VARS); if (getStringMetricActual(TelemetryMetricNames.INDEX_NAME) != null) { appendExplainAnnotationDotRow(rows, "Index", TelemetryMetricNames.INDEX_NAME); } else { @@ -1477,6 +1602,15 @@ private void appendExplainAnnotationDotRows(List rows) { } } + private void appendPlannedExplainAnnotationDotRow(List rows, String label, String metricName) { + String metricValue = getStringMetricPlanned(metricName); + if (metricValue == null || metricValue.isEmpty()) { + return; + } + rows.add("" + StringEscapeUtils.escapeHtml4(label) + "" + + StringEscapeUtils.escapeHtml4(metricValue) + ""); + } + private void appendExplainAnnotationDotRow(List rows, String label, String metricName) { String metricValue = getStringMetricActual(metricName); if (metricValue == null || metricValue.isEmpty()) { diff --git a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java index 9ff83773487..037778071e0 100644 --- a/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java +++ b/core/query/src/main/java/org/eclipse/rdf4j/query/explanation/TelemetryMetricNames.java @@ -107,6 +107,25 @@ private TelemetryMetricNames() { public static final String BINDING_STATE = "bindingState"; public static final String JOIN_TYPE = "joinType"; + public static final String PLANNER_ID = "plannerId"; + public static final String PLANNER_ALGORITHM = "plannerAlgorithm"; + public static final String PLANNER_PATH = "plannerPath"; + public static final String PLANNED_INDEX_NAME = "plannedIndexName"; + public static final String PLANNED_INDEX_PREFIX_LENGTH = "plannedIndexPrefixLength"; + public static final String PLANNED_LOOKUP_COMPONENTS = "plannedLookupComponents"; + public static final String PLANNED_BOUND_VARS = "plannedBoundVars"; + public static final String PLANNED_WORK_ROWS = "plannedWorkRows"; + public static final String PLANNED_FILTER_PASS_RATIO = "plannedFilterPassRatio"; + public static final String PLANNED_FILTER_EVIDENCE_COUNT = "plannedFilterEvidenceCount"; + public static final String FILTER_SELECTIVITY_SOURCE = "filterSelectivitySource"; + public static final String PLANNED_INDEX_ACCESS_MODE = "plannedIndexAccessMode"; + public static final String PLANNED_ACCESS_ROWS = "plannedAccessRows"; + public static final String PLANNED_ACCESS_ROWS_AFTER_FILTER = "plannedAccessRowsAfterFilter"; + public static final String PLANNED_MISSING_LOOKUP_COMPONENTS = "plannedMissingLookupComponents"; + public static final String DEFERRED_FILTER_SCOPE = "deferredFilterScope"; + public static final String SHARED_JOIN_VARS = "sharedJoinVars"; + public static final String UNLOCKED_FILTERS = "unlockedFilters"; + public static final String METRIC_ORIGIN = "metricOrigin"; public static final String SAMPLE_COUNT_ACTUAL = "sampleCountActual"; public static final String CONFIDENCE_SCORE_ACTUAL = "confidenceScoreActual"; @@ -128,6 +147,10 @@ private TelemetryMetricNames() { public static final String OPTIMIZER_CANDIDATE_COUNT = OPTIMIZER_PREFIX + "candidateCount"; public static final String OPTIMIZER_REJECTION_REASON = OPTIMIZER_PREFIX + "rejectionReason"; public static final String OPTIMIZER_ESTIMATE_SOURCE = OPTIMIZER_PREFIX + "estimateSource"; + public static final String OPTIMIZER_PLANNER_ID = OPTIMIZER_PREFIX + "plannerId"; + public static final String OPTIMIZER_PLANNER_PATH = OPTIMIZER_PREFIX + "plannerPath"; + public static final String OPTIMIZER_PLANNER_REJECTED_FACTOR = OPTIMIZER_PREFIX + "plannerRejectedFactor"; + public static final String OPTIMIZER_PLANNER_DIAGNOSTICS = OPTIMIZER_PREFIX + "plannerDiagnostics"; public static boolean isOptimizerMetric(String metricName) { return metricName != null && metricName.startsWith(OPTIMIZER_PREFIX); diff --git a/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java b/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java index 021219651e3..696ebf759dc 100644 --- a/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java +++ b/core/query/src/test/java/org/eclipse/rdf4j/query/explanation/GenericPlanNodeTest.java @@ -248,6 +248,27 @@ void toDotIncludesExplainAnnotationRows() { assertTrue(actual.contains("Indexspoc"), actual); } + @Test + void plannedIndexMetricsDoNotOverwriteRuntimeIndexMetrics() { + GenericPlanNode node = new GenericPlanNode("StatementPattern"); + node.setRuntimeTelemetryEnabled(false); + node.setStringMetricPlanned(TelemetryMetricNames.PLANNED_INDEX_NAME, "posc"); + + String optimized = node.toString(); + + assertTrue(optimized.contains("plannedIndexName=posc"), optimized); + + node.setRuntimeTelemetryEnabled(true); + node.setStringMetricActual(TelemetryMetricNames.INDEX_NAME, "spoc"); + String telemetry = node.toString(); + String dot = node.toDot(); + + assertTrue(telemetry.contains("plannedIndexName=posc"), telemetry); + assertTrue(telemetry.contains("indexName=spoc"), telemetry); + assertTrue(dot.contains("Planned indexposc"), dot); + assertTrue(dot.contains("Indexspoc"), dot); + } + @Test void regularJoinTypeIsHidden() { GenericPlanNode join = new GenericPlanNode("Join"); diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java index 435ef366e3f..df29f783a66 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/EvaluationStatistics.java @@ -8,6 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.impl; import java.util.Collection; @@ -91,10 +92,54 @@ public double estimateFilterPassRatio(Filter filter) { return -1.0d; } + public FilterPassEstimate estimateFilterPass(Filter filter) { + double passRatio = estimateFilterPassRatio(filter); + FilterPassEstimate.Source source = Double.isFinite(passRatio) && passRatio >= 0.0d + ? FilterPassEstimate.Source.HEURISTIC + : FilterPassEstimate.Source.UNKNOWN; + return new FilterPassEstimate(passRatio, source, -1L); + } + public void recordFilterOutcome(Filter filter, long passedCount, long filteredCount) { // no-op by default } + public static final class FilterPassEstimate { + public enum Source { + LEARNED_FILTER, + LEARNED_PATTERN, + SAMPLED, + HEURISTIC, + UNKNOWN + } + + private final double passRatio; + private final Source source; + private final long evidenceCount; + + public FilterPassEstimate(double passRatio, Source source) { + this(passRatio, source, -1L); + } + + public FilterPassEstimate(double passRatio, Source source, long evidenceCount) { + this.passRatio = passRatio; + this.source = source == null ? Source.UNKNOWN : source; + this.evidenceCount = evidenceCount; + } + + public double getPassRatio() { + return passRatio; + } + + public Source getSource() { + return source; + } + + public long getEvidenceCount() { + return evidenceCount; + } + } + /*-----------------------------------* * Inner class CardinalityCalculator * *-----------------------------------*/ diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java index 6a73277cdc8..378fcf77e34 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterOptimizer.java @@ -138,7 +138,7 @@ protected void meetNode(QueryModelNode node) { expr.visit(new FilterUnMerger()); expr.visit(new FilterOrganizer(statistics, considerJoinPlacementCost)); if (mergeAdjacentFilters) { - expr.visit(new FilterMerger()); + expr.visit(new FilterMerger(statistics)); } } @@ -192,8 +192,11 @@ public void meet(Filter filter) { private static class FilterMerger extends AbstractSimpleQueryModelVisitor { - private FilterMerger() { + private final EvaluationStatistics statistics; + + private FilterMerger(EvaluationStatistics statistics) { super(false); + this.statistics = statistics; } @Override @@ -207,6 +210,7 @@ public void meet(Filter filter) { Filter newFilter = new Filter(childFilter.getArg().clone(), merge); transferScopeChange(filter, newFilter); // both have same scope flag + FilterSelectivityTelemetry.annotate(newFilter, statistics); parent.replaceChildNode(filter, newFilter); } } @@ -227,6 +231,7 @@ public FilterOrganizer(EvaluationStatistics statistics, boolean considerJoinPlac public void meet(Filter filter) { super.meet(filter); FilterRelocator.optimize(filter, statistics, considerJoinPlacementCost); + FilterSelectivityTelemetry.annotate(filter, statistics); } } @@ -401,12 +406,29 @@ private boolean shouldKeepFilterAtJoin(Join join, TupleExpr candidateArg) { return false; } + if (statistics instanceof JoinFactorCostModel) { + JoinFactorCostModel costModel = (JoinFactorCostModel) statistics; + Filter candidateFilter = new Filter(candidateArg.clone(), filter.getCondition().clone()); + OptionalWorkRows joinWork = estimateWorkRows(costModel, join); + OptionalWorkRows candidateWork = estimateWorkRows(costModel, candidateFilter); + if (joinWork.available && candidateWork.available) { + return joinWork.workRows < candidateWork.workRows; + } + } + double currentInputRows = statistics.getCardinality(join); double candidateInputRows = estimateFilteredInputRows(candidateArg); return isFiniteNonNegative(currentInputRows) && isFiniteNonNegative(candidateInputRows) && currentInputRows < candidateInputRows; } + private OptionalWorkRows estimateWorkRows(JoinFactorCostModel costModel, TupleExpr tupleExpr) { + return costModel.estimateFactorCost(tupleExpr, Set.of()) + .filter(estimate -> isFiniteNonNegative(estimate.getWorkRows())) + .map(estimate -> new OptionalWorkRows(true, estimate.getWorkRows())) + .orElseGet(() -> new OptionalWorkRows(false, -1.0d)); + } + private double estimateFilteredInputRows(TupleExpr candidateArg) { double baseRows = statistics.getCardinality(candidateArg); if (!isFiniteNonNegative(baseRows) || filter.getCondition() == null) { @@ -420,7 +442,7 @@ private double estimateFilteredInputRows(TupleExpr candidateArg) { } double passRatio = statistics.estimateFilterPassRatio(candidateFilter); - if (Double.isFinite(passRatio) && passRatio > 0.0d && passRatio <= 1.0d) { + if (Double.isFinite(passRatio) && passRatio >= 0.0d && passRatio <= 1.0d) { double passRatioRows = baseRows * passRatio; if (isFiniteNonNegative(passRatioRows)) { return passRatioRows; @@ -444,5 +466,15 @@ && filterConditionCost(((Filter) sibling).getCondition()) > filterConditionCost( private boolean isFiniteNonNegative(double value) { return Double.isFinite(value) && value >= 0.0d; } + + private final class OptionalWorkRows { + private final boolean available; + private final double workRows; + + private OptionalWorkRows(boolean available, double workRows) { + this.available = available; + this.workRows = workRows; + } + } } } diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java index 7e0343bb631..880a16aa14b 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityKeys.java @@ -11,7 +11,8 @@ // Some portions generated by Codex package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; -import java.util.List; +import java.util.Collections; +import java.util.IdentityHashMap; import java.util.Set; import org.eclipse.rdf4j.model.IRI; @@ -68,7 +69,7 @@ public static StatementPattern patternLocalBaseForFilter(Filter filter) { return null; } - List patterns = StatementPatternCollector.process(filter.getArg()); + Set patterns = originPatternsForFilter(filter); StatementPattern match = null; for (StatementPattern pattern : patterns) { if (!conditionIntersectsPattern(filter.getCondition(), pattern)) { @@ -82,6 +83,15 @@ public static StatementPattern patternLocalBaseForFilter(Filter filter) { return match; } + public static Set originPatternsForFilter(Filter filter) { + Set patterns = Collections.newSetFromMap(new IdentityHashMap<>()); + if (filter == null || filter.getArg() == null) { + return patterns; + } + patterns.addAll(StatementPatternCollector.process(filter.getArg())); + return patterns; + } + public static boolean conditionIntersectsPattern(ValueExpr condition, StatementPattern pattern) { if (condition == null || pattern == null) { return false; diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityTelemetry.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityTelemetry.java new file mode 100644 index 00000000000..fa34ae00703 --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/FilterSelectivityTelemetry.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; + +final class FilterSelectivityTelemetry { + + private static final String CARDINALITY_SOURCE = "cardinality"; + + private FilterSelectivityTelemetry() { + } + + static void annotate(Filter filter, EvaluationStatistics statistics) { + if (statistics == null) { + return; + } + annotate(filter, statistics, statistics.estimateFilterPass(filter)); + } + + static void annotate(Filter filter, EvaluationStatistics statistics, + EvaluationStatistics.FilterPassEstimate estimate) { + if (filter == null) { + return; + } + + double passRatio = estimate == null ? -1.0d : estimate.getPassRatio(); + String source = estimate == null ? null : estimate.getSource().name().toLowerCase(); + if (!isValidPassRatio(passRatio)) { + double cardinalityPassRatio = estimateCardinalityPassRatio(filter, statistics); + if (isValidPassRatio(cardinalityPassRatio)) { + passRatio = cardinalityPassRatio; + source = CARDINALITY_SOURCE; + } + } + + if (isValidPassRatio(passRatio)) { + filter.setDoubleMetricPlanned(TelemetryMetricNames.PLANNED_FILTER_PASS_RATIO, passRatio); + } + if (estimate != null && estimate.getEvidenceCount() >= 0L) { + filter.setLongMetricPlanned(TelemetryMetricNames.PLANNED_FILTER_EVIDENCE_COUNT, + estimate.getEvidenceCount()); + } + if (source != null) { + filter.setStringMetricPlanned(TelemetryMetricNames.FILTER_SELECTIVITY_SOURCE, source); + } + } + + private static double estimateCardinalityPassRatio(Filter filter, EvaluationStatistics statistics) { + if (statistics == null || filter.getArg() == null) { + return -1.0d; + } + + double inputRows = statistics.getCardinality(filter.getArg()); + double outputRows = statistics.getCardinality(filter); + if (!Double.isFinite(inputRows) || !Double.isFinite(outputRows) || inputRows < 0.0d || outputRows < 0.0d) { + return -1.0d; + } + if (inputRows == 0.0d) { + return outputRows == 0.0d ? 1.0d : -1.0d; + } + return Math.min(1.0d, outputRows / inputRows); + } + + private static boolean isValidPassRatio(double value) { + return Double.isFinite(value) && value >= 0.0d && value <= 1.0d; + } +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinFactorCostModel.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinFactorCostModel.java new file mode 100644 index 00000000000..88ff49ea2e4 --- /dev/null +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinFactorCostModel.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.query.algebra.evaluation.optimizer; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.eclipse.rdf4j.query.algebra.TupleExpr; + +/** + * Optional SPI for join-factor work estimates under a concrete prefix binding set. + */ +public interface JoinFactorCostModel { + + Optional estimateFactorCost(TupleExpr factor, Set currentlyBoundVars); + + final class FactorCostEstimate { + private final double workRows; + private final double outputRows; + private final Map stringMetrics; + private final Map doubleMetrics; + + public FactorCostEstimate(double workRows, double outputRows) { + this(workRows, outputRows, Map.of(), Map.of()); + } + + public FactorCostEstimate(double workRows, double outputRows, Map stringMetrics, + Map doubleMetrics) { + this.workRows = workRows; + this.outputRows = outputRows; + this.stringMetrics = stringMetrics == null || stringMetrics.isEmpty() + ? Map.of() + : Collections.unmodifiableMap(new HashMap<>(stringMetrics)); + this.doubleMetrics = doubleMetrics == null || doubleMetrics.isEmpty() + ? Map.of() + : Collections.unmodifiableMap(new HashMap<>(doubleMetrics)); + } + + public double getWorkRows() { + return workRows; + } + + public double getOutputRows() { + return outputRows; + } + + public Map getStringMetrics() { + return stringMetrics; + } + + public Map getDoubleMetrics() { + return doubleMetrics; + } + } +} diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java index 6f2ba6a949a..fc195ffa0ca 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinOrderPlanner.java @@ -13,7 +13,9 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; @@ -34,6 +36,9 @@ final class JoinOrderPlan { private final double estimatedFinalRows; private final double estimatedTotalWork; private final List diagnostics; + private final Map summaryStringMetrics; + private final Map summaryDoubleMetrics; + private final List steps; public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, double estimatedTotalWork) { this(orderedArgs, estimatedFinalRows, estimatedTotalWork, List.of()); @@ -41,12 +46,27 @@ public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, dou public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, double estimatedTotalWork, List diagnostics) { + this(orderedArgs, estimatedFinalRows, estimatedTotalWork, diagnostics, Map.of(), Map.of(), List.of()); + } + + public JoinOrderPlan(List orderedArgs, double estimatedFinalRows, double estimatedTotalWork, + List diagnostics, Map summaryStringMetrics, + Map summaryDoubleMetrics, List steps) { this.orderedArgs = Collections.unmodifiableList(new ArrayList<>(orderedArgs)); this.estimatedFinalRows = estimatedFinalRows; this.estimatedTotalWork = estimatedTotalWork; this.diagnostics = diagnostics == null || diagnostics.isEmpty() ? List.of() : Collections.unmodifiableList(new ArrayList<>(diagnostics)); + this.summaryStringMetrics = summaryStringMetrics == null || summaryStringMetrics.isEmpty() + ? Map.of() + : Collections.unmodifiableMap(new HashMap<>(summaryStringMetrics)); + this.summaryDoubleMetrics = summaryDoubleMetrics == null || summaryDoubleMetrics.isEmpty() + ? Map.of() + : Collections.unmodifiableMap(new HashMap<>(summaryDoubleMetrics)); + this.steps = steps == null || steps.isEmpty() + ? List.of() + : Collections.unmodifiableList(new ArrayList<>(steps)); } public List getOrderedArgs() { @@ -64,7 +84,196 @@ public double getEstimatedTotalWork() { public List getDiagnostics() { return diagnostics; } + + public Map getSummaryStringMetrics() { + return summaryStringMetrics; + } + + public Map getSummaryDoubleMetrics() { + return summaryDoubleMetrics; + } + + public List getSteps() { + return steps; + } + } + + final class FilterConstraint { + private final Set requiredVars; + private final double estimatedPassRatio; + private final int conditionCost; + private final String debugLabel; + private final String selectivitySource; + private final long evidenceCount; + + public FilterConstraint(Set requiredVars, double estimatedPassRatio, int conditionCost, + String debugLabel) { + this(requiredVars, estimatedPassRatio, conditionCost, debugLabel, null, -1L); + } + + public FilterConstraint(Set requiredVars, double estimatedPassRatio, int conditionCost, + String debugLabel, String selectivitySource, long evidenceCount) { + this.requiredVars = Set.copyOf(requiredVars); + this.estimatedPassRatio = estimatedPassRatio; + this.conditionCost = conditionCost; + this.debugLabel = debugLabel; + this.selectivitySource = selectivitySource; + this.evidenceCount = evidenceCount; + } + + public Set getRequiredVars() { + return requiredVars; + } + + public double getEstimatedPassRatio() { + return estimatedPassRatio; + } + + public int getConditionCost() { + return conditionCost; + } + + public String getDebugLabel() { + return debugLabel; + } + + public String getSelectivitySource() { + return selectivitySource; + } + + public long getEvidenceCount() { + return evidenceCount; + } + } + + final class PlanningAttempt { + private final Optional plan; + private final String plannerId; + private final Algorithm algorithm; + private final String plannerPath; + private final String rejectedFactor; + private final List diagnostics; + + public PlanningAttempt(Optional plan, String plannerId, Algorithm algorithm, String plannerPath, + String rejectedFactor, List diagnostics) { + this.plan = plan == null ? Optional.empty() : plan; + this.plannerId = plannerId; + this.algorithm = algorithm; + this.plannerPath = plannerPath; + this.rejectedFactor = rejectedFactor; + this.diagnostics = diagnostics == null || diagnostics.isEmpty() + ? List.of() + : Collections.unmodifiableList(new ArrayList<>(diagnostics)); + } + + public static PlanningAttempt planned(JoinOrderPlan plan, String plannerId, Algorithm algorithm, + String plannerPath, List diagnostics) { + return new PlanningAttempt(Optional.of(plan), plannerId, algorithm, plannerPath, null, diagnostics); + } + + public static PlanningAttempt rejected(String plannerId, Algorithm algorithm, String plannerPath, + String rejectedFactor, List diagnostics) { + return new PlanningAttempt(Optional.empty(), plannerId, algorithm, plannerPath, rejectedFactor, + diagnostics); + } + + public static PlanningAttempt unavailable(Algorithm algorithm) { + return rejected(null, algorithm, null, null, List.of()); + } + + public Optional getPlan() { + return plan; + } + + public String getPlannerId() { + return plannerId; + } + + public Algorithm getAlgorithm() { + return algorithm; + } + + public String getPlannerPath() { + return plannerPath; + } + + public String getRejectedFactor() { + return rejectedFactor; + } + + public List getDiagnostics() { + return diagnostics; + } + } + + final class PlanStep { + private final Set boundVarsBefore; + private final double factorOutputRows; + private final double prefixOutputRows; + private final double stepWorkRows; + private final Map stringMetrics; + private final Map doubleMetrics; + + public PlanStep(Set boundVarsBefore, double factorOutputRows, double prefixOutputRows, + double stepWorkRows) { + this(boundVarsBefore, factorOutputRows, prefixOutputRows, stepWorkRows, Map.of(), Map.of()); + } + + public PlanStep(Set boundVarsBefore, double factorOutputRows, double prefixOutputRows, + double stepWorkRows, Map stringMetrics, Map doubleMetrics) { + this.boundVarsBefore = Set.copyOf(boundVarsBefore); + this.factorOutputRows = factorOutputRows; + this.prefixOutputRows = prefixOutputRows; + this.stepWorkRows = stepWorkRows; + this.stringMetrics = stringMetrics == null || stringMetrics.isEmpty() + ? Map.of() + : Collections.unmodifiableMap(new HashMap<>(stringMetrics)); + this.doubleMetrics = doubleMetrics == null || doubleMetrics.isEmpty() + ? Map.of() + : Collections.unmodifiableMap(new HashMap<>(doubleMetrics)); + } + + public Set getBoundVarsBefore() { + return boundVarsBefore; + } + + public double getFactorOutputRows() { + return factorOutputRows; + } + + public double getPrefixOutputRows() { + return prefixOutputRows; + } + + public double getStepWorkRows() { + return stepWorkRows; + } + + public Map getStringMetrics() { + return stringMetrics; + } + + public Map getDoubleMetrics() { + return doubleMetrics; + } } Optional planJoinOrder(List args, Set initiallyBoundVars, Algorithm algorithm); + + default Optional planJoinOrder(List args, Set initiallyBoundVars, + Algorithm algorithm, List deferredFilters) { + return planJoinOrder(args, initiallyBoundVars, algorithm); + } + + default PlanningAttempt planJoinOrderAttempt(List args, Set initiallyBoundVars, + Algorithm algorithm) { + return planJoinOrderAttempt(args, initiallyBoundVars, algorithm, List.of()); + } + + default PlanningAttempt planJoinOrderAttempt(List args, Set initiallyBoundVars, + Algorithm algorithm, List deferredFilters) { + Optional plan = planJoinOrder(args, initiallyBoundVars, algorithm, deferredFilters); + return new PlanningAttempt(plan, null, algorithm, null, null, + plan.map(JoinOrderPlan::getDiagnostics).orElse(List.of())); + } } diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java index 6c1d7e4b09d..e40af1d3154 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/JoinStatsProvider.java @@ -50,6 +50,22 @@ default double getPatternPassRatio(PatternKey key) { return -1.0d; } + /** + * Returns the number of observed outcomes for a specific filter condition and pattern key, or a negative value when + * unavailable. + */ + default long getFilterObservationCount(PatternKey key, String filterKey) { + return -1L; + } + + /** + * Returns the number of observed outcomes for all filters seen on a pattern key, or a negative value when + * unavailable. + */ + default long getPatternObservationCount(PatternKey key) { + return -1L; + } + /** * Seeds statistics for the given key. Implementations may also invalidate or refresh existing entries if the * supplied default cardinality has drifted significantly from the stored baseline. diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index ca84807ce58..eac3acc3a9e 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -21,6 +21,7 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import org.eclipse.rdf4j.common.annotation.Experimental; @@ -156,6 +157,7 @@ protected class JoinVisitor extends AbstractSimpleQueryModelVisitor boundVars = new HashSet<>(); private double currentHighestCost = 1; + private final Map plannedPrefixRowsByRightArg = new IdentityHashMap<>(); protected JoinVisitor() { super(trackResultSize); @@ -164,7 +166,17 @@ protected JoinVisitor() { @Override public void meet(Filter node) { + if (!TupleExprs.isVariableScopeChange(node)) { + ArrayDeque nestedFilters = new ArrayDeque<>(); + TupleExpr filterArg = unwrapJoinFilterChain(node, nestedFilters); + if (filterArg instanceof Join) { + optimizeJoinReplacement(node, (Join) filterArg, new ArrayList<>(nestedFilters)); + return; + } + } + node.getArg().visit(this); + annotateFilterSelectivity(node); Set origBoundVars = boundVars; try { @@ -209,22 +221,29 @@ private void optimizePriorityJoin(Set origBoundVars, TupleExpr join) { @Override public void meet(Join node) { + optimizeJoinReplacement(node, node, List.of()); + } + + private void optimizeJoinReplacement(TupleExpr replaceTarget, Join join, + List additionalDeferredFilters) { Set origBoundVars = boundVars; try { boundVars = new HashSet<>(boundVars); - CollectedJoinArgs collectedJoinArgs = collectJoinArgsForOrdering(node); + CollectedJoinArgs collectedJoinArgs = collectJoinArgsForOrdering(join); + collectedJoinArgs.deferredFilters.addAll(additionalDeferredFilters); + visitDeferredFilterConditions(collectedJoinArgs.deferredFilters, origBoundVars); OrderedJoinPlan orderedJoinPlan = orderJoinArgsPreservingSeparators(collectedJoinArgs, origBoundVars); TupleExpr root = buildOrderedJoinPlanRoot(orderedJoinPlan); if (root != null) { root = reapplyDeferredFilters(root, orderedJoinPlan.rootDeferredFilters); - if (TupleExprs.isVariableScopeChange(node)) { + if (TupleExprs.isVariableScopeChange(replaceTarget)) { ((AbstractQueryModelNode) root).setVariableScopeChange(true); } - node.replaceWith(root); + replaceTarget.replaceWith(root); } else { throw new IllegalStateException("Expected at least one join argument"); } @@ -233,6 +252,19 @@ public void meet(Join node) { } } + private void visitDeferredFilterConditions(List filters, Set outerBoundVars) { + for (Filter filter : filters) { + Set origBoundVars = boundVars; + try { + boundVars = new HashSet<>(outerBoundVars); + boundVars.addAll(filter.getArg().getAssuredBindingNames()); + filter.getCondition().visit(this); + } finally { + boundVars = origBoundVars; + } + } + } + private CollectedJoinArgs collectJoinArgsForOrdering(Join node) { CollectedJoinArgs collectedJoinArgs = new CollectedJoinArgs(); collectJoinArgsForOrdering(node, collectedJoinArgs.joinArgs, collectedJoinArgs.deferredFilters); @@ -284,6 +316,7 @@ private TupleExpr reapplyDeferredFilters(TupleExpr root, List de for (DeferredFilter deferredFilter : deferredFilters) { Filter clone = deferredFilter.filter.clone(); clone.setArg(current); + annotateDeferredFilter(clone, deferredFilter, "root"); current = clone; } return current; @@ -476,44 +509,107 @@ private TupleExpr buildSegmentRoot(OrderedJoinSegment orderedJoinSegment) { return buildJoinRoot(orderedJoinSegment.orderedJoinArgs); } - Deque orderedJoinArgs = new ArrayDeque<>(orderedJoinSegment.orderedJoinArgs); List pendingFilters = new ArrayList<>(orderedJoinSegment.deferredFilters); - Set availableVars = new HashSet<>(orderedJoinSegment.boundBeforeSegment); + List factors = new ArrayList<>(orderedJoinSegment.orderedJoinArgs.size()); + for (TupleExpr tupleExpr : orderedJoinSegment.orderedJoinArgs) { + TupleExpr filtered = applyCompatibleLocalDeferredFilters(tupleExpr, pendingFilters); + factors.add(new SegmentFactor(filtered, collectPatternIdentities(filtered))); + } - TupleExpr root = applyCompatibleLocalDeferredFilters(orderedJoinArgs.removeFirst(), pendingFilters); - availableVars.addAll(root.getBindingNames()); - root = applyCompatibleDeferredFilters(root, pendingFilters, availableVars); + List unresolvedFilters = new ArrayList<>(); + for (DeferredFilter deferredFilter : sortDeferredFilters(pendingFilters)) { + if (!groupDeferredFilterOnSmallestWindow(factors, deferredFilter, + orderedJoinSegment.boundBeforeSegment)) { + unresolvedFilters.add(deferredFilter); + } + } - while (!orderedJoinArgs.isEmpty()) { - TupleExpr next = applyCompatibleLocalDeferredFilters(orderedJoinArgs.removeFirst(), pendingFilters); - root = createJoinWithEstimatedResultSize(root, next); - availableVars.addAll(next.getBindingNames()); - root = applyCompatibleDeferredFilters(root, pendingFilters, availableVars); + Deque roots = new ArrayDeque<>(factors.size()); + for (SegmentFactor factor : factors) { + roots.addLast(factor.tupleExpr); } + TupleExpr root = buildJoinRoot(roots); - if (!pendingFilters.isEmpty()) { - root = reapplyDeferredFilters(root, pendingFilters); + if (!unresolvedFilters.isEmpty()) { + root = reapplyDeferredFilters(root, unresolvedFilters); } return root; } - private TupleExpr applyCompatibleDeferredFilters(TupleExpr root, List deferredFilters, - Set availableVars) { - TupleExpr current = root; - for (int i = 0; i < deferredFilters.size();) { - DeferredFilter deferredFilter = deferredFilters.get(i); - if (!availableVars.containsAll(deferredFilter.requiredVars)) { - i++; - continue; - } + private boolean groupDeferredFilterOnSmallestWindow(List factors, DeferredFilter deferredFilter, + Set boundBeforeSegment) { + if (deferredFilter.originPatterns.isEmpty()) { + return false; + } - Filter clone = deferredFilter.filter.clone(); - clone.setArg(current); - current = clone; - deferredFilters.remove(i); + int[] window = smallestPatternCoveringWindow(factors, deferredFilter.originPatterns); + if (window == null) { + return false; } - return current; + + Set availableVars = new HashSet<>(boundBeforeSegment); + for (int i = window[0]; i <= window[1]; i++) { + availableVars.addAll(factors.get(i).bindingNames); + } + if (!availableVars.containsAll(deferredFilter.requiredVars)) { + return false; + } + + Deque windowRoots = new ArrayDeque<>(window[1] - window[0] + 1); + Set containedPatterns = Collections.newSetFromMap(new IdentityHashMap<>()); + for (int i = window[0]; i <= window[1]; i++) { + SegmentFactor factor = factors.get(i); + windowRoots.addLast(factor.tupleExpr); + containedPatterns.addAll(factor.containedPatterns); + } + + TupleExpr groupedRoot = buildJoinRoot(windowRoots); + TupleExpr filteredRoot = wrapTupleExprWithDeferredFilters(groupedRoot, List.of(deferredFilter), + "smallestWindow"); + SegmentFactor groupedFactor = new SegmentFactor(filteredRoot, containedPatterns); + + for (int i = window[1]; i >= window[0]; i--) { + factors.remove(i); + } + factors.add(window[0], groupedFactor); + return true; + } + + private int[] smallestPatternCoveringWindow(List factors, + Set originPatterns) { + int bestStart = -1; + int bestEnd = -1; + int bestSize = Integer.MAX_VALUE; + + for (int start = 0; start < factors.size(); start++) { + Set covered = Collections.newSetFromMap(new IdentityHashMap<>()); + for (int end = start; end < factors.size(); end++) { + covered.addAll(factors.get(end).containedPatterns); + if (covered.containsAll(originPatterns)) { + int size = end - start + 1; + if (size < bestSize) { + bestStart = start; + bestEnd = end; + bestSize = size; + } + break; + } + } + } + + return bestStart < 0 ? null : new int[] { bestStart, bestEnd }; + } + + private Set collectPatternIdentities(TupleExpr tupleExpr) { + Set patterns = Collections.newSetFromMap(new IdentityHashMap<>()); + tupleExpr.visit(new AbstractSimpleQueryModelVisitor() { + @Override + public void meet(StatementPattern statementPattern) { + patterns.add(statementPattern); + } + }); + return patterns; } private TupleExpr buildJoinRoot(Deque orderedJoinArgs) { @@ -522,6 +618,7 @@ private TupleExpr buildJoinRoot(Deque orderedJoinArgs) { } Deque remaining = new ArrayDeque<>(orderedJoinArgs); + Map plannedPrefixRowsForArgs = plannedPrefixRowsForArgs(orderedJoinArgs); if (remaining.size() > 1) { double cardinality = 0; @@ -546,7 +643,8 @@ private TupleExpr buildJoinRoot(Deque orderedJoinArgs) { cardinality = Math.max(cardinality, left.getResultSizeEstimate()); cardinality = Math.max(cardinality, right.getResultSizeEstimate()); - Join join = createJoinWithEstimatedResultSize(left, right); + Join join = createJoinWithEstimatedResultSize(left, right, + plannedPrefixRowsForArgs.remove(right)); join.setOrder((Var) supportedOrders.toArray()[0]); join.setMergeJoin(true); remaining.addFirst(join); @@ -559,7 +657,8 @@ private TupleExpr buildJoinRoot(Deque orderedJoinArgs) { Set supportedOrders = new HashSet<>(root.getSupportedOrders(tripleSource)); supportedOrders.retainAll(next.getSupportedOrders(tripleSource)); - Join join = createJoinWithEstimatedResultSize(root, next); + Join join = createJoinWithEstimatedResultSize(root, next, + plannedPrefixRowsForArgs.remove(next)); if (USE_MERGE_JOIN_FOR_LAST_STATEMENT_PATTERNS_WHEN_CROSS_JOIN) { mergeJoinForCrossJoin(remaining, supportedOrders, root, next, join); } @@ -567,12 +666,28 @@ private TupleExpr buildJoinRoot(Deque orderedJoinArgs) { } while (!remaining.isEmpty()) { - root = createJoinWithEstimatedResultSize(root, remaining.removeFirst()); + TupleExpr next = remaining.removeFirst(); + root = createJoinWithEstimatedResultSize(root, next, plannedPrefixRowsForArgs.remove(next)); } return root; } + private Map plannedPrefixRowsForArgs(Deque orderedJoinArgs) { + if (plannedPrefixRowsByRightArg.isEmpty() || orderedJoinArgs.size() < 2) { + return new IdentityHashMap<>(); + } + + Map plannedPrefixRowsForArgs = new IdentityHashMap<>(); + for (TupleExpr tupleExpr : orderedJoinArgs) { + Double plannedPrefixRows = plannedPrefixRowsByRightArg.remove(tupleExpr); + if (plannedPrefixRows != null && isFiniteNonNegative(plannedPrefixRows)) { + plannedPrefixRowsForArgs.put(tupleExpr, plannedPrefixRows); + } + } + return plannedPrefixRowsForArgs; + } + private void appendOptimizedJoinGroup(Deque orderedJoinArgs, List joinGroup) { if (joinGroup.isEmpty()) { return; @@ -634,6 +749,25 @@ private Deque optimizeJoinGroup(List joinGroup, List plannedJoinArgs = new ArrayDeque<>(plan.getOrderedArgs()); + Deque normalizedJoinArgs = positionBindingSetAssignments(plannedJoinArgs); + if (sameIdentityOrder(plan.getOrderedArgs(), new ArrayList<>(normalizedJoinArgs))) { + applyPlannerStepEstimates(plan); + } else { + applyPlannerSummaryEstimates(plan, normalizedJoinArgs); + applyRebuiltPlannerStepEstimates(normalizedJoinArgs, boundBeforeSegment); + } + for (TupleExpr tupleExpr : normalizedJoinArgs) { + tupleExpr.visit(this); + boundVars.addAll(tupleExpr.getBindingNames()); + } + return normalizedJoinArgs; + } + while (!remaining.isEmpty()) { TupleExpr tupleExpr = selectNextTupleExpr(remaining, cardinalityMap, varsMap, varFreqMap); this.currentHighestCost = Math.max(currentHighestCost, tupleExpr.getCostEstimate()); @@ -651,7 +785,170 @@ private Deque optimizeJoinGroup(List joinGroup, List(orderedJoinArgs), boundBeforeSegment, deferredFilters)); } - return positionBindingSetAssignments(orderedJoinArgs); + orderedJoinArgs = positionBindingSetAssignments(orderedJoinArgs); + annotatePlannerAttemptFailure(orderedJoinArgs, planningAttempt); + return orderedJoinArgs; + } + + private JoinOrderPlanner.PlanningAttempt planSegmentWithJoinOrderPlanner(List segment, + Set boundBeforeSegment, List deferredFilters) { + if (!REORDER_JOINS_WITH_SKETCHES || segment.size() < 2 || !(statistics instanceof JoinOrderPlanner)) { + return JoinOrderPlanner.PlanningAttempt.unavailable(plannerAlgorithm(segment.size())); + } + + JoinOrderPlanner planner = (JoinOrderPlanner) statistics; + JoinOrderPlanner.Algorithm algorithm = plannerAlgorithm(segment.size()); + JoinOrderPlanner.PlanningAttempt attempt = planner.planJoinOrderAttempt(new ArrayList<>(segment), + new HashSet<>(boundBeforeSegment), plannerAlgorithm(segment.size()), + toPlannerFilterConstraints(deferredFilters)); + if (attempt.getPlan().isPresent() && !isValidPlannerOrder(segment, attempt.getPlan().get())) { + List diagnostics = new ArrayList<>(attempt.getDiagnostics()); + diagnostics.add("planner returned an invalid segment permutation"); + return JoinOrderPlanner.PlanningAttempt.rejected(attempt.getPlannerId(), algorithm, + attempt.getPlannerPath(), attempt.getRejectedFactor(), diagnostics); + } + return attempt; + } + + private JoinOrderPlanner.Algorithm plannerAlgorithm(int segmentSize) { + if (JOIN_ORDER_STRATEGY == JoinOrderStrategy.DYNAMIC_PROGRAMMING) { + return JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING; + } + if (JOIN_ORDER_STRATEGY == JoinOrderStrategy.HYBRID && segmentSize <= DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT) { + return JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING; + } + return JoinOrderPlanner.Algorithm.GREEDY; + } + + private List toPlannerFilterConstraints( + List deferredFilters) { + if (deferredFilters.isEmpty()) { + return List.of(); + } + + List constraints = new ArrayList<>(deferredFilters.size()); + for (DeferredFilter deferredFilter : deferredFilters) { + constraints.add(new JoinOrderPlanner.FilterConstraint(deferredFilter.requiredVars, + deferredFilter.filterPassEstimate.getPassRatio(), deferredFilter.conditionCost, + deferredFilter.filter.getCondition().toString(), + deferredFilter.filterPassEstimate.getSource().name().toLowerCase(), + deferredFilter.filterPassEstimate.getEvidenceCount())); + } + return constraints; + } + + private boolean isValidPlannerOrder(List originalSegment, JoinOrderPlanner.JoinOrderPlan plan) { + List orderedArgs = plan.getOrderedArgs(); + if (orderedArgs.size() != originalSegment.size()) { + return false; + } + + Set originalIdentities = Collections.newSetFromMap(new IdentityHashMap<>()); + originalIdentities.addAll(originalSegment); + Set plannedIdentities = Collections.newSetFromMap(new IdentityHashMap<>()); + for (TupleExpr tupleExpr : orderedArgs) { + if (!originalIdentities.contains(tupleExpr) || !plannedIdentities.add(tupleExpr)) { + return false; + } + } + return true; + } + + private void applyPlannerStepEstimates(JoinOrderPlanner.JoinOrderPlan plan) { + applyPlannerSummaryEstimates(plan, new ArrayDeque<>(plan.getOrderedArgs())); + + List steps = plan.getSteps(); + if (steps.size() != plan.getOrderedArgs().size()) { + return; + } + for (int i = 0; i < steps.size(); i++) { + JoinOrderPlanner.PlanStep step = steps.get(i); + TupleExpr tupleExpr = plan.getOrderedArgs().get(i); + double rows = steps.get(i).getFactorOutputRows(); + if (Double.isFinite(rows) && rows >= 0.0d) { + tupleExpr.setResultSizeEstimate(rows); + } + if (!step.getBoundVarsBefore().isEmpty()) { + tupleExpr.setStringMetricPlanned(TelemetryMetricNames.PLANNED_BOUND_VARS, + describeBindingNames(step.getBoundVarsBefore())); + } + if (Double.isFinite(step.getStepWorkRows()) && step.getStepWorkRows() >= 0.0d) { + tupleExpr.setDoubleMetricPlanned(TelemetryMetricNames.PLANNED_WORK_ROWS, + step.getStepWorkRows()); + } + for (Map.Entry entry : step.getStringMetrics().entrySet()) { + tupleExpr.setStringMetricPlanned(entry.getKey(), entry.getValue()); + } + for (Map.Entry entry : step.getDoubleMetrics().entrySet()) { + tupleExpr.setDoubleMetricPlanned(entry.getKey(), entry.getValue()); + } + if (i > 0 && isFiniteNonNegative(step.getPrefixOutputRows())) { + plannedPrefixRowsByRightArg.put(tupleExpr, step.getPrefixOutputRows()); + } + } + } + + private void applyPlannerSummaryEstimates(JoinOrderPlanner.JoinOrderPlan plan, Deque orderedArgs) { + if (orderedArgs.isEmpty()) { + return; + } + + TupleExpr rootAnnotationTarget = orderedArgs.getFirst(); + for (Map.Entry entry : plan.getSummaryStringMetrics().entrySet()) { + rootAnnotationTarget.setStringMetricPlanned(entry.getKey(), entry.getValue()); + } + for (Map.Entry entry : plan.getSummaryDoubleMetrics().entrySet()) { + rootAnnotationTarget.setDoubleMetricPlanned(entry.getKey(), entry.getValue()); + } + rootAnnotationTarget.setDoubleMetricPlanned(TelemetryMetricNames.PLANNED_WORK_ROWS, + plan.getEstimatedTotalWork()); + } + + private void applyRebuiltPlannerStepEstimates(Deque orderedArgs, Set boundBeforeSegment) { + Set currentBoundVars = new HashSet<>(boundBeforeSegment); + JoinFactorCostModel costModel = statistics instanceof JoinFactorCostModel + ? (JoinFactorCostModel) statistics + : null; + + for (TupleExpr tupleExpr : orderedArgs) { + if (!currentBoundVars.isEmpty()) { + tupleExpr.setStringMetricPlanned(TelemetryMetricNames.PLANNED_BOUND_VARS, + describeBindingNames(currentBoundVars)); + } + if (costModel != null) { + Optional estimate = costModel + .estimateFactorCost(tupleExpr, currentBoundVars); + if (estimate.isPresent()) { + JoinFactorCostModel.FactorCostEstimate factorCost = estimate.get(); + if (isFiniteNonNegative(factorCost.getOutputRows())) { + tupleExpr.setResultSizeEstimate(factorCost.getOutputRows()); + } + if (isFiniteNonNegative(factorCost.getWorkRows())) { + tupleExpr.setDoubleMetricPlanned(TelemetryMetricNames.PLANNED_WORK_ROWS, + factorCost.getWorkRows()); + } + for (Map.Entry entry : factorCost.getStringMetrics().entrySet()) { + tupleExpr.setStringMetricPlanned(entry.getKey(), entry.getValue()); + } + for (Map.Entry entry : factorCost.getDoubleMetrics().entrySet()) { + tupleExpr.setDoubleMetricPlanned(entry.getKey(), entry.getValue()); + } + } + } + currentBoundVars.addAll(tupleExpr.getBindingNames()); + } + } + + private boolean sameIdentityOrder(List left, List right) { + if (left.size() != right.size()) { + return false; + } + for (int i = 0; i < left.size(); i++) { + if (left.get(i) != right.get(i)) { + return false; + } + } + return true; } private Deque reorderJoinArgs(Deque orderedJoinArgs, Set outerBoundVars) { @@ -684,8 +981,14 @@ private Deque reorderJoinArgs(Deque orderedJoinArgs) { } private Join createJoinWithEstimatedResultSize(TupleExpr left, TupleExpr right) { + return createJoinWithEstimatedResultSize(left, right, null); + } + + private Join createJoinWithEstimatedResultSize(TupleExpr left, TupleExpr right, Double plannedResultSize) { Join join = new Join(left, right); - if (statistics.supportsJoinEstimation()) { + if (plannedResultSize != null && isFiniteNonNegative(plannedResultSize)) { + join.setResultSizeEstimate(Math.max(join.getResultSizeEstimate(), plannedResultSize)); + } else if (statistics.supportsJoinEstimation()) { double estimatedResultSize = statistics.getCardinality(join); if (!Double.isNaN(estimatedResultSize) && estimatedResultSize >= 0) { join.setResultSizeEstimate(Math.max(join.getResultSizeEstimate(), estimatedResultSize)); @@ -853,6 +1156,7 @@ private List greedyReorderByJoinCardinality(List segment, List remaining = new ArrayList<>(segment); JoinCardinalityCache cardinalityCache = new JoinCardinalityCache(); + FactorCostCache factorCostCache = new FactorCostCache(statistics); Map originalOrder = new IdentityHashMap<>(segment.size()); for (int i = 0; i < segment.size(); i++) { originalOrder.put(segment.get(i), i); @@ -874,7 +1178,8 @@ private List greedyReorderByJoinCardinality(List segment, TupleExpr left = remaining.get(leftIndex); TupleExpr right = remaining.get(rightIndex); GreedyChoiceMetrics metrics = buildInitialGreedyChoiceMetrics(left, right, outerBoundVars, - deferredFilters, cardinalityCache, hasConnectedInitialPair, hasAnchoredInitialPair); + deferredFilters, cardinalityCache, factorCostCache, hasConnectedInitialPair, + hasAnchoredInitialPair); GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(left), originalOrder.get(right)); GreedyChoiceCandidate candidate = new GreedyChoiceCandidate("initial", left, right, metrics, @@ -914,7 +1219,8 @@ private List greedyReorderByJoinCardinality(List segment, boolean hasConnectedCandidate = hasConnectedCandidate(remaining, prefixBindingNames); for (TupleExpr candidate : remaining) { GreedyChoiceMetrics metrics = buildNextGreedyChoiceMetrics(prefixForEstimation, prefixBindingNames, - candidate, pendingDeferredFilters, cardinalityCache, hasConnectedCandidate); + candidate, pendingDeferredFilters, cardinalityCache, factorCostCache, + hasConnectedCandidate); GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(candidate), -1); GreedyChoiceCandidate candidateDecision = new GreedyChoiceCandidate("expand", prefixForEstimation, candidate, metrics, score); @@ -970,6 +1276,8 @@ private String formatGreedyCandidate(GreedyChoiceCandidate candidate, boolean ch + " score=" + formatOptimizerNumber(candidate.score.adjustedCost) + " rawRows=" + formatOptimizerNumber(candidate.metrics.rawJoinRows) + " effectiveRows=" + formatOptimizerNumber(candidate.metrics.effectiveJoinRows) + + " baseCostRows=" + formatOptimizerNumber(candidate.metrics.baseCostRows) + + " factorWorkRows=" + formatOptimizerNumber(candidate.metrics.factorWorkRows) + " sharedVars=" + candidate.metrics.sharedVarCount + " boundAnchors=" + candidate.metrics.boundAnchorCount + " cheapFilters=" + candidate.metrics.cheapFilterUnlockCount @@ -1048,9 +1356,46 @@ private void annotateGreedyDiagnostics(List ordered, List .orElse("")); } + private void annotatePlannerAttemptFailure(Deque orderedJoinArgs, + JoinOrderPlanner.PlanningAttempt planningAttempt) { + if (orderedJoinArgs.isEmpty() || planningAttempt == null || planningAttempt.getPlan().isPresent()) { + return; + } + + TupleExpr target = orderedJoinArgs.getFirst(); + if (planningAttempt.getPlannerId() != null) { + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_PLANNER_ID, + planningAttempt.getPlannerId()); + } + if (planningAttempt.getPlannerPath() != null) { + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_PLANNER_PATH, + planningAttempt.getPlannerPath()); + } + if (planningAttempt.getRejectedFactor() != null) { + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_PLANNER_REJECTED_FACTOR, + planningAttempt.getRejectedFactor()); + } + String diagnostics = summarizePlannerDiagnostics(planningAttempt.getDiagnostics()); + if (diagnostics != null) { + target.setStringMetricActual(TelemetryMetricNames.OPTIMIZER_PLANNER_DIAGNOSTICS, diagnostics); + } + } + + private String summarizePlannerDiagnostics(List diagnostics) { + if (diagnostics == null || diagnostics.isEmpty()) { + return null; + } + if (diagnostics.size() == 1) { + return diagnostics.get(0); + } + return diagnostics.get(0) + "; " + diagnostics.get(diagnostics.size() - 1); + } + private String scoreComponents(GreedyChoiceCandidate chosenDecision) { return "rawRows=" + formatOptimizerNumber(chosenDecision.metrics.rawJoinRows) + ", effectiveRows=" + formatOptimizerNumber(chosenDecision.metrics.effectiveJoinRows) + + ", baseCostRows=" + formatOptimizerNumber(chosenDecision.metrics.baseCostRows) + + ", factorWorkRows=" + formatOptimizerNumber(chosenDecision.metrics.factorWorkRows) + ", adjustedCost=" + formatOptimizerNumber(chosenDecision.score.adjustedCost) + ", sharedVars=" + chosenDecision.metrics.sharedVarCount + ", boundAnchors=" + chosenDecision.metrics.boundAnchorCount @@ -1176,7 +1521,8 @@ private int countCompatibleCheapFilters(List deferredFilters, Se int compatibleFilters = 0; for (DeferredFilter deferredFilter : deferredFilters) { if (deferredFilter.conditionCost == 0 - && availableVars.containsAll(deferredFilter.requiredVars)) { + && availableVars.containsAll(deferredFilter.requiredVars) + && hasKnownSelectivePassRatio(deferredFilter)) { compatibleFilters++; } } @@ -1186,7 +1532,8 @@ private int countCompatibleCheapFilters(List deferredFilters, Se private int countCompatibleExpensiveFilters(List deferredFilters, Set availableVars) { int compatibleFilters = 0; for (DeferredFilter deferredFilter : deferredFilters) { - if (deferredFilter.conditionCost > 0 && availableVars.containsAll(deferredFilter.requiredVars)) { + if (deferredFilter.conditionCost > 0 && availableVars.containsAll(deferredFilter.requiredVars) + && hasKnownSelectivePassRatio(deferredFilter)) { compatibleFilters++; } } @@ -1241,7 +1588,7 @@ private double estimateTupleExprRowsWithLocalDeferredFilters(TupleExpr tupleExpr } double combinedPassRatio = combinedCompatibleFilterPassRatio(localFilters); - if (combinedPassRatio > 0.0d) { + if (combinedPassRatio >= 0.0d) { double passRatioRows = baseRows * combinedPassRatio; if (isFiniteNonNegative(passRatioRows)) { return passRatioRows; @@ -1268,7 +1615,8 @@ private TupleExpr applyCompatibleLocalDeferredFilters(TupleExpr tupleExpr, deferredFilters.remove(i); } - return localFilters.isEmpty() ? tupleExpr : wrapTupleExprWithDeferredFilters(tupleExpr, localFilters); + return localFilters.isEmpty() ? tupleExpr + : wrapTupleExprWithDeferredFilters(tupleExpr, localFilters, "localPattern"); } private List compatibleLocalDeferredFilters(List deferredFilters, @@ -1290,26 +1638,50 @@ private boolean canApplyDeferredFilterToTupleExpr(DeferredFilter deferredFilter, if (!(tupleExpr instanceof StatementPattern)) { return false; } - return deferredFilter.patternLocalBase != null - && tupleExpr.getBindingNames().containsAll(deferredFilter.requiredVars); + if (deferredFilter.conditionCost > 0) { + return false; + } + return deferredFilter.patternLocalBase == tupleExpr; } private TupleExpr wrapTupleExprWithDeferredFilters(TupleExpr tupleExpr, List deferredFilters) { + return wrapTupleExprWithDeferredFilters(tupleExpr, deferredFilters, null); + } + + private TupleExpr wrapTupleExprWithDeferredFilters(TupleExpr tupleExpr, List deferredFilters, + String scope) { TupleExpr current = tupleExpr; for (DeferredFilter deferredFilter : sortDeferredFilters(deferredFilters)) { Filter filterClone = deferredFilter.filter.clone(); filterClone.setArg(current); + annotateDeferredFilter(filterClone, deferredFilter, scope); current = filterClone; } return current; } + private void annotateDeferredFilter(Filter filter, DeferredFilter deferredFilter, String scope) { + EvaluationStatistics.FilterPassEstimate estimate = deferredFilter.filterPassEstimate; + annotateFilterSelectivity(filter, estimate); + if (scope != null && !scope.isEmpty()) { + filter.setStringMetricPlanned(TelemetryMetricNames.DEFERRED_FILTER_SCOPE, scope); + } + } + + private void annotateFilterSelectivity(Filter filter) { + FilterSelectivityTelemetry.annotate(filter, statistics); + } + + private void annotateFilterSelectivity(Filter filter, EvaluationStatistics.FilterPassEstimate estimate) { + FilterSelectivityTelemetry.annotate(filter, statistics, estimate); + } + private double combinedCompatibleFilterPassRatio(List compatibleFilters) { double combinedPassRatio = 1.0d; boolean foundEstimatedFilter = false; for (DeferredFilter deferredFilter : compatibleFilters) { - double passRatio = statistics.estimateFilterPassRatio(deferredFilter.filter); - if (Double.isFinite(passRatio) && passRatio > 0.0d && passRatio <= 1.0d) { + double passRatio = deferredFilter.filterPassEstimate.getPassRatio(); + if (isKnownPassRatio(deferredFilter)) { combinedPassRatio *= passRatio; foundEstimatedFilter = true; } @@ -1322,6 +1694,36 @@ private double combinedUnlockedFilterPassRatio(List deferredFilt return combinedCompatibleFilterPassRatio(compatibleDeferredFilters(deferredFilters, availableVars)); } + private boolean shouldFloorUnlockedFilterPassRatio(List deferredFilters, + Set availableVars) { + boolean foundKnownFilter = false; + for (DeferredFilter deferredFilter : compatibleDeferredFilters(deferredFilters, availableVars)) { + if (!isKnownPassRatio(deferredFilter)) { + continue; + } + foundKnownFilter = true; + if (deferredFilter.filterPassEstimate + .getSource() != EvaluationStatistics.FilterPassEstimate.Source.HEURISTIC) { + return false; + } + } + return foundKnownFilter; + } + + private boolean hasKnownSelectivePassRatio(DeferredFilter deferredFilter) { + return isKnownPassRatio(deferredFilter) && deferredFilter.filterPassEstimate.getPassRatio() < 1.0d; + } + + private boolean isKnownPassRatio(DeferredFilter deferredFilter) { + if (deferredFilter == null || deferredFilter.filterPassEstimate == null + || deferredFilter.filterPassEstimate + .getSource() == EvaluationStatistics.FilterPassEstimate.Source.UNKNOWN) { + return false; + } + double passRatio = deferredFilter.filterPassEstimate.getPassRatio(); + return Double.isFinite(passRatio) && passRatio >= 0.0d && passRatio <= 1.0d; + } + private double estimateDeferredFilterAwareRows(TupleExpr tupleExpr, List deferredFilters, Set availableVars, double baseRows) { if (!isFiniteNonNegative(baseRows)) { @@ -1339,7 +1741,7 @@ private double estimateDeferredFilterAwareRows(TupleExpr tupleExpr, List 0.0d) { + if (combinedPassRatio >= 0.0d) { double passRatioRows = baseRows * combinedPassRatio; if (isFiniteNonNegative(passRatioRows)) { return passRatioRows; @@ -1355,34 +1757,68 @@ private double estimateRowsWithDeferredFilters(TupleExpr tupleExpr, List outerBoundVars, List deferredFilters, JoinCardinalityCache cardinalityCache, - boolean hasConnectedInitialPair, boolean hasAnchoredInitialPair) { + FactorCostCache factorCostCache, boolean hasConnectedInitialPair, boolean hasAnchoredInitialPair) { Set availableVars = getAvailableVars(outerBoundVars, left, right); int sharedVarCount = sharedJoinVariableCount(left, right); int boundAnchorCount = boundAnchorCount(left, right, outerBoundVars); double rawJoinRows = cardinalityCache.get(left, right); double effectiveJoinRows = estimateDeferredFilterAwareRows(new Join(left.clone(), right.clone()), deferredFilters, availableVars, rawJoinRows); - return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, sharedVarCount, boundAnchorCount, + double factorWorkRows = estimateInitialFactorWorkRows(left, right, outerBoundVars, factorCostCache); + double baseCostRows = isFiniteNonNegative(factorWorkRows) + ? Math.max(effectiveJoinRows, factorWorkRows) + : effectiveJoinRows; + return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, baseCostRows, factorWorkRows, + sharedVarCount, boundAnchorCount, countCompatibleCheapFilters(deferredFilters, availableVars), countCompatibleExpensiveFilters(deferredFilters, availableVars), sharedVarCount == 0 && hasConnectedInitialPair, boundAnchorCount == 0 && hasAnchoredInitialPair, - combinedUnlockedFilterPassRatio(deferredFilters, availableVars)); + combinedUnlockedFilterPassRatio(deferredFilters, availableVars), + shouldFloorUnlockedFilterPassRatio(deferredFilters, availableVars)); } private GreedyChoiceMetrics buildNextGreedyChoiceMetrics(TupleExpr prefixForEstimation, Set prefixBindingNames, TupleExpr candidate, List deferredFilters, - JoinCardinalityCache cardinalityCache, boolean hasConnectedCandidate) { + JoinCardinalityCache cardinalityCache, FactorCostCache factorCostCache, boolean hasConnectedCandidate) { Set candidateAvailableVars = getAvailableVars(prefixBindingNames, candidate); int sharedVarCount = sharedJoinVariableCount(candidate, prefixBindingNames); double rawJoinRows = cardinalityCache.get(prefixForEstimation, candidate); double effectiveJoinRows = estimateDeferredFilterAwareRows( new Join(prefixForEstimation.clone(), candidate.clone()), deferredFilters, candidateAvailableVars, rawJoinRows); - return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, sharedVarCount, 0, + double factorWorkRows = estimateCandidateFactorWorkRows(candidate, prefixBindingNames, factorCostCache); + double baseCostRows = isFiniteNonNegative(factorWorkRows) + ? Math.max(effectiveJoinRows, factorWorkRows) + : effectiveJoinRows; + return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, baseCostRows, factorWorkRows, + sharedVarCount, 0, countCompatibleCheapFilters(deferredFilters, candidateAvailableVars), countCompatibleExpensiveFilters(deferredFilters, candidateAvailableVars), sharedVarCount == 0 && hasConnectedCandidate, false, - combinedUnlockedFilterPassRatio(deferredFilters, candidateAvailableVars)); + combinedUnlockedFilterPassRatio(deferredFilters, candidateAvailableVars), + shouldFloorUnlockedFilterPassRatio(deferredFilters, candidateAvailableVars)); + } + + private double estimateInitialFactorWorkRows(TupleExpr left, TupleExpr right, Set outerBoundVars, + FactorCostCache factorCostCache) { + Optional leftEstimate = factorCostCache.get(left, outerBoundVars); + Optional rightEstimate = factorCostCache.get(right, outerBoundVars); + if (leftEstimate.isPresent() && rightEstimate.isPresent() + && isFiniteNonNegative(leftEstimate.get().getWorkRows()) + && isFiniteNonNegative(rightEstimate.get().getWorkRows())) { + return leftEstimate.get().getWorkRows() + rightEstimate.get().getWorkRows(); + } + return -1.0d; + } + + private double estimateCandidateFactorWorkRows(TupleExpr candidate, Set prefixBindingNames, + FactorCostCache factorCostCache) { + Optional estimate = factorCostCache.get(candidate, + prefixBindingNames); + if (estimate.isPresent() && isFiniteNonNegative(estimate.get().getWorkRows())) { + return estimate.get().getWorkRows(); + } + return -1.0d; } private boolean hasConnectedInitialPair(List tupleExprs) { @@ -1437,8 +1873,8 @@ private int compareGreedyChoices(GreedyChoiceScore left, GreedyChoiceScore right private GreedyChoiceScore scoreGreedyChoice(GreedyChoiceMetrics metrics, int stableIndex, int secondaryStableIndex) { - double normalizedJoinRows = normalizeJoinRows(metrics.effectiveJoinRows); - double adjustedCost = normalizedJoinRows; + double normalizedBaseCost = normalizeJoinRows(metrics.baseCostRows); + double adjustedCost = normalizedBaseCost; if (adjustedCost != Double.POSITIVE_INFINITY) { if (metrics.avoidableCrossJoin) { adjustedCost *= AVOIDABLE_CROSS_JOIN_PENALTY; @@ -1454,12 +1890,14 @@ private GreedyChoiceScore scoreGreedyChoice(GreedyChoiceMetrics metrics, int sta adjustedCost /= boundedBonus(metrics.expensiveFilterUnlockCount, EXPENSIVE_FILTER_BONUS_PER_FILTER, MAX_EXPENSIVE_FILTER_BONUS); if (Double.isFinite(metrics.combinedUnlockedFilterPassRatio) - && metrics.combinedUnlockedFilterPassRatio > 0.0d) { - adjustedCost *= Math.max(metrics.combinedUnlockedFilterPassRatio, - MIN_UNLOCKED_FILTER_PASS_RATIO); + && metrics.combinedUnlockedFilterPassRatio >= 0.0d) { + adjustedCost *= metrics.floorUnlockedFilterPassRatio + ? Math.max(metrics.combinedUnlockedFilterPassRatio, MIN_UNLOCKED_FILTER_PASS_RATIO) + : metrics.combinedUnlockedFilterPassRatio; } } - return new GreedyChoiceScore(adjustedCost, normalizedJoinRows, stableIndex, secondaryStableIndex); + return new GreedyChoiceScore(adjustedCost, normalizeJoinRows(metrics.effectiveJoinRows), stableIndex, + secondaryStableIndex); } private TupleExpr[] orderInitialPairByEffectiveLeafRows(TupleExpr left, TupleExpr right, @@ -1554,6 +1992,8 @@ private int sharedJoinVariableCount(TupleExpr tupleExpr, Set bindingName private final class GreedyChoiceMetrics { private final double rawJoinRows; private final double effectiveJoinRows; + private final double baseCostRows; + private final double factorWorkRows; private final int sharedVarCount; private final int boundAnchorCount; private final int cheapFilterUnlockCount; @@ -1561,13 +2001,17 @@ private final class GreedyChoiceMetrics { private final boolean avoidableCrossJoin; private final boolean unanchoredInitialPair; private final double combinedUnlockedFilterPassRatio; + private final boolean floorUnlockedFilterPassRatio; - private GreedyChoiceMetrics(double rawJoinRows, double effectiveJoinRows, int sharedVarCount, - int boundAnchorCount, + private GreedyChoiceMetrics(double rawJoinRows, double effectiveJoinRows, double baseCostRows, + double factorWorkRows, int sharedVarCount, int boundAnchorCount, int cheapFilterUnlockCount, int expensiveFilterUnlockCount, boolean avoidableCrossJoin, - boolean unanchoredInitialPair, double combinedUnlockedFilterPassRatio) { + boolean unanchoredInitialPair, double combinedUnlockedFilterPassRatio, + boolean floorUnlockedFilterPassRatio) { this.rawJoinRows = rawJoinRows; this.effectiveJoinRows = effectiveJoinRows; + this.baseCostRows = baseCostRows; + this.factorWorkRows = factorWorkRows; this.sharedVarCount = sharedVarCount; this.boundAnchorCount = boundAnchorCount; this.cheapFilterUnlockCount = cheapFilterUnlockCount; @@ -1575,6 +2019,7 @@ private GreedyChoiceMetrics(double rawJoinRows, double effectiveJoinRows, int sh this.avoidableCrossJoin = avoidableCrossJoin; this.unanchoredInitialPair = unanchoredInitialPair; this.combinedUnlockedFilterPassRatio = combinedUnlockedFilterPassRatio; + this.floorUnlockedFilterPassRatio = floorUnlockedFilterPassRatio; } } @@ -1630,6 +2075,19 @@ private OrderedJoinSegment(Deque orderedJoinArgs, List bindingNames; + private final Set containedPatterns; + + private SegmentFactor(TupleExpr tupleExpr, Set containedPatterns) { + this.tupleExpr = tupleExpr; + this.bindingNames = new HashSet<>(tupleExpr.getBindingNames()); + this.containedPatterns = Collections.newSetFromMap(new IdentityHashMap<>()); + this.containedPatterns.addAll(containedPatterns); + } + } + private final class OrderedJoinSeparator implements OrderedJoinPlanItem { private final TupleExpr tupleExpr; @@ -1657,6 +2115,8 @@ private final class DeferredFilter { private final int conditionCost; private final int originalIndex; private final StatementPattern patternLocalBase; + private final Set originPatterns; + private final EvaluationStatistics.FilterPassEstimate filterPassEstimate; private DeferredFilter(Filter filter, Set requiredVars, int conditionCost, int originalIndex) { this.filter = filter; @@ -1664,6 +2124,9 @@ private DeferredFilter(Filter filter, Set requiredVars, int conditionCos this.conditionCost = conditionCost; this.originalIndex = originalIndex; this.patternLocalBase = FilterSelectivityKeys.patternLocalBaseForFilter(filter); + this.originPatterns = Collections.newSetFromMap(new IdentityHashMap<>()); + this.originPatterns.addAll(FilterSelectivityKeys.originPatternsForFilter(filter)); + this.filterPassEstimate = statistics.estimateFilterPass(filter); } } @@ -1687,6 +2150,32 @@ private final class JoinCardinalityCache { } } + private final class FactorCostCache { + private final JoinFactorCostModel costModel; + private final Map>> cache = new IdentityHashMap<>(); + + private FactorCostCache(EvaluationStatistics statistics) { + this.costModel = statistics instanceof JoinFactorCostModel ? (JoinFactorCostModel) statistics : null; + } + + private Optional get(TupleExpr factor, Set boundVars) { + if (costModel == null) { + return Optional.empty(); + } + String boundKey = describeBindingNames(boundVars); + Map> factorCache = cache.computeIfAbsent( + factor, ignored -> new HashMap<>()); + Optional cached = factorCache.get(boundKey); + if (cached != null) { + return cached; + } + Optional estimate = costModel.estimateFactorCost(factor, + boundVars == null ? Set.of() : Set.copyOf(boundVars)); + factorCache.put(boundKey, estimate); + return estimate; + } + } + private void optimizeInNewScope(List subSelects) { for (TupleExpr subSelect : subSelects) { subSelect.visit(new JoinVisitor()); diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java index 385087a56c9..f6328fb0d4c 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java @@ -40,6 +40,7 @@ import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterOptimizer; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.StandardQueryOptimizerPipeline; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.eclipse.rdf4j.query.impl.EmptyBindingSet; import org.eclipse.rdf4j.query.parser.ParsedQuery; import org.eclipse.rdf4j.query.parser.QueryParserUtil; @@ -267,6 +268,34 @@ public void standardPipelinePreJoinFilterPassStillPushesFilterBelowJoinWhenOnlyF }); } + @Test + public void standardPipelineFinalFilterPassAnnotatesSelectivityFromCardinalityStatsUsedForPlacement() { + String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . " + + "FILTER(?branchName = \"Branch 0\" && ?branchName != \"Branch 1\") }"; + + QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); + StandardQueryOptimizerPipeline pipeline = new StandardQueryOptimizerPipeline( + new StrictEvaluationStrategy(new EmptyTripleSource(), null), + new EmptyTripleSource(), + new CardinalityOnlyFilterStatistics(200.0d, 100.0d, 20.0d, 20.0d)); + + for (QueryOptimizer optimizer : pipeline.getOptimizers()) { + optimizer.optimize(root, null, EmptyBindingSet.getInstance()); + } + + List filters = findAll(root, Filter.class); + assertThat(filters) + .as("The final filter pass should retain planned selectivity telemetry on filters it recreates") + .singleElement() + .satisfies(filter -> { + assertThat(filter.getArg()).isInstanceOf(StatementPattern.class); + assertThat(filter.getDoubleMetricPlanned(TelemetryMetricNames.PLANNED_FILTER_PASS_RATIO)) + .isEqualTo(0.2d); + assertThat(filter.getStringMetricPlanned(TelemetryMetricNames.FILTER_SELECTIVITY_SOURCE)) + .isEqualTo("cardinality"); + }); + } + void testOptimizer(String expectedQuery, String actualQuery) throws MalformedQueryException, UnsupportedQueryLanguageException { testOptimizer(expectedQuery, actualQuery, null); @@ -374,6 +403,19 @@ public boolean supportsFilterSelectivityCosting() { } } + private static final class CardinalityOnlyFilterStatistics extends SelectiveJoinStatistics { + + private CardinalityOnlyFilterStatistics(double joinCardinality, double namePatternCardinality, + double defaultPatternCardinality, double filteredNameCardinality) { + super(joinCardinality, namePatternCardinality, defaultPatternCardinality, filteredNameCardinality); + } + + @Override + public double estimateFilterPassRatio(Filter filter) { + return -1.0d; + } + } + private static List flattenJoinLeaves(TupleExpr tupleExpr) { ArrayList leaves = new ArrayList<>(); collectJoinLeaves(tupleExpr, leaves); diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java index 0e92c4fa809..fb5ce70540b 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java @@ -23,15 +23,19 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import org.eclipse.rdf4j.common.exception.RDF4JException; import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.MalformedQueryException; import org.eclipse.rdf4j.query.QueryLanguage; import org.eclipse.rdf4j.query.UnsupportedQueryLanguageException; import org.eclipse.rdf4j.query.algebra.BinaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; import org.eclipse.rdf4j.query.algebra.Compare; import org.eclipse.rdf4j.query.algebra.Compare.CompareOp; import org.eclipse.rdf4j.query.algebra.Exists; @@ -46,10 +50,15 @@ import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizerTest; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.helpers.QueryModelTreeToGenericPlanNode; import org.eclipse.rdf4j.query.algebra.helpers.TupleExprs; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.eclipse.rdf4j.query.parser.ParsedQuery; import org.eclipse.rdf4j.query.parser.QueryParserUtil; import org.eclipse.rdf4j.query.parser.sparql.SPARQLParser; @@ -467,6 +476,128 @@ public void optimizeUsesDeferredFilterToAnchorGreedyPrefix() { .containsExactly(ex("otherA"), ex("otherB")); } + @Test + public void optimizeInvokesPlannerSpiWhenStatisticsProvidesPlan() { + StatementPattern a = statementPattern("s", "a", ex("pA")); + StatementPattern b = statementPattern("a", "b", ex("pB")); + StatementPattern c = statementPattern("b", "c", ex("pC")); + PlannerStatistics statistics = new PlannerStatistics(List.of(c, b, a)); + + QueryRoot root = new QueryRoot(new Join(new Join(a, b), c)); + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); + + assertThat(statistics.planCalls) + .as("QueryJoinOptimizer should delegate segment ordering to JoinOrderPlanner when available") + .isEqualTo(1); + assertThat(predicates(flattenJoinLeaves(root.getArg()))).containsExactly(ex("pC"), ex("pB"), ex("pA")); + } + + @Test + public void optimizeNormalizesPlannerOutputBindingsBeforeFirstUse() { + BindingSetAssignment uValues = bindingSetAssignment("u", "u1"); + BindingSetAssignment vValues = bindingSetAssignment("v", "v1"); + StatementPattern follows = statementPattern("u", "v", ex("follows")); + StatementPattern name = statementPattern("v", "name", ex("name")); + PlannerStatistics statistics = new PlannerStatistics(List.of(follows, uValues, vValues, name), + List.of(uValues, vValues, follows, name)); + + QueryRoot root = new QueryRoot(new Join(new Join(new Join(uValues, vValues), follows), name)); + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); + + assertThat(flattenJoinLeaves(root.getArg())) + .as("Planner orders still need the same BindingSetAssignment positioning as fallback orders") + .containsExactly(uValues, vValues, follows, name); + } + + @Test + public void optimizePassesDeferredFilterConstraintsToPlannerForFilteredPrefixChoice() { + StatementPattern pValue = statementPattern("result", "p", ex("pValue")); + StatementPattern effectSize = statementPattern("result", "effect", ex("effectSize")); + Filter significantResultFilter = filter(new Join(pValue, effectSize), "p", "effect"); + StatementPattern cheapA = statementPattern("cheap", "mid", ex("cheapA")); + StatementPattern cheapB = statementPattern("mid", "leaf", ex("cheapB")); + PlannerStatistics statistics = new PlannerStatistics(List.of(pValue, effectSize, cheapA, cheapB), + List.of(cheapA, cheapB, pValue, effectSize)); + + QueryRoot root = new QueryRoot(new Join(new Join(cheapA, cheapB), significantResultFilter)); + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); + + assertThat(statistics.planCalls) + .as("QueryJoinOptimizer should call the planner for the whole original segment") + .isEqualTo(1); + assertThat(statistics.filterConstraints) + .as("Deferred filters should participate in planner-side prefix selection") + .singleElement() + .satisfies(filter -> { + assertThat(filter.getRequiredVars()).containsExactlyInAnyOrder("p", "effect"); + assertThat(filter.getConditionCost()).isZero(); + }); + List outerLeaves = flattenJoinLeaves(root.getArg()); + assertThat(outerLeaves.get(0)).isInstanceOf(Filter.class); + assertThat(predicates(flattenJoinLeaves(((Filter) outerLeaves.get(0)).getArg()))) + .containsExactly(ex("pValue"), ex("effectSize")); + assertThat(predicates(outerLeaves.subList(1, outerLeaves.size()))) + .containsExactly(ex("cheapA"), ex("cheapB")); + } + + @Test + public void optimizeKeepsDeferredFilterOnSmallestCompatibleWindow() { + StatementPattern pValue = statementPattern("result", "p", ex("pValue")); + StatementPattern effectSize = statementPattern("result", "effect", ex("effectSize")); + Filter significantResultFilter = filter(new Join(pValue, effectSize), "p", "effect"); + StatementPattern cheapA = statementPattern("cheap", "mid", ex("cheapA")); + StatementPattern cheapB = statementPattern("mid", "leaf", ex("cheapB")); + + QueryRoot root = new QueryRoot(new Join(new Join(significantResultFilter, cheapA), cheapB)); + new QueryJoinOptimizer( + new ParsedQueryPairwiseJoinStatistics(Map.of( + pairKey(ex("cheapA"), ex("cheapB")), 1.0d, + pairKey(ex("pValue"), ex("effectSize")), 100.0d)), + new EmptyTripleSource()).optimize(root, null, null); + + Filter filter = firstFilter(root); + assertThat(predicates(flattenJoinLeaves(filter.getArg()))) + .as("Deferred filters should wrap the smallest compatible window from their original subtree") + .containsExactlyInAnyOrder(ex("pValue"), ex("effectSize")); + } + + @Test + public void optimizeAttachesLocalDeferredFilterByPatternIdentity() { + StatementPattern local = statementPattern("metric", "value", ex("localMetric")); + StatementPattern partner = statementPattern("metric", "other", ex("partnerMetric")); + Filter localFilter = new Filter(new Join(local, partner), + new Compare(Var.of("value"), Var.of("value"), CompareOp.NE)); + StatementPattern sameBindings = statementPattern("otherMetric", "value", ex("sameBindingsMetric")); + PlannerStatistics statistics = new PlannerStatistics(List.of(sameBindings, local, partner), + List.of(local, partner, sameBindings)); + + QueryRoot root = new QueryRoot(new Join(localFilter, sameBindings)); + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); + + Filter filter = firstFilter(root); + assertThat(getPredicateValue(filter.getArg())) + .as("A local deferred filter must attach to its original StatementPattern identity") + .isEqualTo(ex("localMetric")); + } + + @Test + public void optimizedTelemetryIncludesExpectedFilterSelectivityFromStatistics() { + StatementPattern pattern = statementPattern("result", "value", ex("measuredValue")); + Filter filter = filter(pattern, "value", "target"); + QueryRoot root = new QueryRoot(filter); + + new QueryJoinOptimizer(new FilterSelectivityStatistics(), new EmptyTripleSource()).optimize(root, null, null); + + QueryModelTreeToGenericPlanNode converter = new QueryModelTreeToGenericPlanNode(root.getArg(), null, + Explanation.Level.Telemetry); + root.getArg().visit(converter); + String telemetry = converter.getGenericPlanNode().toString(); + + assertThat(telemetry) + .contains(TelemetryMetricNames.PLANNED_FILTER_PASS_RATIO + "=0.25") + .contains(TelemetryMetricNames.FILTER_SELECTIVITY_SOURCE + "=heuristic"); + } + @Test public void optimizeSchedulesDeferredExistsByCorrelatedVarsAndOrdersFiltersByCost() { StatementPattern encounter = statementPattern("patient", "enc", ex("hasEncounter")); @@ -574,6 +705,26 @@ public void optimizeLetsCheapFilterBonusBeatSlightlyCheaperConnectedAlternative( .containsExactlyInAnyOrder(ex("pA"), ex("pB")); } + @Test + public void optimizeTreatsKnownZeroPassFilterAsSelectiveForGreedyPrefix() { + StatementPattern a = statementPattern("s", "a", ex("pA")); + StatementPattern b = statementPattern("a", "b", ex("pB")); + Filter filteredPair = filter(new Join(a, b), "s", "b"); + StatementPattern c = statementPattern("c", "x", ex("pC")); + StatementPattern x = statementPattern("x", "y", ex("pX")); + + QueryRoot root = new QueryRoot(new Join(new Join(filteredPair, c), x)); + new QueryJoinOptimizer( + new ZeroPassFilterStatistics(Map.of( + pairKey(ex("pA"), ex("pB")), 1000.0d, + pairKey(ex("pC"), ex("pX")), 1.0d)), + new EmptyTripleSource()).optimize(root, null, null); + + assertThat(leadingPrefixPredicates(root.getArg(), 2)) + .as("A learned zero-pass filter should be able to drive greedy cost to zero") + .containsExactlyInAnyOrder(ex("pA"), ex("pB")); + } + @Test public void optimizeDiscountsNotExistsUnlockAgainstConnectedInitialPair() { String query = String.join("\n", @@ -745,6 +896,19 @@ protected void meetNode(QueryModelNode node) throws RuntimeException { return nodes; } + private static Filter firstFilter(QueryModelNode root) { + List filters = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter filter) throws RuntimeException { + filters.add(filter); + super.meet(filter); + } + }); + assertThat(filters).isNotEmpty(); + return filters.get(0); + } + private Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { Class joinVisitorClass = Class .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); @@ -783,6 +947,14 @@ private static Filter filter(TupleExpr arg, String leftVarName, String rightVarN return new Filter(arg, new Compare(Var.of(leftVarName), Var.of(rightVarName), CompareOp.NE)); } + private static BindingSetAssignment bindingSetAssignment(String varName, String localName) { + BindingSetAssignment assignment = new BindingSetAssignment(); + QueryBindingSet bindingSet = new QueryBindingSet(); + bindingSet.addBinding(varName, VF.createIRI(ex(localName))); + assignment.setBindingSets(List.of(bindingSet)); + return assignment; + } + private static String getPredicateValue(TupleExpr expr) { return ((StatementPattern) expr).getPredicateVar().getValue().stringValue(); } @@ -836,6 +1008,11 @@ public boolean supportsJoinEstimation() { return true; } + @Override + public boolean supportsFilterSelectivityCosting() { + return true; + } + @Override public double getCardinality(TupleExpr expr) { if (expr instanceof StatementPattern) { @@ -926,6 +1103,14 @@ public double getCardinality(TupleExpr expr) { return super.getCardinality(expr); } + @Override + public FilterPassEstimate estimateFilterPass(Filter filter) { + if (filter.getCondition() instanceof Compare) { + return new FilterPassEstimate(0.25d, FilterPassEstimate.Source.HEURISTIC); + } + return new FilterPassEstimate(-1.0d, FilterPassEstimate.Source.UNKNOWN); + } + private String predicate(TupleExpr expr) { if (expr instanceof StatementPattern) { return getPredicateValue(expr); @@ -934,6 +1119,94 @@ private String predicate(TupleExpr expr) { } } + private static final class PlannerStatistics extends EvaluationStatistics implements JoinOrderPlanner { + private final List orderedArgs; + private final List expectedArgs; + private List filterConstraints = List.of(); + private int planCalls; + + private PlannerStatistics(List orderedArgs) { + this(orderedArgs, List.of(orderedArgs.get(2), orderedArgs.get(1), orderedArgs.get(0))); + } + + private PlannerStatistics(List orderedArgs, List expectedArgs) { + this.orderedArgs = orderedArgs; + this.expectedArgs = expectedArgs; + } + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + return 10.0d; + } + + @Override + public Optional planJoinOrder(List args, Set initiallyBoundVars, + Algorithm algorithm) { + planCalls++; + assertThat(args).containsExactlyElementsOf(expectedArgs); + return Optional.of(new JoinOrderPlan(orderedArgs, 1.0d, 1.0d)); + } + + @Override + public Optional planJoinOrder(List args, Set initiallyBoundVars, + Algorithm algorithm, List deferredFilters) { + filterConstraints = List.copyOf(deferredFilters); + return planJoinOrder(args, initiallyBoundVars, algorithm); + } + } + + private static final class ZeroPassFilterStatistics extends EvaluationStatistics { + private final Map joinCosts; + + private ZeroPassFilterStatistics(Map joinCosts) { + this.joinCosts = joinCosts; + } + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public boolean supportsFilterSelectivityCosting() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + if (expr instanceof Join) { + Join join = (Join) expr; + String left = tupleExprKey(join.getLeftArg()); + String right = tupleExprKey(join.getRightArg()); + if (left != null && right != null) { + return joinCosts.getOrDefault(pairKey(left, right), 1000.0d); + } + return 1000.0d; + } + if (expr instanceof StatementPattern) { + return 10.0d; + } + return super.getCardinality(expr); + } + + @Override + public FilterPassEstimate estimateFilterPass(Filter filter) { + return new FilterPassEstimate(0.0d, FilterPassEstimate.Source.LEARNED_FILTER); + } + } + + private static final class FilterSelectivityStatistics extends EvaluationStatistics { + @Override + public double estimateFilterPassRatio(Filter filter) { + return 0.25d; + } + } + private static final class JoinEstimatingStatistics extends EvaluationStatistics { @Override diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java index a4149634a11..62b0ce0f434 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/AbstractQueryModelNode.java @@ -8,6 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra; import java.util.Collections; @@ -60,6 +61,9 @@ public abstract class AbstractQueryModelNode implements QueryModelNode, Variable private Map longMetricsActual = Collections.emptyMap(); private Map doubleMetricsActual = Collections.emptyMap(); private Map stringMetricsActual = Collections.emptyMap(); + private Map longMetricsPlanned = Collections.emptyMap(); + private Map doubleMetricsPlanned = Collections.emptyMap(); + private Map stringMetricsPlanned = Collections.emptyMap(); private double cardinality = CARDINALITY_NOT_SET; @@ -128,6 +132,12 @@ public AbstractQueryModelNode clone() { : new HashMap<>(doubleMetricsActual); clone.stringMetricsActual = stringMetricsActual.isEmpty() ? Collections.emptyMap() : new HashMap<>(stringMetricsActual); + clone.longMetricsPlanned = longMetricsPlanned.isEmpty() ? Collections.emptyMap() + : new HashMap<>(longMetricsPlanned); + clone.doubleMetricsPlanned = doubleMetricsPlanned.isEmpty() ? Collections.emptyMap() + : new HashMap<>(doubleMetricsPlanned); + clone.stringMetricsPlanned = stringMetricsPlanned.isEmpty() ? Collections.emptyMap() + : new HashMap<>(stringMetricsPlanned); return clone; } catch (CloneNotSupportedException e) { throw new RuntimeException("Query model nodes are required to be cloneable", e); @@ -365,6 +375,69 @@ public void setStringMetricActual(String metricName, String metricValue) { stringMetricsActual.put(metricName, metricValue); } + @Override + public Map getLongMetricsPlanned() { + return longMetricsPlanned; + } + + @Override + public long getLongMetricPlanned(String metricName) { + return longMetricsPlanned.getOrDefault(metricName, -1L); + } + + @Override + public void setLongMetricPlanned(String metricName, long metricValue) { + if (metricName == null) { + return; + } + if (longMetricsPlanned.isEmpty()) { + longMetricsPlanned = new HashMap<>(); + } + longMetricsPlanned.put(metricName, metricValue); + } + + @Override + public Map getDoubleMetricsPlanned() { + return doubleMetricsPlanned; + } + + @Override + public double getDoubleMetricPlanned(String metricName) { + return doubleMetricsPlanned.getOrDefault(metricName, -1D); + } + + @Override + public void setDoubleMetricPlanned(String metricName, double metricValue) { + if (metricName == null) { + return; + } + if (doubleMetricsPlanned.isEmpty()) { + doubleMetricsPlanned = new HashMap<>(); + } + doubleMetricsPlanned.put(metricName, metricValue); + } + + @Override + public Map getStringMetricsPlanned() { + return stringMetricsPlanned; + } + + @Override + public String getStringMetricPlanned(String metricName) { + return stringMetricsPlanned.get(metricName); + } + + @Override + public void setStringMetricPlanned(String metricName, String metricValue) { + if (metricName == null || metricValue == null) { + return; + } + if (stringMetricsPlanned.isEmpty()) { + stringMetricsPlanned = new HashMap<>(); + } + stringMetricsPlanned.put(metricName, metricValue); + } + @Override public boolean isRuntimeTelemetryEnabled() { return runtimeTelemetryEnabled; diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/QueryModelNode.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/QueryModelNode.java index fa0b21be7b4..5b1ba2e922e 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/QueryModelNode.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/QueryModelNode.java @@ -8,6 +8,7 @@ * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ +// Some portions generated by Codex package org.eclipse.rdf4j.query.algebra; import java.io.Serializable; @@ -295,6 +296,51 @@ default void setStringMetricActual(String metricName, String metricValue) { // no-op } + @Experimental + default Map getLongMetricsPlanned() { + return Collections.emptyMap(); + } + + @Experimental + default long getLongMetricPlanned(String metricName) { + return -1; + } + + @Experimental + default void setLongMetricPlanned(String metricName, long metricValue) { + // no-op + } + + @Experimental + default Map getDoubleMetricsPlanned() { + return Collections.emptyMap(); + } + + @Experimental + default double getDoubleMetricPlanned(String metricName) { + return -1; + } + + @Experimental + default void setDoubleMetricPlanned(String metricName, double metricValue) { + // no-op + } + + @Experimental + default Map getStringMetricsPlanned() { + return Collections.emptyMap(); + } + + @Experimental + default String getStringMetricPlanned(String metricName) { + return null; + } + + @Experimental + default void setStringMetricPlanned(String metricName, String metricValue) { + // no-op + } + @Experimental default boolean isRuntimeTelemetryEnabled() { return false; diff --git a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java index 0bb1225b6a1..d89bf33c9a5 100644 --- a/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java +++ b/core/queryalgebra/model/src/main/java/org/eclipse/rdf4j/query/algebra/helpers/QueryModelTreeToGenericPlanNode.java @@ -134,6 +134,11 @@ private GenericPlanNode buildPlanNode(QueryModelNode node, Set incomingB } else if (level.includesEvaluationAnnotations()) { copyOptimizerMetrics(node, genericPlanNode); } + if (level.includesEvaluationAnnotations()) { + genericPlanNode.setLongMetricsPlanned(new LinkedHashMap<>(node.getLongMetricsPlanned())); + genericPlanNode.setDoubleMetricsPlanned(new LinkedHashMap<>(node.getDoubleMetricsPlanned())); + genericPlanNode.setStringMetricsPlanned(new LinkedHashMap<>(node.getStringMetricsPlanned())); + } if (node == topTupleExpr && optimizerMetricWrapper != null) { copyOptimizerMetricsIfAbsent(optimizerMetricWrapper, genericPlanNode); } @@ -265,7 +270,7 @@ private void applyExplainAnnotations(QueryModelNode node, GenericPlanNode generi } if (node instanceof StatementPattern) { - applyIndexAnnotation((StatementPattern) node, genericPlanNode); + applyIndexAnnotation((StatementPattern) node, genericPlanNode, !level.includesRuntimeTelemetry()); } if (cartesianJoinExplainAnalyzer != null) { @@ -276,15 +281,22 @@ private void applyExplainAnnotations(QueryModelNode node, GenericPlanNode generi } } - private static void applyIndexAnnotation(StatementPattern statementPattern, GenericPlanNode genericPlanNode) { + private static void applyIndexAnnotation(StatementPattern statementPattern, GenericPlanNode genericPlanNode, + boolean includeLegacyActualAlias) { String indexName = statementPattern.getIndexName(); if (indexName == null || indexName.isEmpty()) { return; } if (indexName.contains(",")) { - genericPlanNode.setStringMetricActual(TelemetryMetricNames.INDEX_NAMES, indexName); + genericPlanNode.setStringMetricPlanned(TelemetryMetricNames.PLANNED_INDEX_NAME, indexName); + if (includeLegacyActualAlias) { + genericPlanNode.setStringMetricActual(TelemetryMetricNames.INDEX_NAMES, indexName); + } } else { - genericPlanNode.setStringMetricActual(TelemetryMetricNames.INDEX_NAME, indexName); + genericPlanNode.setStringMetricPlanned(TelemetryMetricNames.PLANNED_INDEX_NAME, indexName); + if (includeLegacyActualAlias) { + genericPlanNode.setStringMetricActual(TelemetryMetricNames.INDEX_NAME, indexName); + } } } diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index edb1fa8c667..7821279abda 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -97,6 +97,7 @@ import org.eclipse.rdf4j.query.algebra.ValueConstant; import org.eclipse.rdf4j.query.algebra.ValueExpr; import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterSelectivityKeys; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinStatsProvider; @@ -2069,6 +2070,28 @@ public void setPatternFilterSamplingEstimator(PatternFilterSamplingEstimator pat @FunctionalInterface public interface PatternFilterSamplingEstimator { double estimateFilterPassRatio(Filter filter, StatementPattern pattern); + + default PatternFilterSampleEstimate estimateFilterPass(Filter filter, StatementPattern pattern) { + return new PatternFilterSampleEstimate(estimateFilterPassRatio(filter, pattern), -1L); + } + } + + public static final class PatternFilterSampleEstimate { + private final double passRatio; + private final long sampleSize; + + public PatternFilterSampleEstimate(double passRatio, long sampleSize) { + this.passRatio = passRatio; + this.sampleSize = sampleSize; + } + + public double getPassRatio() { + return passRatio; + } + + public long getSampleSize() { + return sampleSize; + } } /** @@ -2411,6 +2434,7 @@ private void clearRobustRebuildBackoff() { public void addStatement(Statement st) { Objects.requireNonNull(st); + clearEstimateCacheIfPopulated(); if (!rebuildRequired.get() && !sketchesLoaded && persistenceEnabled && persistenceFile != null && hasSnapshotAvailable(persistenceFile)) { tryLoadFromDisk(); @@ -2449,6 +2473,7 @@ public void addStatement(Resource s, IRI p, Value o) { public void deleteStatement(Statement st) { Objects.requireNonNull(st); + clearEstimateCacheIfPopulated(); if (!rebuildRequired.get() && !sketchesLoaded && persistenceEnabled && persistenceFile != null && hasSnapshotAvailable(persistenceFile)) { tryLoadFromDisk(); @@ -3477,6 +3502,12 @@ private void clearEstimateCache() { estimateCache.clear(); } + private void clearEstimateCacheIfPopulated() { + if (!estimateCache.isEmpty()) { + clearEstimateCache(); + } + } + private double approxTotalRows() { return Math.max(0.0d, (double) Math.max(seenTriples, approxStoreSize.get())); } @@ -4108,16 +4139,33 @@ public Optional planJoinOrder(List ar public Optional planJoinOrder(List args, Set initiallyBoundVars, JoinOrderPlanner.Algorithm algorithm, JoinOrderWorkAdjuster workAdjuster) { + return planJoinOrder(args, initiallyBoundVars, algorithm, workAdjuster, List.of()); + } + + public Optional planJoinOrder(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm, JoinOrderWorkAdjuster workAdjuster, + List deferredFilters) { + return planJoinOrderAttempt(args, initiallyBoundVars, algorithm, workAdjuster, deferredFilters).getPlan(); + } + + public JoinOrderPlanner.PlanningAttempt planJoinOrderAttempt(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm, JoinOrderWorkAdjuster workAdjuster, + List deferredFilters) { if (!isReady()) { recordJoinOrderPlannerPath(SketchPlannerPath.ROBUST_NOT_READY); - return Optional.empty(); + return JoinOrderPlanner.PlanningAttempt.rejected("sketch", algorithm, + SketchPlannerPath.ROBUST_NOT_READY.name(), + null, List.of("rejected: sketch estimator not ready")); } if (args == null || args.isEmpty()) { recordJoinOrderPlannerPath(SketchPlannerPath.UNSUPPORTED_SHAPE); - return Optional.empty(); + return JoinOrderPlanner.PlanningAttempt.rejected("sketch", algorithm, + SketchPlannerPath.UNSUPPORTED_SHAPE.name(), + null, List.of("rejected: empty join segment")); } - return new SketchJoinOrderReorderer(this, workAdjuster).plan(args, initiallyBoundVars, algorithm); + return new SketchJoinOrderReorderer(this, workAdjuster).planAttempt(args, initiallyBoundVars, algorithm, + deferredFilters); } SketchPlannerPath lastJoinOrderPlannerPath() { @@ -4146,7 +4194,45 @@ public double estimateFilterPassRatio(Filter filter) { return -1.0d; } double knownMultiplier = estimateKnownFilterMultiplier(filter, pattern); - return knownMultiplier > 0.0d ? knownMultiplier : -1.0d; + return knownMultiplier >= 0.0d ? knownMultiplier : -1.0d; + } + + public EvaluationStatistics.FilterPassEstimate estimateFilterPass(Filter filter) { + StatementPattern pattern = basePatternForFilter(filter); + if (pattern == null || filter == null || filter.getCondition() == null) { + return new EvaluationStatistics.FilterPassEstimate(-1.0d, + EvaluationStatistics.FilterPassEstimate.Source.UNKNOWN); + } + JoinStatsProvider statsProvider = learnedStatsProvider; + PatternKey patternKey = FilterSelectivityKeys.patternKeyFor(pattern); + if (statsProvider != null && patternKey != null && statsProvider.hasStats(patternKey)) { + String filterKey = FilterSelectivityKeys.filterKeyFor(filter.getCondition()); + double ratio = statsProvider.getFilterPassRatio(patternKey, filterKey); + if (isValidFilterMultiplier(ratio)) { + return new EvaluationStatistics.FilterPassEstimate(normalizeExactFilterMultiplier(ratio), + EvaluationStatistics.FilterPassEstimate.Source.LEARNED_FILTER, + statsProvider.getFilterObservationCount(patternKey, filterKey)); + } + ratio = statsProvider.getPatternPassRatio(patternKey); + if (isValidFilterMultiplier(ratio)) { + return new EvaluationStatistics.FilterPassEstimate(normalizeExactFilterMultiplier(ratio), + EvaluationStatistics.FilterPassEstimate.Source.LEARNED_PATTERN, + statsProvider.getPatternObservationCount(patternKey)); + } + } + PatternFilterSampleEstimate sampledEstimate = resolveSampledFilterEstimate(filter, pattern); + if (sampledEstimate != null && isValidFilterMultiplier(sampledEstimate.getPassRatio())) { + return new EvaluationStatistics.FilterPassEstimate( + normalizeExactFilterMultiplier(sampledEstimate.getPassRatio()), + EvaluationStatistics.FilterPassEstimate.Source.SAMPLED, sampledEstimate.getSampleSize()); + } + double heuristicMultiplier = estimateHeuristicFilterMultiplier(filter, pattern); + if (heuristicMultiplier > 0.0d) { + return new EvaluationStatistics.FilterPassEstimate(heuristicMultiplier, + EvaluationStatistics.FilterPassEstimate.Source.HEURISTIC); + } + return new EvaluationStatistics.FilterPassEstimate(-1.0d, + EvaluationStatistics.FilterPassEstimate.Source.UNKNOWN); } private TuplePlanEstimate toPlannerTupleEstimate(TupleExpr tupleExpr, Set initiallyBoundVars) { @@ -4168,7 +4254,19 @@ TuplePlanEstimate planEstimateForJoinOrdering(TupleExpr tupleExpr, Set i } TuplePlanEstimate factorEstimateForJoinOrdering(TupleExpr tupleExpr, Set initiallyBoundVars) { - return toPlannerTupleEstimate(tupleExpr, initiallyBoundVars); + if (!isSupportedJoinOrderingFactor(tupleExpr)) { + return null; + } + return estimateTupleExprPlan(tupleExpr, initiallyBoundVars); + } + + private boolean isSupportedJoinOrderingFactor(TupleExpr tupleExpr) { + TupleExpr current = tupleExpr; + while (current instanceof Filter || current instanceof Distinct || current instanceof Reduced + || current instanceof Slice) { + current = ((UnaryTupleOperator) current).getArg(); + } + return current instanceof StatementPattern || current instanceof BindingSetAssignment; } private TuplePlanEstimate estimatePatternTupleExprPlan(PatternEstimateInput input) { @@ -4356,6 +4454,12 @@ TuplePlanEstimate joinedPlanEstimate(JoinStepEstimate step) { return new TuplePlanEstimate(step.outputRows, step.outputRows, 1.0d, step.varStats); } + TuplePlanEstimate withOutputRowsForJoinOrdering(TuplePlanEstimate estimate, double outputRows) { + double rows = Math.max(0.0d, outputRows); + return new TuplePlanEstimate(rows, rows, estimate.localFilterMultiplier, + clampVarStatsToRows(estimate.varStats, rows, true)); + } + boolean hasSharedJoinVariable(TuplePlanEstimate left, TuplePlanEstimate right) { for (String varName : left.varStats.keySet()) { if (right.varStats.containsKey(varName)) { @@ -4560,7 +4664,6 @@ private double cardinalityWithInitiallyBoundVars(List tupleExprs, Set .size() <= SketchJoinOrderPlanner.MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS ? JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING : JoinOrderPlanner.Algorithm.GREEDY; - algorithm = JoinOrderPlanner.Algorithm.GREEDY; SketchJoinOrderPlanner.PlanOutcome outcome = new SketchJoinOrderPlanner(this, JoinOrderWorkAdjuster.NO_OP, tupleExprs, bound) .plan(algorithm); @@ -5413,11 +5516,11 @@ private PatternEstimateInput asSketchCompatibleInput(Filter filter) { return null; } double filterMultiplier = resolveFilterMultiplier(filter, input.pattern); - double combinedMultiplier = normalizeFilterMultiplier(input.filterMultiplier * filterMultiplier); + double combinedMultiplier = normalizeExactFilterMultiplier(input.filterMultiplier * filterMultiplier); return new PatternEstimateInput(input.pattern, combinedMultiplier); } - AccessShape accessShapeForJoinOrdering(TupleExpr tupleExpr, Set currentlyBoundVars) { + public AccessShape accessShapeForJoinOrdering(TupleExpr tupleExpr, Set currentlyBoundVars) { if (tupleExpr instanceof StatementPattern) { return buildAccessShape((StatementPattern) tupleExpr, currentlyBoundVars, 1.0d, Set.of()); } @@ -5752,22 +5855,28 @@ private double resolveLearnedFilterMultiplier(Filter filter, StatementPattern pa String filterKey = FilterSelectivityKeys.filterKeyFor(filter.getCondition()); double ratio = statsProvider.getFilterPassRatio(patternKey, filterKey); if (isValidFilterMultiplier(ratio)) { - return normalizeFilterMultiplier(ratio); + return normalizeExactFilterMultiplier(ratio); } ratio = statsProvider.getPatternPassRatio(patternKey); if (isValidFilterMultiplier(ratio)) { - return normalizeFilterMultiplier(ratio); + return normalizeExactFilterMultiplier(ratio); } return -1.0d; } private double resolveSampledFilterMultiplier(Filter filter, StatementPattern pattern) { + PatternFilterSampleEstimate estimate = resolveSampledFilterEstimate(filter, pattern); + return estimate == null || !isValidFilterMultiplier(estimate.getPassRatio()) + ? -1.0d + : normalizeExactFilterMultiplier(estimate.getPassRatio()); + } + + private PatternFilterSampleEstimate resolveSampledFilterEstimate(Filter filter, StatementPattern pattern) { PatternFilterSamplingEstimator samplingEstimator = patternFilterSamplingEstimator; if (samplingEstimator == null || filter == null || filter.getCondition() == null || pattern == null) { - return -1.0d; + return null; } - double ratio = samplingEstimator.estimateFilterPassRatio(filter, pattern); - return isValidFilterMultiplier(ratio) ? normalizeFilterMultiplier(ratio) : -1.0d; + return samplingEstimator.estimateFilterPass(filter, pattern); } private double estimateKnownFilterMultiplier(Filter filter, StatementPattern pattern) { @@ -5776,11 +5885,11 @@ private double estimateKnownFilterMultiplier(Filter filter, StatementPattern pat return -1.0d; } double learnedMultiplier = resolveLearnedFilterMultiplier(filter, pattern); - if (learnedMultiplier > 0.0d) { + if (learnedMultiplier >= 0.0d) { return learnedMultiplier; } double sampledMultiplier = resolveSampledFilterMultiplier(filter, pattern); - if (sampledMultiplier > 0.0d) { + if (sampledMultiplier >= 0.0d) { return sampledMultiplier; } double heuristicMultiplier = estimateHeuristicFilterMultiplier(filter, pattern); @@ -5994,28 +6103,38 @@ private double estimateVarToConstantFilterMultiplier(TuplePlanEstimate estimate, } private boolean isValidFilterMultiplier(double value) { - return Double.isFinite(value) && value > 0.0d && value <= 1.0d; + return Double.isFinite(value) && value >= 0.0d && value <= 1.0d; } private double normalizeFilterMultiplier(double value) { - if (!Double.isFinite(value) || value <= 0.0d) { + if (!Double.isFinite(value) || value < 0.0d) { return 1.0d; } + if (value == 0.0d) { + return 0.0d; + } return Math.max(MIN_FILTER_MULTIPLIER, Math.min(1.0d, value)); } + private double normalizeExactFilterMultiplier(double value) { + if (!Double.isFinite(value) || value < 0.0d) { + return 1.0d; + } + return Math.min(1.0d, value); + } + private double applyFilterMultiplier(double rows, double multiplier) { if (!Double.isFinite(rows)) { return rows; } - if (!(multiplier > 0.0d) || multiplier >= 1.0d) { + if (!Double.isFinite(multiplier) || multiplier < 0.0d || multiplier >= 1.0d) { return rows; } - return rows * normalizeFilterMultiplier(multiplier); + return rows * normalizeExactFilterMultiplier(multiplier); } private TuplePlanEstimate applySubtreeFilterMultiplier(TuplePlanEstimate estimate, double multiplier) { - if (estimate == null || !(multiplier > 0.0d) || multiplier >= 1.0d) { + if (estimate == null || !Double.isFinite(multiplier) || multiplier < 0.0d || multiplier >= 1.0d) { return estimate; } double filteredRows = normalizeRows(applyFilterMultiplier(estimate.outputRows, multiplier)); diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java index cd2a792e31a..ac7d2064d9d 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java @@ -30,6 +30,7 @@ import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,16 +47,27 @@ final class SketchJoinOrderPlanner { private final Map> variablesMemo = new HashMap<>(); private final SketchBasedJoinEstimator.SketchPlannerPath factorRejectionPath; private final TupleExpr rejectedFactor; + private final List deferredFilters; private final List diagnostics = new ArrayList<>(); SketchJoinOrderPlanner(SketchBasedJoinEstimator estimator, SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster, List expressions, Set initiallyBoundVars) { + this(estimator, workAdjuster, expressions, initiallyBoundVars, List.of()); + } + + SketchJoinOrderPlanner(SketchBasedJoinEstimator estimator, + SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster, + List expressions, + Set initiallyBoundVars, + List deferredFilters) { this.estimator = Objects.requireNonNull(estimator, "estimator"); this.workAdjuster = Objects.requireNonNull(workAdjuster, "workAdjuster"); this.initiallyBoundVars = initiallyBoundVars == null || initiallyBoundVars.isEmpty() ? Set.of() : Set.copyOf(initiallyBoundVars); + this.deferredFilters = deferredFilters == null || deferredFilters.isEmpty() ? List.of() + : List.copyOf(deferredFilters); FactorBuildResult factorBuildResult = buildFactors(expressions); this.factors = factorBuildResult.factors(); this.factorRejectionPath = factorBuildResult.rejectionPath(); @@ -66,13 +78,14 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { if (factorRejectionPath != null) { recordDebug("rejected: path=" + factorRejectionPath + " factor=" + (rejectedFactor == null ? "" : describeTupleExpr(rejectedFactor))); - return new PlanOutcome(Optional.empty(), factorRejectionPath, List.copyOf(diagnostics)); + return new PlanOutcome(Optional.empty(), factorRejectionPath, List.copyOf(diagnostics), + rejectedFactor == null ? null : describeTupleExpr(rejectedFactor)); } if (factors.isEmpty()) { recordDebug("fallback reason=" + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE + " factors=[]"); return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, - List.copyOf(diagnostics)); + List.copyOf(diagnostics), null); } logFactorEstimates(); @@ -80,7 +93,7 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { SketchBasedJoinEstimator.SketchPlannerPath classification = classifyGraph(); if (classification != null) { recordDebug("rejected: path=" + classification + " factors=" + describeFactorOrder(indices())); - return new PlanOutcome(Optional.empty(), classification, List.copyOf(diagnostics)); + return new PlanOutcome(Optional.empty(), classification, List.copyOf(diagnostics), null); } if (algorithm == JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING && factors.size() > MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS) { @@ -88,7 +101,7 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { + " factorCount=" + factors.size() + " maxDynamicProgrammingArgs=" + MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS); return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, - List.copyOf(diagnostics)); + List.copyOf(diagnostics), null); } StatePlan result = switch (algorithm) { @@ -100,7 +113,7 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { recordDebug("rejected: path=" + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE + " factors=" + describeFactorOrder(indices())); return new PlanOutcome(Optional.empty(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, - List.copyOf(diagnostics)); + List.copyOf(diagnostics), null); } List orderedArgs = new ArrayList<>(result.order().size()); @@ -109,9 +122,17 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { } recordDebug("result: order=" + describeExprOrder(orderedArgs) + " estimate=" + result.estimate().summary() + " totalWork=" + result.totalWork()); + Map summaryStringMetrics = Map.of( + TelemetryMetricNames.PLANNER_ID, "sketch", + TelemetryMetricNames.PLANNER_ALGORITHM, algorithm.name(), + TelemetryMetricNames.PLANNER_PATH, + SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED.name()); + Map summaryDoubleMetrics = Map.of( + TelemetryMetricNames.PLANNED_WORK_ROWS, result.totalWork()); return new PlanOutcome(Optional.of(new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), - result.estimate().outputRows(), result.totalWork(), List.copyOf(diagnostics))), - SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, List.copyOf(diagnostics)); + result.estimate().outputRows(), result.totalWork(), List.copyOf(diagnostics), summaryStringMetrics, + summaryDoubleMetrics, buildPlanSteps(result.order()))), + SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, List.copyOf(diagnostics), null); } private FactorBuildResult buildFactors(List expressions) { @@ -133,7 +154,8 @@ private FactorBuildResult buildFactors(List expressions) { } private SketchBasedJoinEstimator.SketchPlannerPath classifyGraph() { - if (!isConnected()) { + int physicalComponents = physicalComponentCount(); + if (physicalComponents > 1 && !isConnectedWithDeferredFilters()) { return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE; } if (hasMultiSharedVariableAttachment()) { @@ -145,12 +167,50 @@ private SketchBasedJoinEstimator.SketchPlannerPath classifyGraph() { edgeCount += factor.arity(); variables.addAll(factor.joinVars()); } - return edgeCount == factors.size() + variables.size() - 1 + return edgeCount == factors.size() + variables.size() - physicalComponents ? null : SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE; } - private boolean isConnected() { + private int physicalComponentCount() { + Set seenFactors = new LinkedHashSet<>(); + int components = 0; + for (int i = 0; i < factors.size(); i++) { + if (seenFactors.contains(i)) { + continue; + } + components++; + visitPhysicalComponent(i, seenFactors); + } + return components; + } + + private void visitPhysicalComponent(int startFactor, Set seenFactors) { + Set seenVariables = new LinkedHashSet<>(); + ArrayDeque queue = new ArrayDeque<>(); + queue.add(Integer.valueOf(startFactor)); + seenFactors.add(startFactor); + while (!queue.isEmpty()) { + Object next = queue.removeFirst(); + if (next instanceof Integer factorIndex) { + for (String variable : factors.get(factorIndex.intValue()).joinVars()) { + if (seenVariables.add(variable)) { + queue.addLast(variable); + } + } + continue; + } + String variable = (String) next; + for (int i = 0; i < factors.size(); i++) { + if (!seenFactors.contains(i) && factors.get(i).joinVars().contains(variable)) { + seenFactors.add(i); + queue.addLast(Integer.valueOf(i)); + } + } + } + } + + private boolean isConnectedWithDeferredFilters() { Set seenFactors = new LinkedHashSet<>(); Set seenVariables = new LinkedHashSet<>(); ArrayDeque queue = new ArrayDeque<>(); @@ -173,10 +233,34 @@ private boolean isConnected() { queue.addLast(Integer.valueOf(i)); } } + for (String connectedVariable : deferredFilterVariablesConnectedTo(variable)) { + if (seenVariables.add(connectedVariable)) { + queue.addLast(connectedVariable); + } + } } return seenFactors.size() == factors.size(); } + private List deferredFilterVariablesConnectedTo(String variable) { + if (deferredFilters.isEmpty()) { + return List.of(); + } + LinkedHashSet connected = new LinkedHashSet<>(); + for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { + Set requiredVars = filter.getRequiredVars(); + if (!requiredVars.contains(variable)) { + continue; + } + for (String requiredVar : requiredVars) { + if (!requiredVar.equals(variable)) { + connected.add(requiredVar); + } + } + } + return List.copyOf(connected); + } + private boolean hasMultiSharedVariableAttachment() { for (int i = 0; i < factors.size(); i++) { for (int j = i + 1; j < factors.size(); j++) { @@ -217,7 +301,8 @@ private StatePlan optimizeGreedy() { double totalWork = bestSeedWork; List order = new ArrayList<>(); order.add(seed); - SketchBasedJoinEstimator.TuplePlanEstimate currentEstimate = factors.get(seed).estimate(); + SketchBasedJoinEstimator.TuplePlanEstimate currentEstimate = applyUnlockedFilters(0L, mask, + factors.get(seed).estimate()); recordDebug("greedy seed: chosen=" + describeFactor(seed) + " estimate=" + currentEstimate.summary() + " adjustedWorkRows=" + bestSeedWork); @@ -229,8 +314,8 @@ private StatePlan optimizeGreedy() { SketchBasedJoinEstimator.JoinStepEstimate bestStep = null; Set currentBoundVars = boundVariables(mask); for (int candidate : candidates(mask)) { - String sharedVariable = uniqueSharedVariable(mask, candidate); - if (sharedVariable == null) { + String connection = connectionReason(mask, candidate); + if (connection == null) { continue; } PlanFactor candidateFactor = factors.get(candidate); @@ -238,7 +323,7 @@ private StatePlan optimizeGreedy() { .estimateJoinStepForJoinOrdering(currentEstimate, candidateFactor.estimate()); double adjustedWorkRows = adjustedWorkRows(candidate, currentBoundVars, step.workRows()); recordDebug("greedy candidate: prefixOrder=" + describeFactorOrder(order) + " candidate=" - + describeFactor(candidate) + " sharedVar=" + sharedVariable + " step=" + step.summary() + + describeFactor(candidate) + " sharedVar=" + connection + " step=" + step.summary() + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" + new TreeSet<>(currentBoundVars)); if (adjustedWorkRows < bestAdjustedWorkRows @@ -246,7 +331,7 @@ private StatePlan optimizeGreedy() { && (step.outputRows() < bestStepRows || step.outputRows() == bestStepRows && candidate < bestNext)) { bestNext = candidate; - bestSharedVar = sharedVariable; + bestSharedVar = connection; bestAdjustedWorkRows = adjustedWorkRows; bestStepRows = step.outputRows(); bestStep = step; @@ -256,10 +341,11 @@ private StatePlan optimizeGreedy() { return null; } + long previousMask = mask; mask |= bit(bestNext); totalWork += bestAdjustedWorkRows; order.add(bestNext); - currentEstimate = estimator.joinedPlanEstimate(bestStep); + currentEstimate = applyUnlockedFilters(previousMask, mask, estimator.joinedPlanEstimate(bestStep)); recordDebug("greedy choose: order=" + describeFactorOrder(order) + " chosen=" + describeFactor(bestNext) + " sharedVar=" + bestSharedVar + " estimate=" + currentEstimate.summary() + " adjustedWorkRows=" + bestAdjustedWorkRows + " totalWork=" @@ -276,9 +362,11 @@ private StatePlan optimizeDynamicProgramming() { for (int i = 0; i < factors.size(); i++) { PlanFactor factor = factors.get(i); double adjustedWorkRows = adjustedWorkRows(i, initiallyBoundVars, factor.estimate().outputRows()); - StatePlan seedPlan = new StatePlan(List.of(i), factor.estimate(), adjustedWorkRows); - bestByMask.put(bit(i), seedPlan); - statesBySize.computeIfAbsent(1, ignored -> new LinkedHashSet<>()).add(bit(i)); + long seedMask = bit(i); + StatePlan seedPlan = new StatePlan(List.of(i), applyUnlockedFilters(0L, seedMask, factor.estimate()), + adjustedWorkRows); + bestByMask.put(seedMask, seedPlan); + statesBySize.computeIfAbsent(1, ignored -> new LinkedHashSet<>()).add(seedMask); recordDebug("dp seed: factor=" + describeFactor(i) + " estimate=" + factor.estimate().summary() + " adjustedWorkRows=" + adjustedWorkRows); } @@ -291,8 +379,8 @@ private StatePlan optimizeDynamicProgramming() { } Set currentBoundVars = boundVariables(mask); for (int candidate : candidates(mask)) { - String sharedVariable = uniqueSharedVariable(mask, candidate); - if (sharedVariable == null) { + String connection = connectionReason(mask, candidate); + if (connection == null) { continue; } SketchBasedJoinEstimator.JoinStepEstimate step = estimator @@ -302,11 +390,12 @@ private StatePlan optimizeDynamicProgramming() { List nextOrder = new ArrayList<>(prefix.order().size() + 1); nextOrder.addAll(prefix.order()); nextOrder.add(candidate); - StatePlan candidatePlan = new StatePlan(List.copyOf(nextOrder), estimator.joinedPlanEstimate(step), + StatePlan candidatePlan = new StatePlan(List.copyOf(nextOrder), + applyUnlockedFilters(mask, nextMask, estimator.joinedPlanEstimate(step)), prefix.totalWork() + adjustedWorkRows); StatePlan incumbent = bestByMask.get(nextMask); recordDebug("dp candidate: prefixOrder=" + describeFactorOrder(prefix.order()) + " candidate=" - + describeFactor(candidate) + " sharedVar=" + sharedVariable + " step=" + + describeFactor(candidate) + " sharedVar=" + connection + " step=" + step.summary() + " adjustedWorkRows=" + adjustedWorkRows + " totalWork=" + candidatePlan.totalWork()); if (isBetter(candidatePlan, incumbent)) { @@ -325,19 +414,55 @@ private StatePlan optimizeDynamicProgramming() { private List candidates(long mask) { List result = new ArrayList<>(); for (int i = 0; i < factors.size(); i++) { - if (!contains(mask, i) && uniqueSharedVariable(mask, i) != null) { + if (!contains(mask, i) && connectionReason(mask, i) != null) { result.add(i); } } return result; } + private String connectionReason(long mask, int candidateIndex) { + String sharedVariable = uniqueSharedVariable(mask, candidateIndex); + if (sharedVariable != null) { + return sharedVariable; + } + return deferredFilterConnection(mask, candidateIndex); + } + private String uniqueSharedVariable(long mask, int candidateIndex) { Set shared = new TreeSet<>(variables(mask)); shared.retainAll(factors.get(candidateIndex).joinVars()); return shared.size() == 1 ? shared.iterator().next() : null; } + private String deferredFilterConnection(long mask, int candidateIndex) { + if (deferredFilters.isEmpty()) { + return null; + } + Set prefixVars = boundVariables(mask); + Set candidateVars = factors.get(candidateIndex).joinVars(); + LinkedHashSet combinedVars = new LinkedHashSet<>(prefixVars); + combinedVars.addAll(candidateVars); + for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { + Set requiredVars = filter.getRequiredVars(); + if (prefixVars.containsAll(requiredVars) || !combinedVars.containsAll(requiredVars) + || !intersects(requiredVars, prefixVars) || !intersects(requiredVars, candidateVars)) { + continue; + } + return "filter:" + filter.getDebugLabel(); + } + return null; + } + + private boolean intersects(Set left, Set right) { + for (String value : left) { + if (right.contains(value)) { + return true; + } + } + return false; + } + private Set variables(long mask) { return variablesMemo.computeIfAbsent(mask, ignored -> { LinkedHashSet variables = new LinkedHashSet<>(); @@ -363,6 +488,123 @@ private double adjustedWorkRows(int factorIndex, Set currentlyBoundVars, return Double.isFinite(adjustedWorkRows) && adjustedWorkRows > 0.0d ? adjustedWorkRows : defaultWorkRows; } + private SketchBasedJoinEstimator.TuplePlanEstimate applyUnlockedFilters(long previousMask, long nextMask, + SketchBasedJoinEstimator.TuplePlanEstimate estimate) { + double passRatio = newlyUnlockedFilterPassRatio(previousMask, nextMask); + if (passRatio >= 1.0d) { + return estimate; + } + double filteredRows = estimate.outputRows() * passRatio; + if (!Double.isFinite(filteredRows) || filteredRows < 0.0d) { + return estimate; + } + return estimator.withOutputRowsForJoinOrdering(estimate, filteredRows); + } + + private double newlyUnlockedFilterPassRatio(long previousMask, long nextMask) { + if (deferredFilters.isEmpty()) { + return 1.0d; + } + Set previousBound = boundVariables(previousMask); + Set nextBound = boundVariables(nextMask); + double passRatio = 1.0d; + boolean found = false; + for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { + if (previousBound.containsAll(filter.getRequiredVars()) + || !nextBound.containsAll(filter.getRequiredVars())) { + continue; + } + double filterPassRatio = filter.getEstimatedPassRatio(); + if (Double.isFinite(filterPassRatio) && filterPassRatio > 0.0d && filterPassRatio <= 1.0d) { + passRatio *= filterPassRatio; + found = true; + } + } + return found ? passRatio : 1.0d; + } + + private List newlyUnlockedFilterLabels(long previousMask, long nextMask) { + if (deferredFilters.isEmpty()) { + return List.of(); + } + Set previousBound = boundVariables(previousMask); + Set nextBound = boundVariables(nextMask); + List labels = new ArrayList<>(); + for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { + if (!previousBound.containsAll(filter.getRequiredVars()) + && nextBound.containsAll(filter.getRequiredVars())) { + labels.add(describeUnlockedFilter(filter)); + } + } + return labels; + } + + private String describeUnlockedFilter(JoinOrderPlanner.FilterConstraint filter) { + String label = filter.getDebugLabel(); + double passRatio = filter.getEstimatedPassRatio(); + if (Double.isFinite(passRatio) && passRatio >= 0.0d && passRatio <= 1.0d) { + label += " passRatio=" + passRatio; + } + if (filter.getSelectivitySource() != null) { + label += " source=" + filter.getSelectivitySource(); + } + if (filter.getEvidenceCount() >= 0L) { + label += " evidence=" + filter.getEvidenceCount(); + } + return label; + } + + private List buildPlanSteps(List order) { + List steps = new ArrayList<>(order.size()); + long mask = 0L; + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate = null; + for (Integer next : order) { + int factorIndex = next.intValue(); + Set boundBefore = boundVariables(mask); + long nextMask = mask | bit(factorIndex); + double factorOutputRows; + double stepWorkRows; + SketchBasedJoinEstimator.TuplePlanEstimate nextEstimate; + if (mask == 0L) { + SketchBasedJoinEstimator.TuplePlanEstimate factorEstimate = factors.get(factorIndex).estimate(); + factorOutputRows = factorEstimate.outputRows(); + stepWorkRows = adjustedWorkRows(factorIndex, boundBefore, factorOutputRows); + nextEstimate = applyUnlockedFilters(mask, nextMask, factorEstimate); + } else { + SketchBasedJoinEstimator.JoinStepEstimate step = estimator + .estimateJoinStepForJoinOrdering(prefixEstimate, factors.get(factorIndex).estimate()); + factorOutputRows = step.outputRows(); + stepWorkRows = adjustedWorkRows(factorIndex, boundBefore, step.workRows()); + nextEstimate = applyUnlockedFilters(mask, nextMask, estimator.joinedPlanEstimate(step)); + } + + Map stringMetrics = new HashMap<>(); + Set sharedJoinVars = sharedJoinVars(factors.get(factorIndex).tupleExpr(), boundBefore); + if (!sharedJoinVars.isEmpty()) { + stringMetrics.put(TelemetryMetricNames.SHARED_JOIN_VARS, sharedJoinVars.toString()); + } + List unlockedFilterLabels = newlyUnlockedFilterLabels(mask, nextMask); + if (!unlockedFilterLabels.isEmpty()) { + stringMetrics.put(TelemetryMetricNames.UNLOCKED_FILTERS, String.join(", ", unlockedFilterLabels)); + } + steps.add(new JoinOrderPlanner.PlanStep(boundBefore, factorOutputRows, nextEstimate.outputRows(), + stepWorkRows, stringMetrics, Map.of())); + mask = nextMask; + prefixEstimate = nextEstimate; + } + return List.copyOf(steps); + } + + private Set sharedJoinVars(TupleExpr tupleExpr, Set boundBefore) { + TreeSet shared = new TreeSet<>(); + for (String bindingName : tupleExpr.getBindingNames()) { + if (!bindingName.startsWith("_const_") && boundBefore.contains(bindingName)) { + shared.add(bindingName); + } + } + return shared; + } + private List indices() { List indices = new ArrayList<>(factors.size()); for (int i = 0; i < factors.size(); i++) { @@ -502,7 +744,8 @@ private static String describeVar(Var var) { record PlanOutcome(Optional plan, SketchBasedJoinEstimator.SketchPlannerPath path, - List diagnostics) { + List diagnostics, + String rejectedFactor) { } private record PlanFactor(int index, TupleExpr tupleExpr, SketchBasedJoinEstimator.TuplePlanEstimate estimate) { diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java index f80ad8bb14e..0fbfecd18bf 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java @@ -51,9 +51,21 @@ final class SketchJoinOrderReorderer { Optional plan(List args, Set initiallyBoundVars, JoinOrderPlanner.Algorithm algorithm) { + return plan(args, initiallyBoundVars, algorithm, List.of()); + } + + Optional plan(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm, List deferredFilters) { + return planAttempt(args, initiallyBoundVars, algorithm, deferredFilters).getPlan(); + } + + JoinOrderPlanner.PlanningAttempt planAttempt(List args, Set initiallyBoundVars, + JoinOrderPlanner.Algorithm algorithm, List deferredFilters) { if (args == null || args.isEmpty()) { estimator.recordJoinOrderPlannerPath(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE); - return Optional.empty(); + return JoinOrderPlanner.PlanningAttempt.rejected("sketch", algorithm, + SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE.name(), null, + List.of("input: empty join segment")); } List expressions = List.copyOf(args); @@ -78,15 +90,25 @@ Optional plan(List args, Set JoinOrderPlanner.JoinOrderPlan plan = new JoinOrderPlanner.JoinOrderPlan(planningInputs.prefixExpressions(), 0.0d, totalBindingRows(planningInputs.prefixExpressions()), inputDiagnostics); estimator.recordJoinOrderPlannerPath(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED); - return Optional.of(plan); + return JoinOrderPlanner.PlanningAttempt.planned(plan, "sketch", algorithm, + SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED.name(), plan.getDiagnostics()); } SketchJoinOrderPlanner.PlanOutcome outcome = new SketchJoinOrderPlanner(estimator, workAdjuster, - plannedExpressions, plannedBound) + plannedExpressions, plannedBound, deferredFilters) .plan(algorithm); estimator.recordJoinOrderPlannerPath(outcome.path()); - return outcome.plan() - .map(plan -> prependBindingPrefixes(plan, planningInputs.prefixExpressions(), inputDiagnostics)); + if (outcome.plan().isEmpty()) { + List diagnostics = new ArrayList<>(inputDiagnostics.size() + outcome.diagnostics().size()); + diagnostics.addAll(inputDiagnostics); + diagnostics.addAll(outcome.diagnostics()); + return JoinOrderPlanner.PlanningAttempt.rejected("sketch", algorithm, outcome.path().name(), + outcome.rejectedFactor(), diagnostics); + } + JoinOrderPlanner.JoinOrderPlan plan = prependBindingPrefixes(outcome.plan().get(), + planningInputs.prefixExpressions(), inputDiagnostics); + return JoinOrderPlanner.PlanningAttempt.planned(plan, "sketch", algorithm, outcome.path().name(), + plan.getDiagnostics()); } private PlanningInputs promoteFilterLookupBindings(List expressions, Set initiallyBoundVars) { @@ -181,7 +203,8 @@ private JoinOrderPlanner.JoinOrderPlan prependBindingPrefixes(JoinOrderPlanner.J diagnostics.addAll(inputDiagnostics); diagnostics.addAll(plan.getDiagnostics()); return new JoinOrderPlanner.JoinOrderPlan(plan.getOrderedArgs(), plan.getEstimatedFinalRows(), - plan.getEstimatedTotalWork(), diagnostics); + plan.getEstimatedTotalWork(), diagnostics, plan.getSummaryStringMetrics(), + plan.getSummaryDoubleMetrics(), plan.getSteps()); } List orderedArgs = new ArrayList<>(prefixExpressions.size() + plan.getOrderedArgs().size()); orderedArgs.addAll(prefixExpressions); @@ -191,7 +214,8 @@ private JoinOrderPlanner.JoinOrderPlan prependBindingPrefixes(JoinOrderPlanner.J diagnostics.add("prefix promotion: prefixes=" + SketchJoinOrderPlanner.describeExprOrder(prefixExpressions)); diagnostics.addAll(plan.getDiagnostics()); return new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), plan.getEstimatedFinalRows(), - plan.getEstimatedTotalWork() + totalBindingRows(prefixExpressions), diagnostics); + plan.getEstimatedTotalWork() + totalBindingRows(prefixExpressions), diagnostics, + plan.getSummaryStringMetrics(), plan.getSummaryDoubleMetrics(), plan.getSteps()); } private double totalBindingRows(List prefixExpressions) { diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java index f9cbfb0dead..4aede6fd7a1 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java @@ -12,6 +12,9 @@ package org.eclipse.rdf4j.sail.lmdb; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -22,6 +25,7 @@ import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.LeftJoin; @@ -30,8 +34,10 @@ import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.FilterSelectivityKeys; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinFactorCostModel; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.PatternKey; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator.Component; import org.eclipse.rdf4j.sail.lmdb.model.LmdbValue; @@ -41,7 +47,7 @@ /** * */ -class LmdbEvaluationStatistics extends EvaluationStatistics implements JoinOrderPlanner { +class LmdbEvaluationStatistics extends EvaluationStatistics implements JoinOrderPlanner, JoinFactorCostModel { private static final Logger log = LoggerFactory.getLogger(LmdbEvaluationStatistics.class); private static final int SHARED_CACHE_MAX_ENTRIES = 262_144; @@ -99,10 +105,181 @@ public boolean supportsFilterSelectivityCosting() { @Override public Optional planJoinOrder(List args, Set initiallyBoundVars, Algorithm algorithm) { + return planJoinOrder(args, initiallyBoundVars, algorithm, List.of()); + } + + @Override + public Optional planJoinOrder(List args, Set initiallyBoundVars, + Algorithm algorithm, List deferredFilters) { + return planJoinOrderAttempt(args, initiallyBoundVars, algorithm, deferredFilters).getPlan(); + } + + @Override + public PlanningAttempt planJoinOrderAttempt(List args, Set initiallyBoundVars, + Algorithm algorithm, List deferredFilters) { if (!supportsJoinEstimation()) { + return PlanningAttempt.rejected("lmdb-sketch", algorithm, + "ROBUST_NOT_READY", null, + List.of("rejected: sketch estimator not ready")); + } + PlanningAttempt attempt = sketchBasedJoinEstimator.planJoinOrderAttempt(args, initiallyBoundVars, algorithm, + joinOrderWorkAdjuster, deferredFilters); + if (attempt.getPlan().isEmpty()) { + return PlanningAttempt.rejected("lmdb-sketch", algorithm, attempt.getPlannerPath(), + attempt.getRejectedFactor(), attempt.getDiagnostics()); + } + JoinOrderPlan enrichedPlan = enrichPlanWithAccessMetrics(attempt.getPlan().get()); + return PlanningAttempt.planned(enrichedPlan, "lmdb-sketch", algorithm, attempt.getPlannerPath(), + enrichedPlan.getDiagnostics()); + } + + private JoinOrderPlan enrichPlanWithAccessMetrics(JoinOrderPlan plan) { + if (plan.getSteps().size() != plan.getOrderedArgs().size()) { + return plan; + } + + List enrichedSteps = new ArrayList<>(plan.getSteps().size()); + for (int i = 0; i < plan.getOrderedArgs().size(); i++) { + TupleExpr tupleExpr = plan.getOrderedArgs().get(i); + JoinOrderPlanner.PlanStep step = plan.getSteps().get(i); + Map stringMetrics = new HashMap<>(step.getStringMetrics()); + Map doubleMetrics = new HashMap<>(step.getDoubleMetrics()); + Optional factorCostEstimate = estimateLmdbFactorCost(tupleExpr, + step.getBoundVarsBefore(), step.getFactorOutputRows()); + if (factorCostEstimate.isPresent()) { + stringMetrics.putAll(factorCostEstimate.get().getStringMetrics()); + doubleMetrics.putAll(factorCostEstimate.get().getDoubleMetrics()); + } + enrichedSteps.add(new JoinOrderPlanner.PlanStep(step.getBoundVarsBefore(), step.getFactorOutputRows(), + step.getPrefixOutputRows(), step.getStepWorkRows(), stringMetrics, doubleMetrics)); + } + + Map summaryStringMetrics = new HashMap<>(plan.getSummaryStringMetrics()); + summaryStringMetrics.put(TelemetryMetricNames.PLANNER_ID, "lmdb-sketch"); + return new JoinOrderPlan(plan.getOrderedArgs(), plan.getEstimatedFinalRows(), plan.getEstimatedTotalWork(), + plan.getDiagnostics(), summaryStringMetrics, plan.getSummaryDoubleMetrics(), enrichedSteps); + } + + @Override + public Optional estimateFactorCost(TupleExpr factor, Set currentlyBoundVars) { + return estimateLmdbFactorCost(factor, currentlyBoundVars); + } + + private Optional estimateLmdbFactorCost(TupleExpr factor, Set currentlyBoundVars) { + return estimateLmdbFactorCost(factor, currentlyBoundVars, Double.NaN); + } + + private Optional estimateLmdbFactorCost(TupleExpr factor, Set currentlyBoundVars, + double knownOutputRows) { + if (factor == null) { + return Optional.empty(); + } + Set boundVars = currentlyBoundVars == null ? Set.of() : Set.copyOf(currentlyBoundVars); + if (factor instanceof Join join) { + return estimateJoinFactorCost(join, boundVars); + } + double outputRows = isFiniteNonNegative(knownOutputRows) ? knownOutputRows : estimateFactorOutputRows(factor); + if (!Double.isFinite(outputRows) || outputRows < 0.0d) { + return Optional.empty(); + } + + SketchBasedJoinEstimator.AccessShape accessShape = sketchBasedJoinEstimator + .accessShapeForJoinOrdering(factor, boundVars); + if (accessShape == null) { + return Optional.of(new FactorCostEstimate(outputRows, outputRows)); + } + + Map stringMetrics = new HashMap<>(); + Map doubleMetrics = new HashMap<>(); + Set accessLookupComponents = accessLookupComponents(accessShape); + TripleStore.IndexPrefixSelection prefixSelection = tripleStore + .selectBestIndexPrefix(accessLookupComponents); + Set prefixComponents = prefixSelection == null ? Set.of() : prefixSelection.prefixComponents(); + int prefixScore = prefixSelection == null ? 0 : prefixSelection.prefixScore(); + if (prefixSelection != null && prefixScore > 0) { + stringMetrics.put(TelemetryMetricNames.PLANNED_INDEX_NAME, prefixSelection.indexFieldSequence()); + doubleMetrics.put(TelemetryMetricNames.PLANNED_INDEX_PREFIX_LENGTH, (double) prefixScore); + } + stringMetrics.put(TelemetryMetricNames.PLANNED_LOOKUP_COMPONENTS, + accessShape.lookupBoundComponents().toString()); + stringMetrics.put(TelemetryMetricNames.PLANNED_INDEX_ACCESS_MODE, + accessMode(accessShape, prefixComponents, prefixScore)); + Set missingLookupComponents = new HashSet<>(accessShape.lookupBoundComponents()); + missingLookupComponents.removeAll(prefixComponents); + if (!missingLookupComponents.isEmpty()) { + stringMetrics.put(TelemetryMetricNames.PLANNED_MISSING_LOOKUP_COMPONENTS, + missingLookupComponents.toString()); + } + + double accessRows = prefixScore > 0 ? accessShape.estimateAccessRows(prefixComponents) : outputRows; + if (Double.isFinite(accessRows) && accessRows >= 0.0d) { + doubleMetrics.put(TelemetryMetricNames.PLANNED_ACCESS_ROWS, accessRows); + if (!accessShape.filterLookupComponents().isEmpty() && canApplyFilterAtAccess(accessShape, prefixComponents) + && Double.isFinite(accessShape.filterMultiplier()) + && accessShape.filterMultiplier() >= 0.0d && accessShape.filterMultiplier() < 1.0d) { + doubleMetrics.put(TelemetryMetricNames.PLANNED_ACCESS_ROWS_AFTER_FILTER, + accessRows * accessShape.filterMultiplier()); + } + } + + double workRows = adjustJoinOrderWorkRows(accessShape, outputRows); + return Optional.of(new FactorCostEstimate(workRows, outputRows, stringMetrics, doubleMetrics)); + } + + private Optional estimateJoinFactorCost(Join join, Set boundVars) { + Optional leftEstimate = estimateLmdbFactorCost(join.getLeftArg(), boundVars); + Set rightBoundVars = new HashSet<>(boundVars); + rightBoundVars.addAll(join.getLeftArg().getBindingNames()); + Optional rightEstimate = estimateLmdbFactorCost(join.getRightArg(), rightBoundVars); + if (leftEstimate.isEmpty() || rightEstimate.isEmpty() + || !isFiniteNonNegative(leftEstimate.get().getWorkRows()) + || !isFiniteNonNegative(rightEstimate.get().getWorkRows())) { return Optional.empty(); } - return sketchBasedJoinEstimator.planJoinOrder(args, initiallyBoundVars, algorithm, joinOrderWorkAdjuster); + + double outputRows = Math.max(leftEstimate.get().getOutputRows(), rightEstimate.get().getOutputRows()); + return Optional.of( + new FactorCostEstimate(leftEstimate.get().getWorkRows() + rightEstimate.get().getWorkRows(), + outputRows)); + } + + private String accessMode(SketchBasedJoinEstimator.AccessShape accessShape, Set prefixComponents, + int prefixScore) { + if (prefixScore <= 0) { + return "fullScan"; + } + return accessShape.isDirectLookup(prefixComponents) ? "directLookup" : "prefixScan"; + } + + private double estimateFactorOutputRows(TupleExpr factor) { + if (factor instanceof BindingSetAssignment assignment) { + double rows = 0.0d; + for (Object ignored : assignment.getBindingSets()) { + rows += 1.0d; + } + return rows; + } + return getCardinality(factor); + } + + private Set accessLookupComponents(SketchBasedJoinEstimator.AccessShape accessShape) { + Set accessLookupComponents = new HashSet<>(accessShape.lookupBoundComponents()); + accessLookupComponents.removeAll(accessShape.filterLookupComponents()); + return Set.copyOf(accessLookupComponents); + } + + private boolean canApplyFilterAtAccess(SketchBasedJoinEstimator.AccessShape accessShape, + Set prefixComponents) { + if (accessShape.filterLookupComponents().isEmpty()) { + return false; + } + Set accessLookupComponents = accessLookupComponents(accessShape); + return prefixComponents.containsAll(accessLookupComponents) + && prefixComponents.containsAll(accessShape.filterLookupComponents()); + } + + private boolean isFiniteNonNegative(double value) { + return Double.isFinite(value) && value >= 0.0d; } private double adjustJoinOrderWorkRows(SketchBasedJoinEstimator.AccessShape accessShape, double defaultWorkRows) { @@ -111,25 +288,28 @@ private double adjustJoinOrderWorkRows(SketchBasedJoinEstimator.AccessShape acce } TripleStore.IndexPrefixSelection prefixSelection = tripleStore - .selectBestIndexPrefix(accessShape.lookupBoundComponents()); + .selectBestIndexPrefix(accessLookupComponents(accessShape)); if (prefixSelection == null) { return defaultWorkRows; } double accessRows = accessShape.estimateAccessRows(prefixSelection.prefixComponents()); - if (!Double.isFinite(accessRows) || accessRows <= 0.0d) { + if (!Double.isFinite(accessRows) || accessRows < 0.0d) { return defaultWorkRows; } double adjustedWorkRows = accessRows; Set filterLookupComponents = accessShape.filterLookupComponents(); if (!filterLookupComponents.isEmpty() - && accessShape.isDirectLookup(prefixSelection.prefixComponents())) { + && canApplyFilterAtAccess(accessShape, prefixSelection.prefixComponents())) { double filteredAccessRows = accessRows * accessShape.filterMultiplier(); - if (Double.isFinite(filteredAccessRows) && filteredAccessRows > 0.0d) { + if (Double.isFinite(filteredAccessRows) && filteredAccessRows >= 0.0d) { adjustedWorkRows = filteredAccessRows; } } + if (!accessShape.isDirectLookup(prefixSelection.prefixComponents())) { + adjustedWorkRows = Math.max(adjustedWorkRows, defaultWorkRows); + } return adjustedWorkRows; } @@ -160,7 +340,12 @@ protected CardinalityCalculator createCardinalityCalculator() { @Override public double estimateFilterPassRatio(Filter filter) { double ratio = sketchBasedJoinEstimator.estimateFilterPassRatio(filter); - return Double.isFinite(ratio) && ratio > 0.0d && ratio <= 1.0d ? ratio : -1.0d; + return Double.isFinite(ratio) && ratio >= 0.0d && ratio <= 1.0d ? ratio : -1.0d; + } + + @Override + public FilterPassEstimate estimateFilterPass(Filter filter) { + return sketchBasedJoinEstimator.estimateFilterPass(filter); } @Override diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java index d90b2daa7ca..7477547c63f 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbFilterSelectivityStats.java @@ -136,6 +136,18 @@ public synchronized double getPatternPassRatio(PatternKey key) { return counts == null ? -1.0d : counts.passRatio(); } + @Override + public synchronized long getFilterObservationCount(PatternKey key, String filterKey) { + LearnedCounts counts = learnedByFilter.get(new PatternFilterKey(key, filterKey)); + return counts == null ? -1L : counts.total(); + } + + @Override + public synchronized long getPatternObservationCount(PatternKey key) { + LearnedCounts counts = learnedByPattern.get(key); + return counts == null ? -1L : counts.total(); + } + @Override public synchronized void seedIfAbsent(PatternKey key, double defaultCardinality, long priorCalls) { // not used for filter selectivity @@ -159,32 +171,38 @@ public synchronized long getTotalCalls() { @Override public double estimateFilterPassRatio(Filter filter, StatementPattern pattern) { + return estimateFilterPass(filter, pattern).getPassRatio(); + } + + @Override + public SketchBasedJoinEstimator.PatternFilterSampleEstimate estimateFilterPass(Filter filter, + StatementPattern pattern) { PatternFilterKey key = samplingKey(filter, pattern); if (key == null) { - return -1.0d; + return new SketchBasedJoinEstimator.PatternFilterSampleEstimate(-1.0d, -1L); } synchronized (this) { SampledPassRatio cached = sampledByFilter.get(key); if (cached != null) { - return cached.passRatio; + return new SketchBasedJoinEstimator.PatternFilterSampleEstimate(cached.passRatio, cached.sampleSize); } } if (!supportsSampling(filter, pattern)) { - return -1.0d; + return new SketchBasedJoinEstimator.PatternFilterSampleEstimate(-1.0d, -1L); } SampledPassRatio sampled = sampleFilterPassRatio(filter, pattern); if (sampled == null || !isValidPassRatio(sampled.passRatio)) { - return -1.0d; + return new SketchBasedJoinEstimator.PatternFilterSampleEstimate(-1.0d, -1L); } synchronized (this) { sampledByFilter.put(key, sampled); dirty = true; } - return sampled.passRatio; + return new SketchBasedJoinEstimator.PatternFilterSampleEstimate(sampled.passRatio, sampled.sampleSize); } synchronized void persistIfDirty() { diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java index 5ed14b4c690..96318235405 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java @@ -93,7 +93,8 @@ class LmdbSailStore implements SailStore { private final SketchBasedJoinEstimator sketchBasedJoinEstimator = new SketchBasedJoinEstimator(this, SketchBasedJoinEstimator.Config.defaults() .withThrottleEveryN(1024 * 1024) - .withThrottleMillis(2)); + .withThrottleMillis(2) + .withEstimateCacheSeconds(60)); private LmdbFilterSelectivityStats filterSelectivityStats; private final ScheduledExecutorService estimatorPersistExec = Executors.newSingleThreadScheduledExecutor(r -> { Thread t = new Thread(r, "LmdbJoinEstimator-Persist"); diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java index 64aeaadd9e4..a1d14a1b6df 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.Set; import org.eclipse.rdf4j.common.transaction.IsolationLevels; import org.eclipse.rdf4j.model.IRI; @@ -30,6 +31,9 @@ import org.eclipse.rdf4j.query.algebra.Compare; import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.ListMemberOperator; +import org.eclipse.rdf4j.query.algebra.Not; import org.eclipse.rdf4j.query.algebra.Or; import org.eclipse.rdf4j.query.algebra.QueryModelNode; import org.eclipse.rdf4j.query.algebra.StatementPattern; @@ -39,9 +43,11 @@ import org.eclipse.rdf4j.query.algebra.ValueConstant; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinFactorCostModel; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.eclipse.rdf4j.repository.sail.SailRepository; import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; import org.eclipse.rdf4j.sail.base.SketchBasedJoinEstimator; @@ -55,11 +61,15 @@ class LmdbIndexAwareJoinOrderPlanningTest { private static final IRI RDF_TYPE = VF.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); private static final IRI GRID_SUBSTATION = VF.createIRI("http://example.com/theme/grid/Substation"); private static final IRI GRID_GENERATOR = VF.createIRI("http://example.com/theme/grid/Generator"); + private static final IRI GRID_TRANSFORMER = VF.createIRI("http://example.com/theme/grid/Transformer"); private static final IRI GRID_FEEDS = VF.createIRI("http://example.com/theme/grid/feeds"); private static final IRI GRID_NAME = VF.createIRI("http://example.com/theme/grid/name"); private static final IRI GRID_ALIAS = VF.createIRI("http://example.com/theme/grid/alias"); + private static final IRI SOCIAL_FOLLOWS = VF.createIRI("http://example.com/theme/social/follows"); + private static final IRI SOCIAL_NAME = VF.createIRI("http://example.com/theme/social/name"); private static final int SUBSTATION_COUNT = 300; private static final int GENERATOR_COUNT = 120; + private static final int TRANSFORMER_COUNT = 5_000; private static final int NOISE_COUNT = 600; @Test @@ -124,6 +134,111 @@ void optimizedElectricalGridQueryKeepsFeedsBeforeNameInGeneratorBranch(@TempDir } } + @Test + void optimizedPlanIncludesLmdbPlannedIndexMetrics(@TempDir File dataDir) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadSyntheticGridData(repository); + store.getBackingStore().getSketchBasedJoinEstimator().rebuildOnceSlow(); + + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(plannedIndexMetricsQuery()) + .explain(Explanation.Level.Optimized); + String optimizedPlan = explanation.toString(); + + assertTrue(optimizedPlan.contains(TelemetryMetricNames.PLANNER_ID + "=lmdb-sketch"), optimizedPlan); + assertTrue(optimizedPlan.contains(TelemetryMetricNames.PLANNED_INDEX_NAME + "="), optimizedPlan); + assertTrue(optimizedPlan.contains(TelemetryMetricNames.PLANNED_INDEX_PREFIX_LENGTH + "="), + optimizedPlan); + } + } finally { + repository.shutDown(); + } + } + + @Test + void plannerStartsElectricalQ2WithFilteredSubstationNameWhenOnlyPredicatePrefixIsAvailable(@TempDir File dataDir) + throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadSyntheticTransformerData(repository); + store.getBackingStore().getSketchBasedJoinEstimator().rebuildOnceSlow(); + + StatementPattern typePattern = transformerTypePattern(); + StatementPattern feedsPattern = transformerFeedsPattern(); + Filter filteredNamePattern = filteredNameListMemberPattern(); + JoinOrderPlanner planner = (JoinOrderPlanner) store.getBackingStore().getEvaluationStatistics(); + Optional plan = planner.planJoinOrder( + List.of(typePattern, feedsPattern, filteredNamePattern), + Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected LMDB planner to produce an electrical q2-style plan"); + List orderedArgs = plan.get().getOrderedArgs(); + assertEquals(filteredNamePattern, orderedArgs.get(0), + "Electrical q2 should seed with the selective substation-name predicate-prefix scan"); + } finally { + repository.shutDown(); + } + } + + @Test + void optimizedSocialMediaQ4StartsWithUSideRestrictionBeforeFollowsProbe(@TempDir File dataDir) throws Exception { + LmdbStoreConfig config = new LmdbStoreConfig("spoc,ospc,psoc"); + LmdbStore store = new LmdbStore(dataDir, config); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadSyntheticSocialMediaQ4Data(repository); + store.getBackingStore().getSketchBasedJoinEstimator().rebuildOnceSlow(); + + TupleExpr optimized; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(socialMediaQ4Query()) + .explain(Explanation.Level.Optimized); + optimized = (TupleExpr) explanation.tupleExpr(); + } + + List mandatoryLeafOrder = collectSocialMediaQ4MandatoryLeafOrder(optimized); + int uRestrictionIndex = mandatoryLeafOrder.indexOf("u-restriction"); + int followsIndex = mandatoryLeafOrder.indexOf("follows"); + Filter uRestriction = findFirstNotExistsFilter(optimized); + + assertTrue(uRestrictionIndex >= 0, "Expected q4 plan to retain the u-side NOT EXISTS restriction"); + assertTrue(followsIndex >= 0, "Expected q4 plan to retain the social:follows probe"); + assertTrue(uRestrictionIndex < followsIndex, + "Optimized q4 should run the u-side restriction before probing ?u social:follows ?v: " + + mandatoryLeafOrder); + assertTrue(uRestriction.getArg().getBindingNames().contains("u"), + "Expected q4 u-side restriction to evaluate with ?u bound"); + assertTrue(!uRestriction.getArg().getBindingNames().contains("v"), + "Expected q4 u-side restriction before expanding ?v bindings: " + uRestriction); + + JoinFactorCostModel costModel = (JoinFactorCostModel) store.getBackingStore().getEvaluationStatistics(); + StatementPattern followsByObject = new StatementPattern(Var.of("u"), + Var.of("followsPredicate", SOCIAL_FOLLOWS), Var.of("v")); + JoinFactorCostModel.FactorCostEstimate prefixScanCost = costModel + .estimateFactorCost(followsByObject, Set.of("v")) + .orElseThrow(); + assertEquals("prefixScan", + prefixScanCost.getStringMetrics().get(TelemetryMetricNames.PLANNED_INDEX_ACCESS_MODE)); + assertTrue(prefixScanCost.getWorkRows() >= prefixScanCost.getOutputRows(), + "Expected prefix scan work to stay at least as high as output rows: " + + prefixScanCost.getDoubleMetrics()); + } finally { + repository.shutDown(); + } + } + private static PlannedBranch planGeneratorBranch(File dataDir, String indexes) throws Exception { LmdbStoreConfig config = new LmdbStoreConfig(indexes); LmdbStore store = new LmdbStore(dataDir, config); @@ -176,6 +291,51 @@ private static void loadSyntheticGridData(SailRepository repository) { } } + private static void loadSyntheticSocialMediaQ4Data(SailRepository repository) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + List queryUsers = new ArrayList<>(); + for (int i = 7; i <= 11; i++) { + Resource user = socialUser(i); + queryUsers.add(user); + connection.add(user, SOCIAL_NAME, VF.createLiteral("user" + i)); + if (i != 7) { + connection.add(user, SOCIAL_FOLLOWS, user); + } + } + connection.add(socialUser(7), SOCIAL_FOLLOWS, socialUser(8)); + connection.add(socialUser(7), SOCIAL_FOLLOWS, socialUser(9)); + + for (int i = 0; i < 120; i++) { + Resource follower = socialUser(1000 + i); + Resource target = queryUsers.get(i % queryUsers.size()); + connection.add(follower, SOCIAL_FOLLOWS, target); + } + connection.commit(); + } + } + + private static void loadSyntheticTransformerData(SailRepository repository) { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + for (int i = 0; i < SUBSTATION_COUNT; i++) { + Resource substation = VF.createIRI("urn:test:substation:" + i); + connection.add(substation, GRID_NAME, VF.createLiteral("Substation " + i)); + } + for (int i = 0; i < TRANSFORMER_COUNT; i++) { + Resource transformer = VF.createIRI("urn:test:transformer:" + i); + Resource substation = VF.createIRI("urn:test:substation:" + (i % SUBSTATION_COUNT)); + connection.add(transformer, RDF_TYPE, GRID_TRANSFORMER); + connection.add(transformer, GRID_FEEDS, substation); + } + connection.commit(); + } + } + + private static Resource socialUser(int index) { + return VF.createIRI("http://example.com/theme/social/user/" + index); + } + private static StatementPattern generatorTypePattern() { return new StatementPattern(Var.of("entity"), Var.of("rdfType", RDF_TYPE), Var.of("generatorType", GRID_GENERATOR)); @@ -185,6 +345,16 @@ private static StatementPattern feedsPattern() { return new StatementPattern(Var.of("entity"), Var.of("feedsPredicate", GRID_FEEDS), Var.of("substation")); } + private static StatementPattern transformerTypePattern() { + return new StatementPattern(Var.of("transformer"), Var.of("rdfType", RDF_TYPE), + Var.of("transformerType", GRID_TRANSFORMER)); + } + + private static StatementPattern transformerFeedsPattern() { + return new StatementPattern(Var.of("transformer"), Var.of("feedsPredicate", GRID_FEEDS), + Var.of("substation")); + } + private static Filter filteredNamePattern() { StatementPattern namePattern = new StatementPattern(Var.of("substation"), Var.of("namePredicate", GRID_NAME), Var.of("name")); @@ -195,6 +365,17 @@ private static Filter filteredNamePattern() { Compare.CompareOp.EQ))); } + private static Filter filteredNameListMemberPattern() { + StatementPattern namePattern = new StatementPattern(Var.of("substation"), Var.of("namePredicate", GRID_NAME), + Var.of("name")); + ListMemberOperator condition = new ListMemberOperator(); + condition.addArgument(Var.of("name")); + condition.addArgument(new ValueConstant(VF.createLiteral("Substation 0"))); + condition.addArgument(new ValueConstant(VF.createLiteral("Substation 1"))); + condition.addArgument(new ValueConstant(VF.createLiteral("Substation 2"))); + return new Filter(namePattern, condition); + } + private static BindingSetAssignment targetBindings() { BindingSetAssignment bindingSetAssignment = new BindingSetAssignment(); QueryBindingSet first = new QueryBindingSet(); @@ -228,6 +409,39 @@ private static String electricalGridQuery() { "}"); } + private static String plannedIndexMetricsQuery() { + return String.join("\n", + "SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE {", + " VALUES ?target { \"Substation 1\" \"Substation 2\" }", + " ?entity ?substation .", + " ?entity a .", + " ?substation ?name .", + " FILTER ((?name = ?target) || (?name = \"Substation 3\"))", + "}"); + } + + private static String socialMediaQ4Query() { + return String.join("\n", + "PREFIX social: ", + "SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE {", + " VALUES ?u { ", + " ", + " ", + " ", + " }", + " VALUES ?v { ", + " ", + " ", + " ", + " }", + " FILTER(?u != ?v)", + " ?u social:follows ?v .", + " FILTER NOT EXISTS { ?u social:follows ?u . }", + " OPTIONAL { ?v social:name ?optName . }", + " FILTER(?optName != \"\")", + "}"); + } + private record PlannedBranch(Optional plan, BindingSetAssignment targets, StatementPattern typePattern, StatementPattern feedsPattern, Filter filteredNamePattern) { } @@ -236,6 +450,71 @@ private static String predicateValue(StatementPattern statementPattern) { return statementPattern.getPredicateVar().getValue().stringValue(); } + private static List collectSocialMediaQ4MandatoryLeafOrder(TupleExpr optimized) { + List leaves = new ArrayList<>(); + TupleExpr mandatoryRoot = optimized; + LeftJoin leftJoin = findFirst(optimized, LeftJoin.class); + if (leftJoin != null) { + mandatoryRoot = leftJoin.getLeftArg(); + } + collectSocialMediaQ4MandatoryLeafOrder(mandatoryRoot, leaves); + return leaves; + } + + private static void collectSocialMediaQ4MandatoryLeafOrder(TupleExpr tupleExpr, List leaves) { + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + collectSocialMediaQ4MandatoryLeafOrder(join.getLeftArg(), leaves); + collectSocialMediaQ4MandatoryLeafOrder(join.getRightArg(), leaves); + return; + } + if (tupleExpr instanceof Filter) { + Filter filter = (Filter) tupleExpr; + if (containsNotExists(filter.getCondition())) { + leaves.add("u-restriction"); + return; + } + collectSocialMediaQ4MandatoryLeafOrder(filter.getArg(), leaves); + return; + } + if (tupleExpr instanceof StatementPattern) { + StatementPattern statementPattern = (StatementPattern) tupleExpr; + if (SOCIAL_FOLLOWS.equals(statementPattern.getPredicateVar().getValue())) { + leaves.add("follows"); + } + return; + } + if (tupleExpr instanceof UnaryTupleOperator) { + collectSocialMediaQ4MandatoryLeafOrder(((UnaryTupleOperator) tupleExpr).getArg(), leaves); + } + } + + private static boolean containsNotExists(QueryModelNode node) { + List matches = new ArrayList<>(1); + node.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Not node) { + matches.add(node); + } + }); + return !matches.isEmpty(); + } + + private static Filter findFirstNotExistsFilter(TupleExpr tupleExpr) { + List matches = new ArrayList<>(1); + tupleExpr.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter node) { + if (matches.isEmpty() && containsNotExists(node.getCondition())) { + matches.add(node); + } + super.meet(node); + } + }); + assertTrue(!matches.isEmpty(), "Expected a FILTER NOT EXISTS in optimized q4 plan"); + return matches.get(0); + } + private static void collectStatementPatterns(TupleExpr tupleExpr, List patterns) { if (tupleExpr instanceof StatementPattern) { patterns.add((StatementPattern) tupleExpr); diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java index a6362277d1f..0b760a74844 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java @@ -59,6 +59,13 @@ class LmdbSketchAwareFilterPlacementTest { private static final String MEDICAL_RECORDED_ON_FILTER = "recordedOn-filter"; private static final String MEDICAL_HANDLED_BY_LABEL = "handledBy"; private static final String MEDICAL_TYPE_LABEL = "encounter-type"; + private static final String GRID = "http://example.com/theme/grid/"; + private static final IRI GRID_TRANSFORMER = VF.createIRI(GRID, "Transformer"); + private static final IRI GRID_FEEDS = VF.createIRI(GRID, "feeds"); + private static final IRI GRID_NAME = VF.createIRI(GRID, "name"); + private static final String GRID_SUBSTATION_NAME_FILTER = "substation-name-filter"; + private static final String GRID_FEEDS_LABEL = "grid-feeds"; + private static final String GRID_TRANSFORMER_TYPE_LABEL = "transformer-type"; @Test void optimizedQueryPushesBranchNameFilterOntoLocalPatternWhenSketchesReady(@TempDir File dataDir) @@ -219,6 +226,37 @@ void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsI } } + @Test + void optimizedElectricalGridQ2MovesSubstationNameFilterBeforeTransformerScanInBenchmarkDataset( + @TempDir File dataDir) throws Exception { + LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); + SailRepository repository = new SailRepository(store); + repository.init(); + + try { + loadAllThemeData(repository); + String query = ThemeQueryCatalog.queryFor(Theme.ELECTRICAL_GRID, 2); + + try (SailRepositoryConnection connection = repository.getConnection()) { + try (var result = connection.prepareTupleQuery(query).evaluate()) { + while (result.hasNext()) { + result.next(); + } + } + } + + TupleExpr optimized; + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query).explain(Explanation.Level.Optimized); + optimized = (TupleExpr) explanation.tupleExpr(); + } + + assertSubstationNameMovesFirst(collectMandatoryLeafOrder(optimized)); + } finally { + repository.shutDown(); + } + } + private static void assertRecordedOnMovesFirst(List mandatoryLeafOrder) { int recordedOnIndex = mandatoryLeafOrder.indexOf(MEDICAL_RECORDED_ON_FILTER); int handledByIndex = mandatoryLeafOrder.indexOf(MEDICAL_HANDLED_BY_LABEL); @@ -232,6 +270,20 @@ private static void assertRecordedOnMovesFirst(List mandatoryLeafOrder) "Expected optimized q2 plan to place recordedOn + date filter before handledBy and rdf:type once learned/sample selectivity is available"); } + private static void assertSubstationNameMovesFirst(List mandatoryLeafOrder) { + int nameIndex = mandatoryLeafOrder.indexOf(GRID_SUBSTATION_NAME_FILTER); + int feedsIndex = mandatoryLeafOrder.indexOf(GRID_FEEDS_LABEL); + int typeIndex = mandatoryLeafOrder.indexOf(GRID_TRANSFORMER_TYPE_LABEL); + + assertTrue(nameIndex >= 0, + "Expected optimized electrical q2 plan to keep the substation-name filter attached to its local pattern"); + assertTrue(feedsIndex >= 0 && typeIndex >= 0, + "Expected optimized electrical q2 plan to retain feeds and transformer rdf:type in the mandatory prefix"); + assertTrue(nameIndex < feedsIndex && nameIndex < typeIndex, + "Expected optimized electrical q2 plan to start with the selective substation-name lookup once evidence is available: " + + mandatoryLeafOrder); + } + private static Filter findBranchNameFilter(TupleExpr optimized) { List matches = new ArrayList<>(1); optimized.visit(new AbstractQueryModelVisitor() { @@ -314,6 +366,10 @@ private static void collectMandatoryLeafOrder(TupleExpr tupleExpr, List leaves.add(MEDICAL_RECORDED_ON_FILTER); return; } + if (isSubstationNameFilter(filter)) { + leaves.add(GRID_SUBSTATION_NAME_FILTER); + return; + } collectMandatoryLeafOrder(filter.getArg(), leaves); return; } @@ -337,6 +393,14 @@ private static boolean isRecordedOnFilter(Filter filter) { && VarNameCollector.process(filter.getCondition()).contains("date"); } + private static boolean isSubstationNameFilter(Filter filter) { + if (!(filter.getArg()instanceof StatementPattern statementPattern)) { + return false; + } + return GRID_NAME.equals(statementPattern.getPredicateVar().getValue()) + && VarNameCollector.process(filter.getCondition()).contains("name"); + } + private static String labelFor(StatementPattern statementPattern) { if (statementPattern.getPredicateVar() == null || !statementPattern.getPredicateVar().hasValue()) { return null; @@ -349,6 +413,13 @@ private static String labelFor(StatementPattern statementPattern) { && MEDICAL_ENCOUNTER.equals(statementPattern.getObjectVar().getValue())) { return MEDICAL_TYPE_LABEL; } + if (GRID_FEEDS.equals(predicate)) { + return GRID_FEEDS_LABEL; + } + if (RDF_TYPE.equals(predicate) && statementPattern.getObjectVar() != null + && GRID_TRANSFORMER.equals(statementPattern.getObjectVar().getValue())) { + return GRID_TRANSFORMER_TYPE_LABEL; + } return null; } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md index 6c121e9137a..357268fc5a9 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-20-3.md @@ -1,93 +1,93 @@ ``` Benchmark (themeName) (z_queryIndex) Mode Cnt Score Error Units -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 51.642 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 131.174 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 87.341 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 87.625 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 197.667 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 41.515 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 64.600 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 82.216 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 58.618 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 305.043 ms/op -ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 346.322 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 2.136 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 98.569 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 2.777 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.099 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 4.688 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 731.486 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 2.374 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 10.024 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 874.961 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 31.329 ms/op -ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 90.552 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 708.021 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 166.127 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 100.388 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 46.993 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 354.255 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 30.031 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 31110.554 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 1570.434 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 106.931 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 74.143 ms/op -ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 205.765 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 231.134 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 170.079 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 3.677 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 129.795 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 355.238 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 5.600 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 245.566 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 6.627 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.391 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 9.062 ms/op -ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 4.758 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 403.742 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1226.737 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 1058.682 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 125.490 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 305.396 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 271.242 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1450.803 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 223.728 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1337.609 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1441.020 ms/op -ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 474.020 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 37.792 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 48.570 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 21.925 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 159.637 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 162.086 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 38.264 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 104.919 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 103.340 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 160.139 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 244.542 ms/op -ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 212.075 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 46.019 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 53.870 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 89.466 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 335.819 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 123.834 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 34.315 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 93.504 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 107.823 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 14.677 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.979 ms/op -ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 387.730 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 16.866 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 3.253 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 32.167 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 27.848 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 38.642 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 6.773 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 10.949 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 35.563 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 29.450 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 20.363 ms/op -ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 258.264 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 0 avgt 54.919 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 1 avgt 113.576 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 2 avgt 75.740 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 3 avgt 94.353 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 4 avgt 204.309 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 5 avgt 191.137 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 6 avgt 68.029 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 7 avgt 82.067 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 8 avgt 64.651 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 9 avgt 313.593 ms/op +ThemeQueryBenchmark.executeQuery MEDICAL_RECORDS 10 avgt 357.586 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 0 avgt 0.950 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 1 avgt 115.493 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 2 avgt 1.094 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 3 avgt 2.426 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 4 avgt 2.575 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 5 avgt 797.885 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 6 avgt 1.793 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 7 avgt 10.345 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 8 avgt 926.415 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 9 avgt 36.365 ms/op +ThemeQueryBenchmark.executeQuery SOCIAL_MEDIA 10 avgt 211.482 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 0 avgt 711.313 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 1 avgt 174.116 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 2 avgt 21.954 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 3 avgt 47.038 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 4 avgt 70.316 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 5 avgt 9.295 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 6 avgt 32630.144 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 7 avgt 69435.838 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 8 avgt 84.564 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 9 avgt 67.977 ms/op +ThemeQueryBenchmark.executeQuery LIBRARY 10 avgt 224.843 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 0 avgt 238.582 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 1 avgt 160.207 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 2 avgt 4.010 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 3 avgt 138.155 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 4 avgt 59.229 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 5 avgt 6.497 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 6 avgt 253.708 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 7 avgt 6.701 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 8 avgt 4.787 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 9 avgt 12.251 ms/op +ThemeQueryBenchmark.executeQuery ENGINEERING 10 avgt 5.004 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 0 avgt 409.778 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 1 avgt 1236.510 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 2 avgt 701.138 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 3 avgt 130.838 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 4 avgt 301.471 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 5 avgt 280.729 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 6 avgt 1455.477 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 7 avgt 229.536 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 8 avgt 1387.508 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 9 avgt 1422.262 ms/op +ThemeQueryBenchmark.executeQuery HIGHLY_CONNECTED 10 avgt 491.415 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 0 avgt 39.183 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 1 avgt 45.791 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 2 avgt 20.835 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 3 avgt 156.964 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 4 avgt 167.583 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 5 avgt 20.214 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 6 avgt 111.823 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 7 avgt 109.143 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 8 avgt 151.445 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 9 avgt 248.907 ms/op +ThemeQueryBenchmark.executeQuery TRAIN 10 avgt 209.398 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 0 avgt 47.448 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 1 avgt 35.878 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 2 avgt 7.189 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 3 avgt 365.597 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 4 avgt 6.602 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 5 avgt 10.147 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 6 avgt 100.942 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 7 avgt 17.298 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 8 avgt 17.541 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 9 avgt 5.405 ms/op +ThemeQueryBenchmark.executeQuery ELECTRICAL_GRID 10 avgt 384.294 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 0 avgt 27.854 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 1 avgt 6.880 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 2 avgt 30.861 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 3 avgt 26.530 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 4 avgt 48.708 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 5 avgt 17.101 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 6 avgt 18.132 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 7 avgt 47.846 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 8 avgt 32.197 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 9 avgt 26.807 ms/op +ThemeQueryBenchmark.executeQuery PHARMA 10 avgt 2381.539 ms/op ``` ``` @@ -126,19 +126,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc010a88a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000003011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -Loading theme dataset: MEDICAL_RECORDS -Loading theme dataset: SOCIAL_MEDIA -Loading theme dataset: LIBRARY -Loading theme dataset: ENGINEERING -Loading theme dataset: HIGHLY_CONNECTED -Loading theme dataset: TRAIN -Loading theme dataset: ELECTRICAL_GRID -Loading theme dataset: PHARMA -73.296 ms/op +80.993 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -146,7 +138,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] │ ║ │ ╠══ Compare (>=) │ ║ │ ║ Var (name=optDate) (bindingState=bound) │ ║ │ ║ ValueConstant (value="2024-06-01"^^) @@ -156,12 +148,12 @@ Projection │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.00) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], sharedJoinVars=[enc]) [right] │ ║ │ ║ s: Var (name=enc) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) │ ║ │ ║ o: Var (name=date) (bindingState=unbound) @@ -191,11 +183,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -51.642 ms/op +54.919 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 51.642 ms/op + 54.919 ms/op # JMH version: 1.37 @@ -211,7 +203,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 1) -# Run progress: 1.14% complete, ETA 01:47:07 +# Run progress: 1.14% complete, ETA 00:22:26 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -231,11 +223,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -187.068 ms/op +163.060 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -244,7 +236,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=14.2M, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) @@ -252,18 +244,18 @@ Projection │ ║ │ ║ │ ╚══ Compare (=) │ ║ │ ║ │ Var (name=code) (bindingState=bound) │ ║ │ ║ │ ValueConstant (value="DX-202") - │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=3315.4M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/medical/code ?code), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Condition), SP(?entity http://example.com/theme/medical/code ?code)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Condition), SP(?entity http://example.com/theme/medical/code ?code)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/medical/code ?code)) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=3315.4M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/medical/code ?code), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Condition), SP(?entity http://example.com/theme/medical/code ?code)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Condition), SP(?entity http://example.com/theme/medical/code ?code)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/medical/code ?code)) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/medical/code ?code), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Condition), SP(?entity http://example.com/theme/medical/code ?code)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Condition), SP(?entity http://example.com/theme/medical/code ?code)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/medical/code ?code)) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) - │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) - │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ o: Var (name=code) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=14.2M, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=code) (bindingState=bound) @@ -271,14 +263,14 @@ Projection │ ║ │ │ ╚══ Compare (=) │ ║ │ │ Var (name=code) (bindingState=bound) │ ║ │ │ ValueConstant (value="DX-202") - │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=1110.5M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/medical/code ?code), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Medication), SP(?entity http://example.com/theme/medical/code ?code)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Medication), SP(?entity http://example.com/theme/medical/code ?code)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/medical/code ?code)) │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=1110.5M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/medical/code ?code), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Medication), SP(?entity http://example.com/theme/medical/code ?code)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Medication), SP(?entity http://example.com/theme/medical/code ?code)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/medical/code ?code)) [right] + │ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/medical/code ?code), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Medication), SP(?entity http://example.com/theme/medical/code ?code)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Medication), SP(?entity http://example.com/theme/medical/code ?code)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/medical/code ?code)) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) - │ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=code) (bindingState=unbound) @@ -298,8 +290,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "DX-200" "DX-201" } { { - ?entity ?code . ?entity a . + ?entity ?code . } } FILTER ((?code = ?target) || (?code = "DX-202")) @@ -320,11 +312,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -131.174 ms/op +113.576 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 131.174 ms/op + 113.576 ms/op # JMH version: 1.37 @@ -340,7 +332,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 2) -# Run progress: 2.27% complete, ETA 01:04:05 +# Run progress: 2.27% complete, ETA 00:22:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -359,11 +351,11 @@ GROUP BY ?practitioner HAVING(COUNT(?enc) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -122.513 ms/op +113.284 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -371,42 +363,42 @@ Projection ║ ProjectionElem "encCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5877ce8a9f5b26a4e3aa3cdf822201b8da101234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (practitioner) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.3K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=136) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=24.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] - │ ║ │ ║ s: Var (name=enc) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[O, S, P]) [right] - │ ║ │ ├── ListMemberOperator - │ ║ │ │ Var (name=date) (bindingState=bound) - │ ║ │ │ ValueConstant (value="2024-01-01"^^) - │ ║ │ │ ValueConstant (value="2024-02-01"^^) - │ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) - │ ║ │ s: Var (name=enc) (bindingState=bound) - │ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) - │ ║ │ o: Var (name=date) (bindingState=unbound) + │ ║ │ ║ └── Filter (resultSizeEstimate=136, plannedFilterEvidenceCount=3.8M, plannedAccessRows=1.00, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=2.00, plannedWorkRows=136, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[S, P, O], plannedMissingLookupComponents=[O], plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, sharedJoinVars=[enc]) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[date, enc, practitioner], sharedJoinVars=[enc]) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] │ ║ s: Var (name=enc) (bindingState=bound) │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ GroupElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) + │ ║ GroupElem (_anon_having_5877ce8a9f5b26a4e3aa3cdf822201b8da101234) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_507bb3f6b2ffb524417920b11ed3ce36ff101234) + │ ╚══ ExtensionElem (_anon_having_5877ce8a9f5b26a4e3aa3cdf822201b8da101234) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -415,9 +407,9 @@ Projection SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { ?enc ?practitioner . - ?enc a . ?enc ?date . FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + ?enc a . OPTIONAL { ?enc ?cond . } @@ -425,11 +417,11 @@ SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?practitioner HAVING (COUNT(?enc) > 0) -87.341 ms/op +75.740 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 87.341 ms/op + 75.740 ms/op # JMH version: 1.37 @@ -445,7 +437,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 3) -# Run progress: 3.41% complete, ETA 00:49:31 +# Run progress: 3.41% complete, ETA 00:21:59 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -467,11 +459,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -123.707 ms/op +134.025 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -479,7 +471,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optValue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="60"^^) @@ -489,23 +481,23 @@ Projection │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) - │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] - │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ ║ │ ║ o: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=unbound) - │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[P, S]) [right] - │ ║ │ ║ │ s: Var (name=_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, anonymous) (bindingState=bound) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_74631e86deb86664033ab332490a6d45e570123456, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_anon_path_74631e86deb86664033ab332490a6d45e570123456, _const_24be87bd_uri, _const_f5e5585a_uri, patient], sharedJoinVars=[_anon_path_74631e86deb86664033ab332490a6d45e570123456]) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_74631e86deb86664033ab332490a6d45e570123456, anonymous) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_796002ba0bd495849d4bbd6f40b3f28e4270123456, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_anon_path_74631e86deb86664033ab332490a6d45e570123456, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], sharedJoinVars=[obs]) [right] │ ║ │ ║ s: Var (name=obs) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) │ ║ │ ║ o: Var (name=value) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optValue) │ ║ │ Var (name=value) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.7M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) │ ║ ║ │ Str @@ -536,11 +528,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } } -87.625 ms/op +94.353 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 87.625 ms/op + 94.353 ms/op # JMH version: 1.37 @@ -556,7 +548,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 4) -# Run progress: 4.55% complete, ETA 00:42:07 +# Run progress: 4.55% complete, ETA 00:21:43 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -575,35 +567,35 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -286.625 ms/op +305.910 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) │ ║ ├── Exists │ ║ │ StatementPattern (resultSizeEstimate=49.7K) │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ │ o: Var (name=obs) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=43.3K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=50.6K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedAccessRows=34.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=50.6K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc], sharedJoinVars=[enc]) [right] │ ║ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ └── Filter (resultSizeEstimate=43.3K, plannedFilterEvidenceCount=2.8M, plannedAccessRows=1.00, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=2.00, plannedWorkRows=43.3K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, S, O], plannedMissingLookupComponents=[O], plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, sharedJoinVars=[cond]) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=code) (bindingState=bound) @@ -639,11 +631,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } } -197.667 ms/op +204.309 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 197.667 ms/op + 204.309 ms/op # JMH version: 1.37 @@ -659,7 +651,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 5) -# Run progress: 5.68% complete, ETA 00:37:35 +# Run progress: 5.68% complete, ETA 00:21:28 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -679,50 +671,110 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -61.595 ms/op +286.905 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.2K, joinType=Cartesian product) + │ ║ ├── Filter (plannedFilterPassRatio=0.12, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] │ ║ │ ╠══ Not │ ║ │ ║ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) │ ║ │ ║ s: Var (name=enc) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ │ │ ║ │ ╠══ ListMemberOperator - │ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) - │ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) - │ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) - │ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) - │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) - │ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) - │ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) - │ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) - │ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] - │ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) - │ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] - │ ║ │ │ s: Var (name=patient) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) - │ ║ │ │ o: Var (name=enc) (bindingState=bound) - │ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] - │ ║ │ s: Var (name=patient) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.6K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=51.5K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ │ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ │ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ │ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, plannedFilterEvidenceCount=3.0M, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=obs) (bindingState=bound) + │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ o: Var (name=value) (bindingState=unbound) │ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) @@ -732,22 +784,22 @@ Projection Var (name=patient) (bindingState=unbound) SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + ?patient ?enc . + ?enc ?obs . ?obs ?value . FILTER (?value IN (50, 60, 70)) - ?enc ?obs . - ?patient ?enc . - ?patient a . FILTER NOT EXISTS { ?enc ?cond . } VALUES ?limit { 55 } } -41.515 ms/op +191.137 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 41.515 ms/op + 191.137 ms/op # JMH version: 1.37 @@ -763,7 +815,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 6) -# Run progress: 6.82% complete, ETA 00:34:27 +# Run progress: 6.82% complete, ETA 00:21:14 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -787,11 +839,11 @@ GROUP BY ?patient HAVING(COUNT(?med) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ffc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -68.068 ms/op +99.367 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -799,12 +851,12 @@ Projection ║ ProjectionElem "medCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_40986d1530202c24961b195abcd7bd1a8760123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_407548953e2bab249a0a2021379369c6b930123, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (patient) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optMed) (bindingState=bound) │ ║ │ Var (name=patient) (bindingState=bound) @@ -825,13 +877,13 @@ Projection │ ║ │ o: Var (name=med) (bindingState=unbound) │ ║ └── ExtensionElem (optMed) │ ║ Var (name=med) (bindingState=bound) - │ ║ GroupElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) + │ ║ GroupElem (_anon_having_407548953e2bab249a0a2021379369c6b930123) │ ║ Count │ ║ Var (name=med) (bindingState=bound) │ ║ GroupElem (medCount) │ ║ Count (Distinct) │ ║ Var (name=med) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_40986d1530202c24961b195abcd7bd1a8760123) + │ ╚══ ExtensionElem (_anon_having_407548953e2bab249a0a2021379369c6b930123) │ Count │ Var (name=med) (bindingState=unbound) └── ExtensionElem (medCount) @@ -855,11 +907,11 @@ SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { GROUP BY ?patient HAVING (COUNT(?med) > 0) -64.600 ms/op +68.029 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 64.600 ms/op + 68.029 ms/op # JMH version: 1.37 @@ -875,7 +927,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 7) -# Run progress: 7.95% complete, ETA 00:32:08 +# Run progress: 7.95% complete, ETA 00:20:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -893,11 +945,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -119.731 ms/op +124.379 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -905,23 +957,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ ║ o: Var (name=med) (bindingState=bound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) - │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedAccessRows=24.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] │ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) │ ║ │ │ Var (name=patient) │ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ │ Var (name=med) - │ ║ │ │ ) + │ ║ │ │ source=unknown) │ ║ │ │ s: Var (name=med) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) - │ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], plannedLookupComponents=[O, P, S]) [right] + │ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedFilterEvidenceCount=2.3M, plannedAccessRows=1.00, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=2.00, plannedWorkRows=13.7K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P, S], plannedMissingLookupComponents=[O], plannedBoundVars=[med], filterSelectivitySource=learned_filter, sharedJoinVars=[med]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=code) (bindingState=bound) @@ -933,7 +985,7 @@ Projection │ ║ │ s: Var (name=med) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=code) (bindingState=unbound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.3M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) │ ║ ║ │ Str @@ -963,11 +1015,11 @@ SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { } } -82.216 ms/op +82.067 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 82.216 ms/op + 82.067 ms/op # JMH version: 1.37 @@ -983,7 +1035,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 8) -# Run progress: 9.09% complete, ETA 00:30:20 +# Run progress: 9.09% complete, ETA 00:20:41 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1007,11 +1059,11 @@ GROUP BY ?patient HAVING(COUNT(?enc) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -86.699 ms/op +97.612 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1019,12 +1071,12 @@ Projection ║ ProjectionElem "encCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_01906c863d93dd742ec91925ed3241745c1, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (patient) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) @@ -1040,24 +1092,24 @@ Projection │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) │ ║ ╚══ Extension [right] - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] │ ║ │ ║ s: Var (name=patient) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], sharedJoinVars=[enc]) [right] │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ o: Var (name=practitioner) (bindingState=unbound) │ ║ └── ExtensionElem (optPractitioner) │ ║ Var (name=practitioner) (bindingState=bound) - │ ║ GroupElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) + │ ║ GroupElem (_anon_having_01906c863d93dd742ec91925ed3241745c1) │ ║ Count │ ║ Var (name=enc) (bindingState=bound) │ ║ GroupElem (encCount) │ ║ Count (Distinct) │ ║ Var (name=enc) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_510112df7f1fe8ca44369a7d1a08b225229601234) + │ ╚══ ExtensionElem (_anon_having_01906c863d93dd742ec91925ed3241745c1) │ Count │ Var (name=enc) (bindingState=unbound) └── ExtensionElem (encCount) @@ -1076,11 +1128,11 @@ SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { GROUP BY ?patient HAVING (COUNT(?enc) >= 2) -58.618 ms/op +64.651 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 58.618 ms/op + 64.651 ms/op # JMH version: 1.37 @@ -1096,7 +1148,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 9) -# Run progress: 10.23% complete, ETA 00:28:53 +# Run progress: 10.23% complete, ETA 00:20:25 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1116,11 +1168,11 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000ff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -428.822 ms/op +444.608 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1129,20 +1181,20 @@ Projection ├── Group () │ ╠══ Difference │ ║ ├── LeftJoin - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.4K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=52.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=666290.0 rawRows=66629.0 effectiveRows=66629.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.663792759E10 rawRows=1.663792759E9 effectiveRows=1.663792759E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=29538.823529411766 rawRows=50216.0 effectiveRows=50216.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=502160.0 rawRows=50216.0 effectiveRows=50216.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30841.764705882353 rawRows=52431.0 effectiveRows=52431.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=52431.0 rawRows=52431.0 effectiveRows=52431.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=52431.0, effectiveRows=52431.0, adjustedCost=52431.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.5K, optimizer.candidateCount=9, optimizer.score=51.9K, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416268.69230348367 rawRows=66527.0 effectiveRows=65960.50862463441 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0206715372919E10 rawRows=1.661245717E9 effectiveRows=1.647099860865746E9 baseCostRows=1.647099860865746E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42532.145875927905 rawRows=50725.0 effectiveRows=50293.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.5K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416268.69230348367 rawRows=66527.0 effectiveRows=65960.50862463441 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0206715372919E10 rawRows=1.661245717E9 effectiveRows=1.647099860865746E9 baseCostRows=1.647099860865746E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42532.145875927905 rawRows=50725.0 effectiveRows=50293.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.3K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416268.69230348367 rawRows=66527.0 effectiveRows=65960.50862463441 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0206715372919E10 rawRows=1.661245717E9 effectiveRows=1.647099860865746E9 baseCostRows=1.647099860865746E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42532.145875927905 rawRows=50725.0 effectiveRows=50293.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416268.69230348367 rawRows=66527.0 effectiveRows=65960.50862463441 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0206715372919E10 rawRows=1.661245717E9 effectiveRows=1.647099860865746E9 baseCostRows=1.647099860865746E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42532.145875927905 rawRows=50725.0 effectiveRows=50293.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9914847900045759 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) - │ ║ │ ║ │ ║ └── Filter (costEstimate=258, resultSizeEstimate=66.6K) [right] + │ ║ │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=1.9M, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] │ ║ │ ║ │ ║ ╠══ ListMemberOperator │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") - │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ ╚══ StatementPattern (costEstimate=257, resultSizeEstimate=66.5K) │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) @@ -1155,17 +1207,17 @@ Projection │ ║ │ s: Var (name=enc) (bindingState=bound) │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) │ ║ │ o: Var (name=practitioner) (bindingState=unbound) - │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) - │ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] - │ ║ ║ s: Var (name=enc) (bindingState=unbound) - │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) - │ ║ ║ o: Var (name=obs) (bindingState=unbound) - │ ║ ╚══ Filter (new scope) [right] - │ ║ ├── Compare (<) - │ ║ │ Var (name=value) (bindingState=bound) - │ ║ │ ValueConstant (value="60"^^) - │ ║ └── StatementPattern (resultSizeEstimate=49.7K) - │ ║ s: Var (name=obs) (bindingState=unbound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=1.9M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=value) (bindingState=bound) + │ ║ ║ ValueConstant (value="60"^^) + │ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=50.2K) + │ ║ ├── StatementPattern (resultSizeEstimate=49.7K, plannedAccessRows=49.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.7K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc, obs], sharedJoinVars=[obs]) [right] + │ ║ s: Var (name=obs) (bindingState=bound) │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) │ ║ o: Var (name=value) (bindingState=unbound) │ ╚══ GroupElem (count) @@ -1186,20 +1238,16 @@ SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { } MINUS { ?enc ?obs . - { - { - ?obs ?value . - FILTER (?value < 60) - } - } + ?obs ?value . + FILTER (?value < 60) } } -305.043 ms/op +313.593 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 305.043 ms/op + 313.593 ms/op # JMH version: 1.37 @@ -1215,7 +1263,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = MEDICAL_RECORDS, z_queryIndex = 10) -# Run progress: 11.36% complete, ETA 00:27:44 +# Run progress: 11.36% complete, ETA 00:20:10 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1236,62 +1284,62 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -506.120 ms/op +509.333 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ Not │ ║ │ Exists - │ ║ │ Join (JoinIterator) (resultSizeEstimate=8.0K) - │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ Join (JoinIterator) (resultSizeEstimate=16.5K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] │ ║ │ │ s: Var (name=patient) (bindingState=bound) │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ │ │ o: Var (name=m2) (bindingState=unbound) - │ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] + │ ║ │ └── Filter (plannedFilterEvidenceCount=4.7M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] │ ║ │ ╠══ Compare (=) │ ║ │ ║ Var (name=c) (bindingState=bound) │ ║ │ ║ ValueConstant (value="MED-1005") - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) │ ║ │ Var (name=c) │ ║ │ ValueConstant (value="MED-1005") - │ ║ │ , plannedLookupComponents=[P, S]) + │ ║ │ passRatio=0.0 source=learned_filter evidence=4719302, sharedJoinVars=[m2]) │ ║ │ s: Var (name=m2) (bindingState=bound) │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) │ ║ │ o: Var (name=c) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.9K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedAccessRows=14.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[patient], sharedJoinVars=[patient]) [right] │ ║ ║ │ s: Var (name=patient) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) │ ║ ║ │ o: Var (name=med) (bindingState=unbound) - │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] - │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.5K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedAccessRows=14.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) - │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.6K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[patient], sharedJoinVars=[patient]) [right] │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[P, S]) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.5K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[enc, patient], sharedJoinVars=[enc]) [right] │ ║ ║ s: Var (name=enc) (bindingState=bound) │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) │ ║ ║ o: Var (name=obs) (bindingState=unbound) @@ -1323,11 +1371,11 @@ SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) } -346.322 ms/op +357.586 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 346.322 ms/op + 357.586 ms/op # JMH version: 1.37 @@ -1343,7 +1391,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 0) -# Run progress: 12.50% complete, ETA 00:26:43 +# Run progress: 12.50% complete, ETA 00:19:55 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1368,11 +1416,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.093 ms/op +1.509 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1380,28 +1428,25 @@ Projection ╚══ Extension ├── Group () │ ╠══ Extension - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterEvidenceCount=71.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ║ ValueConstant (value="user0") │ ║ │ ║ ValueConstant (value="user1") │ ║ │ ║ ValueConstant (value="user2") │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] - │ ║ │ │ ╠══ Compare (!=) - │ ║ │ │ ║ Var (name=u) (bindingState=bound) - │ ║ │ │ ║ Var (name=v) (bindingState=bound) - │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) - │ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] - │ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] - │ ║ │ │ │ Var (name=u) - │ ║ │ │ │ Var (name=v) - │ ║ │ │ │ ) - │ ║ │ │ │ s: Var (name=u) (bindingState=unbound) - │ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ │ │ o: Var (name=v) (bindingState=bound) - │ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannedBoundVars=[u]) + │ ║ │ │ ╚══ Filter (plannedFilterEvidenceCount=71.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ├── Compare (!=) + │ ║ │ │ │ Var (name=u) (bindingState=bound) + │ ║ │ │ │ Var (name=v) (bindingState=bound) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[u, v]) + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ │ s: Var (name=u) (bindingState=bound) │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) @@ -1420,9 +1465,18 @@ Projection Var (name=pair) (bindingState=unbound) SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { - VALUES ?v { } + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } ?u ?v . - VALUES ?u { } FILTER (?u != ?v) OPTIONAL { ?u ?optName . @@ -1431,11 +1485,11 @@ SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) } -2.136 ms/op +0.950 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.136 ms/op + 0.950 ms/op # JMH version: 1.37 @@ -1451,7 +1505,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 1) -# Run progress: 13.64% complete, ETA 00:25:48 +# Run progress: 13.64% complete, ETA 00:19:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1484,11 +1538,11 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -145.759 ms/op +172.718 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1496,51 +1550,51 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=23796.1M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=742867.6470588235 rawRows=1273525.0 effectiveRows=1262875.0 baseCostRows=1262875.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=742867.6470588235 rawRows=1273525.0 effectiveRows=1262875.0 baseCostRows=1262875.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=40.588235294117645 rawRows=143748.0 effectiveRows=69.0 baseCostRows=69.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=40.588235294117645 rawRows=143748.0 effectiveRows=69.0 baseCostRows=69.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] │ ║ │ ║ ├── Compare (!=) │ ║ │ ║ │ Var (name=u1) (bindingState=bound) │ ║ │ ║ │ Var (name=u2) (bindingState=bound) - │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=28.074866310160427 rawRows=143748.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=742867.6470588235 rawRows=1273525.0 effectiveRows=1262875.0 baseCostRows=1262875.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=742867.6470588235 rawRows=1273525.0 effectiveRows=1262875.0 baseCostRows=1262875.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=40.588235294117645 rawRows=143748.0 effectiveRows=69.0 baseCostRows=69.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=40.588235294117645 rawRows=143748.0 effectiveRows=69.0 baseCostRows=69.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=742867.6470588235 rawRows=1273525.0 effectiveRows=1262875.0 baseCostRows=1262875.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=743104.1176470588 rawRows=1273931.0 effectiveRows=1263277.0 baseCostRows=1263277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=742867.6470588235 rawRows=1273525.0 effectiveRows=1262875.0 baseCostRows=1262875.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=40.588235294117645 rawRows=143748.0 effectiveRows=69.0 baseCostRows=69.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=40.588235294117645 rawRows=143748.0 effectiveRows=69.0 baseCostRows=69.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) │ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] - │ ║ │ ├── Exists - │ ║ │ │ Filter - │ ║ │ │ ├── Or - │ ║ │ │ │ ╠══ Compare (=) - │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ │ │ ║ ValueConstant (value="user0") - │ ║ │ │ │ ╚══ Compare (=) - │ ║ │ │ │ Var (name=name) (bindingState=bound) - │ ║ │ │ │ ValueConstant (value="user1") - │ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) - │ ║ │ │ s: Var (name=u1) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) - │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) [right] + │ ║ │ ├── And + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ │ ╚══ Exists + │ ║ │ │ Filter (plannedFilterEvidenceCount=612, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="user0") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="user1") + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] - │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] - │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] - │ ║ │ ║ │ ║ ├── Filter [left] - │ ║ │ ║ │ ║ │ ╠══ And + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.258806918773259E14M) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9626895113E9M) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20610.3M) [left] + │ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ │ ║ │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=1.8K, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] │ ║ │ ║ │ ║ │ ║ ├── Compare (!=) │ ║ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) │ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) - │ ║ │ ║ │ ║ │ ║ └── Compare (!=) - │ ║ │ ║ │ ║ │ ║ Var (name=u1) (bindingState=bound) - │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) - │ ║ │ ║ │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.2K) - │ ║ │ ║ │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=143.7K) [left] - │ ║ │ ║ │ ║ │ │ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] - │ ║ │ ║ │ ║ │ │ ║ s: Var (name=u1) (bindingState=bound) - │ ║ │ ║ │ ║ │ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ ║ │ ║ │ │ ║ o: Var (name=u2) (bindingState=bound) - │ ║ │ ║ │ ║ │ │ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ │ ║ │ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) - │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K) + │ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] │ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) │ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) @@ -1562,7 +1616,7 @@ Projection │ ║ ║ s: Var (name=u1) (bindingState=unbound) │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ o: Var (name=u1) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) + │ ║ ╚══ ExtensionElem (_anon_path_7297527716342c84034917a39fc5b6c443a0123456) │ ║ Var (name=u1) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -1586,27 +1640,24 @@ SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { FILTER (?u1 != ?u2) ?u1 ?u2 . VALUES ?u3 { } + FILTER (?u2 != ?u3) ?u1 ?u3 . - FILTER ((?u2 != ?u3) && (?u1 != ?u3)) ?u2 ?u1 . ?u3 ?u1 . ?u2 ?u3 . ?u3 ?u2 . - FILTER EXISTS { - ?u1 ?name . - FILTER ((?name = "user0") || (?name = "user1")) - } + FILTER ((?u1 != ?u3) && EXISTS { ?u1 ?name . FILTER ((?name = "user0") || (?name = "user1")) }) MINUS { ?u1 ?u1 . - BIND(?u1 AS ?_anon_path_98018ae7efcdc93e4c4c950a3321efc0f53c012345678) + BIND(?u1 AS ?_anon_path_7297527716342c84034917a39fc5b6c443a0123456) } } -98.569 ms/op +115.493 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 98.569 ms/op + 115.493 ms/op # JMH version: 1.37 @@ -1622,7 +1673,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 2) -# Run progress: 14.77% complete, ETA 00:24:59 +# Run progress: 14.77% complete, ETA 00:19:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1649,48 +1700,40 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.135 ms/op +1.712 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=62.5K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── Compare (!=) │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] - │ ║ ║ ├── Exists - │ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) - │ ║ ║ │ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] - │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] - │ ║ ║ ║ ╠══ Compare (!=) - │ ║ ║ ║ ║ Var (name=u) (bindingState=bound) - │ ║ ║ ║ ║ Var (name=v) (bindingState=bound) - │ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists - │ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) - │ ║ ║ ║ Var (name=v) - │ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ Var (name=u) - │ ║ ║ ║ , Compare (!=) - │ ║ ║ ║ Var (name=u) - │ ║ ║ ║ Var (name=v) - │ ║ ║ ║ ) - │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u]) + │ ║ ║ └── Filter (plannedFilterEvidenceCount=135.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_pattern) [right] + │ ║ ║ ╠══ And + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ ║ └── Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=v) (bindingState=bound) - │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] + │ ║ ║ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[u, v]) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) @@ -1703,24 +1746,37 @@ Projection Var (name=u) (bindingState=unbound) SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { - VALUES ?v { } - ?u ?v . - FILTER (?u != ?v) - VALUES ?u { } - FILTER EXISTS { - ?v ?u . + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) } + ?u ?v . + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) OPTIONAL { ?v ?optName . } FILTER (?optName != "") } -2.777 ms/op +1.094 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.777 ms/op + 1.094 ms/op # JMH version: 1.37 @@ -1736,7 +1792,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 3) -# Run progress: 15.91% complete, ETA 00:24:15 +# Run progress: 15.91% complete, ETA 00:19:07 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1764,11 +1820,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.017 ms/op +3.702 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -1776,12 +1832,12 @@ Projection ║ ProjectionElem "degree" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_103419100ba817bfa4752b26cd7a9d8ba5d8c0, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (u) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optAlias) (bindingState=bound) │ ║ │ ValueConstant (value="user3") @@ -1789,21 +1845,18 @@ Projection │ ║ │ ValueConstant (value="user5") │ ║ │ ValueConstant (value="user6") │ ║ └── LeftJoin - │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] - │ ║ ║ ├── Compare (!=) - │ ║ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] - │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] - │ ║ ║ ║ Var (name=u) - │ ║ ║ ║ Var (name=v) - │ ║ ║ ║ ) - │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=v) (bindingState=bound) - │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u]) + │ ║ ║ └── Filter (plannedFilterEvidenceCount=99.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S, O], plannedBoundVars=[u, v]) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) │ ║ │ s: Var (name=u) (bindingState=bound) @@ -1811,13 +1864,13 @@ Projection │ ║ │ o: Var (name=optName) (bindingState=unbound) │ ║ └── ExtensionElem (optAlias) │ ║ Var (name=optName) (bindingState=bound) - │ ║ GroupElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) + │ ║ GroupElem (_anon_having_103419100ba817bfa4752b26cd7a9d8ba5d8c0) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_601713a495691e5a94e7bb3e6720327b023f2012345) + │ ╚══ ExtensionElem (_anon_having_103419100ba817bfa4752b26cd7a9d8ba5d8c0) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (degree) @@ -1825,9 +1878,25 @@ Projection Var (name=v) (bindingState=unbound) SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { - VALUES ?v { } + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } ?u ?v . - VALUES ?u { } FILTER (?u != ?v) OPTIONAL { ?u ?optName . @@ -1838,11 +1907,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 3) -2.099 ms/op +2.426 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.099 ms/op + 2.426 ms/op # JMH version: 1.37 @@ -1858,7 +1927,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 4) -# Run progress: 17.05% complete, ETA 00:23:34 +# Run progress: 17.05% complete, ETA 00:18:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -1887,44 +1956,44 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000780011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -6.842 ms/op +3.952 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=102.7K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── Compare (!=) │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] - │ ║ ║ │ ╠══ Compare (!=) - │ ║ ║ │ ║ Var (name=u) (bindingState=bound) - │ ║ ║ │ ║ Var (name=v) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ s: Var (name=u) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=v) (bindingState=bound) - │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right] - │ ║ ║ ╠══ Not - │ ║ ║ ║ Exists - │ ║ ║ ║ Extension - │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) - │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) - │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) - │ ║ ║ ║ Var (name=u) (bindingState=bound) - │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ╠══ Filter (plannedFilterEvidenceCount=140.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.00) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.00) [left] + │ ║ ║ ║ ├── Filter (resultSizeEstimate=5.00, plannedFilterPassRatio=1.00, plannedWorkRows=5.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=cardinality) [left] + │ ║ ║ ║ │ ╠══ Not + │ ║ ║ ║ │ ║ Exists + │ ║ ║ ║ │ ║ Extension + │ ║ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ ║ └── ExtensionElem (_anon_path_70971eeadac6d55684f6bab7b8a2f5b62f90c0123456) + │ ║ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ║ ║ └── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (resultSizeEstimate=5.00, plannedWorkRows=5.00, plannedBoundVars=[u]) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[u, v]) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) @@ -1937,25 +2006,25 @@ Projection Var (name=u) (bindingState=unbound) SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { - VALUES ?v { } - ?u ?v . - FILTER (?u != ?v) VALUES ?u { } FILTER NOT EXISTS { ?u ?u . - BIND(?u AS ?_anon_path_72101e5ccc192ad22484ab63c06d154bbb9ca0123456) + BIND(?u AS ?_anon_path_70971eeadac6d55684f6bab7b8a2f5b62f90c0123456) } + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) OPTIONAL { ?v ?optName . } FILTER (?optName != "") } -4.688 ms/op +2.575 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.688 ms/op + 2.575 ms/op # JMH version: 1.37 @@ -1971,7 +2040,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 5) -# Run progress: 18.18% complete, ETA 00:22:56 +# Run progress: 18.18% complete, ETA 00:18:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2002,18 +2071,18 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000003011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1030.599 ms/op +1140.112 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=7.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="user7") @@ -2026,8 +2095,8 @@ Projection │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ ║ └── Union (new scope) [right] │ ║ ║ ╠══ Extension (new scope) - │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) - │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[u] originalOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] promotedPrefixes=[] plannedOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] plannedBoundVars=[u]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:SP(?u http://example.com/theme/social/follows ?v), 1:SP(?v http://example.com/theme/social/follows ?u)]) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[u] originalOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] promotedPrefixes=[] plannedOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] plannedBoundVars=[u]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:SP(?u http://example.com/theme/social/follows ?v), 1:SP(?v http://example.com/theme/social/follows ?u)]) [left] │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) @@ -2073,11 +2142,11 @@ SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) } -731.486 ms/op +797.885 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 731.486 ms/op + 797.885 ms/op # JMH version: 1.37 @@ -2093,7 +2162,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 6) -# Run progress: 19.32% complete, ETA 00:22:23 +# Run progress: 19.32% complete, ETA 00:18:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2125,11 +2194,11 @@ GROUP BY ?u HAVING(COUNT(DISTINCT ?v) >= 5) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -3.483 ms/op +2.756 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2137,42 +2206,39 @@ Projection ║ ProjectionElem "connections" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_6629185c7cd15cf4a4365bd43360995797ae0012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="5"^^) │ ║ └── Group (u) - │ ║ Filter + │ ║ Filter (plannedFilterEvidenceCount=231.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── Compare (!=) │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] - │ ║ ║ ├── Compare (!=) - │ ║ ║ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ Var (name=v) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] - │ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] - │ ║ ║ ║ Var (name=u) - │ ║ ║ ║ Var (name=v) - │ ║ ║ ║ ) - │ ║ ║ ║ s: Var (name=u) (bindingState=unbound) - │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ ║ o: Var (name=v) (bindingState=bound) - │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannedBoundVars=[u]) + │ ║ ║ └── Filter (plannedFilterEvidenceCount=268.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=u) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) + │ ║ GroupElem (_anon_having_6629185c7cd15cf4a4365bd43360995797ae0012345) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) │ ║ GroupElem (connections) │ ║ Count (Distinct) │ ║ Var (name=v) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_55941dc47ffa2320a4fe3b8925c639cc1ee9c01234) + │ ╚══ ExtensionElem (_anon_having_6629185c7cd15cf4a4365bd43360995797ae0012345) │ Count (Distinct) │ Var (name=v) (bindingState=unbound) └── ExtensionElem (connections) @@ -2180,9 +2246,45 @@ Projection Var (name=v) (bindingState=unbound) SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { - VALUES ?v { } + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } ?u ?v . - VALUES ?u { } FILTER (?u != ?v) OPTIONAL { ?u ?optName . @@ -2192,11 +2294,11 @@ SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 5) -2.374 ms/op +1.793 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 2.374 ms/op + 1.793 ms/op # JMH version: 1.37 @@ -2212,7 +2314,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 7) -# Run progress: 20.45% complete, ETA 00:21:50 +# Run progress: 20.45% complete, ETA 00:18:06 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2244,18 +2346,18 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00002000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -14.313 ms/op +15.790 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=22.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="user12") @@ -2266,38 +2368,30 @@ Projection │ ║ │ ValueConstant (value="user17") │ ║ └── LeftJoin │ ║ ╠══ Difference [left] - │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) - │ ║ ║ │ ╠══ Exists - │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) - │ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) - │ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] - │ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ │ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [right] - │ ║ ║ │ │ ├── Compare (!=) - │ ║ ║ │ │ │ Var (name=u) (bindingState=bound) - │ ║ ║ │ │ │ Var (name=v) (bindingState=bound) - │ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists - │ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) - │ ║ ║ │ │ Var (name=v) - │ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ Var (name=u) - │ ║ ║ │ │ , Compare (!=) - │ ║ ║ │ │ Var (name=u) - │ ║ ║ │ │ Var (name=v) - │ ║ ║ │ │ ) - │ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) - │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ o: Var (name=v) (bindingState=bound) - │ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannedBoundVars=[u]) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) │ ║ ║ └── Extension │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) - │ ║ ║ ╚══ ExtensionElem (_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) + │ ║ ║ ╚══ ExtensionElem (_anon_path_49556b046011acf54c1db6bb5d1b27226bc40123) │ ║ ║ Var (name=v) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=v) (bindingState=bound) @@ -2311,16 +2405,49 @@ Projection Var (name=u) (bindingState=unbound) SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { - VALUES ?v { } + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) ?u ?v . - FILTER (?u != ?v) - VALUES ?u { } - FILTER EXISTS { - ?v ?u . - } MINUS { ?v ?v . - BIND(?v AS ?_anon_path_4006a36fb86e4e6a4871b0aa09c912cdb6f60123) + BIND(?v AS ?_anon_path_49556b046011acf54c1db6bb5d1b27226bc40123) } OPTIONAL { ?v ?optName . @@ -2328,11 +2455,11 @@ SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) } -10.024 ms/op +10.345 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 10.024 ms/op + 10.345 ms/op # JMH version: 1.37 @@ -2348,7 +2475,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 8) -# Run progress: 21.59% complete, ETA 00:21:19 +# Run progress: 21.59% complete, ETA 00:17:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2368,18 +2495,18 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1192.679 ms/op +1342.376 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=87.8K, plannedFilterPassRatio=0.82, filterSelectivitySource=learned_filter) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="user0") @@ -2387,9 +2514,9 @@ Projection │ ║ │ ValueConstant (value="user2") │ ║ └── LeftJoin │ ║ ╠══ Extension [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=183125.0M, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) @@ -2425,11 +2552,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optName IN ("user0", "user1", "user2")) } -874.961 ms/op +926.415 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 874.961 ms/op + 926.415 ms/op # JMH version: 1.37 @@ -2445,7 +2572,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 9) -# Run progress: 22.73% complete, ETA 00:20:53 +# Run progress: 22.73% complete, ETA 00:17:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2470,52 +2597,133 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -44.765 ms/op +55.150 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optAlias) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.88073828125E7 rawRows=1.509354E7 effectiveRows=1.505469E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1627088.6M, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553664197E11 rawRows=2.0610300744E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.3M, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553664197E11 rawRows=2.0610300744E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553664197E11 rawRows=2.0610300744E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] │ ║ ║ │ ├── Compare (!=) │ ║ ║ │ │ Var (name=d) (bindingState=bound) │ ║ ║ │ │ Var (name=a) (bindingState=bound) - │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=11.3M) │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] - │ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=189, resultSizeEstimate=143.4K, plannedFilterEvidenceCount=18.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) [left] │ ║ ║ │ ║ │ ╠══ Compare (!=) │ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) │ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ║ └── Filter (costEstimate=189, resultSizeEstimate=143.4K, plannedFilterEvidenceCount=272.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) [right] │ ║ ║ │ ║ ╠══ Compare (!=) │ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) │ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) - │ ║ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ╚══ Filter (costEstimate=189, resultSizeEstimate=143.4K, plannedFilterEvidenceCount=2.8M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) [right] │ ║ ║ │ ├── Compare (!=) │ ║ ║ │ │ Var (name=c) (bindingState=bound) │ ║ ║ │ │ Var (name=d) (bindingState=bound) - │ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) + │ ║ ║ │ └── StatementPattern (resultSizeEstimate=143.7K) │ ║ ║ │ s: Var (name=c) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) │ ║ ║ │ o: Var (name=d) (bindingState=unbound) @@ -2554,11 +2762,11 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?optAlias != "") } -31.329 ms/op +36.365 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 31.329 ms/op + 36.365 ms/op # JMH version: 1.37 @@ -2574,7 +2782,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = SOCIAL_MEDIA, z_queryIndex = 10) -# Run progress: 23.86% complete, ETA 00:20:25 +# Run progress: 23.86% complete, ETA 00:17:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2623,18 +2831,18 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -130.795 ms/op +313.985 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=optName) (bindingState=bound) @@ -2644,7 +2852,7 @@ Projection │ ║ │ ║ ValueConstant (value="user10") │ ║ │ ║ ValueConstant (value="user11") │ ║ │ ╚══ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=1.0K, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) @@ -2657,60 +2865,60 @@ Projection │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left] - │ ║ ║ │ ║ ├── Compare (!=) - │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) - │ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) - │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.0274039546875E10 rawRows=2.0663487504E10 effectiveRows=2.0550154124E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.58288770053476 rawRows=143748.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) - │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] - │ ║ ║ │ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] - │ ║ ║ │ │ ╠══ Compare (!=) - │ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) - │ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) - │ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) - │ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] - │ ║ ║ │ │ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] - │ ║ ║ │ │ │ ║ ├── Compare (!=) - │ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) - │ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) - │ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) - │ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] - │ ║ ║ │ │ │ ║ ║ ├── Filter [left] - │ ║ ║ │ │ │ ║ ║ │ ╠══ And - │ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) - │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) - │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) - │ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] - │ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) - │ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) - │ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) - │ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) - │ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] - │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ │ s: Var (name=d) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ │ o: Var (name=e) (bindingState=bound) - │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] - │ ║ ║ s: Var (name=e) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) - │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=114721.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553664197E11 rawRows=2.0663487504E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553664197E11 rawRows=2.0663487504E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146824E7 rawRows=1149984.0 effectiveRows=1146824.0 baseCostRows=1146824.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553664197E11 rawRows=2.0663487504E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553664197E11 rawRows=2.0663487504E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146824E7 rawRows=1149984.0 effectiveRows=1146824.0 baseCostRows=1146824.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553664197E11 rawRows=2.0663487504E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553664197E11 rawRows=2.0663487504E10 effectiveRows=2.0553664197E10 baseCostRows=2.0553664197E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146824E7 rawRows=1149984.0 effectiveRows=1146824.0 baseCostRows=1146824.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [right] + │ ║ ║ ╠══ And + │ ║ ║ ║ ├── And + │ ║ ║ ║ │ ╠══ And + │ ║ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ ║ │ ║ Var (name=e) (bindingState=bound) + │ ║ ║ ║ │ ╚══ Compare (!=) + │ ║ ║ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ ║ └── Compare (!=) + │ ║ ║ ║ Var (name=b) (bindingState=bound) + │ ║ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=20616.9M) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ ║ │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ ║ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] │ ║ s: Var (name=e) (bindingState=bound) │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) @@ -2753,26 +2961,24 @@ SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { FILTER (?a != ?b) ?a ?b . VALUES ?c { } - FILTER ((?a != ?c) && (?b != ?c)) ?b ?c . VALUES ?d { } - FILTER (?c != ?d) ?c ?d . VALUES ?e { } - FILTER (?d != ?e) ?d ?e . ?e ?a . + FILTER ((((?a != ?c) && (?d != ?e)) && (?c != ?d)) && (?b != ?c)) OPTIONAL { ?e ?optName . } FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) } -90.552 ms/op +211.482 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 90.552 ms/op + 211.482 ms/op # JMH version: 1.37 @@ -2788,7 +2994,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 0) -# Run progress: 25.00% complete, ETA 00:19:59 +# Run progress: 25.00% complete, ETA 00:17:08 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2810,11 +3016,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1015.073 ms/op +1022.893 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2822,7 +3028,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optBranch) (bindingState=bound) │ ║ │ ║ Var (name=book) (bindingState=bound) @@ -2832,12 +3038,12 @@ Projection │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.00) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[book]) [left] │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], sharedJoinVars=[copy]) [right] │ ║ │ ║ s: Var (name=copy) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) @@ -2867,11 +3073,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -708.021 ms/op +711.313 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 708.021 ms/op + 711.313 ms/op # JMH version: 1.37 @@ -2887,7 +3093,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 1) -# Run progress: 26.14% complete, ETA 00:19:35 +# Run progress: 26.14% complete, ETA 00:16:54 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -2907,11 +3113,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -236.397 ms/op +259.473 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -2920,7 +3126,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=691.0K, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -2928,18 +3134,18 @@ Projection │ ║ │ ║ │ ╚══ Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) │ ║ │ ║ │ ValueConstant (value="Member 3") - │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=230.4M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/library/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/library/Member), SP(?entity http://example.com/theme/library/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/library/Member), SP(?entity http://example.com/theme/library/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/library/name ?name)) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=230.4M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/library/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/library/Member), SP(?entity http://example.com/theme/library/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/library/Member), SP(?entity http://example.com/theme/library/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/library/name ?name)) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/library/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/library/Member), SP(?entity http://example.com/theme/library/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/library/Member), SP(?entity http://example.com/theme/library/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/library/name ?name)) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=17.5M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -2950,11 +3156,11 @@ Projection │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedAccessRows=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity]) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) @@ -2996,11 +3202,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -166.127 ms/op +174.116 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 166.127 ms/op + 174.116 ms/op # JMH version: 1.37 @@ -3016,7 +3222,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 2) -# Run progress: 27.27% complete, ETA 00:19:10 +# Run progress: 27.27% complete, ETA 00:16:38 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3035,11 +3241,11 @@ GROUP BY ?author HAVING(COUNT(?book) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -144.325 ms/op +31.791 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3047,38 +3253,38 @@ Projection ║ ProjectionElem "bookCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_4847357f353acef49b4b29328e6c6fcfa510123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_6712c46ab9529a5147419e9a927f50db3109012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] - │ ║ │ ║ s: Var (name=author) (bindingState=unbound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) - │ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], plannedLookupComponents=[S, P, O]) [right] - │ ║ │ ├── ListMemberOperator - │ ║ │ │ Var (name=authorName) (bindingState=bound) - │ ║ │ │ ValueConstant (value="Author 1") - │ ║ │ │ ValueConstant (value="Author 2") - │ ║ │ │ ValueConstant (value="Author 3") - │ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) - │ ║ │ s: Var (name=author) (bindingState=bound) - │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=40) [left] + │ ║ │ ╠══ Filter (resultSizeEstimate=3.00, plannedFilterEvidenceCount=24.6M, plannedAccessRows=45.8K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Author 1") + │ ║ │ ║ │ ValueConstant (value="Author 2") + │ ║ │ ║ │ ValueConstant (value="Author 3") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[author, authorName], sharedJoinVars=[author]) [right] + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] │ ║ s: Var (name=book) (bindingState=unbound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) │ ║ o: Var (name=author) (bindingState=bound) - │ ║ GroupElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) + │ ║ GroupElem (_anon_having_6712c46ab9529a5147419e9a927f50db3109012345) │ ║ Count │ ║ Var (name=book) (bindingState=bound) │ ║ GroupElem (bookCount) │ ║ Count (Distinct) │ ║ Var (name=book) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_4847357f353acef49b4b29328e6c6fcfa510123) + │ ╚══ ExtensionElem (_anon_having_6712c46ab9529a5147419e9a927f50db3109012345) │ Count │ Var (name=book) (bindingState=unbound) └── ExtensionElem (bookCount) @@ -3086,9 +3292,9 @@ Projection Var (name=book) (bindingState=unbound) SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { - ?author a . ?author ?authorName . FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . OPTIONAL { ?book ?author . } @@ -3096,11 +3302,11 @@ SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { GROUP BY ?author HAVING (COUNT(?book) > 0) -100.388 ms/op +21.954 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 100.388 ms/op + 21.954 ms/op # JMH version: 1.37 @@ -3116,7 +3322,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 3) -# Run progress: 28.41% complete, ETA 00:18:46 +# Run progress: 28.41% complete, ETA 00:16:22 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3137,11 +3343,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -74.725 ms/op +70.633 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3149,17 +3355,17 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optDue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="2024-01-10"^^) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) │ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S, O], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] │ ║ │ │ s: Var (name=loan) (bindingState=bound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) @@ -3170,7 +3376,7 @@ Projection │ ║ │ ║ o: Var (name=due) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optDue) │ ║ │ Var (name=due) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=11.2M, plannedFilterPassRatio=0.02, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) │ ║ ║ │ Str @@ -3201,11 +3407,11 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } } -46.993 ms/op +47.038 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 46.993 ms/op + 47.038 ms/op # JMH version: 1.37 @@ -3221,7 +3427,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 4) -# Run progress: 29.55% complete, ETA 00:18:22 +# Run progress: 29.55% complete, ETA 00:16:06 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3239,18 +3445,18 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -516.836 ms/op +99.474 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Exists │ ║ │ StatementPattern (resultSizeEstimate=386.3K) │ ║ │ s: Var (name=book) (bindingState=bound) @@ -3258,22 +3464,22 @@ Projection │ ║ │ o: Var (name=copy) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] - │ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] - │ ║ ║ │ s: Var (name=book) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], plannedLookupComponents=[S, P, O]) [right] - │ ║ ║ ╠══ Or - │ ║ ║ ║ ├── Compare (=) - │ ║ ║ ║ │ Var (name=title) (bindingState=bound) - │ ║ ║ ║ │ ValueConstant (value="Book 1") - │ ║ ║ ║ └── Compare (=) - │ ║ ║ ║ Var (name=title) (bindingState=bound) - │ ║ ║ ║ ValueConstant (value="Book 2") - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) - │ ║ ║ s: Var (name=book) (bindingState=bound) - │ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) - │ ║ ║ o: Var (name=title) (bindingState=unbound) + │ ║ ║ ├── Filter (resultSizeEstimate=130.6K, plannedFilterEvidenceCount=22.2M, plannedAccessRows=130.6K, plannedFilterPassRatio=0, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Book 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=title) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Book 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=128.9K) + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ │ o: Var (name=title) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=133.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[book, title], sharedJoinVars=[book]) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] │ ║ s: Var (name=book) (bindingState=bound) │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) @@ -3286,9 +3492,9 @@ Projection Var (name=book) (bindingState=unbound) SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { - ?book a . ?book ?title . FILTER ((?title = "Book 1") || (?title = "Book 2")) + ?book a . OPTIONAL { ?book ?author . } @@ -3297,11 +3503,11 @@ SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { } } -354.255 ms/op +70.316 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 354.255 ms/op + 70.316 ms/op # JMH version: 1.37 @@ -3317,7 +3523,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 5) -# Run progress: 30.68% complete, ETA 00:18:00 +# Run progress: 30.68% complete, ETA 00:15:50 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3335,21 +3541,21 @@ SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007c011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00006000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -43.533 ms/op +14.088 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=271.2K, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=due) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) @@ -3357,32 +3563,22 @@ Projection │ ║ │ s: Var (name=loan) (bindingState=bound) │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ o: Var (name=due) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] - │ ║ ║ Exists - │ ║ ║ Filter - │ ║ ║ Compare (<) - │ ║ ║ Var (name=due) - │ ║ ║ Var (name=threshold) - │ ║ ║ StatementPattern (resultSizeEstimate=10.2K) - │ ║ ║ Var (name=loan) - │ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) - │ ║ ║ Var (name=due) - │ ║ ║ ) - │ ║ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=219, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=219) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=217, plannedFilterEvidenceCount=12.6M, plannedAccessRows=10.1K, plannedFilterPassRatio=0.02, plannedIndexPrefixLength=1.00, plannedWorkRows=10.1K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[_const_f4588bfc_uri, loan, loanDate]) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ╚══ Filter (resultSizeEstimate=511, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], plannedLookupComponents=[S, P, O]) [right] - │ ║ ├── ListMemberOperator - │ ║ │ Var (name=loanDate) (bindingState=bound) - │ ║ │ ValueConstant (value="2024-01-01"^^) - │ ║ │ ValueConstant (value="2024-01-02"^^) - │ ║ └── StatementPattern (resultSizeEstimate=10.2K) - │ ║ s: Var (name=loan) (bindingState=bound) - │ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) - │ ║ o: Var (name=loanDate) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_6cf0e34e_uri, _const_f4588bfc_uri, _const_f5e5585a_uri, loan, loanDate]) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=loan) (bindingState=bound) @@ -3391,21 +3587,21 @@ Projection Var (name=loan) (bindingState=unbound) SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { - VALUES ?threshold { "2024-01-01"^^ } - ?loan a . ?loan ?loanDate . FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } FILTER NOT EXISTS { ?loan ?due . FILTER (?due < ?threshold) } } -30.031 ms/op +9.295 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 30.031 ms/op + 9.295 ms/op # JMH version: 1.37 @@ -3421,7 +3617,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 6) -# Run progress: 31.82% complete, ETA 00:17:37 +# Run progress: 31.82% complete, ETA 00:15:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3445,11 +3641,11 @@ GROUP BY ?member HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000007011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -34773.242 ms/op +34610.117 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3457,23 +3653,23 @@ Projection ║ ProjectionElem "loanCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5120ff2d3a704a4e038c768e50fecd340301234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (member) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optCopy) (bindingState=bound) │ ║ │ Var (name=member) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S, O], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] │ ║ ║ │ s: Var (name=loan) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) @@ -3488,13 +3684,13 @@ Projection │ ║ │ o: Var (name=copy) (bindingState=unbound) │ ║ └── ExtensionElem (optCopy) │ ║ Var (name=copy) (bindingState=bound) - │ ║ GroupElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) + │ ║ GroupElem (_anon_having_5120ff2d3a704a4e038c768e50fecd340301234) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_51a3dded1f81c04c6ca4798e8f64e39b4d01234) + │ ╚══ ExtensionElem (_anon_having_5120ff2d3a704a4e038c768e50fecd340301234) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -3519,11 +3715,11 @@ SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?member HAVING (COUNT(?loan) > 0) -31110.554 ms/op +32630.144 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 31110.554 ms/op + 32630.144 ms/op # JMH version: 1.37 @@ -3539,7 +3735,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 7) -# Run progress: 32.95% complete, ETA 00:18:59 +# Run progress: 32.95% complete, ETA 00:17:05 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3558,11 +3754,11 @@ SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000600011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2262.774 ms/op +56425.379 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3570,40 +3766,40 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) - │ ║ │ ╠══ Exists - │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) - │ ║ │ ║ s: Var (name=copy) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] - │ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) - │ ║ │ │ ║ Var (name=copy) - │ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) - │ ║ │ │ ║ ) - │ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) - │ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] - │ ║ │ │ s: Var (name=copy) (bindingState=bound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) - │ ║ │ └── Filter (resultSizeEstimate=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="Branch 0") - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=branchName) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="Branch 1") - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) - │ ║ │ s: Var (name=branch) (bindingState=bound) - │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ │ o: Var (name=branchName) (bindingState=unbound) - │ ║ └── Filter (new scope) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=90.6K, plannedAccessRows=45.8K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ │ ╠══ Or + │ ║ │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ │ ║ └── Compare (=) + │ ║ │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=1.0M, plannedFilterPassRatio=0.43, filterSelectivitySource=learned_pattern, deferredFilterScope=smallestWindow) [right] + │ ║ │ ║ ╠══ Exists + │ ║ │ ║ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[branch, branchName], unlockedFilters=Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ Var (name=copy) + │ ║ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ source=unknown, sharedJoinVars=[branch]) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[branch, branchName, copy], sharedJoinVars=[copy]) [right] + │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=772.6K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── Str │ ║ ║ │ Var (name=branch) (bindingState=bound) @@ -3620,24 +3816,24 @@ Projection Var (name=copy) (bindingState=unbound) SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { - ?copy ?branch . - ?copy a . ?branch ?branchName . FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . FILTER EXISTS { ?copy a . } + ?copy a . MINUS { ?copy ?branch . FILTER (CONTAINS(STR(?branch), "branch/0")) } } -1570.434 ms/op +69435.838 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1570.434 ms/op + 69435.838 ms/op # JMH version: 1.37 @@ -3653,7 +3849,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 8) -# Run progress: 34.09% complete, ETA 00:18:37 +# Run progress: 34.09% complete, ETA 00:20:18 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3674,11 +3870,11 @@ GROUP BY ?author HAVING(COUNT(?loan) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -154.097 ms/op +123.734 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3686,63 +3882,63 @@ Projection ║ ProjectionElem "loanCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_87218845c6cb97674cbe8f4a984e3a5de9f301234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (author) - │ ║ Filter + │ ║ Filter (plannedFilterEvidenceCount=2.8M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="Member 1") │ ║ │ ValueConstant (value="Member 2") │ ║ │ ValueConstant (value="Member 3") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=272.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=139.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=133.4K) [left] │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] - │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] - │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] - │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) - │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] - │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) - │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] - │ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) - │ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=10.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[copy, loan, member], sharedJoinVars=[copy]) [right] + │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=133.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[book, copy, loan, member], sharedJoinVars=[book]) [right] │ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] - │ ║ ║ │ s: Var (name=book) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) - │ ║ ║ │ o: Var (name=author) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, P, O]) [right] - │ ║ ║ s: Var (name=loan) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[book, copy, loan, member], sharedJoinVars=[copy]) [right] + │ ║ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=272.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[book, branch, copy, loan, member], sharedJoinVars=[book]) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] │ ║ s: Var (name=member) (bindingState=bound) │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) + │ ║ GroupElem (_anon_having_87218845c6cb97674cbe8f4a984e3a5de9f301234567) │ ║ Count │ ║ Var (name=loan) (bindingState=bound) │ ║ GroupElem (loanCount) │ ║ Count (Distinct) │ ║ Var (name=loan) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_7101d1de4b1a4cd748019c4932f05ee842250123456) + │ ╚══ ExtensionElem (_anon_having_87218845c6cb97674cbe8f4a984e3a5de9f301234567) │ Count │ Var (name=loan) (bindingState=unbound) └── ExtensionElem (loanCount) @@ -3751,12 +3947,12 @@ Projection SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { ?loan ?member . + ?loan a . ?loan ?copy . ?book ?copy . - ?copy ?branch . ?book a . + ?copy ?branch . ?book ?author . - ?loan a . OPTIONAL { ?member ?optName . } @@ -3765,11 +3961,11 @@ SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { GROUP BY ?author HAVING (COUNT(?loan) > 0) -106.931 ms/op +84.564 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 106.931 ms/op + 84.564 ms/op # JMH version: 1.37 @@ -3785,7 +3981,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 9) -# Run progress: 35.23% complete, ETA 00:18:11 +# Run progress: 35.23% complete, ETA 00:19:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3809,25 +4005,25 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -109.110 ms/op +101.576 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optTitle) (bindingState=bound) │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=346, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ │ ├── Compare (<) │ ║ │ │ Var (name=due) (bindingState=bound) │ ║ │ │ ValueConstant (value="2024-01-10"^^) @@ -3836,57 +4032,50 @@ Projection │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) │ ║ │ o: Var (name=due) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] - │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] - │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] - │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] - │ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] - │ ║ ║ │ ║ │ ║ │ ║ ╠══ Or - │ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) - │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) - │ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) - │ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) - │ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) - │ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") - │ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or - │ ║ ║ │ ║ │ ║ │ ║ Compare (=) - │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) - │ ║ ║ │ ║ │ ║ │ ║ Var (name=target) - │ ║ ║ │ ║ │ ║ │ ║ Compare (=) - │ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) - │ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") - │ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) - │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) - │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] - │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) - │ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) - │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] - │ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) - │ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) - │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] - │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) - │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[O, S, P]) [right] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.1K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=388.1K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=259) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── Filter (plannedFilterEvidenceCount=7.8M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ ║ │ ║ │ ║ │ ║ │ ╠══ Or + │ ║ ║ │ ║ │ ║ │ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ │ Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K, plannedAccessRows=45.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ ║ │ ║ │ ║ │ s: Var (name=author) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=257.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=257.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_6d0024c9_uri, author, authorName]) [right] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=author) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6d0024c9_uri, _const_e1624c50_uri, author, authorName, book]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_469a1e31_uri, _const_6d0024c9_uri, _const_e1624c50_uri, author, authorName, book, copy]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[_const_469a1e31_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_e1624c50_uri, author, authorName, book, copy, loan]) [right] + │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_e1624c50_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan]) [right] │ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] - │ ║ ║ │ s: Var (name=loan) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) - │ ║ ║ │ o: Var (name=member) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[O, S, P]) [right] - │ ║ ║ s: Var (name=member) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=5.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_b9a39489_uri, _const_e1624c50_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan, member]) [right] + │ ║ ║ │ s: Var (name=member) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ └── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_b9a39489_uri, _const_e1624c50_uri, _const_f5728978_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan, member]) [right] │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] │ ║ s: Var (name=book) (bindingState=bound) │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) @@ -3899,7 +4088,6 @@ Projection Var (name=member) (bindingState=unbound) SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { - VALUES ?target { "Author 1" "Author 2" } ?author ?authorName . FILTER ((?authorName = ?target) || (?authorName = "Author 3")) ?book ?author . @@ -3908,17 +4096,18 @@ SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { ?loan a . ?loan ?member . ?member a . + VALUES ?target { "Author 1" "Author 2" } OPTIONAL { ?book ?optTitle . } FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) } -74.143 ms/op +67.977 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 74.143 ms/op + 67.977 ms/op # JMH version: 1.37 @@ -3934,7 +4123,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = LIBRARY, z_queryIndex = 10) -# Run progress: 36.36% complete, ETA 00:17:45 +# Run progress: 36.36% complete, ETA 00:19:16 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -3955,11 +4144,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00004000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -289.298 ms/op +327.647 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -3967,7 +4156,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optCopy) (bindingState=bound) │ ║ │ ║ Var (name=branch) (bindingState=bound) @@ -3978,11 +4167,11 @@ Projection │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) - │ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedAccessRows=5.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) - │ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[P, S]) [right] + │ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[branch], sharedJoinVars=[branch]) [right] │ ║ │ │ s: Var (name=branch) (bindingState=bound) │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) @@ -3993,7 +4182,7 @@ Projection │ ║ │ ║ o: Var (name=branch) (bindingState=bound) │ ║ │ ╚══ ExtensionElem (optCopy) │ ║ │ Var (name=copy) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.4M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) │ ║ ║ │ Str @@ -4030,11 +4219,11 @@ SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { } } -205.765 ms/op +224.843 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 205.765 ms/op + 224.843 ms/op # JMH version: 1.37 @@ -4050,7 +4239,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 0) -# Run progress: 37.50% complete, ETA 00:17:20 +# Run progress: 37.50% complete, ETA 00:18:47 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4067,11 +4256,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000380011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -243.518 ms/op +335.927 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4079,7 +4268,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) │ ║ │ ║ Var (name=component) (bindingState=bound) @@ -4118,11 +4307,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -231.134 ms/op +238.582 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 231.134 ms/op + 238.582 ms/op # JMH version: 1.37 @@ -4138,7 +4327,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 1) -# Run progress: 38.64% complete, ETA 00:16:56 +# Run progress: 38.64% complete, ETA 00:18:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4157,11 +4346,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003ff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -239.181 ms/op +223.838 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4170,7 +4359,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=20.5M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -4178,18 +4367,18 @@ Projection │ ║ │ ║ │ ╚══ Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) │ ║ │ ║ │ ValueConstant (value="REQ-1002") - │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=69.7M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/engineering/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?entity http://example.com/theme/engineering/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?entity http://example.com/theme/engineering/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/engineering/name ?name)) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=69.7M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/engineering/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?entity http://example.com/theme/engineering/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?entity http://example.com/theme/engineering/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/engineering/name ?name)) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/engineering/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?entity http://example.com/theme/engineering/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?entity http://example.com/theme/engineering/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/engineering/name ?name)) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=20.5M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -4197,17 +4386,17 @@ Projection │ ║ │ │ ╚══ Compare (=) │ ║ │ │ Var (name=name) (bindingState=bound) │ ║ │ │ ValueConstant (value="REQ-1002") - │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=17793.0M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/engineering/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Component), SP(?entity http://example.com/theme/engineering/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Component), SP(?entity http://example.com/theme/engineering/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/engineering/name ?name)) │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=17793.0M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/engineering/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Component), SP(?entity http://example.com/theme/engineering/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Component), SP(?entity http://example.com/theme/engineering/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/engineering/name ?name)) [right] + │ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/engineering/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Component), SP(?entity http://example.com/theme/engineering/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Component), SP(?entity http://example.com/theme/engineering/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/engineering/name ?name)) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ │ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) @@ -4235,8 +4424,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "REQ-1000" "REQ-1001" } { { - ?entity ?name . ?entity a . + ?entity ?name . } } FILTER ((?name = ?target) || (?name = "REQ-1002")) @@ -4246,11 +4435,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -170.079 ms/op +160.207 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 170.079 ms/op + 160.207 ms/op # JMH version: 1.37 @@ -4266,7 +4455,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 2) -# Run progress: 39.77% complete, ETA 00:16:32 +# Run progress: 39.77% complete, ETA 00:17:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4284,11 +4473,11 @@ GROUP BY ?assembly HAVING(COUNT(?component) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -5.507 ms/op +6.066 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4296,29 +4485,29 @@ Projection ║ ProjectionElem "componentCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_02721af97b5d5797d4075b575bde9a4da065b, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_006111324fb63ce074be4ba909fe948fe0094, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (assembly) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.00) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedAccessRows=15.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) - │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=2.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] │ ║ │ ├── ListMemberOperator │ ║ │ │ Var (name=assemblyName) (bindingState=bound) │ ║ │ │ ValueConstant (value="Assembly 1") │ ║ │ │ ValueConstant (value="Assembly 2") │ ║ │ │ ValueConstant (value="Assembly 3") - │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=ListMemberOperator + │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[assembly], unlockedFilters=ListMemberOperator │ ║ │ Var (name=assemblyName) │ ║ │ ValueConstant (value="Assembly 1") │ ║ │ ValueConstant (value="Assembly 2") │ ║ │ ValueConstant (value="Assembly 3") - │ ║ │ ) + │ ║ │ passRatio=0.003257328990228013 source=learned_filter evidence=2669979, sharedJoinVars=[assembly]) │ ║ │ s: Var (name=assembly) (bindingState=bound) │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) @@ -4326,13 +4515,13 @@ Projection │ ║ s: Var (name=component) (bindingState=unbound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ o: Var (name=assembly) (bindingState=bound) - │ ║ GroupElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) + │ ║ GroupElem (_anon_having_006111324fb63ce074be4ba909fe948fe0094) │ ║ Count │ ║ Var (name=component) (bindingState=bound) │ ║ GroupElem (componentCount) │ ║ Count (Distinct) │ ║ Var (name=component) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_02721af97b5d5797d4075b575bde9a4da065b) + │ ╚══ ExtensionElem (_anon_having_006111324fb63ce074be4ba909fe948fe0094) │ Count │ Var (name=component) (bindingState=unbound) └── ExtensionElem (componentCount) @@ -4350,11 +4539,11 @@ SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { GROUP BY ?assembly HAVING (COUNT(?component) > 0) -3.677 ms/op +4.010 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.677 ms/op + 4.010 ms/op # JMH version: 1.37 @@ -4370,7 +4559,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 3) -# Run progress: 40.91% complete, ETA 00:16:09 +# Run progress: 40.91% complete, ETA 00:17:24 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4387,11 +4576,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007e011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -189.436 ms/op +204.396 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4399,17 +4588,17 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optTest) (bindingState=bound) │ ║ │ ║ Var (name=requirement) (bindingState=bound) │ ║ │ ╚══ LeftJoin │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[component, requirement], sharedJoinVars=[requirement]) [right] │ ║ │ │ s: Var (name=requirement) (bindingState=bound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) @@ -4420,7 +4609,7 @@ Projection │ ║ │ ║ o: Var (name=test) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optTest) │ ║ │ Var (name=test) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=11.5M, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── Str │ ║ ║ │ Var (name=name) (bindingState=bound) @@ -4450,11 +4639,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -129.795 ms/op +138.155 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 129.795 ms/op + 138.155 ms/op # JMH version: 1.37 @@ -4470,7 +4659,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 4) -# Run progress: 42.05% complete, ETA 00:15:46 +# Run progress: 42.05% complete, ETA 00:16:58 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4487,41 +4676,41 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -518.212 ms/op +83.464 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Exists │ ║ │ StatementPattern (resultSizeEstimate=132.7K) │ ║ │ s: Var (name=component) (bindingState=bound) │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] - │ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] - │ ║ ║ │ s: Var (name=component) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], plannedLookupComponents=[O, P, S]) [right] - │ ║ ║ ╠══ Or - │ ║ ║ ║ ├── Compare (=) - │ ║ ║ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ ║ │ ValueConstant (value="Component 1") - │ ║ ║ ║ └── Compare (=) - │ ║ ║ ║ Var (name=name) (bindingState=bound) - │ ║ ║ ║ ValueConstant (value="Component 2") - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) - │ ║ ║ s: Var (name=component) (bindingState=bound) - │ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) - │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=27.4M, plannedAccessRows=134.2K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, name], sharedJoinVars=[component]) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] │ ║ s: Var (name=component) (bindingState=bound) │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) @@ -4534,9 +4723,9 @@ Projection Var (name=component) (bindingState=unbound) SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { - ?component a . ?component ?name . FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . OPTIONAL { ?component ?assembly . } @@ -4545,11 +4734,11 @@ SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { } } -355.238 ms/op +59.229 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 355.238 ms/op + 59.229 ms/op # JMH version: 1.37 @@ -4565,7 +4754,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 5) -# Run progress: 43.18% complete, ETA 00:15:24 +# Run progress: 43.18% complete, ETA 00:16:32 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4582,21 +4771,21 @@ SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.504 ms/op +9.674 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=2.8M, plannedFilterPassRatio=0, filterSelectivitySource=learned_pattern) │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=value2) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) @@ -4604,32 +4793,70 @@ Projection │ ║ │ s: Var (name=measurement) (bindingState=bound) │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) │ ║ │ o: Var (name=value2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] - │ ║ ║ Exists - │ ║ ║ Filter - │ ║ ║ Compare (<) - │ ║ ║ Var (name=value2) - │ ║ ║ Var (name=threshold) - │ ║ ║ StatementPattern (resultSizeEstimate=1.6K) - │ ║ ║ Var (name=measurement) - │ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) - │ ║ ║ Var (name=value2) - │ ║ ║ ) - │ ║ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=0, optimizer.candidateCount=4, optimizer.score=0.59, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ Var (name=value) + │ ║ ValueConstant (value="0.9"^^) + │ ║ ValueConstant (value="0.95"^^) + │ ║ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?measurement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ Var (name=value) + │ ║ ValueConstant (value="0.9"^^) + │ ║ ValueConstant (value="0.95"^^) + │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?measurement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ Var (name=value) + │ ║ ValueConstant (value="0.9"^^) + │ ║ ValueConstant (value="0.95"^^) + │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ Var (name=value) + │ ║ ValueConstant (value="0.9"^^) + │ ║ ValueConstant (value="0.95"^^) + │ ║ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?measurement type Measurement) score=4833.529411764706 rawRows=0.0 effectiveRows=0.0 baseCostRows=8217.0 factorWorkRows=8217.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="0.85"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?measurement type Measurement) right=BindingSetAssignment ([[threshold="0.85"^^]]) score=82180.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=8218.0 factorWorkRows=8218.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?measurement type Measurement) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?measurement type Measurement), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?measurement type Measurement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="0.85"^^]]), SP(?measurement type Measurement)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=0, optimizer.candidateCount=4, optimizer.score=0.59, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?measurement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?measurement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?measurement type Measurement) score=4833.529411764706 rawRows=0.0 effectiveRows=0.0 baseCostRows=8217.0 factorWorkRows=8217.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="0.85"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?measurement type Measurement) right=BindingSetAssignment ([[threshold="0.85"^^]]) score=82180.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=8218.0 factorWorkRows=8218.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?measurement type Measurement) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?measurement type Measurement), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?measurement type Measurement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="0.85"^^]]), SP(?measurement type Measurement)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Filter (costEstimate=2.50, resultSizeEstimate=0, plannedFilterEvidenceCount=2.8M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, optimizer.candidateCount=4, optimizer.score=0.59, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?measurement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?measurement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?measurement type Measurement) score=4833.529411764706 rawRows=0.0 effectiveRows=0.0 baseCostRows=8217.0 factorWorkRows=8217.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="0.85"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?measurement type Measurement) right=BindingSetAssignment ([[threshold="0.85"^^]]) score=82180.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=8218.0 factorWorkRows=8218.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?measurement type Measurement) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?measurement type Measurement), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?measurement type Measurement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="0.85"^^]]), SP(?measurement type Measurement)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=1.6K) [right] + │ ║ ║ s: Var (name=measurement) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) - │ ║ ╚══ Filter (resultSizeEstimate=78, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], plannedLookupComponents=[P, S, O]) [right] - │ ║ ├── ListMemberOperator - │ ║ │ Var (name=value) (bindingState=bound) - │ ║ │ ValueConstant (value="0.9"^^) - │ ║ │ ValueConstant (value="0.95"^^) - │ ║ └── StatementPattern (resultSizeEstimate=1.6K) - │ ║ s: Var (name=measurement) (bindingState=bound) - │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) - │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=measurement) (bindingState=bound) @@ -4638,21 +4865,21 @@ Projection Var (name=measurement) (bindingState=unbound) SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { - VALUES ?threshold { 0.85 } - ?measurement a . ?measurement ?value . FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } FILTER NOT EXISTS { ?measurement ?value2 . FILTER (?value2 < ?threshold) } } -5.600 ms/op +6.497 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.600 ms/op + 6.497 ms/op # JMH version: 1.37 @@ -4668,7 +4895,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 6) -# Run progress: 44.32% complete, ETA 00:15:01 +# Run progress: 44.32% complete, ETA 00:16:06 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4688,11 +4915,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -376.636 ms/op +379.572 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4700,23 +4927,23 @@ Projection ║ ProjectionElem "reqCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_04259cd98bc258247f394df3e68c01eeed0, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (component) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optDep) (bindingState=bound) │ ║ │ Var (name=component) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[requirement]) [right] │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) @@ -4731,13 +4958,13 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) + │ ║ GroupElem (_anon_having_04259cd98bc258247f394df3e68c01eeed0) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5424a0eaf9702cf4ae5b2711253c913013901234) + │ ╚══ ExtensionElem (_anon_having_04259cd98bc258247f394df3e68c01eeed0) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -4762,11 +4989,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) > 0) -245.566 ms/op +253.708 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 245.566 ms/op + 253.708 ms/op # JMH version: 1.37 @@ -4782,7 +5009,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 7) -# Run progress: 45.45% complete, ETA 00:14:40 +# Run progress: 45.45% complete, ETA 00:15:42 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4799,11 +5026,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003000011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -9.451 ms/op +9.971 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4811,23 +5038,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=520) │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ ║ o: Var (name=component) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) - │ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.00) + │ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedAccessRows=6.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] │ ║ │ │ StatementPattern (resultSizeEstimate=520) │ ║ │ │ Var (name=requirement) │ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ │ Var (name=component) - │ ║ │ │ ) + │ ║ │ │ source=unknown) │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) - │ ║ │ └── Filter (resultSizeEstimate=27, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ └── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=911.0K, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[S, O, P], plannedMissingLookupComponents=[O], plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, sharedJoinVars=[requirement]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) @@ -4840,11 +5067,11 @@ Projection │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) - │ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ ║ o: Var (name=test) (bindingState=unbound) - │ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[P, S]) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[requirement, test], sharedJoinVars=[test]) [right] │ ║ s: Var (name=test) (bindingState=bound) │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ o: Var (name=measurement) (bindingState=unbound) @@ -4868,11 +5095,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } } -6.627 ms/op +6.701 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.627 ms/op + 6.701 ms/op # JMH version: 1.37 @@ -4888,7 +5115,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 8) -# Run progress: 46.59% complete, ETA 00:14:18 +# Run progress: 46.59% complete, ETA 00:15:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -4907,11 +5134,11 @@ GROUP BY ?component HAVING(COUNT(?requirement) >= 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -6.476 ms/op +7.384 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -4919,12 +5146,12 @@ Projection ║ ProjectionElem "reqCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_81441b7785ae069f14d3ba4a555d0e43dc05001234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (component) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optDep) (bindingState=bound) │ ║ │ Var (name=component) (bindingState=bound) @@ -4932,19 +5159,19 @@ Projection │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] - │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[component]) [right] │ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[component, requirement], sharedJoinVars=[component]) [right] │ ║ ║ │ s: Var (name=component) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) │ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[assembly, component, requirement], sharedJoinVars=[requirement]) [right] │ ║ ║ s: Var (name=requirement) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) @@ -4955,13 +5182,13 @@ Projection │ ║ │ o: Var (name=dep) (bindingState=unbound) │ ║ └── ExtensionElem (optDep) │ ║ Var (name=dep) (bindingState=bound) - │ ║ GroupElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) + │ ║ GroupElem (_anon_having_81441b7785ae069f14d3ba4a555d0e43dc05001234567) │ ║ Count │ ║ Var (name=requirement) (bindingState=bound) │ ║ GroupElem (reqCount) │ ║ Count (Distinct) │ ║ Var (name=requirement) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_2216115c939c71f394e5cb9fc4c8e3d59a91501) + │ ╚══ ExtensionElem (_anon_having_81441b7785ae069f14d3ba4a555d0e43dc05001234567) │ Count │ Var (name=requirement) (bindingState=unbound) └── ExtensionElem (reqCount) @@ -4982,11 +5209,11 @@ SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { GROUP BY ?component HAVING (COUNT(?requirement) >= 1) -4.391 ms/op +4.787 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.391 ms/op + 4.787 ms/op # JMH version: 1.37 @@ -5002,7 +5229,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 9) -# Run progress: 47.73% complete, ETA 00:13:57 +# Run progress: 47.73% complete, ETA 00:14:53 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5023,18 +5250,18 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -13.588 ms/op +18.752 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optName) (bindingState=bound) @@ -5045,11 +5272,86 @@ Projection │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) │ ║ │ o: Var (name=component) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=520, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=40, resultSizeEstimate=1.6K, plannedFilterEvidenceCount=1.4M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) │ ║ ║ │ ║ │ ║ ├── ListMemberOperator │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) @@ -5067,7 +5369,7 @@ Projection │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [right] │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) @@ -5096,11 +5398,11 @@ SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) } -9.062 ms/op +12.251 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 9.062 ms/op + 12.251 ms/op # JMH version: 1.37 @@ -5116,7 +5418,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ENGINEERING, z_queryIndex = 10) -# Run progress: 48.86% complete, ETA 00:13:35 +# Run progress: 48.86% complete, ETA 00:14:29 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5134,11 +5436,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -6.909 ms/op +7.685 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5146,17 +5448,17 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optComponent) (bindingState=bound) │ ║ │ ║ Var (name=assembly) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=2.00) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedAccessRows=15.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) - │ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ╚══ Filter (plannedFilterEvidenceCount=2.1M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] │ ║ │ │ ├── Or │ ║ │ │ │ ╠══ Compare (=) │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) @@ -5164,14 +5466,14 @@ Projection │ ║ │ │ │ ╚══ Compare (=) │ ║ │ │ │ Var (name=name) (bindingState=bound) │ ║ │ │ │ ValueConstant (value="Assembly 2") - │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[P, S], unlockedFilters=Or + │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[assembly], unlockedFilters=Or │ ║ │ │ Compare (=) │ ║ │ │ Var (name=name) │ ║ │ │ ValueConstant (value="Assembly 1") │ ║ │ │ Compare (=) │ ║ │ │ Var (name=name) │ ║ │ │ ValueConstant (value="Assembly 2") - │ ║ │ │ ) + │ ║ │ │ passRatio=0.002171552660152009 source=learned_filter evidence=2122905, sharedJoinVars=[assembly]) │ ║ │ │ s: Var (name=assembly) (bindingState=bound) │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) @@ -5207,11 +5509,11 @@ SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { } } -4.758 ms/op +5.004 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 4.758 ms/op + 5.004 ms/op # JMH version: 1.37 @@ -5227,7 +5529,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 0) -# Run progress: 50.00% complete, ETA 00:13:15 +# Run progress: 50.00% complete, ETA 00:14:06 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5244,11 +5546,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -419.733 ms/op +565.386 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5256,7 +5558,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) │ ║ │ ║ Var (name=node) (bindingState=bound) @@ -5295,11 +5597,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -403.742 ms/op +409.778 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 403.742 ms/op + 409.778 ms/op # JMH version: 1.37 @@ -5315,7 +5617,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 1) -# Run progress: 51.14% complete, ETA 00:12:54 +# Run progress: 51.14% complete, ETA 00:13:44 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5334,18 +5636,18 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1721.876 ms/op +1762.461 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=39.3M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) │ ║ ├── Or │ ║ │ ╠══ Compare (=) │ ║ │ ║ Var (name=w) (bindingState=bound) @@ -5357,12 +5659,12 @@ Projection │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] │ ║ ║ └── Union [right] - │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) - │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=99.5K) + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) @@ -5397,11 +5699,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { FILTER ((?w = ?target) || (?w = 3)) } -1226.737 ms/op +1236.510 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1226.737 ms/op + 1236.510 ms/op # JMH version: 1.37 @@ -5417,7 +5719,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 2) -# Run progress: 52.27% complete, ETA 00:12:35 +# Run progress: 52.27% complete, ETA 00:13:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5436,11 +5738,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000100011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003c0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1563.614 ms/op +1169.871 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5448,43 +5750,48 @@ Projection ║ ProjectionElem "neighborCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_098b812846aab7494faa0e8712b10be970, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=166.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] - │ ║ │ ║ s: Var (name=node) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) - │ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], plannedLookupComponents=[O, S, P]) [right] - │ ║ │ ├── ListMemberOperator - │ ║ │ │ Var (name=w) (bindingState=bound) - │ ║ │ │ ValueConstant (value="1"^^) - │ ║ │ │ ValueConstant (value="2"^^) - │ ║ │ │ ValueConstant (value="3"^^) - │ ║ │ └── StatementPattern (resultSizeEstimate=222.8K) - │ ║ │ s: Var (name=node) (bindingState=bound) - │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=5.1M, plannedFilterPassRatio=0.30, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=224.9K, plannedAccessRows=6.00, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], unlockedFilters=ListMemberOperator + │ ║ │ ║ Var (name=w) + │ ║ │ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ValueConstant (value="3"^^) + │ ║ │ ║ passRatio=0.3000824954995811 source=learned_filter evidence=5131189, sharedJoinVars=[node]) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node, w], sharedJoinVars=[node]) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] │ ║ s: Var (name=neighbor) (bindingState=bound) │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ o: Var (name=node) (bindingState=bound) - │ ║ GroupElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) + │ ║ GroupElem (_anon_having_098b812846aab7494faa0e8712b10be970) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_56e2de5cfee9f44e95a4391a7d6cd771bf01234) + │ ╚══ ExtensionElem (_anon_having_098b812846aab7494faa0e8712b10be970) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -5493,9 +5800,9 @@ Projection SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { ?node a . - ?node ?neighbor . ?node ?w . FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . OPTIONAL { ?neighbor ?node . } @@ -5503,11 +5810,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -1058.682 ms/op +701.138 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1058.682 ms/op + 701.138 ms/op # JMH version: 1.37 @@ -5523,7 +5830,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 3) -# Run progress: 53.41% complete, ETA 00:12:16 +# Run progress: 53.41% complete, ETA 00:13:01 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5540,11 +5847,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003800011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -131.387 ms/op +190.521 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5552,7 +5859,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optWeight) (bindingState=bound) │ ║ │ ║ ValueConstant (value="5"^^) @@ -5568,7 +5875,7 @@ Projection │ ║ │ ║ o: Var (name=w) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optWeight) │ ║ │ Var (name=w) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=24.5M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ ╠══ Compare (=) │ ║ ║ Var (name=neighbor) (bindingState=bound) │ ║ ║ Var (name=node) (bindingState=bound) @@ -5596,11 +5903,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -125.490 ms/op +130.838 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 125.490 ms/op + 130.838 ms/op # JMH version: 1.37 @@ -5616,7 +5923,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 4) -# Run progress: 54.55% complete, ETA 00:11:56 +# Run progress: 54.55% complete, ETA 00:12:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5633,30 +5940,30 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -442.220 ms/op +423.221 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Exists │ ║ │ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ o: Var (name=neighbor) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] - │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=45.0K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ └── Filter (resultSizeEstimate=45.0K, plannedFilterEvidenceCount=9.1M, plannedAccessRows=6.00, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=2.00, plannedWorkRows=45.0K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, S, O], plannedMissingLookupComponents=[O], plannedBoundVars=[node], filterSelectivitySource=learned_filter, sharedJoinVars=[node]) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=w) (bindingState=bound) @@ -5691,11 +5998,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -305.396 ms/op +301.471 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 305.396 ms/op + 301.471 ms/op # JMH version: 1.37 @@ -5711,7 +6018,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 5) -# Run progress: 55.68% complete, ETA 00:11:36 +# Run progress: 55.68% complete, ETA 00:12:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5728,21 +6035,21 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -378.359 ms/op +409.194 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=7.4M, plannedFilterPassRatio=0.35, filterSelectivitySource=learned_filter) │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=w2) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) @@ -5750,33 +6057,23 @@ Projection │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] - │ ║ ║ Exists - │ ║ ║ Filter - │ ║ ║ Compare (<) - │ ║ ║ Var (name=w2) - │ ║ ║ Var (name=threshold) - │ ║ ║ StatementPattern (resultSizeEstimate=222.8K) - │ ║ ║ Var (name=node) - │ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ ║ Var (name=w2) - │ ║ ║ ) - │ ║ ║ s: Var (name=node) (bindingState=unbound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] - │ ║ ├── ListMemberOperator - │ ║ │ Var (name=w) (bindingState=bound) - │ ║ │ ValueConstant (value="4"^^) - │ ║ │ ValueConstant (value="5"^^) - │ ║ │ ValueConstant (value="6"^^) - │ ║ └── StatementPattern (resultSizeEstimate=222.8K) - │ ║ s: Var (name=node) (bindingState=bound) - │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.4K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.4K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=67.4K, plannedFilterEvidenceCount=9.5M, plannedAccessRows=6.00, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=2.00, plannedWorkRows=67.4K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_b000c52_uri, _const_f5e5585a_uri, node], filterSelectivitySource=learned_filter) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, w]) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=node) (bindingState=bound) @@ -5785,21 +6082,21 @@ Projection Var (name=node) (bindingState=unbound) SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { - VALUES ?threshold { 4 } ?node a . ?node ?w . FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } FILTER NOT EXISTS { ?node ?w2 . FILTER (?w2 < ?threshold) } } -271.242 ms/op +280.729 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 271.242 ms/op + 280.729 ms/op # JMH version: 1.37 @@ -5815,7 +6112,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 6) -# Run progress: 56.82% complete, ETA 00:11:17 +# Run progress: 56.82% complete, ETA 00:11:56 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5835,11 +6132,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -2102.107 ms/op +2109.609 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5847,23 +6144,23 @@ Projection ║ ProjectionElem "neighborCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_058b31be46df25465c99c5913497ab9733, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0573b024a0173348bf8014383dc1cf848f, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (node) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optWeight) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=99.5K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[node], sharedJoinVars=[node]) [right] │ ║ ║ │ s: Var (name=node) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) @@ -5878,13 +6175,13 @@ Projection │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_058b31be46df25465c99c5913497ab9733) + │ ║ GroupElem (_anon_having_0573b024a0173348bf8014383dc1cf848f) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (neighborCount) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_058b31be46df25465c99c5913497ab9733) + │ ╚══ ExtensionElem (_anon_having_0573b024a0173348bf8014383dc1cf848f) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (neighborCount) @@ -5909,11 +6206,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 0) -1450.803 ms/op +1455.477 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1450.803 ms/op + 1455.477 ms/op # JMH version: 1.37 @@ -5929,7 +6226,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 7) -# Run progress: 57.95% complete, ETA 00:10:58 +# Run progress: 57.95% complete, ETA 00:11:36 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -5946,11 +6243,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00004000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -313.209 ms/op +335.793 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -5958,23 +6255,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ ║ s: Var (name=node) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) - │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=45.2K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) │ ║ │ │ Var (name=node) │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ │ Var (name=neighbor) - │ ║ │ │ ) + │ ║ │ │ source=unknown) │ ║ │ │ s: Var (name=node) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ └── Filter (resultSizeEstimate=45.2K, plannedFilterEvidenceCount=11.5M, plannedAccessRows=6.00, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=2.00, plannedWorkRows=45.2K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, S, O], plannedMissingLookupComponents=[O], plannedBoundVars=[node], filterSelectivitySource=learned_filter, sharedJoinVars=[node]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=w) (bindingState=bound) @@ -5986,7 +6283,7 @@ Projection │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ o: Var (name=w) (bindingState=unbound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=38.4M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ ╠══ Compare (=) │ ║ ║ Var (name=neighbor) (bindingState=bound) │ ║ ║ Var (name=node) (bindingState=bound) @@ -6014,11 +6311,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } } -223.728 ms/op +229.536 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 223.728 ms/op + 229.536 ms/op # JMH version: 1.37 @@ -6034,7 +6331,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 8) -# Run progress: 59.09% complete, ETA 00:10:39 +# Run progress: 59.09% complete, ETA 00:11:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6052,46 +6349,46 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1835.098 ms/op +1882.484 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterEvidenceCount=16.2K, plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optWeight) (bindingState=bound) │ ║ │ ValueConstant (value="7"^^) │ ║ │ ValueConstant (value="8"^^) │ ║ │ ValueConstant (value="9"^^) │ ║ └── LeftJoin - │ ║ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] │ ║ ║ ├── Exists │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) │ ║ ║ │ s: Var (name=end) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ │ o: Var (name=node) (bindingState=bound) - │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] - │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.9K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=99.5K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[node], sharedJoinVars=[node]) [right] │ ║ ║ ║ s: Var (name=node) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[mid, node], unlockedFilters=Exists [right] │ ║ ║ StatementPattern (resultSizeEstimate=267.3K) │ ║ ║ Var (name=end) │ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ Var (name=node) - │ ║ ║ ) + │ ║ ║ source=unknown, sharedJoinVars=[mid]) │ ║ ║ s: Var (name=mid) (bindingState=bound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=end) (bindingState=unbound) @@ -6119,11 +6416,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { FILTER (?optWeight IN (7, 8, 9)) } -1337.609 ms/op +1387.508 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1337.609 ms/op + 1387.508 ms/op # JMH version: 1.37 @@ -6139,7 +6436,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 9) -# Run progress: 60.23% complete, ETA 00:10:20 +# Run progress: 60.23% complete, ETA 00:10:55 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6159,11 +6456,11 @@ GROUP BY ?node HAVING(COUNT(?neighbor) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -1546.988 ms/op +2120.968 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6171,12 +6468,12 @@ Projection ║ ProjectionElem "degree" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_8443e8b506d40048ad8022cd3559f864e101234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_045a002b4a9b5e41258523fd1ebbe16155, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (node) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optWeight) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) @@ -6197,13 +6494,13 @@ Projection │ ║ │ o: Var (name=w) (bindingState=unbound) │ ║ └── ExtensionElem (optWeight) │ ║ Var (name=w) (bindingState=bound) - │ ║ GroupElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) + │ ║ GroupElem (_anon_having_045a002b4a9b5e41258523fd1ebbe16155) │ ║ Count │ ║ Var (name=neighbor) (bindingState=bound) │ ║ GroupElem (degree) │ ║ Count (Distinct) │ ║ Var (name=neighbor) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_8443e8b506d40048ad8022cd3559f864e101234567) + │ ╚══ ExtensionElem (_anon_having_045a002b4a9b5e41258523fd1ebbe16155) │ Count │ Var (name=neighbor) (bindingState=unbound) └── ExtensionElem (degree) @@ -6221,11 +6518,11 @@ SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { GROUP BY ?node HAVING (COUNT(?neighbor) > 1) -1441.020 ms/op +1422.262 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 1441.020 ms/op + 1422.262 ms/op # JMH version: 1.37 @@ -6241,7 +6538,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = HIGHLY_CONNECTED, z_queryIndex = 10) -# Run progress: 61.36% complete, ETA 00:10:02 +# Run progress: 61.36% complete, ETA 00:10:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6260,11 +6557,11 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -679.480 ms/op +726.008 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6272,64 +6569,49 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) │ ║ │ ╠══ Not │ ║ │ ║ Exists - │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.0K) - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=128.0K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[node]) [left] │ ║ │ ║ │ s: Var (name=node) (bindingState=bound) │ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) - │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=20.1M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] │ ║ │ ║ ╠══ Compare (<) │ ║ │ ║ ║ Var (name=w2) (bindingState=bound) │ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) - │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedAccessRows=6.00, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) │ ║ │ ║ Var (name=w2) │ ║ │ ║ Var (name=threshold) - │ ║ │ ║ , plannedLookupComponents=[S, P]) + │ ║ │ ║ passRatio=0.2393457664535485 source=learned_filter evidence=20197558, sharedJoinVars=[n2]) │ ║ │ ║ s: Var (name=n2) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] - │ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] - │ ║ │ │ Exists - │ ║ │ │ Join (resultSizeEstimate=127.0K) - │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) - │ ║ │ │ Var (name=node) - │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) - │ ║ │ │ Var (name=n2) - │ ║ │ │ Filter - │ ║ │ │ Compare (<) - │ ║ │ │ Var (name=w2) - │ ║ │ │ Var (name=threshold) - │ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) - │ ║ │ │ Var (name=n2) - │ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ │ │ Var (name=w2) - │ ║ │ │ ) - │ ║ │ │ s: Var (name=node) (bindingState=unbound) - │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) - │ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], plannedLookupComponents=[O, P, S]) [right] - │ ║ │ ╠══ ListMemberOperator - │ ║ │ ║ Var (name=w) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="1"^^) - │ ║ │ ║ ValueConstant (value="2"^^) - │ ║ │ ║ ValueConstant (value="3"^^) - │ ║ │ ║ ValueConstant (value="4"^^) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) - │ ║ │ s: Var (name=node) (bindingState=bound) - │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) - │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=90.0K, joinType=Cartesian product) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=90.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter (resultSizeEstimate=90.0K, plannedFilterEvidenceCount=5.5M, plannedAccessRows=6.00, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=2.00, plannedWorkRows=90.0K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[S, P, O], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_b000c52_uri, _const_f5e5585a_uri, node], filterSelectivitySource=learned_filter) [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, w]) [right] │ ║ └── Extension │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) │ ║ ║ s: Var (name=node) (bindingState=unbound) │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) │ ║ ║ o: Var (name=node) (bindingState=unbound) - │ ║ ╚══ ExtensionElem (_anon_path_261b186d14e6aef456d8325c960be07cc6e01) + │ ║ ╚══ ExtensionElem (_anon_path_651f8c7fa460b49483f96fe0284f98a1b19012345) │ ║ Var (name=node) (bindingState=bound) │ ╚══ GroupElem (count) │ Count (Distinct) @@ -6339,10 +6621,10 @@ Projection Var (name=node) (bindingState=unbound) SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { - VALUES ?threshold { 3 } ?node a . ?node ?w . FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } FILTER NOT EXISTS { ?node ?n2 . ?n2 ?w2 . @@ -6350,15 +6632,15 @@ SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { } MINUS { ?node ?node . - BIND(?node AS ?_anon_path_261b186d14e6aef456d8325c960be07cc6e01) + BIND(?node AS ?_anon_path_651f8c7fa460b49483f96fe0284f98a1b19012345) } } -474.020 ms/op +491.415 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 474.020 ms/op + 491.415 ms/op # JMH version: 1.37 @@ -6374,7 +6656,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 0) -# Run progress: 62.50% complete, ETA 00:09:43 +# Run progress: 62.50% complete, ETA 00:10:14 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6395,11 +6677,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -39.698 ms/op +57.710 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6407,7 +6689,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optTime) (bindingState=bound) │ ║ │ ║ ValueConstant (value="08:00:00"^^) @@ -6446,11 +6728,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } } -37.792 ms/op +39.183 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 37.792 ms/op + 39.183 ms/op # JMH version: 1.37 @@ -6466,7 +6748,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 1) -# Run progress: 63.64% complete, ETA 00:09:24 +# Run progress: 63.64% complete, ETA 00:09:54 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6486,11 +6768,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -68.254 ms/op +67.900 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6499,7 +6781,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=19.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -6507,18 +6789,18 @@ Projection │ ║ │ ║ │ ╚══ Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) │ ║ │ ║ │ ValueConstant (value="OP 3") - │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=1404.7M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/train/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/OperationalPoint), SP(?entity http://example.com/theme/train/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/OperationalPoint), SP(?entity http://example.com/theme/train/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/train/name ?name)) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=1404.7M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/train/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/OperationalPoint), SP(?entity http://example.com/theme/train/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/OperationalPoint), SP(?entity http://example.com/theme/train/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/train/name ?name)) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/train/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/OperationalPoint), SP(?entity http://example.com/theme/train/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/OperationalPoint), SP(?entity http://example.com/theme/train/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/train/name ?name)) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=19.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -6526,14 +6808,14 @@ Projection │ ║ │ │ ╚══ Compare (=) │ ║ │ │ Var (name=name) (bindingState=bound) │ ║ │ │ ValueConstant (value="OP 3") - │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=397.5M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/train/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/Line), SP(?entity http://example.com/theme/train/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/Line), SP(?entity http://example.com/theme/train/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/train/name ?name)) │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] - │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=397.5M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/train/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/Line), SP(?entity http://example.com/theme/train/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/Line), SP(?entity http://example.com/theme/train/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/train/name ?name)) [right] + │ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/train/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/Line), SP(?entity http://example.com/theme/train/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/Line), SP(?entity http://example.com/theme/train/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/train/name ?name)) [left] │ ║ │ │ s: Var (name=entity) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[P, S]) [right] + │ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] │ ║ │ s: Var (name=entity) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) @@ -6575,11 +6857,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -48.570 ms/op +45.791 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 48.570 ms/op + 45.791 ms/op # JMH version: 1.37 @@ -6595,7 +6877,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 2) -# Run progress: 64.77% complete, ETA 00:09:05 +# Run progress: 64.77% complete, ETA 00:09:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6614,11 +6896,11 @@ GROUP BY ?line HAVING(COUNT(?section) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -32.847 ms/op +31.239 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6626,24 +6908,29 @@ Projection ║ ProjectionElem "sectionCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_2522f01cf1ca372a49aeb8225780f2c2b38801, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) │ ║ LeftJoin - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.00) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ ║ s: Var (name=line) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=4.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] │ ║ │ ├── ListMemberOperator │ ║ │ │ Var (name=lineName) (bindingState=bound) │ ║ │ │ ValueConstant (value="Line 0") │ ║ │ │ ValueConstant (value="Line 1") │ ║ │ │ ValueConstant (value="Line 2") - │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[line], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=lineName) + │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ValueConstant (value="Line 2") + │ ║ │ passRatio=3.546099290780142E-4 source=learned_filter evidence=4754520, sharedJoinVars=[line]) │ ║ │ s: Var (name=line) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=lineName) (bindingState=unbound) @@ -6651,13 +6938,13 @@ Projection │ ║ s: Var (name=section) (bindingState=unbound) │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ o: Var (name=line) (bindingState=bound) - │ ║ GroupElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) + │ ║ GroupElem (_anon_having_2522f01cf1ca372a49aeb8225780f2c2b38801) │ ║ Count │ ║ Var (name=section) (bindingState=bound) │ ║ GroupElem (sectionCount) │ ║ Count (Distinct) │ ║ Var (name=section) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0412f7cfb0dea3f842609bbb659c6c2c80bb) + │ ╚══ ExtensionElem (_anon_having_2522f01cf1ca372a49aeb8225780f2c2b38801) │ Count │ Var (name=section) (bindingState=unbound) └── ExtensionElem (sectionCount) @@ -6675,11 +6962,11 @@ SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { GROUP BY ?line HAVING (COUNT(?section) > 0) -21.925 ms/op +20.835 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 21.925 ms/op + 20.835 ms/op # JMH version: 1.37 @@ -6695,7 +6982,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 3) -# Run progress: 65.91% complete, ETA 00:08:46 +# Run progress: 65.91% complete, ETA 00:09:13 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6713,11 +7000,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -230.308 ms/op +232.894 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -6725,17 +7012,17 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optTrack) (bindingState=bound) │ ║ │ ║ Var (name=section) (bindingState=bound) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=68.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedAccessRows=67.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, P, O]) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=68.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[line, section], sharedJoinVars=[section]) [right] │ ║ │ │ s: Var (name=section) (bindingState=bound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) @@ -6746,7 +7033,7 @@ Projection │ ║ │ ║ o: Var (name=track) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optTrack) │ ║ │ Var (name=track) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=3.5M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── Str │ ║ ║ │ Var (name=name) (bindingState=bound) @@ -6776,11 +7063,11 @@ SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { } } -159.637 ms/op +156.964 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 159.637 ms/op + 156.964 ms/op # JMH version: 1.37 @@ -6796,7 +7083,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 4) -# Run progress: 67.05% complete, ETA 00:08:28 +# Run progress: 67.05% complete, ETA 00:08:54 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6814,30 +7101,30 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -235.334 ms/op +247.293 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Exists │ ║ │ StatementPattern (resultSizeEstimate=67.4K) │ ║ │ s: Var (name=section) (bindingState=bound) │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ │ o: Var (name=line) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] - │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.00) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ s: Var (name=line) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) - │ ║ ║ └── Filter (resultSizeEstimate=444, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ └── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=600.6K, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, S, P], plannedMissingLookupComponents=[O], plannedBoundVars=[line], filterSelectivitySource=learned_filter, sharedJoinVars=[line]) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (=) │ ║ ║ ║ │ Var (name=name) (bindingState=bound) @@ -6872,11 +7159,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -162.086 ms/op +167.583 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 162.086 ms/op + 167.583 ms/op # JMH version: 1.37 @@ -6892,7 +7179,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 5) -# Run progress: 68.18% complete, ETA 00:08:09 +# Run progress: 68.18% complete, ETA 00:08:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -6910,21 +7197,21 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f80011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -54.073 ms/op +28.940 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=126.5K, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=late) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) @@ -6932,32 +7219,70 @@ Projection │ ║ │ s: Var (name=service) (bindingState=bound) │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) │ ║ │ o: Var (name=late) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] - │ ║ ║ Exists - │ ║ ║ Filter - │ ║ ║ Compare (>) - │ ║ ║ Var (name=late) - │ ║ ║ Var (name=threshold) - │ ║ ║ StatementPattern (resultSizeEstimate=25.8K) - │ ║ ║ Var (name=service) - │ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) - │ ║ ║ Var (name=late) - │ ║ ║ ) - │ ║ ║ s: Var (name=service) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=0, optimizer.candidateCount=4, optimizer.score=0.59, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ Var (name=time) + │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ Var (name=time) + │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ValueConstant (value="09:00:00"^^) + │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ Var (name=time) + │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ValueConstant (value="09:00:00"^^) + │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ Var (name=time) + │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?service type TrainService) score=8814.117647058823 rawRows=0.0 effectiveRows=0.0 baseCostRows=14984.0 factorWorkRows=14984.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="10:00:00"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=BindingSetAssignment ([[threshold="10:00:00"^^]]) score=149850.0 rawRows=8623.0 effectiveRows=8605.0 baseCostRows=14985.0 factorWorkRows=14985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?service type TrainService), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?service type TrainService), BindingSetAssignment ([[threshold="10:00:00"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="10:00:00"^^]]), SP(?service type TrainService)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=0, optimizer.candidateCount=4, optimizer.score=0.59, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator [left] + │ ║ ║ Var (name=time) + │ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ ║ Var (name=time) + │ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ ║ Var (name=time) + │ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ ║ Var (name=time) + │ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?service type TrainService) score=8814.117647058823 rawRows=0.0 effectiveRows=0.0 baseCostRows=14984.0 factorWorkRows=14984.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="10:00:00"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=BindingSetAssignment ([[threshold="10:00:00"^^]]) score=149850.0 rawRows=8623.0 effectiveRows=8605.0 baseCostRows=14985.0 factorWorkRows=14985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?service type TrainService), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?service type TrainService), BindingSetAssignment ([[threshold="10:00:00"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="10:00:00"^^]]), SP(?service type TrainService)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Filter (costEstimate=2.50, resultSizeEstimate=0, plannedFilterEvidenceCount=15.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, optimizer.candidateCount=4, optimizer.score=0.59, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator [left] + │ ║ ║ │ Var (name=time) + │ ║ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ ║ │ Var (name=time) + │ ║ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ ║ │ Var (name=time) + │ ║ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?service http://example.com/theme/train/scheduledTime ?time); ListMemberOperator + │ ║ ║ │ Var (name=time) + │ ║ ║ │ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?service type TrainService) score=8814.117647058823 rawRows=0.0 effectiveRows=0.0 baseCostRows=14984.0 factorWorkRows=14984.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="10:00:00"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=BindingSetAssignment ([[threshold="10:00:00"^^]]) score=149850.0 rawRows=8623.0 effectiveRows=8605.0 baseCostRows=14985.0 factorWorkRows=14985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?service type TrainService), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?service type TrainService), BindingSetAssignment ([[threshold="10:00:00"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="10:00:00"^^]]), SP(?service type TrainService)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=time) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ │ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ │ o: Var (name=time) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.6K) [right] + │ ║ ║ s: Var (name=service) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], plannedLookupComponents=[P, O, S]) [right] - │ ║ ├── ListMemberOperator - │ ║ │ Var (name=time) (bindingState=bound) - │ ║ │ ValueConstant (value="08:00:00"^^) - │ ║ │ ValueConstant (value="09:00:00"^^) - │ ║ └── StatementPattern (resultSizeEstimate=25.8K) - │ ║ s: Var (name=service) (bindingState=bound) - │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) - │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=service) (bindingState=bound) @@ -6966,21 +7291,21 @@ Projection Var (name=service) (bindingState=unbound) SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { - VALUES ?threshold { "10:00:00"^^ } - ?service a . ?service ?time . FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } FILTER NOT EXISTS { ?service ?late . FILTER (?late > ?threshold) } } -38.264 ms/op +20.214 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 38.264 ms/op + 20.214 ms/op # JMH version: 1.37 @@ -6996,7 +7321,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 6) -# Run progress: 69.32% complete, ETA 00:07:51 +# Run progress: 69.32% complete, ETA 00:08:14 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7018,11 +7343,11 @@ GROUP BY ?line HAVING(COUNT(?service) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000f011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -152.221 ms/op +167.471 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7030,28 +7355,28 @@ Projection ║ ProjectionElem "serviceCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_09631b95168022b44c782f4e22240fe1963, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_636ef2d9288a4b34aa4924e8ef30c90261e012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (line) - │ ║ Filter + │ ║ Filter (plannedFilterEvidenceCount=3.6M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── Compare (!=) │ ║ │ Var (name=optName) (bindingState=bound) │ ║ │ ValueConstant (value="") │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] - │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.5K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.9K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[service], sharedJoinVars=[service]) [right] │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) │ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[section, service], sharedJoinVars=[section]) [right] │ ║ ║ │ s: Var (name=section) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) │ ║ ║ │ o: Var (name=line) (bindingState=unbound) @@ -7063,13 +7388,13 @@ Projection │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ o: Var (name=optName) (bindingState=unbound) - │ ║ GroupElem (_anon_having_09631b95168022b44c782f4e22240fe1963) + │ ║ GroupElem (_anon_having_636ef2d9288a4b34aa4924e8ef30c90261e012345) │ ║ Count │ ║ Var (name=service) (bindingState=bound) │ ║ GroupElem (serviceCount) │ ║ Count (Distinct) │ ║ Var (name=service) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_09631b95168022b44c782f4e22240fe1963) + │ ╚══ ExtensionElem (_anon_having_636ef2d9288a4b34aa4924e8ef30c90261e012345) │ Count │ Var (name=service) (bindingState=unbound) └── ExtensionElem (serviceCount) @@ -7094,11 +7419,11 @@ SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { GROUP BY ?line HAVING (COUNT(?service) > 0) -104.919 ms/op +111.823 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 104.919 ms/op + 111.823 ms/op # JMH version: 1.37 @@ -7114,7 +7439,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 7) -# Run progress: 70.45% complete, ETA 00:07:33 +# Run progress: 70.45% complete, ETA 00:07:55 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7132,11 +7457,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -152.071 ms/op +162.076 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7144,23 +7469,23 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ ├── Filter (plannedFilterPassRatio=0.06, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) │ ║ │ ║ s: Var (name=service) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) │ ║ │ ║ o: Var (name=op) (bindingState=bound) - │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) - │ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.00) + │ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] │ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) │ ║ │ │ Var (name=service) │ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) │ ║ │ │ Var (name=op) - │ ║ │ │ ) + │ ║ │ │ source=unknown) │ ║ │ │ s: Var (name=op) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ └── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=3.2M, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, S, O], plannedMissingLookupComponents=[O], plannedBoundVars=[op], filterSelectivitySource=learned_filter, sharedJoinVars=[op]) [right] │ ║ │ ╠══ Or │ ║ │ ║ ├── Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) @@ -7172,7 +7497,7 @@ Projection │ ║ │ s: Var (name=op) (bindingState=bound) │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=5.0M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) │ ║ ║ │ Str @@ -7202,11 +7527,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -103.340 ms/op +109.143 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 103.340 ms/op + 109.143 ms/op # JMH version: 1.37 @@ -7222,7 +7547,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 8) -# Run progress: 71.59% complete, ETA 00:07:14 +# Run progress: 71.59% complete, ETA 00:07:35 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7243,50 +7568,50 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000080011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -233.351 ms/op +220.502 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=optName) (bindingState=bound) │ ║ │ ║ ValueConstant (value="Line 0") │ ║ │ ║ ValueConstant (value="Line 1") │ ║ │ ╚══ Exists - │ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[s1]) [left] │ ║ │ ║ s: Var (name=s1) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ │ ║ o: Var (name=op) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[P, O, S]) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, O, P], plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], sharedJoinVars=[op, s2]) [right] │ ║ │ s: Var (name=s2) (bindingState=bound) │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) │ ║ │ o: Var (name=op) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5132.6M, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=76.2K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.5K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) - │ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] - │ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) - │ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) - │ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] - │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound) │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] │ ║ ║ │ s: Var (name=service) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) @@ -7307,9 +7632,9 @@ Projection Var (name=service) (bindingState=unbound) SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service a . ?service ?s1 . ?s1 ?line . - ?service a . ?service ?s2 . ?s2 ?line . OPTIONAL { @@ -7318,11 +7643,11 @@ SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) } -160.139 ms/op +151.445 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 160.139 ms/op + 151.445 ms/op # JMH version: 1.37 @@ -7338,7 +7663,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 9) -# Run progress: 72.73% complete, ETA 00:06:56 +# Run progress: 72.73% complete, ETA 00:07:16 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7358,11 +7683,11 @@ GROUP BY ?section HAVING(COUNT(?track) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000007f011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -360.407 ms/op +372.917 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7370,18 +7695,18 @@ Projection ║ ProjectionElem "trackCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_0526a87f6c473a74a5b8969e381c95d73eb, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5429a98d74123d849869150aedea036ef4801234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (section) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optOp) (bindingState=bound) │ ║ │ Var (name=section) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] - │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=68.0K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedFilterEvidenceCount=3.2M, plannedAccessRows=66.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern) [left] │ ║ ║ │ ╠══ Exists │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) @@ -7391,7 +7716,7 @@ Projection │ ║ ║ │ s: Var (name=section) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) │ ║ ║ │ o: Var (name=track) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[P, S, O]) [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=68.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[section, track], sharedJoinVars=[section]) [right] │ ║ ║ s: Var (name=section) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) @@ -7402,13 +7727,13 @@ Projection │ ║ │ o: Var (name=op) (bindingState=unbound) │ ║ └── ExtensionElem (optOp) │ ║ Var (name=op) (bindingState=bound) - │ ║ GroupElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) + │ ║ GroupElem (_anon_having_5429a98d74123d849869150aedea036ef4801234) │ ║ Count │ ║ Var (name=track) (bindingState=bound) │ ║ GroupElem (trackCount) │ ║ Count (Distinct) │ ║ Var (name=track) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_0526a87f6c473a74a5b8969e381c95d73eb) + │ ╚══ ExtensionElem (_anon_having_5429a98d74123d849869150aedea036ef4801234) │ Count │ Var (name=track) (bindingState=unbound) └── ExtensionElem (trackCount) @@ -7430,11 +7755,11 @@ SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { GROUP BY ?section HAVING (COUNT(?track) > 0) -244.542 ms/op +248.907 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 244.542 ms/op + 248.907 ms/op # JMH version: 1.37 @@ -7450,7 +7775,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = TRAIN, z_queryIndex = 10) -# Run progress: 73.86% complete, ETA 00:06:38 +# Run progress: 73.86% complete, ETA 00:06:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7470,11 +7795,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000c00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -308.411 ms/op +307.866 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7482,7 +7807,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optSection) (bindingState=bound) │ ║ │ ║ Var (name=op) (bindingState=bound) @@ -7493,11 +7818,11 @@ Projection │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) - │ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) - │ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[op], sharedJoinVars=[op]) [right] │ ║ │ │ s: Var (name=op) (bindingState=bound) │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) │ ║ │ │ o: Var (name=name) (bindingState=unbound) @@ -7508,7 +7833,7 @@ Projection │ ║ │ ║ o: Var (name=op) (bindingState=bound) │ ║ │ ╚══ ExtensionElem (optSection) │ ║ │ Var (name=section) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.6M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter) │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) │ ║ ║ │ Str @@ -7545,11 +7870,11 @@ SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { } } -212.075 ms/op +209.398 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 212.075 ms/op + 209.398 ms/op # JMH version: 1.37 @@ -7565,7 +7890,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 0) -# Run progress: 75.00% complete, ETA 00:06:20 +# Run progress: 75.00% complete, ETA 00:06:38 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7582,11 +7907,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -66.485 ms/op +69.320 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7594,7 +7919,7 @@ Projection ╚══ Extension ├── Group () │ ╠══ LeftJoin - │ ║ ├── Filter [left] + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optCap) (bindingState=bound) │ ║ │ ║ ValueConstant (value="600"^^) @@ -7604,12 +7929,12 @@ Projection │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) │ ║ │ └── Extension [right] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=4.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[substation]) [left] │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[P, S]) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], sharedJoinVars=[generator]) [right] │ ║ │ ║ s: Var (name=generator) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) @@ -7639,11 +7964,11 @@ SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { } } -46.019 ms/op +47.448 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 46.019 ms/op + 47.448 ms/op # JMH version: 1.37 @@ -7659,7 +7984,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 1) -# Run progress: 76.14% complete, ETA 00:06:03 +# Run progress: 76.14% complete, ETA 00:06:19 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7678,11 +8003,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000000301120d38 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -78.989 ms/op +53.100 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7691,7 +8016,7 @@ Projection ├── Group () │ ╠══ LeftJoin │ ║ ├── Union [left] - │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=12.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ║ ├── Or │ ║ │ ║ │ ╠══ Compare (=) │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) @@ -7699,18 +8024,18 @@ Projection │ ║ │ ║ │ ╚══ Compare (=) │ ║ │ ║ │ Var (name=name) (bindingState=bound) │ ║ │ ║ │ ValueConstant (value="Substation 3") - │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=87.7M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Substation), SP(?entity http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Substation), SP(?entity http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/grid/name ?name)) │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=87.7M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Substation), SP(?entity http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Substation), SP(?entity http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/grid/name ?name)) [right] + │ ║ │ ║ ├── StatementPattern (costEstimate=28.1K, resultSizeEstimate=9.4K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?entity http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Substation), SP(?entity http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Substation), SP(?entity http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?entity http://example.com/theme/grid/name ?name)) [left] │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] │ ║ │ ║ s: Var (name=entity) (bindingState=bound) - │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) - │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=12.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) │ ║ │ ├── Or │ ║ │ │ ╠══ Compare (=) │ ║ │ │ ║ Var (name=name) (bindingState=bound) @@ -7718,22 +8043,22 @@ Projection │ ║ │ │ ╚══ Compare (=) │ ║ │ │ Var (name=name) (bindingState=bound) │ ║ │ │ ValueConstant (value="Substation 3") - │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=86.5M, optimizer.candidateCount=4, optimizer.score=50.9M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.decisionTrace=initial candidate left=SP(?entity type Generator) right=SP(?entity feeds ?substation) score=30957.058823529413 rawRows=9242.0 effectiveRows=9242.0 baseCostRows=52627.0 factorWorkRows=52627.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?entity type Generator) right=SP(?substation name ?name) score=8.7684496E8 rawRows=8.7684496E7 effectiveRows=8.7684496E7 baseCostRows=8.7684496E7 factorWorkRows=15915.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?entity feeds ?substation) right=SP(?substation name ?name) score=2.0586478588235295E8 rawRows=3.49970136E8 effectiveRows=3.49970136E8 baseCostRows=3.49970136E8 factorWorkRows=36712.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?substation name ?name) score=5.09071105882353E7 rawRows=8.6542088E7 effectiveRows=8.6542088E7 baseCostRows=8.6542088E7 factorWorkRows=0.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?substation name ?name), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[target], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.chosenOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.scoreComponents=rawRows=8.6542088E7, effectiveRows=8.6542088E7, baseCostRows=8.6542088E7, factorWorkRows=0.0, adjustedCost=5.09071105882353E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] - │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] - │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] - │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=86.5M, optimizer.candidateCount=4, optimizer.score=50.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.decisionTrace=initial candidate left=SP(?entity type Generator) right=SP(?entity feeds ?substation) score=30957.058823529413 rawRows=9242.0 effectiveRows=9242.0 baseCostRows=52627.0 factorWorkRows=52627.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?entity type Generator) right=SP(?substation name ?name) score=8.7684496E8 rawRows=8.7684496E7 effectiveRows=8.7684496E7 baseCostRows=8.7684496E7 factorWorkRows=15915.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?entity feeds ?substation) right=SP(?substation name ?name) score=2.0586478588235295E8 rawRows=3.49970136E8 effectiveRows=3.49970136E8 baseCostRows=3.49970136E8 factorWorkRows=36712.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?substation name ?name) score=5.09071105882353E7 rawRows=8.6542088E7 effectiveRows=8.6542088E7 baseCostRows=8.6542088E7 factorWorkRows=0.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?substation name ?name), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[target], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.chosenOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.scoreComponents=rawRows=8.6542088E7, effectiveRows=8.6542088E7, baseCostRows=8.6542088E7, factorWorkRows=0.0, adjustedCost=5.09071105882353E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K, optimizer.candidateCount=4, optimizer.score=50.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.decisionTrace=initial candidate left=SP(?entity type Generator) right=SP(?entity feeds ?substation) score=30957.058823529413 rawRows=9242.0 effectiveRows=9242.0 baseCostRows=52627.0 factorWorkRows=52627.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?entity type Generator) right=SP(?substation name ?name) score=8.7684496E8 rawRows=8.7684496E7 effectiveRows=8.7684496E7 baseCostRows=8.7684496E7 factorWorkRows=15915.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?entity feeds ?substation) right=SP(?substation name ?name) score=2.0586478588235295E8 rawRows=3.49970136E8 effectiveRows=3.49970136E8 baseCostRows=3.49970136E8 factorWorkRows=36712.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?substation name ?name) score=5.09071105882353E7 rawRows=8.6542088E7 effectiveRows=8.6542088E7 baseCostRows=8.6542088E7 factorWorkRows=0.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?substation name ?name), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[target], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.chosenOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.scoreComponents=rawRows=8.6542088E7, effectiveRows=8.6542088E7, baseCostRows=8.6542088E7, factorWorkRows=0.0, adjustedCost=5.09071105882353E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ╠══ StatementPattern (costEstimate=131.7M, resultSizeEstimate=9.4K, optimizer.candidateCount=4, optimizer.score=50.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[target] originalOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] promotedPrefixes=[] plannedOrder=[SP(?entity http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), SP(?entity http://example.com/theme/grid/feeds ?substation), SP(?substation http://example.com/theme/grid/name ?name)] plannedBoundVars=[target]; rejected: path=UNSUPPORTED_SHAPE factor=SP(?substation http://example.com/theme/grid/name ?name), optimizer.decisionTrace=initial candidate left=SP(?entity type Generator) right=SP(?entity feeds ?substation) score=30957.058823529413 rawRows=9242.0 effectiveRows=9242.0 baseCostRows=52627.0 factorWorkRows=52627.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?entity type Generator) right=SP(?substation name ?name) score=8.7684496E8 rawRows=8.7684496E7 effectiveRows=8.7684496E7 baseCostRows=8.7684496E7 factorWorkRows=15915.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?entity feeds ?substation) right=SP(?substation name ?name) score=2.0586478588235295E8 rawRows=3.49970136E8 effectiveRows=3.49970136E8 baseCostRows=3.49970136E8 factorWorkRows=36712.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?substation name ?name) score=5.09071105882353E7 rawRows=8.6542088E7 effectiveRows=8.6542088E7 baseCostRows=8.6542088E7 factorWorkRows=0.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?substation name ?name), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[target], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.chosenOrder=[SP(?entity type Generator), SP(?entity feeds ?substation), SP(?substation name ?name)], optimizer.scoreComponents=rawRows=8.6542088E7, effectiveRows=8.6542088E7, baseCostRows=8.6542088E7, factorWorkRows=0.0, adjustedCost=5.09071105882353E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ │ ╚══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=bound) │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ │ o: Var (name=substation) (bindingState=bound) - │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] - │ ║ │ s: Var (name=entity) (bindingState=bound) - │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] │ ║ s: Var (name=entity) (bindingState=bound) │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) @@ -7750,8 +8075,8 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "Substation 1" "Substation 2" } { { - ?entity ?name . ?entity a . + ?entity ?name . } } FILTER ((?name = ?target) || (?name = "Substation 3")) @@ -7761,9 +8086,9 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { VALUES ?target { "Substation 1" "Substation 2" } { { - ?substation ?name . - ?entity ?substation . ?entity a . + ?entity ?substation . + ?substation ?name . } } FILTER ((?name = ?target) || (?name = "Substation 3")) @@ -7773,11 +8098,11 @@ SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { } } -53.870 ms/op +35.878 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 53.870 ms/op + 35.878 ms/op # JMH version: 1.37 @@ -7793,7 +8118,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 2) -# Run progress: 77.27% complete, ETA 00:05:45 +# Run progress: 77.27% complete, ETA 00:06:00 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7812,11 +8137,11 @@ GROUP BY ?transformer HAVING(COUNT(?meter) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffc01121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001ff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -130.219 ms/op +11.225 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7824,43 +8149,43 @@ Projection ║ ProjectionElem "meterCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_076216e8764c0ae4eeabd25208dcd347bb4, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_5497f05cb2a75dba4aea847534fb0bde305c01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (transformer) │ ║ LeftJoin │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] - │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] - │ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] - │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=37) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=3.00, plannedFilterEvidenceCount=14.8M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], sharedJoinVars=[substation]) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ ║ o: Var (name=substation) (bindingState=unbound) - │ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[S, O, P]) [right] - │ ║ │ ├── ListMemberOperator - │ ║ │ │ Var (name=name) (bindingState=bound) - │ ║ │ │ ValueConstant (value="Substation 0") - │ ║ │ │ ValueConstant (value="Substation 1") - │ ║ │ │ ValueConstant (value="Substation 2") - │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) - │ ║ │ s: Var (name=substation) (bindingState=bound) - │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=28.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[name, substation, transformer], sharedJoinVars=[transformer]) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ o: Var (name=meter) (bindingState=unbound) - │ ║ GroupElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) + │ ║ GroupElem (_anon_having_5497f05cb2a75dba4aea847534fb0bde305c01234) │ ║ Count │ ║ Var (name=meter) (bindingState=bound) │ ║ GroupElem (meterCount) │ ║ Count (Distinct) │ ║ Var (name=meter) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_076216e8764c0ae4eeabd25208dcd347bb4) + │ ╚══ ExtensionElem (_anon_having_5497f05cb2a75dba4aea847534fb0bde305c01234) │ Count │ Var (name=meter) (bindingState=unbound) └── ExtensionElem (meterCount) @@ -7868,10 +8193,10 @@ Projection Var (name=meter) (bindingState=unbound) SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { - ?transformer a . - ?transformer ?substation . ?substation ?name . FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . OPTIONAL { ?transformer ?meter . } @@ -7879,11 +8204,11 @@ SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { GROUP BY ?transformer HAVING (COUNT(?meter) > 0) -89.466 ms/op +7.189 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 89.466 ms/op + 7.189 ms/op # JMH version: 1.37 @@ -7899,7 +8224,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 3) -# Run progress: 78.41% complete, ETA 00:05:27 +# Run progress: 78.41% complete, ETA 00:05:41 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -7916,11 +8241,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -487.637 ms/op +515.711 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -7928,17 +8253,17 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optValue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="100"^^) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=278.9K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=278.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter]) [right] │ ║ │ │ s: Var (name=meter) (bindingState=bound) │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ │ │ o: Var (name=load) (bindingState=unbound) @@ -7949,12 +8274,12 @@ Projection │ ║ │ ║ o: Var (name=value) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optValue) │ ║ │ Var (name=value) (bindingState=bound) - │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=36.1K) │ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] │ ║ ║ s: Var (name=meter) (bindingState=unbound) │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ ║ o: Var (name=load2) (bindingState=unbound) - │ ║ ╚══ Filter (new scope) [right] + │ ║ ╚══ Filter (new scope) (plannedFilterEvidenceCount=3.8M, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter) [right] │ ║ ├── Compare (>) │ ║ │ Var (name=value2) (bindingState=bound) │ ║ │ ValueConstant (value="180"^^) @@ -7988,11 +8313,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } } -335.819 ms/op +365.597 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 335.819 ms/op + 365.597 ms/op # JMH version: 1.37 @@ -8008,7 +8333,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 4) -# Run progress: 79.55% complete, ETA 00:05:09 +# Run progress: 79.55% complete, ETA 00:05:23 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8026,18 +8351,18 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001c0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000003f0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -179.928 ms/op +10.009 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) │ ║ ├── Exists │ ║ │ StatementPattern (resultSizeEstimate=37.5K) │ ║ │ s: Var (name=line) (bindingState=bound) @@ -8045,27 +8370,27 @@ Projection │ ║ │ o: Var (name=other) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] - │ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[P, S]) [right] - │ ║ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=16.4M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], sharedJoinVars=[substation]) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) - │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) - │ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], plannedLookupComponents=[O, P, S]) [right] - │ ║ ║ ╠══ Or - │ ║ ║ ║ ├── Compare (=) - │ ║ ║ ║ │ Var (name=name) (bindingState=bound) - │ ║ ║ ║ │ ValueConstant (value="Substation 0") - │ ║ ║ ║ └── Compare (=) - │ ║ ║ ║ Var (name=name) (bindingState=bound) - │ ║ ║ ║ ValueConstant (value="Substation 1") - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) - │ ║ ║ s: Var (name=substation) (bindingState=bound) - │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[line, name, substation], sharedJoinVars=[line]) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] │ ║ s: Var (name=line) (bindingState=bound) │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) @@ -8078,10 +8403,10 @@ Projection Var (name=line) (bindingState=unbound) SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { - ?line a . - ?line ?substation . ?substation ?name . FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . OPTIONAL { ?line ?other2 . } @@ -8090,11 +8415,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -123.834 ms/op +6.602 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 123.834 ms/op + 6.602 ms/op # JMH version: 1.37 @@ -8110,7 +8435,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 5) -# Run progress: 80.68% complete, ETA 00:04:52 +# Run progress: 80.68% complete, ETA 00:05:04 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8127,21 +8452,21 @@ SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003c00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -49.313 ms/op +15.253 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=root) + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) │ ║ ├── Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=54.0K, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ │ ╠══ Compare (<) │ ║ │ ║ Var (name=cap2) (bindingState=bound) │ ║ │ ║ Var (name=threshold) (bindingState=bound) @@ -8149,33 +8474,83 @@ Projection │ ║ │ s: Var (name=generator) (bindingState=bound) │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ o: Var (name=cap2) (bindingState=unbound) - │ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] - │ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] - │ ║ ║ Exists - │ ║ ║ Filter - │ ║ ║ Compare (<) - │ ║ ║ Var (name=cap2) - │ ║ ║ Var (name=threshold) - │ ║ ║ StatementPattern (resultSizeEstimate=9.4K) - │ ║ ║ Var (name=generator) - │ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - │ ║ ║ Var (name=cap2) - │ ║ ║ ) - │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=0, optimizer.candidateCount=4, optimizer.score=0.59, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ Var (name=capacity) + │ ║ ValueConstant (value="700"^^) + │ ║ ValueConstant (value="800"^^) + │ ║ ValueConstant (value="900"^^) + │ ║ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?generator http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ Var (name=capacity) + │ ║ ValueConstant (value="700"^^) + │ ║ ValueConstant (value="800"^^) + │ ║ ValueConstant (value="900"^^) + │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?generator http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ Var (name=capacity) + │ ║ ValueConstant (value="700"^^) + │ ║ ValueConstant (value="800"^^) + │ ║ ValueConstant (value="900"^^) + │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ Var (name=capacity) + │ ║ ValueConstant (value="700"^^) + │ ║ ValueConstant (value="800"^^) + │ ║ ValueConstant (value="900"^^) + │ ║ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?generator type Generator) score=9361.764705882353 rawRows=0.0 effectiveRows=0.0 baseCostRows=15915.0 factorWorkRows=15915.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="700"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?generator type Generator) right=BindingSetAssignment ([[threshold="700"^^]]) score=159160.0 rawRows=9364.0 effectiveRows=9364.0 baseCostRows=15916.0 factorWorkRows=15916.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?generator type Generator) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?generator type Generator), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?generator type Generator), BindingSetAssignment ([[threshold="700"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="700"^^]]), SP(?generator type Generator)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=0, optimizer.candidateCount=4, optimizer.score=0.59, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator [left] + │ ║ ║ Var (name=capacity) + │ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ValueConstant (value="900"^^) + │ ║ ║ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?generator http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ ║ Var (name=capacity) + │ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ValueConstant (value="900"^^) + │ ║ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?generator http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ ║ Var (name=capacity) + │ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ValueConstant (value="900"^^) + │ ║ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ ║ Var (name=capacity) + │ ║ ║ ValueConstant (value="700"^^) + │ ║ ║ ValueConstant (value="800"^^) + │ ║ ║ ValueConstant (value="900"^^) + │ ║ ║ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?generator type Generator) score=9361.764705882353 rawRows=0.0 effectiveRows=0.0 baseCostRows=15915.0 factorWorkRows=15915.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="700"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?generator type Generator) right=BindingSetAssignment ([[threshold="700"^^]]) score=159160.0 rawRows=9364.0 effectiveRows=9364.0 baseCostRows=15916.0 factorWorkRows=15916.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?generator type Generator) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?generator type Generator), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?generator type Generator), BindingSetAssignment ([[threshold="700"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="700"^^]]), SP(?generator type Generator)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Filter (costEstimate=2.50, resultSizeEstimate=0, plannedFilterEvidenceCount=10.7M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_filter, optimizer.candidateCount=4, optimizer.score=0.59, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerRejectedFactor=Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator [left] + │ ║ ║ │ Var (name=capacity) + │ ║ ║ │ ValueConstant (value="700"^^) + │ ║ ║ │ ValueConstant (value="800"^^) + │ ║ ║ │ ValueConstant (value="900"^^) + │ ║ ║ │ ), optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?generator http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ ║ │ Var (name=capacity) + │ ║ ║ │ ValueConstant (value="700"^^) + │ ║ ║ │ ValueConstant (value="800"^^) + │ ║ ║ │ ValueConstant (value="900"^^) + │ ║ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?generator http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/grid/Generator), Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ ║ │ Var (name=capacity) + │ ║ ║ │ ValueConstant (value="700"^^) + │ ║ ║ │ ValueConstant (value="800"^^) + │ ║ ║ │ ValueConstant (value="900"^^) + │ ║ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factor=Filter(SP(?generator http://example.com/theme/grid/capacity ?capacity); ListMemberOperator + │ ║ ║ │ Var (name=capacity) + │ ║ ║ │ ValueConstant (value="700"^^) + │ ║ ║ │ ValueConstant (value="800"^^) + │ ║ ║ │ ValueConstant (value="900"^^) + │ ║ ║ │ ), optimizer.decisionTrace=initial candidate left=Filter right=SP(?generator type Generator) score=9361.764705882353 rawRows=0.0 effectiveRows=0.0 baseCostRows=15915.0 factorWorkRows=15915.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=BindingSetAssignment ([[threshold="700"^^]]) score=10.0 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?generator type Generator) right=BindingSetAssignment ([[threshold="700"^^]]) score=159160.0 rawRows=9364.0 effectiveRows=9364.0 baseCostRows=15916.0 factorWorkRows=15916.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?generator type Generator) score=0.5882352941176471 rawRows=0.0 effectiveRows=0.0 baseCostRows=1.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?generator type Generator), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[Filter, SP(?generator type Generator), BindingSetAssignment ([[threshold="700"^^]])], optimizer.chosenOrder=[Filter, BindingSetAssignment ([[threshold="700"^^]]), SP(?generator type Generator)], optimizer.scoreComponents=rawRows=0.0, effectiveRows=0.0, baseCostRows=1.0, factorWorkRows=1.0, adjustedCost=0.5882352941176471, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="700"^^) + │ ║ ║ │ ║ ValueConstant (value="800"^^) + │ ║ ║ │ ║ ValueConstant (value="900"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=9.4K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ ╚══ Filter (resultSizeEstimate=470, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], plannedLookupComponents=[O, S, P]) [right] - │ ║ ├── ListMemberOperator - │ ║ │ Var (name=capacity) (bindingState=bound) - │ ║ │ ValueConstant (value="700"^^) - │ ║ │ ValueConstant (value="800"^^) - │ ║ │ ValueConstant (value="900"^^) - │ ║ └── StatementPattern (resultSizeEstimate=9.4K) - │ ║ s: Var (name=generator) (bindingState=bound) - │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) - │ ║ o: Var (name=capacity) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] │ ╚══ GroupElem (count) │ Count (Distinct) │ Var (name=generator) (bindingState=bound) @@ -8184,21 +8559,21 @@ Projection Var (name=generator) (bindingState=unbound) SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { - VALUES ?threshold { 700 } - ?generator a . ?generator ?capacity . FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } FILTER NOT EXISTS { ?generator ?cap2 . FILTER (?cap2 < ?threshold) } } -34.315 ms/op +10.147 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 34.315 ms/op + 10.147 ms/op # JMH version: 1.37 @@ -8214,7 +8589,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 6) -# Run progress: 81.82% complete, ETA 00:04:34 +# Run progress: 81.82% complete, ETA 00:04:46 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8234,11 +8609,11 @@ GROUP BY ?substation HAVING(COUNT(?asset) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -136.375 ms/op +150.256 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8246,32 +8621,32 @@ Projection ║ ProjectionElem "assetCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_47731a99100374d4267827330a3c2ecdd090123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_8077bdfe77623d046bc864cbe89f758431401234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optSub) (bindingState=bound) │ ║ │ Var (name=asset) (bindingState=bound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedAccessRows=33.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[asset], sharedJoinVars=[asset]) [right] │ ║ ║ │ s: Var (name=asset) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) - │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[asset], sharedJoinVars=[asset]) [right] │ ║ ║ s: Var (name=asset) (bindingState=bound) │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) │ ║ ║ o: Var (name=substation) (bindingState=unbound) @@ -8282,13 +8657,13 @@ Projection │ ║ │ o: Var (name=substation) (bindingState=bound) │ ║ └── ExtensionElem (optSub) │ ║ Var (name=substation) (bindingState=bound) - │ ║ GroupElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) + │ ║ GroupElem (_anon_having_8077bdfe77623d046bc864cbe89f758431401234567) │ ║ Count │ ║ Var (name=asset) (bindingState=bound) │ ║ GroupElem (assetCount) │ ║ Count (Distinct) │ ║ Var (name=asset) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_47731a99100374d4267827330a3c2ecdd090123) + │ ╚══ ExtensionElem (_anon_having_8077bdfe77623d046bc864cbe89f758431401234567) │ Count │ Var (name=asset) (bindingState=unbound) └── ExtensionElem (assetCount) @@ -8314,11 +8689,11 @@ SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { GROUP BY ?substation HAVING (COUNT(?asset) > 0) -93.504 ms/op +100.942 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 93.504 ms/op + 100.942 ms/op # JMH version: 1.37 @@ -8334,7 +8709,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 7) -# Run progress: 82.95% complete, ETA 00:04:17 +# Run progress: 82.95% complete, ETA 00:04:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8352,11 +8727,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001e00011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -159.353 ms/op +26.470 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8364,40 +8739,40 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) │ ║ │ ╠══ Exists │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] - │ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) - │ ║ │ │ ║ Var (name=transformer) - │ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) - │ ║ │ │ ║ Var (name=meter) - │ ║ │ │ ║ ) - │ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) - │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] - │ ║ │ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=37) [left] + │ ║ │ │ ╠══ Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=22.7M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ │ ║ ├── Or + │ ║ │ │ ║ │ ╠══ Compare (=) + │ ║ │ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ │ ║ │ ╚══ Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], unlockedFilters=Exists [right] + │ ║ │ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ │ Var (name=transformer) + │ ║ │ │ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ │ Var (name=meter) + │ ║ │ │ source=unknown, sharedJoinVars=[substation]) + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) - │ ║ │ │ o: Var (name=substation) (bindingState=unbound) - │ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], plannedLookupComponents=[O, P, S]) [right] - │ ║ │ ╠══ Or - │ ║ │ ║ ├── Compare (=) - │ ║ │ ║ │ Var (name=name) (bindingState=bound) - │ ║ │ ║ │ ValueConstant (value="Substation 0") - │ ║ │ ║ └── Compare (=) - │ ║ │ ║ Var (name=name) (bindingState=bound) - │ ║ │ ║ ValueConstant (value="Substation 1") - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) - │ ║ │ s: Var (name=substation) (bindingState=bound) - │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) - │ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ └── Filter (new scope) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=28.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, S, P], plannedBoundVars=[name, substation, transformer], sharedJoinVars=[transformer]) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=74.8M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) │ ║ ╠══ Compare (=) │ ║ ║ Var (name=load) (bindingState=bound) │ ║ ║ Var (name=substation) (bindingState=unbound) @@ -8413,10 +8788,10 @@ Projection Var (name=transformer) (bindingState=unbound) SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { - ?transformer a . - ?transformer ?substation . ?substation ?name . FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . FILTER EXISTS { ?transformer ?meter . } @@ -8426,11 +8801,11 @@ SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { } } -107.823 ms/op +17.298 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 107.823 ms/op + 17.298 ms/op # JMH version: 1.37 @@ -8446,7 +8821,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 8) -# Run progress: 84.09% complete, ETA 00:03:59 +# Run progress: 84.09% complete, ETA 00:04:09 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8465,11 +8840,11 @@ GROUP BY ?substation HAVING(COUNT(?transformer) > 0) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000200011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001ff0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -21.250 ms/op +26.223 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8477,12 +8852,12 @@ Projection ║ ProjectionElem "transformerCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_5604866bb553a18f43ff9cac17a76b74474901234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_543339187999bf664edaaef1100789ae9ecf01234, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="0"^^) │ ║ └── Group (substation) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) @@ -8494,11 +8869,11 @@ Projection │ ║ │ o: Var (name=meter) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] - │ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) │ ║ ║ │ o: Var (name=name) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[P, O, S]) [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, O, P], plannedBoundVars=[name, substation], sharedJoinVars=[substation]) [right] │ ║ ║ s: Var (name=substation) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) @@ -8509,13 +8884,13 @@ Projection │ ║ │ o: Var (name=transformer) (bindingState=unbound) │ ║ └── ExtensionElem (optTransformer) │ ║ Var (name=transformer) (bindingState=bound) - │ ║ GroupElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) + │ ║ GroupElem (_anon_having_543339187999bf664edaaef1100789ae9ecf01234) │ ║ Count │ ║ Var (name=transformer) (bindingState=bound) │ ║ GroupElem (transformerCount) │ ║ Count (Distinct) │ ║ Var (name=transformer) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5604866bb553a18f43ff9cac17a76b74474901234) + │ ╚══ ExtensionElem (_anon_having_543339187999bf664edaaef1100789ae9ecf01234) │ Count │ Var (name=transformer) (bindingState=unbound) └── ExtensionElem (transformerCount) @@ -8534,11 +8909,11 @@ SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { GROUP BY ?substation HAVING (COUNT(?transformer) > 0) -14.677 ms/op +17.541 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 14.677 ms/op + 17.541 ms/op # JMH version: 1.37 @@ -8554,7 +8929,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 9) -# Run progress: 85.23% complete, ETA 00:03:42 +# Run progress: 85.23% complete, ETA 00:03:51 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8571,11 +8946,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fe0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -8.627 ms/op +8.169 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8585,22 +8960,17 @@ Projection │ ╠══ Difference │ ║ ├── LeftJoin │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] - │ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=58, plannedFilterEvidenceCount=20.1M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] │ ║ │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) │ ║ │ ║ │ ║ ValueConstant (value="500"^^) │ ║ │ ║ │ ║ ValueConstant (value="600"^^) │ ║ │ ║ │ ║ ValueConstant (value="700"^^) - │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator - │ ║ │ ║ │ Var (name=cap) - │ ║ │ ║ │ ValueConstant (value="500"^^) - │ ║ │ ║ │ ValueConstant (value="600"^^) - │ ║ │ ║ │ ValueConstant (value="700"^^) - │ ║ │ ║ │ ) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[P, S, O]) [right] + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[cap, line], sharedJoinVars=[line]) [right] │ ║ │ ║ s: Var (name=line) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) @@ -8608,7 +8978,7 @@ Projection │ ║ │ s: Var (name=line) (bindingState=bound) │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) │ ║ │ o: Var (name=substation) (bindingState=unbound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=30.9M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_pattern) │ ║ ╠══ Compare (<) │ ║ ║ Var (name=cap2) (bindingState=bound) │ ║ ║ ValueConstant (value="500"^^) @@ -8636,11 +9006,11 @@ SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { } } -5.979 ms/op +5.405 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 5.979 ms/op + 5.405 ms/op # JMH version: 1.37 @@ -8656,7 +9026,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = ELECTRICAL_GRID, z_queryIndex = 10) -# Run progress: 86.36% complete, ETA 00:03:24 +# Run progress: 86.36% complete, ETA 00:03:33 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8675,25 +9045,25 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001fe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ffc011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -557.193 ms/op +570.113 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (>) │ ║ │ ║ Var (name=optValue) (bindingState=bound) │ ║ │ ║ ValueConstant (value="200"^^) │ ║ │ ╚══ Not │ ║ │ Exists - │ ║ │ Filter + │ ║ │ Filter (plannedFilterEvidenceCount=3.8M, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern) │ ║ │ ├── Compare (<) │ ║ │ │ Var (name=low) (bindingState=bound) │ ║ │ │ ValueConstant (value="50"^^) @@ -8703,29 +9073,29 @@ Projection │ ║ │ o: Var (name=low) (bindingState=unbound) │ ║ └── LeftJoin │ ║ ╠══ Union [left] - │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=278.9K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=278.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[meter], sharedJoinVars=[meter]) [right] │ ║ ║ │ s: Var (name=meter) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) │ ║ ║ │ o: Var (name=load) (bindingState=unbound) - │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) - │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] - │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] - │ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) - │ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) - │ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) - │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] - │ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=208.3K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=278.9K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=278.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[meter], sharedJoinVars=[meter]) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) - │ ║ ║ ║ o: Var (name=load) (bindingState=bound) - │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[P, O, S]) [right] - │ ║ ║ s: Var (name=meter) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=208.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[load, meter], sharedJoinVars=[load]) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] │ ║ s: Var (name=load) (bindingState=bound) │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) @@ -8744,9 +9114,9 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { } UNION { - ?load ?value . - ?meter ?load . ?meter a . + ?meter ?load . + ?load ?value . } OPTIONAL { ?load ?optValue . @@ -8754,11 +9124,11 @@ SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) } -387.730 ms/op +384.294 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 387.730 ms/op + 384.294 ms/op # JMH version: 1.37 @@ -8774,7 +9144,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 0) -# Run progress: 87.50% complete, ETA 00:03:07 +# Run progress: 87.50% complete, ETA 00:03:15 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8796,25 +9166,25 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ffe011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -25.228 ms/op +41.746 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (!=) │ ║ │ Var (name=optMarker) (bindingState=bound) │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ └── Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [right] + │ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (<) │ ║ ║ ║ │ Var (name=p) (bindingState=bound) @@ -8828,38 +9198,38 @@ Projection │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] - │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=6.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[disease], sharedJoinVars=[disease]) [left] │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) - │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) │ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, disease, trial], sharedJoinVars=[arm]) [right] │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) │ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) │ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, disease, drug, trial], sharedJoinVars=[arm]) [right] │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, disease, drug, result, trial], sharedJoinVars=[result]) [right] │ ║ ║ │ s: Var (name=result) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) │ ║ ║ │ o: Var (name=p) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, disease, drug, p, result, trial], unlockedFilters=Or [right] │ ║ ║ Compare (<) │ ║ ║ Var (name=p) │ ║ ║ ValueConstant (value="0.05"^^) │ ║ ║ Compare (>) │ ║ ║ Var (name=effect) │ ║ ║ ValueConstant (value="0.7"^^) - │ ║ ║ ) + │ ║ ║ source=unknown, sharedJoinVars=[result]) │ ║ ║ s: Var (name=result) (bindingState=bound) │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) │ ║ ║ o: Var (name=effect) (bindingState=unbound) @@ -8894,11 +9264,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER (?optMarker != ) } -16.866 ms/op +27.854 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 16.866 ms/op + 27.854 ms/op # JMH version: 1.37 @@ -8914,7 +9284,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 1) -# Run progress: 88.64% complete, ETA 00:02:50 +# Run progress: 88.64% complete, ETA 00:02:57 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -8938,11 +9308,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?drug) >= 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f80011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000300011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -4.982 ms/op +10.125 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -8950,20 +9320,20 @@ Projection ║ ProjectionElem "drugCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_803012acc8272342a428c9d7e0d6d22ad775301234567, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (combo) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── ListMemberOperator │ ║ │ Var (name=optSeverity) (bindingState=bound) │ ║ │ ValueConstant (value="Mild") │ ║ │ ValueConstant (value="Moderate") │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=477) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] - │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedFilterEvidenceCount=819.0K, plannedAccessRows=477, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] │ ║ ║ │ ║ ├── Compare (>) │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) @@ -8971,33 +9341,33 @@ Projection │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[combo, score], sharedJoinVars=[combo]) [right] │ ║ ║ │ s: Var (name=combo) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) │ ║ ║ │ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[O, P, S]) [right] + │ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P, O], plannedBoundVars=[combo, drug, score], sharedJoinVars=[combo]) [right] │ ║ ║ s: Var (name=combo) (bindingState=bound) │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) │ ║ ╚══ Extension [right] - │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[drug]) [left] │ ║ │ ║ s: Var (name=drug) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], sharedJoinVars=[sideEffect]) [right] │ ║ │ s: Var (name=sideEffect) (bindingState=bound) │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) │ ║ │ o: Var (name=sev) (bindingState=unbound) │ ║ └── ExtensionElem (optSeverity) │ ║ Var (name=sev) (bindingState=bound) - │ ║ GroupElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) + │ ║ GroupElem (_anon_having_803012acc8272342a428c9d7e0d6d22ad775301234567) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_8821239d38924ca984c22abfbda6141fe43da01234567) + │ ╚══ ExtensionElem (_anon_having_803012acc8272342a428c9d7e0d6d22ad775301234567) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -9019,11 +9389,11 @@ SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?drug) >= 2) -3.253 ms/op +6.880 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 3.253 ms/op + 6.880 ms/op # JMH version: 1.37 @@ -9039,7 +9409,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 2) -# Run progress: 89.77% complete, ETA 00:02:33 +# Run progress: 89.77% complete, ETA 00:02:39 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9061,11 +9431,11 @@ GROUP BY ?target HAVING(COUNT(DISTINCT ?drug) > 2) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007ff011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -49.883 ms/op +46.306 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9073,47 +9443,47 @@ Projection ║ ProjectionElem "drugCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_0403306daa3cd9524e928e82d8fc34dca31b, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="2"^^) │ ║ └── Group (target) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=optDisease) (bindingState=bound) │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) │ ║ │ ╚══ Exists - │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) - │ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[drug]) [left] │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) │ ║ │ ║ o: Var (name=drug) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], sharedJoinVars=[arm]) [right] │ ║ │ s: Var (name=trial) (bindingState=unbound) │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ ║ │ o: Var (name=arm) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] - │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] - │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) - │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, P, O]) [right] - │ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] - │ ║ ║ │ s: Var (name=drug) (bindingState=unbound) - │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ ║ │ o: Var (name=target) (bindingState=bound) - │ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, P, O]) [right] - │ ║ ║ s: Var (name=drug) (bindingState=bound) - │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.0K, plannedAccessRows=15.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug], sharedJoinVars=[drug]) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S, O], plannedBoundVars=[drug, target], sharedJoinVars=[target]) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug, target], sharedJoinVars=[target]) [right] + │ ║ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ o: Var (name=pathway) (bindingState=unbound) │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) │ ║ │ s: Var (name=drug) (bindingState=bound) @@ -9121,13 +9491,13 @@ Projection │ ║ │ o: Var (name=disease) (bindingState=unbound) │ ║ └── ExtensionElem (optDisease) │ ║ Var (name=disease) (bindingState=bound) - │ ║ GroupElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) + │ ║ GroupElem (_anon_having_0403306daa3cd9524e928e82d8fc34dca31b) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_46823c818a208aad4fbea2162a4d3c7bf7c00123) + │ ╚══ ExtensionElem (_anon_having_0403306daa3cd9524e928e82d8fc34dca31b) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -9135,10 +9505,10 @@ Projection Var (name=drug) (bindingState=unbound) SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { - ?target ?pathway . - ?target a . - ?drug ?target . ?drug a . + ?drug ?target . + ?target a . + ?target ?pathway . OPTIONAL { ?drug ?disease . BIND(?disease AS ?optDisease) @@ -9148,11 +9518,11 @@ SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { GROUP BY ?target HAVING (COUNT(DISTINCT ?drug) > 2) -32.167 ms/op +30.861 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 32.167 ms/op + 30.861 ms/op # JMH version: 1.37 @@ -9168,7 +9538,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 3) -# Run progress: 90.91% complete, ETA 00:02:15 +# Run progress: 90.91% complete, ETA 00:02:21 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9189,67 +9559,67 @@ SELECT ?drug ?disease WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00007000011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -42.057 ms/op +40.521 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "drug" ║ ProjectionElem "disease" -╚══ Filter +╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) ├── Compare (!=) │ Var (name=optTarget) (bindingState=bound) │ ValueConstant (value=http://example.com/theme/pharma/target/0) └── LeftJoin (LeftJoinIterator) - ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] - ║ ├── Not - ║ │ Exists - ║ │ StatementPattern (resultSizeEstimate=9.9K) - ║ │ s: Var (name=drug) (bindingState=bound) - ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) - ║ │ o: Var (name=disease) (bindingState=bound) - ║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) - ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] - ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] - ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) - ║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) - ║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) - ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[O, S, P]) [right] - ║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) - ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - ║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[P, S]) [right] - ║ ║ │ ║ s: Var (name=trial) (bindingState=bound) - ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) - ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[P, S], unlockedFilters=Not [right] - ║ ║ │ Exists - ║ ║ │ StatementPattern (resultSizeEstimate=9.9K) - ║ ║ │ Var (name=drug) - ║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) - ║ ║ │ Var (name=disease) - ║ ║ │ ) - ║ ║ │ s: Var (name=arm) (bindingState=bound) - ║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) - ║ ║ │ o: Var (name=drug) (bindingState=unbound) - ║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[P, S]) [right] - ║ ║ s: Var (name=arm) (bindingState=bound) - ║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - ║ ║ o: Var (name=result) (bindingState=unbound) - ║ ╚══ Filter (resultSizeEstimate=1.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[P, S]) [right] - ║ ├── Compare (>) - ║ │ Var (name=rate) (bindingState=bound) - ║ │ ValueConstant (value="0.6"^^) - ║ └── StatementPattern (resultSizeEstimate=2.9K) - ║ s: Var (name=result) (bindingState=bound) - ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) - ║ o: Var (name=rate) (bindingState=unbound) + ╠══ Join (JoinIterator) (resultSizeEstimate=1.1K) [left] + ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] + ║ │ ║ ├── Not + ║ │ ║ │ Exists + ║ │ ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ │ o: Var (name=disease) (bindingState=bound) + ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.9K) + ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ │ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedAccessRows=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, indexName=psoc) [left] + ║ │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + ║ │ ║ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ ║ ║ │ ║ o: Var (name=disease) (bindingState=unbound) + ║ │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, O, P], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] + ║ │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ │ ║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] + ║ │ ║ ║ s: Var (name=trial) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ │ ║ ║ o: Var (name=arm) (bindingState=unbound) + ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, trial], unlockedFilters=Not [right] + ║ │ ║ Exists + ║ │ ║ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ Var (name=drug) + ║ │ ║ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ Var (name=disease) + ║ │ ║ source=unknown, sharedJoinVars=[arm]) + ║ │ ║ s: Var (name=arm) (bindingState=bound) + ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ │ ║ o: Var (name=drug) (bindingState=unbound) + ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, trial], sharedJoinVars=[arm]) [right] + ║ │ s: Var (name=arm) (bindingState=bound) + ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ o: Var (name=result) (bindingState=unbound) + ║ └── Filter (resultSizeEstimate=1.1K, plannedFilterEvidenceCount=1.2M, plannedAccessRows=1.00, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, sharedJoinVars=[result]) [right] + ║ ╠══ Compare (>) + ║ ║ Var (name=rate) (bindingState=bound) + ║ ║ ValueConstant (value="0.6"^^) + ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) ╚══ Extension [right] ├── StatementPattern (resultSizeEstimate=20.0K) │ s: Var (name=drug) (bindingState=bound) @@ -9263,12 +9633,12 @@ SELECT ?drug ?disease WHERE { ?trial a . ?trial ?arm . ?arm ?drug . - ?arm ?result . - ?result ?rate . - FILTER (?rate > 0.6) FILTER NOT EXISTS { ?drug ?disease . } + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) OPTIONAL { ?drug ?target . BIND(?target AS ?optTarget) @@ -9276,11 +9646,11 @@ SELECT ?drug ?disease WHERE { FILTER (?optTarget != ) } -27.848 ms/op +26.530 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 27.848 ms/op + 26.530 ms/op # JMH version: 1.37 @@ -9296,7 +9666,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 4) -# Run progress: 92.05% complete, ETA 00:01:58 +# Run progress: 92.05% complete, ETA 00:02:03 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9320,11 +9690,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x0000180001121640 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000f00011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -57.198 ms/op +73.336 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9332,19 +9702,19 @@ Projection ╚══ Extension ├── Group () │ ╠══ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optClassName) (bindingState=bound) │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ LeftJoin │ ║ │ ├── Union [left] │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) - │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) │ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) - │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[drug, mol], sharedJoinVars=[drug]) [right] │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) @@ -9355,15 +9725,15 @@ Projection │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] - │ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedAccessRows=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) │ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) - │ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[O, S, P]) [right] + │ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[combo, drug], sharedJoinVars=[combo]) [right] │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) - │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[P, S]) [right] + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[combo, drug], sharedJoinVars=[drug]) [right] │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) @@ -9378,7 +9748,7 @@ Projection │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) │ ║ │ ╚══ ExtensionElem (optClassName) │ ║ │ Var (name=optName) (bindingState=bound) - │ ║ └── Filter (new scope) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=1.2M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_filter) │ ║ ╠══ ListMemberOperator │ ║ ║ Var (name=disease) (bindingState=bound) │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) @@ -9426,11 +9796,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } } -38.642 ms/op +48.708 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 38.642 ms/op + 48.708 ms/op # JMH version: 1.37 @@ -9446,7 +9816,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 5) -# Run progress: 93.18% complete, ETA 00:01:41 +# Run progress: 93.18% complete, ETA 00:01:45 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9469,45 +9839,45 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000fc0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -10.393 ms/op +24.782 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) │ ║ │ Var (name=optEffect) (bindingState=bound) │ ║ │ ValueConstant (value="0.3"^^) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] - │ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] - │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] - │ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) - │ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) - │ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) - │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] - │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, O, P], plannedBoundVars=[_const_73c2e40a_uri, arm, trial]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, trial]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) - │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] - │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) - │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, O, S]) [right] - │ ║ ║ │ s: Var (name=trial) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[P, S]) [right] + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, result, trial]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, O, P], plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, marker, result, trial]) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedFilterEvidenceCount=55.0K, plannedAccessRows=1.00, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_80a6979a_uri, _const_f5e5585a_uri, arm, marker, result, trial], filterSelectivitySource=learned_filter) [right] │ ║ ║ ╠══ Or │ ║ ║ ║ ├── Compare (<) │ ║ ║ ║ │ Var (name=p) (bindingState=bound) @@ -9534,11 +9904,11 @@ Projection Var (name=trial) (bindingState=unbound) SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { - VALUES ?marker { } - ?result ?marker . - ?arm ?result . ?trial ?arm . ?trial a . + ?arm ?result . + VALUES ?marker { } + ?result ?marker . ?result ?p . FILTER ((?p < 0.05) || (?p = 0.05)) OPTIONAL { @@ -9548,11 +9918,11 @@ SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { FILTER (?optEffect > 0.3) } -6.773 ms/op +17.101 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 6.773 ms/op + 17.101 ms/op # JMH version: 1.37 @@ -9568,7 +9938,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 6) -# Run progress: 94.32% complete, ETA 00:01:24 +# Run progress: 94.32% complete, ETA 00:01:27 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9591,11 +9961,11 @@ GROUP BY ?combo HAVING(COUNT(DISTINCT ?target) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000000fc011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001f80011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -16.467 ms/op +27.232 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9603,12 +9973,12 @@ Projection ║ ProjectionElem "sharedTargets" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_06154bcbe3e242c0448e9c8ad3641c08b13c, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (combo) - │ ║ Filter + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) @@ -9621,24 +9991,24 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] - │ ║ ║ │ ╠══ Filter (filterSelectivitySource=unknown, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] │ ║ ║ │ ║ ├── Compare (!=) │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) - │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) - │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=15, resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) - │ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=drugA) (bindingState=unbound) │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) - │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=161, resultSizeEstimate=477) [right] │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) - │ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) - │ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) @@ -9654,13 +10024,13 @@ Projection │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) │ ║ └── ExtensionElem (optSideEffect) │ ║ Var (name=sideEffect) (bindingState=bound) - │ ║ GroupElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) + │ ║ GroupElem (_anon_having_06154bcbe3e242c0448e9c8ad3641c08b13c) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (sharedTargets) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_6358e3388dc4f69a4e109f799bb326877b87012345) + │ ╚══ ExtensionElem (_anon_having_06154bcbe3e242c0448e9c8ad3641c08b13c) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (sharedTargets) @@ -9668,9 +10038,9 @@ Projection Var (name=target) (bindingState=unbound) SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { - ?combo a . ?combo ?drugA . ?combo ?drugB . + ?combo a . FILTER (?drugA != ?drugB) ?drugA ?target . ?drugB ?target . @@ -9683,11 +10053,11 @@ SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { GROUP BY ?combo HAVING (COUNT(DISTINCT ?target) > 1) -10.949 ms/op +18.132 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 10.949 ms/op + 18.132 ms/op # JMH version: 1.37 @@ -9703,7 +10073,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 7) -# Run progress: 95.45% complete, ETA 00:01:07 +# Run progress: 95.45% complete, ETA 00:01:10 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9725,30 +10095,30 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000078011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000180011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -53.799 ms/op +69.654 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optCompName) (bindingState=bound) │ ║ │ ║ ValueConstant (value="") │ ║ │ ╚══ Not │ ║ │ Exists - │ ║ │ Join (JoinIterator) (resultSizeEstimate=144) - │ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P, S]) [left] + │ ║ │ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[arm]) [left] │ ║ │ │ s: Var (name=arm) (bindingState=bound) │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) │ ║ │ │ o: Var (name=r) (bindingState=unbound) - │ ║ │ └── Filter (resultSizeEstimate=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], plannedLookupComponents=[S, O, P]) [right] + │ ║ │ └── Filter (resultSizeEstimate=1.00, plannedFilterEvidenceCount=1.4M, plannedAccessRows=1.00, plannedFilterPassRatio=0, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_filter, sharedJoinVars=[r]) [right] │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=p) (bindingState=bound) │ ║ │ ║ ValueConstant (value="0.08"^^) @@ -9760,11 +10130,11 @@ Projection │ ║ └── LeftJoin │ ║ ╠══ Join (JoinIterator) [left] │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[arm, trial], sharedJoinVars=[trial]) [right] │ ║ ║ │ s: Var (name=trial) (bindingState=bound) │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) @@ -9802,11 +10172,11 @@ SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) } -35.563 ms/op +47.846 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 35.563 ms/op + 47.846 ms/op # JMH version: 1.37 @@ -9822,7 +10192,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 8) -# Run progress: 96.59% complete, ETA 00:00:50 +# Run progress: 96.59% complete, ETA 00:00:52 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9844,11 +10214,11 @@ GROUP BY ?drug HAVING(COUNT(DISTINCT ?target) >= 3) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001fff011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000007f8011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -41.725 ms/op +46.646 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -9856,23 +10226,23 @@ Projection ║ ProjectionElem "targetCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>=) - │ ║ │ Var (name=_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_06812531159aa9fe43e2b342134423568f13, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="3"^^) │ ║ └── Group (drug) │ ║ Difference - │ ║ ├── Filter + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optMol) (bindingState=bound) │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) │ ║ │ ╚══ LeftJoin - │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] - │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedAccessRows=15.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) - │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug], sharedJoinVars=[drug]) [right] │ ║ │ │ s: Var (name=drug) (bindingState=bound) │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) │ ║ │ │ o: Var (name=target) (bindingState=unbound) @@ -9884,7 +10254,7 @@ Projection │ ║ │ ╚══ ExtensionElem (optMol) │ ║ │ Var (name=mol) (bindingState=bound) │ ║ └── Union - │ ║ ╠══ Filter + │ ║ ╠══ Filter (plannedFilterEvidenceCount=5.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ║ ├── SameTerm │ ║ ║ │ Var (name=disease) (bindingState=bound) │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) @@ -9892,7 +10262,7 @@ Projection │ ║ ║ s: Var (name=drug) (bindingState=unbound) │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) - │ ║ ╚══ Filter + │ ║ ╚══ Filter (plannedFilterEvidenceCount=5.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) │ ║ ├── SameTerm │ ║ │ Var (name=disease) (bindingState=bound) │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) @@ -9900,13 +10270,13 @@ Projection │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) - │ ║ GroupElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) + │ ║ GroupElem (_anon_having_06812531159aa9fe43e2b342134423568f13) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) │ ║ GroupElem (targetCount) │ ║ Count (Distinct) │ ║ Var (name=target) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_5502e46dab9b03d04d828a3d944d408e63ee01234) + │ ╚══ ExtensionElem (_anon_having_06812531159aa9fe43e2b342134423568f13) │ Count (Distinct) │ Var (name=target) (bindingState=unbound) └── ExtensionElem (targetCount) @@ -9936,11 +10306,11 @@ SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { GROUP BY ?drug HAVING (COUNT(DISTINCT ?target) >= 3) -29.450 ms/op +32.197 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 29.450 ms/op + 32.197 ms/op # JMH version: 1.37 @@ -9956,7 +10326,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 9) -# Run progress: 97.73% complete, ETA 00:00:33 +# Run progress: 97.73% complete, ETA 00:00:34 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -9985,18 +10355,18 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { } WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00003ff8011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00001800011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -30.263 ms/op +39.017 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension ├── Group () - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── And │ ║ │ ╠══ ListMemberOperator │ ║ │ ║ Var (name=optDisease) (bindingState=bound) @@ -10014,12 +10384,12 @@ Projection │ ║ ║ │ ProjectionElem "avgEffect" │ ║ ║ └── Extension │ ║ ║ ╠══ Extension - │ ║ ║ ║ ├── Filter + │ ║ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ║ ║ │ ╠══ Compare (>) - │ ║ ║ ║ │ ║ Var (name=_anon_having_0025d4a630759f094f50983e40d4cbd8113a, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ Var (name=_anon_having_300493d00d85c5d645fc85785117835b1ff7012, anonymous) (bindingState=bound) │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) │ ║ ║ ║ │ ╚══ Group (drug) - │ ║ ║ ║ │ Filter + │ ║ ║ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ║ ║ │ ╠══ Compare (>) │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) @@ -10028,23 +10398,23 @@ Projection │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] - │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) - │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P, O]) [right] + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[arm, trial], sharedJoinVars=[trial]) [right] │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) - │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, trial], sharedJoinVars=[arm]) [right] │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) │ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) - │ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, drug, trial], sharedJoinVars=[arm]) [right] │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) - │ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] + │ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[arm, drug, result, trial], sharedJoinVars=[result]) [right] │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) @@ -10055,13 +10425,13 @@ Projection │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) - │ ║ ║ ║ │ GroupElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) + │ ║ ║ ║ │ GroupElem (_anon_having_300493d00d85c5d645fc85785117835b1ff7012) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) │ ║ ║ ║ │ GroupElem (avgEffect) │ ║ ║ ║ │ Avg │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) - │ ║ ║ ║ └── ExtensionElem (_anon_having_0025d4a630759f094f50983e40d4cbd8113a) + │ ║ ║ ║ └── ExtensionElem (_anon_having_300493d00d85c5d645fc85785117835b1ff7012) │ ║ ║ ║ Avg │ ║ ║ ║ Var (name=effect) (bindingState=unbound) │ ║ ║ ╚══ ExtensionElem (avgEffect) @@ -10105,11 +10475,11 @@ SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) } -20.363 ms/op +26.807 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 20.363 ms/op + 26.807 ms/op # JMH version: 1.37 @@ -10125,7 +10495,7 @@ Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": # Benchmark: org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery # Parameters: (themeName = PHARMA, z_queryIndex = 10) -# Run progress: 98.86% complete, ETA 00:00:16 +# Run progress: 98.86% complete, ETA 00:00:17 # Fork: 1 of 1 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called WARNING: sun.misc.Unsafe::objectFieldOffset has been called by org.openjdk.jmh.util.Utils (file:/Users/havardottestad/.m2/repository/org/openjdk/jmh/jmh-core/1.37/jmh-core-1.37.jar) @@ -10149,11 +10519,11 @@ GROUP BY ?pathway HAVING(COUNT(DISTINCT ?drug) > 1) WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x00000ff0011218a0 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) +WARNING: java.lang.System::load has been called by org.lwjgl.system.Library$$Lambda/0x000001e0011208a8 in an unnamed module (file:/Users/havardottestad/.m2/repository/org/lwjgl/lwjgl/3.4.1/lwjgl-3.4.1.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled -374.084 ms/op +3381.187 ms/op Iteration 1: ### Optimized Query ### Projection ╠══ ProjectionElemList @@ -10161,48 +10531,48 @@ Projection ║ ProjectionElem "drugCount" ╚══ Extension ├── Extension - │ ╠══ Filter + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) │ ║ ├── Compare (>) - │ ║ │ Var (name=_anon_having_483a537e636433f44b583e838d50a0511570123, anonymous) (bindingState=bound) + │ ║ │ Var (name=_anon_having_6590849393ac2f4eeca4ca51bb14e56ed8012345, anonymous) (bindingState=bound) │ ║ │ ValueConstant (value="1"^^) │ ║ └── Group (pathway) - │ ║ Filter + │ ║ Filter (plannedFilterEvidenceCount=135.7K, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_pattern) │ ║ ├── And │ ║ │ ╠══ Compare (!=) │ ║ │ ║ Var (name=optTrial) (bindingState=bound) │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) │ ║ │ ╚══ Exists - │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) + │ ║ │ Join (JoinIterator) (resultSizeEstimate=22) │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] - │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] - │ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) - │ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) - │ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) - │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] - │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[S, P], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, target, trial], sharedJoinVars=[arm]) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=bound) │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) - │ ║ │ ║ o: Var (name=result) (bindingState=bound) - │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] - │ ║ │ s: Var (name=trial) (bindingState=bound) - │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) - │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=22, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[O, P, S], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target, trial], sharedJoinVars=[marker, result]) [right] + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=bound) │ ║ └── LeftJoin - │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] - │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) - │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) - │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K, optimizer.candidateCount=9, optimizer.score=39223.5M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6680.0 rawRows=666.0 effectiveRows=666.0 baseCostRows=668.0 factorWorkRows=668.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=202880.0 rawRows=20000.0 effectiveRows=20000.0 baseCostRows=20288.0 factorWorkRows=20288.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=150740.0 rawRows=5006.0 effectiveRows=5006.0 baseCostRows=15074.0 factorWorkRows=15074.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=12324.705882352942 rawRows=20286.0 effectiveRows=20286.0 baseCostRows=20952.0 factorWorkRows=20952.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15738.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=20798.823529411766 rawRows=10033.0 effectiveRows=10033.0 baseCostRows=35358.0 factorWorkRows=35358.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug targets ?target) score=7835294.117647059 rawRows=1.332E7 effectiveRows=1.332E7 baseCostRows=1.332E7 factorWorkRows=20000.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15072.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug type Drug) score=3.922348235294118E10 rawRows=6.667992E10 effectiveRows=6.667992E10 baseCostRows=6.667992E10 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drug type Drug), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.chosenOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.scoreComponents=rawRows=6.667992E10, effectiveRows=6.667992E10, baseCostRows=6.667992E10, factorWorkRows=1.0, adjustedCost=3.922348235294118E10, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=3, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)]) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20.3K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)]) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=2.0K, resultSizeEstimate=666, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)]) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] - │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=unbound) │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) - │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) - │ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] - │ ║ ║ │ s: Var (name=target) (bindingState=bound) - │ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) - │ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) - │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ o: Var (name=target) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00, optimizer.candidateCount=9, optimizer.score=39223.5M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6680.0 rawRows=666.0 effectiveRows=666.0 baseCostRows=668.0 factorWorkRows=668.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=202880.0 rawRows=20000.0 effectiveRows=20000.0 baseCostRows=20288.0 factorWorkRows=20288.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=150740.0 rawRows=5006.0 effectiveRows=5006.0 baseCostRows=15074.0 factorWorkRows=15074.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=12324.705882352942 rawRows=20286.0 effectiveRows=20286.0 baseCostRows=20952.0 factorWorkRows=20952.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15738.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=20798.823529411766 rawRows=10033.0 effectiveRows=10033.0 baseCostRows=35358.0 factorWorkRows=35358.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug targets ?target) score=7835294.117647059 rawRows=1.332E7 effectiveRows=1.332E7 baseCostRows=1.332E7 factorWorkRows=20000.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15072.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug type Drug) score=3.922348235294118E10 rawRows=6.667992E10 effectiveRows=6.667992E10 baseCostRows=6.667992E10 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drug type Drug), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=6.667992E10, effectiveRows=6.667992E10, baseCostRows=6.667992E10, factorWorkRows=1.0, adjustedCost=3.922348235294118E10, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=3, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [right] │ ║ ╚══ Extension [right] │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) │ ║ │ s: Var (name=drug) (bindingState=bound) @@ -10210,13 +10580,13 @@ Projection │ ║ │ o: Var (name=trial) (bindingState=unbound) │ ║ └── ExtensionElem (optTrial) │ ║ Var (name=trial) (bindingState=bound) - │ ║ GroupElem (_anon_having_483a537e636433f44b583e838d50a0511570123) + │ ║ GroupElem (_anon_having_6590849393ac2f4eeca4ca51bb14e56ed8012345) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) │ ║ GroupElem (drugCount) │ ║ Count (Distinct) │ ║ Var (name=drug) (bindingState=bound) - │ ╚══ ExtensionElem (_anon_having_483a537e636433f44b583e838d50a0511570123) + │ ╚══ ExtensionElem (_anon_having_6590849393ac2f4eeca4ca51bb14e56ed8012345) │ Count (Distinct) │ Var (name=drug) (bindingState=unbound) └── ExtensionElem (drugCount) @@ -10224,25 +10594,25 @@ Projection Var (name=drug) (bindingState=unbound) SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { - ?drug a . - ?drug ?target . ?target ?pathway . + ?drug ?target . + ?drug a . VALUES ?marker { } OPTIONAL { ?drug ?trial . BIND(?trial AS ?optTrial) } - FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) + FILTER ((?optTrial != ) && EXISTS { ?trial ?arm . ?arm ?result . ?result ?marker . }) } GROUP BY ?pathway HAVING (COUNT(DISTINCT ?drug) > 1) -258.264 ms/op +2381.539 ms/op Result "org.eclipse.rdf4j.sail.lmdb.benchmark.ThemeQueryBenchmark.executeQuery": - 258.264 ms/op + 2381.539 ms/op -# Run complete. Total time: 00:24:42 +# Run complete. Total time: 00:25:36 ``` diff --git a/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-social_media-q4-a2e7123ce1edb4e6b0ea2149dd73e2879f0f6ee4022d56069c1590ab03f00c95-20260419-230722364-461a7724.json b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-social_media-q4-a2e7123ce1edb4e6b0ea2149dd73e2879f0f6ee4022d56069c1590ab03f00c95-20260419-230722364-461a7724.json new file mode 100644 index 00000000000..bf299463afc --- /dev/null +++ b/testsuites/benchmark/src/main/resources/plan/cli/lmdb/lmdb-social_media-q4-a2e7123ce1edb4e6b0ea2149dd73e2879f0f6ee4022d56069c1590ab03f00c95-20260419-230722364-461a7724.json @@ -0,0 +1,479 @@ +{ + "formatVersion" : "1", + "capturedAt" : "2026-04-19T23:07:22.364354Z", + "queryId" : "lmdb-social_media-q4", + "queryString" : "PREFIX social: \nPREFIX xsd: \nSELECT (COUNT(DISTINCT ?u) AS ?count) WHERE {\n VALUES ?u { \n \n \n \n }\n VALUES ?v { \n \n \n \n }\n FILTER(?u != ?v)\n ?u social:follows ?v .\n FILTER NOT EXISTS { ?u social:follows ?u . }\n OPTIONAL { ?v social:name ?optName . }\n FILTER(?optName != \"\")\n}", + "unoptimizedFingerprint" : "a2e7123ce1edb4e6b0ea2149dd73e2879f0f6ee4022d56069c1590ab03f00c95", + "metadata" : { + "store" : "lmdb", + "theme" : "SOCIAL_MEDIA", + "querySource" : "theme-index", + "runName" : "codex-join-planner-candidate", + "queryTimeoutSeconds" : "60", + "queryIndex" : "4", + "queryName" : "Social: follows among users 7-11", + "expectedCount" : "1", + "benchmark" : "QueryPlanSnapshotCli", + "queryString.sha256" : "9786d512bfb7629359030b4ca8df278af0f4f86df94e1a29c210584e7f709a2a", + "queryString.normalizedWhitespaceSha256" : "a9f28e89cc2fee709833390764bb9bcc8b474ea991f8e243198f316dd1fc79c2", + "optimizerInput.unoptimizedStructureRawSha256" : "121a7054c1bf9fd077986aa13c89e8c8cfc55fd032eab003c28e0e35d7253775", + "optimizerInput.unoptimizedStructureNormalizedSha256" : "bd3b0e3cdc5b2b4979960b3d1ea7540d88c455e41b913856672a8c4f5556bab5", + "optimizerInput.unoptimizedAnonymousTypeTokenCount" : "2", + "gitCommit" : "23d13737dea194e857cc16ad3aea3826adbda90e", + "gitBranch" : "sketch-based-optimizer-4", + "javaVersion" : "26", + "queryString.charCount" : "860", + "queryString.lineCount" : "19", + "runtime.javaVendor" : "Azul Systems, Inc.", + "runtime.javaVmName" : "OpenJDK 64-Bit Server VM", + "runtime.osName" : "Mac OS X", + "runtime.osVersion" : "26.4.1", + "runtime.osArch" : "aarch64", + "runtime.availableProcessors" : "16", + "runtime.maxMemoryBytes" : "15271460864", + "runtime.timeZone" : "Europe/Oslo", + "optimizerInput.unoptimizedRootTypeNormalized" : "Projection", + "optimizerInput.unoptimizedPlanNodeCount" : "43", + "optimizerInput.unoptimizedJoinNodeCount" : "3", + "optimizerInput.unoptimizedFilterNodeCount" : "4", + "optimizerInput.unoptimizedStatementPatternCount" : "3", + "optimizerInput.unoptimizedJoinAlgorithmCounts" : "=3", + "optimizerInput.unoptimizedEstimatesMultisetSignatureSha256" : "9b1662733a11c64a7f502b3acbb869092d1412cdeecf86261f4b2dce4df225d8", + "optimizerInput.unoptimizedStatementPatternEstimatesMultisetSignatureSha256" : "56da7b58f14d73052e67d4639de82f289a0d43ae89493943716818ac19486c04", + "optimizerOutput.optimizedRootTypeNormalized" : "Projection", + "optimizerOutput.optimizedPlanNodeCount" : "42", + "optimizerOutput.optimizedJoinNodeCount" : "3", + "optimizerOutput.optimizedFilterNodeCount" : "3", + "optimizerOutput.optimizedStatementPatternCount" : "3", + "optimizerOutput.optimizedJoinAlgorithmCounts" : "=1,JoinIterator=2", + "optimizerOutput.optimizedStructureNormalizedSha256" : "0e5544e941cf4f0bed713652453e72bdb8d01abfc3a158dec81c74aeb48831ad", + "optimizerOutput.optimizedEstimatesMultisetSignatureSha256" : "ebc79ac658529bb636df4b8b28a872ea02731e3958f8cbc94d5da28763517798", + "optimizerOutput.optimizedStatementPatternEstimatesMultisetSignatureSha256" : "a00359b9c7cf96113789b040815143b2da6a70b00cf0bda213cd0b6d710f1184", + "executionPlan.executedRootTypeNormalized" : "Projection", + "executionPlan.executedPlanNodeCount" : "42", + "executionPlan.executedJoinNodeCount" : "3", + "executionPlan.executedFilterNodeCount" : "3", + "executionPlan.executedStatementPatternCount" : "3", + "executionPlan.executedJoinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=2", + "executionPlan.executedStructureNormalizedSha256" : "35b1d4e8002c062597bad7d1cb2aa4ef76636fe3cd6f60f12e7beed23b0eabdc", + "executionPlan.executedEstimatesMultisetSignatureSha256" : "7254a56b5ba70a89da340755bcefc7f6f3b6030ba00018d0ae39f19afb1e1334", + "executionPlan.executedStatementPatternEstimatesMultisetSignatureSha256" : "a00359b9c7cf96113789b040815143b2da6a70b00cf0bda213cd0b6d710f1184", + "executionPlan.executedModeledWorkUnits" : "374.7499999999999994", + "executionPlan.executedModeledInputRowsSum" : "280", + "executionPlan.executedModeledOutputRowsSum" : "272", + "executionPlan.executedModeledSelfTimeActualSum" : "0", + "executionPlan.executedModeledTotalTimeActualSum" : "0", + "executionPlan.executedModeledBarrierCount" : "4", + "executionPlan.executedModeledJoinInputRowsSum" : "172", + "executionPlan.executedModeledJoinOutputRowsSum" : "88", + "executionPlan.executedModeledFilterInputRowsSum" : "88", + "executionPlan.executedModeledFilterOutputRowsSum" : "88", + "executionPlan.executedModeledFilterPassRatio" : "1", + "executionPlan.executedModeledFilterRejectRatio" : "0", + "executionPlan.executedModeledWorkByCategory" : "distinct=0;extension=3;filter=26.3999999999999994;group=6.3;join=260;projection=0.05;scan=79;unknown=0", + "executionPlan.executedModeledOperatorCountByCategory" : "distinct=2;extension=6;filter=3;group=2;join=3;projection=3;scan=3;unknown=20", + "executionPlan.executedModeledInputRowsByCategory" : "distinct=0;extension=15;filter=88;group=9;join=88;projection=1;scan=79;unknown=0", + "executionPlan.executedModeledOutputRowsByCategory" : "distinct=0;extension=15;filter=88;group=1;join=88;projection=1;scan=79;unknown=0", + "executionPlan.executedModeledJoinWorkByAlgorithm" : "JoinIterator=233;LeftJoinIterator=27", + "executionPlan.executedModeledWorkVector" : "workUnits=374.7499999999999994|barrierCount=4|joinInputRowsSum=172|joinOutputRowsSum=88|operatorCountByCategory=distinct=2;extension=6;filter=3;group=2;join=3;projection=3;scan=3;unknown=20|joinWorkByAlgorithm=JoinIterator=233;LeftJoinIterator=27|categories=distinct=0;extension=3;filter=26.3999999999999994;group=6.3;join=260;projection=0.05;scan=79;unknown=0", + "executionPlan.executedModeledWorkVectorSignatureSha256" : "f1134bb1c3411079711ece97a8aeb963f8f45ffe23b9cf62ad1fc8015a35f8b9", + "executionPlan.executedOperatorWorkBreakdownSignatureSha256" : "de8bb28b79d696ec43dd9d4cb26a017ef9eee6e9d6295908a016c33676aa15da", + "executionPlan.executedOperatorWorkTopContributors" : "Join[JoinIterator]:233;StatementPattern [index: ospc] [UNKNOWN]:70;LeftJoin[LeftJoinIterator]:27;Filter[UNKNOWN]:26.3999999999999994;StatementPattern [index: spoc] [UNKNOWN]:9;Group ()[UNKNOWN]:6.3;BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]:1.8;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]:1", + "executionPlan.executedEstimateActualComparableNodeCount" : "7", + "executionPlan.executedHasNextCallCountSum" : "366", + "executionPlan.executedHasNextTrueCountSum" : "195", + "executionPlan.executedHasNextTimeNanosSum" : "83571661", + "executionPlan.executedNextCallCountSum" : "194", + "executionPlan.executedNextTimeNanosSum" : "540876", + "executionPlan.executedJoinRightIteratorCreateCountSum" : "168", + "executionPlan.executedJoinLeftBindingSetConsumedCountSum" : "252", + "executionPlan.executedJoinRightBindingSetConsumedCountSum" : "176", + "executionPlan.executedJoinRightBindingsPerLeftRatio" : "0.698413", + "executionPlan.executedJoinTelemetryNodeCount" : "3", + "executionPlan.executedJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.047619", + "executionPlan.executedJoinRightIteratorCreatePerJoinNodeAverage" : "56", + "executionPlan.executedJoinLeftBindingSetConsumedPerJoinNodeAverage" : "84", + "executionPlan.executedJoinRightBindingSetConsumedPerJoinNodeAverage" : "58.666667", + "executionPlan.executedSourceRowsScannedSum" : "1012", + "executionPlan.executedSourceRowsMatchedSum" : "167", + "executionPlan.executedSourceRowsFilteredSum" : "845", + "executionPlan.executedSourceFilterOutRatio" : "0.83498", + "executionPlan.executedHasNextPerNextRatio" : "1.886598", + "executionPlan.executedHasNextTruePerNextRatio" : "1.005155", + "executionPlan.executedEstimateActualQErrorP95" : "143748", + "executionPlan.executedEstimateActualQErrorMax" : "143748", + "executionPlan.executedJoinEstimateActualComparableNodeCount" : "2", + "executionPlan.executedJoinEstimateActualQErrorP95" : "38.888888888889", + "executionPlan.executedJoinEstimateActualQErrorMax" : "38.888888888889", + "featureFlags.sha256" : "df59ca1197f3937d894f4a8d884a26ee262c7c743418e54aee6f615d315bd607", + "planDeterminism.inputFingerprintSha256" : "256856a80328b71e41df6d639b178f4ea62c5dd9982a725967eca7895aacc282", + "planDeterminism.environmentFingerprintSha256" : "709e4e76041542f722a21b7a70de1f5a639ffbb66b73c0bb78aecdea4d49feee", + "execution.runs" : "1", + "execution.resultCount" : "1", + "execution.totalMillis" : "18", + "execution.averageMillis" : "18", + "execution.minMillis" : "18", + "execution.maxMillis" : "18", + "execution.stdDevMillis" : "0", + "execution.coefficientOfVariationPct" : "0.0000", + "execution.sampleMillis" : "18", + "execution.verificationStatus" : "max-runs-reached", + "execution.optimizedPlanHashCount" : "1", + "execution.optimizedPlanHashStable" : "true", + "execution.optimizedPlanHashes" : "0e5544e941cf4f0bed713652453e72bdb8d01abfc3a158dec81c74aeb48831ad|ebc79ac658529bb636df4b8b28a872ea02731e3958f8cbc94d5da28763517798|a00359b9c7cf96113789b040815143b2da6a70b00cf0bda213cd0b6d710f1184", + "execution.optimizedPlanHashTransitionCount" : "0", + "execution.optimizedPlanHashSequence" : "0e5544e941cf4f0bed713652453e72bdb8d01abfc3a158dec81c74aeb48831ad|ebc79ac658529bb636df4b8b28a872ea02731e3958f8cbc94d5da28763517798|a00359b9c7cf96113789b040815143b2da6a70b00cf0bda213cd0b6d710f1184", + "execution.failureRun" : "", + "execution.failureClass" : "", + "execution.failureMessage" : "", + "execution.failureCauseClass" : "", + "execution.failureCauseMessage" : "", + "execution.failurePlanHash" : "", + "execution.softLimitReached" : "false", + "execution.maxRunsReached" : "true" + }, + "featureFlags" : { + "cli.store" : "lmdb", + "cli.theme" : "SOCIAL_MEDIA", + "cli.querySource" : "theme-index", + "cli.persist" : "true", + "cli.runName" : "codex-join-planner-candidate", + "cli.queryTimeoutSeconds" : "60", + "cli.executionRepeatMinRuns" : "1", + "cli.executionRepeatMaxRuns" : "1", + "cli.executionRepeatSoftLimitMillis" : "30000", + "cli.queryIndex" : "4", + "lmdbStore.writable" : "true", + "lmdbConfig.tripleIndexes" : "spoc,ospc,psoc", + "lmdbConfig.forceSync" : "false", + "lmdbConfig.pageCardinalityEstimator" : "true", + "lmdbConfig.autoGrow" : "true", + "lmdbConfig.valueDbSize" : "1073741824", + "lmdbConfig.tripleDbSize" : "1073741824", + "lmdbData.fullyLoadedSizeBytes" : "2889358551", + "lmdbData.reusedWithoutReload" : "false" + }, + "explanations" : { + "unoptimized" : { + "level" : "Unoptimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=optName)\n │ ║ │ ValueConstant (value=\"\")\n │ ║ └── Filter\n │ ║ ╠══ Not\n │ ║ ║ Exists\n │ ║ ║ Filter\n │ ║ ║ ├── SameTerm\n │ ║ ║ │ Var (name=u)\n │ ║ ║ │ Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\n │ ║ ║ └── StatementPattern\n │ ║ ║ s: Var (name=u)\n │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n │ ║ ║ o: Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\n │ ║ ╚══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=u)\n │ ║ │ Var (name=v)\n │ ║ └── LeftJoin\n │ ║ ╠══ Join [left]\n │ ║ ║ ├── Join [left]\n │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\n │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])\n │ ║ ║ └── StatementPattern [right]\n │ ║ ║ s: Var (name=u)\n │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n │ ║ ║ o: Var (name=v)\n │ ║ ╚══ StatementPattern [right]\n │ ║ s: Var (name=v)\n │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\n │ ║ o: Var (name=optName)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=u)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=u)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optName)\"\n }, {\n \"type\" : \"ValueConstant (value=\\\"\\\")\"\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Not\",\n \"plans\" : [ {\n \"type\" : \"Exists\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"SameTerm\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\"\n }, {\n \"type\" : \"Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\"\n }, {\n \"type\" : \"Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\"\n }, {\n \"type\" : \"Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\"\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\"\n }, {\n \"type\" : \"Var (name=v)\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\"\n }, {\n \"type\" : \"BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])\"\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\"\n }, {\n \"type\" : \"Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\"\n }, {\n \"type\" : \"Var (name=v)\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"plans\" : [ {\n \"type\" : \"Var (name=v)\"\n }, {\n \"type\" : \"Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=optName)\"\n } ]\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\"\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\"\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (!=)\n Var (name=optName)\n ValueConstant (value=\"\")\n Filter\n Not\n Exists\n Filter\n SameTerm\n Var (name=u)\n Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\n StatementPattern\n Var (name=u)\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\n Filter\n Compare (!=)\n Var (name=u)\n Var (name=v)\n LeftJoin\n Join\n Join\n BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\n BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])\n StatementPattern\n Var (name=u)\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n Var (name=v)\n StatementPattern\n Var (name=v)\n Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\n Var (name=optName)\n GroupElem (count)\n Count (Distinct)\n Var (name=u)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=u)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (!=)\\n Var (name=optName)\\n ValueConstant (value=\\\"\\\")\\n Filter\\n Not\\n Exists\\n Filter\\n SameTerm\\n Var (name=u)\\n Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\\n StatementPattern\\n Var (name=u)\\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\\n Var (name=_anon_path_305d76019e85b4b388c0e0befebd4917b012, anonymous)\\n Filter\\n Compare (!=)\\n Var (name=u)\\n Var (name=v)\\n LeftJoin\\n Join\\n Join\\n BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\\n BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])\\n StatementPattern\\n Var (name=u)\\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\\n Var (name=v)\\n StatementPattern\\n Var (name=v)\\n Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\\n Var (name=optName)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=u)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=u)\\n\",\n \"fingerprintSha256\" : \"a2e7123ce1edb4e6b0ea2149dd73e2879f0f6ee4022d56069c1590ab03f00c95\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAZRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAFGRvdWJsZU1ldHJpY3NQbGFubmVkcQB+AARMABFsb25nTWV0cmljc0FjdHVhbHEAfgAETAASbG9uZ01ldHJpY3NQbGFubmVkcQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AARMABRzdHJpbmdNZXRyaWNzUGxhbm5lZHEAfgAEeHAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3IAHmphdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eU1hcFk2FIVa3OfQAgAAeHBxAH4ACHEAfgAIcQB+AAhwcQB+AAhxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25pUjwGTxw7UgIAA1oACHN1YnF1ZXJ5TAAMcHJvakVsZW1MaXN0dAA0TG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW1MaXN0O0wAEXByb2plY3Rpb25Db250ZXh0dAAlTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFyO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAGcQB+AAhxAH4ACHNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbtQK4vJzVJ/OAgABTAAIZWxlbWVudHN0ABBMamF2YS91dGlsL0xpc3Q7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AAxxAH4ACHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AA54cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AD3EAfgAIcQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnQAK0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1ZhbHVlRXhwcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AEnEAfgAIcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AFXEAfgAIcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AFnEAfgAIcQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9ucQB+ABR4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlUdXBsZU9wZXJhdG9yPpjeZGh0c4wCAANMAA1hbGdvcml0aG1OYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7TAAHbGVmdEFyZ3EAfgACTAAIcmlnaHRBcmdxAH4AAnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAXcQB+AAhxAH4ACHBzcgAkb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Kb2lulFnVr1+JugQCAAJaAAljYWNoZWFibGVaAAltZXJnZUpvaW54cQB+ABkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AG3EAfgAIcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AB1xAH4ACHEAfgAIcHNyADRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmRpbmdTZXRBc3NpZ25tZW50N9Z2Fr6OiCMCAAJMAAxiaW5kaW5nTmFtZXNxAH4AEUwAC2JpbmRpbmdTZXRzdAAUTGphdmEvbGFuZy9JdGVyYWJsZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AHnEAfgAIcQB+AAhzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hTZXTYbNdald0qHgIAAHhyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAAAI/QAAAAAAAAXQAAXV4c3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAV3BAAAAAVzcgArb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuaW1wbC5MaXN0QmluZGluZ1NldNelYuv0tawhAgADTAAMYmluZGluZ05hbWVzcQB+AA5MABRiaW5kaW5nTmFtZXNTZXRDYWNoZXEAfgARTAAGdmFsdWVzcQB+AA54cgAqb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuQWJzdHJhY3RCaW5kaW5nU2V02//Sk443PUACAAB4cHNxAH4AJgAAAAF3BAAAAAFxAH4AJXhwc3IAGmphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN02aQ8vs2IBtICAAFbAAFhdAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwdXIAIFtMb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuVmFsdWU70OsStIdIedYCAAB4cAAAAAFzcgAmb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVJUkmaRSpDk2ZGbgIAAkkADGxvY2FsTmFtZUlkeEwACWlyaVN0cmluZ3EAfgAaeHIAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RJUklsPw86B5HwlgIAAUkADmNhY2hlZEhhc2hDb2RleHAAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci83c3EAfgAoc3EAfgAmAAAAAXcEAAAAAXEAfgAleHBzcQB+ACx1cQB+AC8AAAABc3EAfgAxAAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOHNxAH4AKHNxAH4AJgAAAAF3BAAAAAFxAH4AJXhwc3EAfgAsdXEAfgAvAAAAAXNxAH4AMQAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzlzcQB+AChzcQB+ACYAAAABdwQAAAABcQB+ACV4cHNxAH4ALHVxAH4ALwAAAAFzcQB+ADEAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMHNxAH4AKHNxAH4AJgAAAAF3BAAAAAFxAH4AJXhwc3EAfgAsdXEAfgAvAAAAAXNxAH4AMQAAAAD/////dAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzExeHNxAH4AHwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAecQB+AAhxAH4ACHNxAH4AIncMAAAAAj9AAAAAAAABdAABdnhzcQB+ACYAAAAFdwQAAAAFc3EAfgAoc3EAfgAmAAAAAXcEAAAAAXEAfgBPeHBzcQB+ACx1cQB+AC8AAAABc3EAfgAxAAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvN3NxAH4AKHNxAH4AJgAAAAF3BAAAAAFxAH4AT3hwc3EAfgAsdXEAfgAvAAAAAXNxAH4AMQAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzhzcQB+AChzcQB+ACYAAAABdwQAAAABcQB+AE94cHNxAH4ALHVxAH4ALwAAAAFzcQB+ADEAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85c3EAfgAoc3EAfgAmAAAAAXcEAAAAAXEAfgBPeHBzcQB+ACx1cQB+AC8AAAABc3EAfgAxAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvMTBzcQB+AChzcQB+ACYAAAABdwQAAAABcQB+AE94cHNxAH4ALHVxAH4ALwAAAAFzcQB+ADEAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMXgAAHNyADBvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm418/6mbe73UgIACUwAE2Fzc3VyZWRCaW5kaW5nTmFtZXNxAH4AEUwACmNvbnRleHRWYXJxAH4AC0wACWluZGV4TmFtZXEAfgAaTAAJb2JqZWN0VmFycQB+AAtMAAxwcmVkaWNhdGVWYXJxAH4AC0wABXNjb3BldAA4TG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvU3RhdGVtZW50UGF0dGVybiRTY29wZTtMAA5zdGF0ZW1lbnRPcmRlcnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9jb21tb24vb3JkZXIvU3RhdGVtZW50T3JkZXI7TAAKc3ViamVjdFZhcnEAfgALTAAHdmFyTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AB1xAH4ACHEAfgAIc3IAP29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTbWFsbFN0cmluZ1NldHm8SKeF/XlAAgABWwAGdmFsdWVzdAATW0xqYXZhL2xhbmcvU3RyaW5nO3hwdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAA3QAAXV0ABNfY29uc3RfOWM2OGUxMmFfdXJpdAABdnBwc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgAaTAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AHJxAH4ACHEAfgAIAAAAAAAAcQB+AHpwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AHJxAH4ACHEAfgAIAQAAAAABcQB+AHlzcQB+ADEAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvZm9sbG93c35yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgBycQB+AAhxAH4ACAAAAAAAAHEAfgB4cHAAAHNxAH4AbwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAbcQB+AAhxAH4ACHNxAH4Ac3VxAH4AdgAAAAN0AAF2dAATX2NvbnN0XzdkMTdiOTQzX3VyaXQAB29wdE5hbWVwcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCGcQB+AAhxAH4ACAAAAAAAAHEAfgCLcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCGcQB+AAhxAH4ACAEAAAAAAXEAfgCKc3EAfgAxAAAAAP////90ACRodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL25hbWVxAH4Ag3BzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AhnEAfgAIcQB+AAgAAAAAAABxAH4AiXBwcHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAUTAAIcmlnaHRBcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAXcQB+AAhxAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCUcQB+AAhxAH4ACAAAAAAAAHQAAXVwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AJRxAH4ACHEAfgAIAAAAAAAAdAABdnB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgCCdAACTkVzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Ob3RnH0YDJbi1xAIAAHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ABR4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AFnEAfgAIcQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5FeGlzdHMt7GYHD13wBwIAAHhyADVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN1YlF1ZXJ5VmFsdWVPcGVyYXRvcphLAL1HUXRXAgABTAAIc3ViUXVlcnlxAH4AAnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCecQB+AAhxAH4ACHNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgChcQB+AAhxAH4ACHNxAH4AbwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCicQB+AAhxAH4ACHNxAH4Ac3VxAH4AdgAAAAN0AAF1dAATX2NvbnN0XzljNjhlMTJhX3VyaXQAL19hbm9uX3BhdGhfMzA1ZDc2MDE5ZTg1YjRiMzg4YzBlMGJlZmViZDQ5MTdiMDEycHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Ao3EAfgAIcQB+AAgBAAAAAABxAH4AqHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Ao3EAfgAIcQB+AAgBAAAAAAFxAH4Ap3NxAH4AMQAAAAD/////dAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC9mb2xsb3dzcQB+AINwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AKNxAH4ACHEAfgAIAAAAAAAAcQB+AKZwcHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlNhbWVUZXJtIqx0VpK6rLQCAAB4cQB+AJMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AonEAfgAIcQB+AAhzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Ar3EAfgAIcQB+AAgAAAAAAAB0AAF1cHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCvcQB+AAhxAH4ACAEAAAAAAHEAfgCocHNxAH4AkQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAVcQB+AAhxAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCzcQB+AAhxAH4ACAAAAAAAAHQAB29wdE5hbWVwc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFsdWVDb25zdGFudDY0XwF1yivGAgABTAAFdmFsdWVxAH4AfHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCzcQB+AAhxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AGkwACGxhbmd1YWdlcQB+ABp4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHEAfgCCdAAGU1RSSU5Hc3IAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuSW50ZXJuZWRJUkkCWUYAhQt1BwMABEkACGhhc2hDb2RlTAAJbG9jYWxOYW1lcQB+ABpMAAluYW1lc3BhY2VxAH4AGkwAC3N0cmluZ1ZhbHVlcQB+ABp4cHcv4u7HGAAhaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjAAZzdHJpbmd4dAAAcHEAfgCac3EAfgAidwwAAAAQP0AAAAAAAAB4c3EAfgAmAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAaTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AEnEAfgAIcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhxAH4AnQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDHcQB+AAhxAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDLcQB+AAhxAH4ACAAAAAAAAHQAAXVwAXhzcQB+ACYAAAABdwQAAAABc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9uRWxlbfVEWvAL0OgoAgACTAAEZXhwcnEAfgAUTAAEbmFtZXEAfgAaeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AA9xAH4ACHEAfgAIc3EAfgDJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ANBxAH4ACHEAfgAIc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ANFxAH4ACHEAfgAIAAAAAAAAcQB+AM1wAXEAfgDIeAFzcgAyb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbUxpc3QCUnr8xPJE+wIAAlsACGVsZW1lbnRzdAAxW0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1Byb2plY3Rpb25FbGVtO0wADGVsZW1lbnRzTGlzdHEAfgAOeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AAxxAH4ACHEAfgAIdXIAMVtMb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbTvQZ7aj4s4U9QIAAHhwAAAAAXNyAC5vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25FbGVtjy0bqfliaQ4CAARaAB1hZ2dyZWdhdGVPcGVyYXRvckluRXhwcmVzc2lvbkwABG5hbWVxAH4AGkwAD3Byb2plY3Rpb25BbGlhc3EAfgAaTAAQc291cmNlRXhwcmVzc2lvbnQAL0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL0V4dGVuc2lvbkVsZW07eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ANVxAH4ACHEAfgAIAXEAfgDIcHNxAH4AzwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHNxAH4ADQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHNxAH4ACQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHNxAH4AAAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHBxAH4ACHEAfgAIcQB+AN1xAH4ACHEAfgAIcQB+ANwBc3EAfgDTAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AN1xAH4ACHEAfgAIdXEAfgDWAAAAAXNxAH4A2AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDfcQB+AAhxAH4ACAFxAH4AyHBxAH4A23NyACZqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlTGlzdPwPJTG17I4QAgABTAAEbGlzdHEAfgAOeHIALGphdmEudXRpbC5Db2xsZWN0aW9ucyRVbm1vZGlmaWFibGVDb2xsZWN0aW9uGUIAgMte9x4CAAFMAAFjdAAWTGphdmEvdXRpbC9Db2xsZWN0aW9uO3hwc3EAfgAmAAAAAXcEAAAAAXEAfgDheHEAfgDmcHEAfgAIcQB+AAhzcQB+ABAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A3HEAfgAIcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A53EAfgAIcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A6HEAfgAIcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A6XEAfgAIcQB+AAhzcQB+ABgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A6nEAfgAIcQB+AAhwc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AOtxAH4ACHEAfgAIcHNxAH4AHAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDscQB+AAhxAH4ACHBzcQB+AB8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A7XEAfgAIcQB+AAhxAH4AJHEAfgAnc3EAfgAfAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AO1xAH4ACHEAfgAIcQB+AE5xAH4AUAAAc3EAfgBvAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AOxxAH4ACHEAfgAIcQB+AHVwcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDwcQB+AAhxAH4ACAAAAAAAAHEAfgB6cHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDwcQB+AAhxAH4ACAEAAAAAAXEAfgB5cQB+AH9xAH4Ag3BzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A8HEAfgAIcQB+AAgAAAAAAABxAH4AeHBwAABzcQB+AG8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A63EAfgAIcQB+AAhxAH4Ah3Bwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+APRxAH4ACHEAfgAIAAAAAAAAcQB+AItwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+APRxAH4ACHEAfgAIAQAAAAABcQB+AIpxAH4AjnEAfgCDcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgD0cQB+AAhxAH4ACAAAAAAAAHEAfgCJcHBwc3EAfgCRAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AOpxAH4ACHEAfgAIc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+APhxAH4ACHEAfgAIAAAAAAAAcQB+AJZwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+APhxAH4ACHEAfgAIAAAAAAAAcQB+AJhwcQB+AJpzcQB+AJwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A6XEAfgAIcQB+AAhzcQB+AJ8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A+3EAfgAIcQB+AAhzcQB+ABMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A/HEAfgAIcQB+AAhzcQB+AG8AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A/XEAfgAIcQB+AAhwcHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A/nEAfgAIcQB+AAgBAAAAAABxAH4AqHBzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A/nEAfgAIcQB+AAgBAAAAAAFxAH4Ap3EAfgCrcQB+AINwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AP5xAH4ACHEAfgAIAAAAAAAAcQB+AKZwcHNxAH4ArgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgD9cQB+AAhxAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgECcQB+AAhxAH4ACAAAAAAAAHEAfgCxcHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgECcQB+AAhxAH4ACAEAAAAAAHEAfgCocHNxAH4AkQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDocQB+AAhxAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEFcQB+AAhxAH4ACAAAAAAAAHEAfgC1cHNxAH4AtgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEFcQB+AAhxAH4ACHEAfgC8cQB+AJpzcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+ACYAAAABdwQAAAABc3EAfgDFAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AOdxAH4ACHEAfgAIcQB+AMhzcQB+AMkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BC3EAfgAIcQB+AAhzcQB+AHsAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BDHEAfgAIcQB+AAgAAAAAAABxAH4AzXABeHNxAH4AJgAAAAF3BAAAAAFxAH4A23hxAH4ACHEAfgAIc3EAfgDJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ANtxAH4ACHEAfgAIc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AQ9xAH4ACHEAfgAIAAAAAAAAcQB+AM1wAXEAfgDIc3EAfgAscQB+ANdw\"\n}", + "debugMetrics" : { + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "43", + "maxDepth" : "10", + "leafNodeCount" : "20", + "maxBranchingFactor" : "3", + "joinNodeCount" : "3", + "filterNodeCount" : "4", + "statementPatternCount" : "3", + "anonymousTypeTokenCount" : "2", + "joinAlgorithmCounts" : "=3", + "structureSignatureRawSha256" : "121a7054c1bf9fd077986aa13c89e8c8cfc55fd032eab003c28e0e35d7253775", + "structureSignatureNormalizedSha256" : "bd3b0e3cdc5b2b4979960b3d1ea7540d88c455e41b913856672a8c4f5556bab5", + "joinAlgorithmSignatureSha256" : "b115aa5ca4627754b22199560e574fc1bf240ca62a4295fd9775211b7d7f6be2", + "actualResultSizesSignatureSha256" : "ddac4e3c248715639ecc69fe4312b3cafae078b86fe50d32988ee05abcf11642", + "estimatesSignatureSha256" : "b17e4fb49ffc70bb2e21ce11a57fe105fd1b9baa3f660bde5f971bc7426d0673", + "joinAlgorithmMultisetSignatureSha256" : "837269b3fa7e16c538134a82cc27d0052f7446ba172bf5ee2a8c3789bf48b19f", + "actualResultSizesMultisetSignatureSha256" : "0ca70fb469739543940b6e25c1949b2e7218f5341852e6c6754b0d32da55f6f0", + "estimatesMultisetSignatureSha256" : "9b1662733a11c64a7f502b3acbb869092d1412cdeecf86261f4b2dce4df225d8", + "statementPatternEstimatesMultisetSignatureSha256" : "56da7b58f14d73052e67d4639de82f289a0d43ae89493943716818ac19486c04", + "statementPatternEstimateTokenCount" : "3", + "modeledWorkUnits" : "0", + "modeledInputRowsSum" : "0", + "modeledOutputRowsSum" : "0", + "modeledJoinInputRowsSum" : "0", + "modeledJoinOutputRowsSum" : "0", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;path=0;projection=0;scan=0;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=4;filter=4;group=2;join=3;path=2;projection=3;scan=3;unknown=20", + "modeledOperatorCountByCategorySignatureSha256" : "1073043c3a46705599abc6de11b2e6caffcd5fd10855f0e294a232ece604a117", + "modeledInputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;path=0;projection=0;scan=0;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "87b24ea62a60f34f01f4a6977e658f89548e12efab24aeef23d5fb055f47e369", + "modeledOutputRowsByCategory" : "distinct=0;extension=0;filter=0;group=0;join=0;path=0;projection=0;scan=0;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "87b24ea62a60f34f01f4a6977e658f89548e12efab24aeef23d5fb055f47e369", + "modeledFilterInputRowsSum" : "0", + "modeledFilterOutputRowsSum" : "0", + "modeledFilterPassRatio" : "0", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "b3ee88ec20793a9d2154fe9c8c4e612f4353c323505e35d8d756ae8867621cb5", + "modeledWorkVector" : "workUnits=0|barrierCount=4|joinInputRowsSum=0|joinOutputRowsSum=0|operatorCountByCategory=distinct=2;extension=4;filter=4;group=2;join=3;path=2;projection=3;scan=3;unknown=20|joinWorkByAlgorithm=UNKNOWN=0|categories=distinct=0;extension=0;filter=0;group=0;join=0;path=0;projection=0;scan=0;unknown=0", + "modeledWorkVectorSignatureSha256" : "9f04ec186d2045b86c4e0256cd56db6815c3549cbe506af5832b292a817641d0", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Exists[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=4|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Not[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;SameTerm[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"\")[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_anon_path_, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optName)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=u)[UNKNOWN]|nodes=6|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=v)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "43fc82c4ed71493294da62524e56a18ff05aabb3c94710d55f6a74ec448b091d", + "operatorWorkTopContributors" : "BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]:0;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]:0;Compare (!=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;Exists[UNKNOWN]:0;ExtensionElem (count)[UNKNOWN]:0;Extension[UNKNOWN]:0;Filter[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "3", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "44", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "optimized" : { + "level" : "Optimized", + "explanationText" : "Projection\n╠══ ProjectionElemList\n║ ProjectionElem \"count\"\n╚══ Extension\n ├── Group ()\n │ ╠══ Filter\n │ ║ ├── Compare (!=)\n │ ║ │ Var (name=optName) (bindingState=bound)\n │ ║ │ ValueConstant (value=\"\")\n │ ║ └── LeftJoin\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left]\n │ ║ ║ ├── Filter (filterSelectivitySource=unknown, deferredFilterScope=root) [left]\n │ ║ ║ │ ╠══ Compare (!=)\n │ ║ ║ │ ║ Var (name=u) (bindingState=bound)\n │ ║ ║ │ ║ Var (name=v) (bindingState=bound)\n │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment)\n │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left]\n │ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right]\n │ ║ ║ │ s: Var (name=u) (bindingState=unbound)\n │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n │ ║ ║ │ o: Var (name=v) (bindingState=bound)\n │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00) [right]\n │ ║ ║ ╠══ Not\n │ ║ ║ ║ Exists\n │ ║ ║ ║ Extension\n │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K)\n │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound)\n │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound)\n │ ║ ║ ║ └── ExtensionElem (_anon_path_705d76019e85b4b388c0e0befebd4917b0123456)\n │ ║ ║ ║ Var (name=u) (bindingState=bound)\n │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\n │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right]\n │ ║ s: Var (name=v) (bindingState=bound)\n │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\n │ ║ o: Var (name=optName) (bindingState=unbound)\n │ ╚══ GroupElem (count)\n │ Count (Distinct)\n │ Var (name=u) (bindingState=bound)\n └── ExtensionElem (count)\n Count (Distinct)\n Var (name=u) (bindingState=unbound)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\"\n } ]\n }, {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=optName)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"\\\")\"\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 350.0,\n \"longMetricsActual\" : {\n \"optimizer.candidateCount\" : 4\n },\n \"doubleMetricsActual\" : {\n \"optimizer.score\" : 205.88235294117646\n },\n \"stringMetricsActual\" : {\n \"optimizer.decisionTrace\" : \"initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen\",\n \"optimizer.configuredStrategy\" : \"hybrid\",\n \"optimizer.decision\" : \"expand chosen Filter\",\n \"optimizer.rejectionReason\" : \"higher adjusted cost\",\n \"optimizer.strategy\" : \"greedy\",\n \"optimizer.estimateSource\" : \"cardinality+learned filter stats\",\n \"optimizer.originalOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]\",\n \"optimizer.thresholds\" : \"DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25\",\n \"optimizer.chosenOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]\",\n \"optimizer.initiallyBoundVars\" : \"[]\",\n \"optimizer.scoreComponents\" : \"rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1\",\n \"optimizer.scopeBarriers\" : \"segment only; separator barriers preserved outside this segment\"\n },\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"stringMetricsPlanned\" : {\n \"filterSelectivitySource\" : \"unknown\",\n \"deferredFilterScope\" : \"root\"\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=v)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 70.0,\n \"longMetricsActual\" : {\n \"optimizer.candidateCount\" : 4\n },\n \"doubleMetricsActual\" : {\n \"optimizer.score\" : 205.88235294117646\n },\n \"stringMetricsActual\" : {\n \"optimizer.decisionTrace\" : \"initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen\",\n \"optimizer.configuredStrategy\" : \"hybrid\",\n \"optimizer.decision\" : \"expand chosen Filter\",\n \"optimizer.rejectionReason\" : \"higher adjusted cost\",\n \"optimizer.strategy\" : \"greedy\",\n \"optimizer.estimateSource\" : \"cardinality+learned filter stats\",\n \"optimizer.originalOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]\",\n \"optimizer.thresholds\" : \"DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25\",\n \"optimizer.chosenOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]\",\n \"optimizer.initiallyBoundVars\" : \"[]\",\n \"optimizer.scoreComponents\" : \"rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1\",\n \"optimizer.scopeBarriers\" : \"segment only; separator barriers preserved outside this segment\"\n },\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0,\n \"longMetricsActual\" : {\n \"optimizer.candidateCount\" : 4\n },\n \"doubleMetricsActual\" : {\n \"optimizer.score\" : 205.88235294117646\n },\n \"stringMetricsActual\" : {\n \"optimizer.decisionTrace\" : \"initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen\",\n \"optimizer.configuredStrategy\" : \"hybrid\",\n \"optimizer.decision\" : \"expand chosen Filter\",\n \"optimizer.rejectionReason\" : \"higher adjusted cost\",\n \"optimizer.strategy\" : \"greedy\",\n \"optimizer.estimateSource\" : \"cardinality+learned filter stats\",\n \"optimizer.originalOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]\",\n \"optimizer.thresholds\" : \"DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25\",\n \"optimizer.chosenOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]\",\n \"optimizer.initiallyBoundVars\" : \"[]\",\n \"optimizer.scoreComponents\" : \"rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1\",\n \"optimizer.scopeBarriers\" : \"segment only; separator barriers preserved outside this segment\"\n }\n }, {\n \"type\" : \"StatementPattern\",\n \"costEstimate\" : 0.5,\n \"resultSizeEstimate\" : 143748.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\"\n }, {\n \"type\" : \"Var (name=v)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"costEstimate\" : 5.0,\n \"resultSizeEstimate\" : 5.0,\n \"plans\" : [ {\n \"type\" : \"Not\",\n \"plans\" : [ {\n \"type\" : \"Exists\",\n \"plans\" : [ {\n \"type\" : \"Extension\",\n \"plans\" : [ {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 143748.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\"\n }, {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (_anon_path_705d76019e85b4b388c0e0befebd4917b0123456)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\"\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern\",\n \"resultSizeEstimate\" : 15982.0,\n \"plans\" : [ {\n \"type\" : \"Var (name=v)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\"\n }, {\n \"type\" : \"Var (name=optName)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot\n Projection\n ProjectionElemList\n ProjectionElem \"count\"\n Extension\n Group ()\n Filter\n Compare (!=)\n Var (name=optName)\n ValueConstant (value=\"\")\n LeftJoin\n Join (JoinIterator) (resultSizeEstimate=350)\n Filter\n Compare (!=)\n Var (name=u)\n Var (name=v)\n Join (JoinIterator) (resultSizeEstimate=70)\n BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00)\n StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K)\n Var (name=u)\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n Var (name=v)\n Filter (costEstimate=5.00, resultSizeEstimate=5.00)\n Not\n Exists\n Extension\n StatementPattern (resultSizeEstimate=143.7K)\n Var (name=u)\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n Var (name=u)\n ExtensionElem (_anon_path_705d76019e85b4b388c0e0befebd4917b0123456)\n Var (name=u)\n BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\n StatementPattern (resultSizeEstimate=16.0K)\n Var (name=v)\n Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\n Var (name=optName)\n GroupElem (count)\n Count (Distinct)\n Var (name=u)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=u)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot\\n Projection\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension\\n Group ()\\n Filter\\n Compare (!=)\\n Var (name=optName)\\n ValueConstant (value=\\\"\\\")\\n LeftJoin\\n Join (JoinIterator) (resultSizeEstimate=350)\\n Filter\\n Compare (!=)\\n Var (name=u)\\n Var (name=v)\\n Join (JoinIterator) (resultSizeEstimate=70)\\n BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00)\\n StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K)\\n Var (name=u)\\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\\n Var (name=v)\\n Filter (costEstimate=5.00, resultSizeEstimate=5.00)\\n Not\\n Exists\\n Extension\\n StatementPattern (resultSizeEstimate=143.7K)\\n Var (name=u)\\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\\n Var (name=u)\\n ExtensionElem (_anon_path_705d76019e85b4b388c0e0befebd4917b0123456)\\n Var (name=u)\\n BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\\n StatementPattern (resultSizeEstimate=16.0K)\\n Var (name=v)\\n Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\\n Var (name=optName)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=u)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=u)\\n\",\n \"fingerprintSha256\" : \"751b11a882b1c704ea3d0d998092606d42c73008d411cca6a63fda4c76be293a\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAZRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAFGRvdWJsZU1ldHJpY3NQbGFubmVkcQB+AARMABFsb25nTWV0cmljc0FjdHVhbHEAfgAETAASbG9uZ01ldHJpY3NQbGFubmVkcQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AARMABRzdHJpbmdNZXRyaWNzUGxhbm5lZHEAfgAEeHAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3IAHmphdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eU1hcFk2FIVa3OfQAgAAeHBxAH4ACHEAfgAIcQB+AAhwcQB+AAhxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlByb2plY3Rpb25pUjwGTxw7UgIAA1oACHN1YnF1ZXJ5TAAMcHJvakVsZW1MaXN0dAA0TG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvUHJvamVjdGlvbkVsZW1MaXN0O0wAEXByb2plY3Rpb25Db250ZXh0dAAlTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvVmFyO3hxAH4AAQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAGcQB+AAhxAH4ACHNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbtQK4vJzVJ/OAgABTAAIZWxlbWVudHN0ABBMamF2YS91dGlsL0xpc3Q7eHEAfgABAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AAxxAH4ACHEAfgAIc3IAJW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuR3JvdXD2RxvQeA8z+QIAAkwADWdyb3VwQmluZGluZ3N0AA9MamF2YS91dGlsL1NldDtMAA1ncm91cEVsZW1lbnRzcQB+AA54cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AD3EAfgAIcQB+AAhzcgAmb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5GaWx0ZXIwe72lKSqr9QIAAUwACWNvbmRpdGlvbnQAK0xvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1ZhbHVlRXhwcjt4cQB+AAEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AEnEAfgAIcQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9ucQB+ABR4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlUdXBsZU9wZXJhdG9yPpjeZGh0c4wCAANMAA1hbGdvcml0aG1OYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7TAAHbGVmdEFyZ3EAfgACTAAIcmlnaHRBcmdxAH4AAnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAVcQB+AAhxAH4ACHBzcgAkb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Kb2lulFnVr1+JugQCAAJaAAljYWNoZWFibGVaAAltZXJnZUpvaW54cQB+ABcAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0B14AAAAAAAAP//////////////////////////////////////////c3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAAAXcIAAAAAgAAAAF0AA9vcHRpbWl6ZXIuc2NvcmVzcgAQamF2YS5sYW5nLkRvdWJsZYCzwkopa/sEAgABRAAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHBAabw8PDw8PHhxAH4ACHNxAH4AHD9AAAAAAAABdwgAAAACAAAAAXQAGG9wdGltaXplci5jYW5kaWRhdGVDb3VudHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cQB+ACAAAAAAAAAABHhxAH4ACHEAfgAZc3EAfgAcP0AAAAAAAAx3CAAAABAAAAAMdAAXb3B0aW1pemVyLmRlY2lzaW9uVHJhY2V0BP9pbml0aWFsIGNhbmRpZGF0ZSBsZWZ0PUJpbmRpbmdTZXRBc3NpZ25tZW50IChbW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzddLCBbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOF0sIFt2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85XSwgW3YuLi4gcmlnaHQ9RmlsdGVyIHNjb3JlPTMxLjI1IHJhd1Jvd3M9NS4wIGVmZmVjdGl2ZVJvd3M9NS4wIHNoYXJlZFZhcnM9MCBib3VuZEFuY2hvcnM9MCBjaGVhcEZpbHRlcnM9MSBleHBlbnNpdmVGaWx0ZXJzPTAgZmlsdGVyUGFzc1JhdGlvPS0xLjAgdGllQnJlYWtlckluZGV4PTAgZGVjaXNpb249cmVqZWN0ZWQgcmVhc29uPWhpZ2hlciBhZGp1c3RlZCBjb3N0OyBpbml0aWFsIGNhbmRpZGF0ZSBsZWZ0PUJpbmRpbmdTZXRBc3NpZ25tZW50IChbW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzddLCBbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOF0sIFt2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85XSwgW3YuLi4gcmlnaHQ9U1AoP3UgZm9sbG93cyA/dikgc2NvcmU9MjUuNzM1Mjk0MTE3NjQ3MDU4IHJhd1Jvd3M9NzAuMCBlZmZlY3RpdmVSb3dzPTcwLjAgc2hhcmVkVmFycz0xIGJvdW5kQW5jaG9ycz0wIGNoZWFwRmlsdGVycz0xIGV4cGVuc2l2ZUZpbHRlcnM9MCBmaWx0ZXJQYXNzUmF0aW89LTEuMCB0aWVCcmVha2VySW5kZXg9MCBkZWNpc2lvbj1jaG9zZW4gcmVhc29uPWNob3NlbjsgaW5pdGlhbCBjYW5kaWRhdGUgbGVmdD1GaWx0ZXIgcmlnaHQ9U1AoP3UgZm9sbG93cyA/dikgc2NvcmU9MjUuNzM1Mjk0MTE3NjQ3MDU4IHJhd1Jvd3M9NzE4NzQwLjAgZWZmZWN0aXZlUm93cz03MC4wIHNoYXJlZFZhcnM9MSBib3VuZEFuY2hvcnM9MCBjaGVhcEZpbHRlcnM9MSBleHBlbnNpdmVGaWx0ZXJzPTAgZmlsdGVyUGFzc1JhdGlvPS0xLjAgdGllQnJlYWtlckluZGV4PTEgZGVjaXNpb249cmVqZWN0ZWQgcmVhc29uPWxhdGVyIHRpZS1icmVha2VyIGluZGV4OyBleHBhbmQgY2FuZGlkYXRlIGxlZnQ9Sm9pbiByaWdodD1GaWx0ZXIgc2NvcmU9MjA1Ljg4MjM1Mjk0MTE3NjQ2IHJhd1Jvd3M9MzUwLjAgZWZmZWN0aXZlUm93cz0zNTAuMCBzaGFyZWRWYXJzPTEgYm91bmRBbmNob3JzPTAgY2hlYXBGaWx0ZXJzPTAgZXhwZW5zaXZlRmlsdGVycz0wIGZpbHRlclBhc3NSYXRpbz0tMS4wIHRpZUJyZWFrZXJJbmRleD0xIGRlY2lzaW9uPWNob3NlbiByZWFzb249Y2hvc2VudAAcb3B0aW1pemVyLmNvbmZpZ3VyZWRTdHJhdGVneXQABmh5YnJpZHQAEm9wdGltaXplci5kZWNpc2lvbnQAFGV4cGFuZCBjaG9zZW4gRmlsdGVydAAZb3B0aW1pemVyLnJlamVjdGlvblJlYXNvbnQAFGhpZ2hlciBhZGp1c3RlZCBjb3N0dAASb3B0aW1pemVyLnN0cmF0ZWd5dAAGZ3JlZWR5dAAYb3B0aW1pemVyLmVzdGltYXRlU291cmNldAAgY2FyZGluYWxpdHkrbGVhcm5lZCBmaWx0ZXIgc3RhdHN0ABdvcHRpbWl6ZXIub3JpZ2luYWxPcmRlcnQAvVtCaW5kaW5nU2V0QXNzaWdubWVudCAoW1t2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci83XSwgW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzhdLCBbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOV0sIFt2Li4uLCBGaWx0ZXIsIFNQKD91IGZvbGxvd3MgP3YpXXQAFG9wdGltaXplci50aHJlc2hvbGRzdAG9RFlOQU1JQ19QUk9HUkFNTUlOR19KT0lOX0FSR19MSU1JVD04LCBNRVJHRV9KT0lOX0NBUkRJTkFMSVRZX1NJWkVfRElGRl9NVUxUSVBMSUVSPTEwLCBBVk9JREFCTEVfQ1JPU1NfSk9JTl9QRU5BTFRZPTEwLjAsIFVOQU5DSE9SRURfSU5JVElBTF9QQUlSX1BFTkFMVFk9NS4wLCBTSEFSRURfVkFSX0JPTlVTX1BFUl9WQVI9MS43LCBNQVhfU0hBUkVEX1ZBUl9CT05VUz0zLjQsIEJPVU5EX0FOQ0hPUl9CT05VU19QRVJfVkFSPTEuNCwgTUFYX0JPVU5EX0FOQ0hPUl9CT05VUz0yLjgsIENIRUFQX0ZJTFRFUl9CT05VU19QRVJfRklMVEVSPTEuNiwgTUFYX0NIRUFQX0ZJTFRFUl9CT05VUz0yLjU2LCBFWFBFTlNJVkVfRklMVEVSX0JPTlVTX1BFUl9GSUxURVI9MS4xLCBNQVhfRVhQRU5TSVZFX0ZJTFRFUl9CT05VUz0xLjIxLCBNSU5fVU5MT0NLRURfRklMVEVSX1BBU1NfUkFUSU89MC4yNXQAFW9wdGltaXplci5jaG9zZW5PcmRlcnQAvVtCaW5kaW5nU2V0QXNzaWdubWVudCAoW1t2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci83XSwgW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzhdLCBbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOV0sIFt2Li4uLCBTUCg/dSBmb2xsb3dzID92KSwgRmlsdGVyXXQAHG9wdGltaXplci5pbml0aWFsbHlCb3VuZFZhcnN0AAJbXXQAGW9wdGltaXplci5zY29yZUNvbXBvbmVudHN0AK5yYXdSb3dzPTM1MC4wLCBlZmZlY3RpdmVSb3dzPTM1MC4wLCBhZGp1c3RlZENvc3Q9MjA1Ljg4MjM1Mjk0MTE3NjQ2LCBzaGFyZWRWYXJzPTEsIGJvdW5kQW5jaG9ycz0wLCBjaGVhcEZpbHRlcnM9MCwgZXhwZW5zaXZlRmlsdGVycz0wLCBmaWx0ZXJQYXNzUmF0aW89LTEuMCwgdGllQnJlYWtlckluZGV4PTF0ABdvcHRpbWl6ZXIuc2NvcGVCYXJyaWVyc3QAP3NlZ21lbnQgb25seTsgc2VwYXJhdG9yIGJhcnJpZXJzIHByZXNlcnZlZCBvdXRzaWRlIHRoaXMgc2VnbWVudHhxAH4ACHQADEpvaW5JdGVyYXRvcnNxAH4AEwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAbcQB+AAhzcQB+ABw/QAAAAAAAA3cIAAAABAAAAAJ0ABdmaWx0ZXJTZWxlY3Rpdml0eVNvdXJjZXQAB3Vua25vd250ABNkZWZlcnJlZEZpbHRlclNjb3BldAAEcm9vdHhzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////0BRgAAAAAAAAP//////////////////////////////////////////c3EAfgAcP0AAAAAAAAF3CAAAAAIAAAABcQB+AB5zcQB+AB9Aabw8PDw8PHhxAH4ACHNxAH4AHD9AAAAAAAABdwgAAAACAAAAAXEAfgAjcQB+ACV4cQB+AAhxAH4AQHNxAH4AHD9AAAAAAAAMdwgAAAAQAAAADHEAfgAncQB+AChxAH4AKXEAfgAqcQB+ACtxAH4ALHEAfgAtcQB+AC5xAH4AL3EAfgAwcQB+ADFxAH4AMnEAfgAzcQB+ADRxAH4ANXEAfgA2cQB+ADdxAH4AOHEAfgA5cQB+ADpxAH4AO3EAfgA8cQB+AD1xAH4APnhxAH4ACHEAfgA/c3IANG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluZGluZ1NldEFzc2lnbm1lbnQ31nYWvo6IIwIAAkwADGJpbmRpbmdOYW1lc3EAfgARTAALYmluZGluZ1NldHN0ABRMamF2YS9sYW5nL0l0ZXJhYmxlO3hxAH4AAwAAAAAAAAABAAAAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////P/AAAAAAAAAA//////////////////////////////////////////9zcQB+ABw/QAAAAAAAAXcIAAAAAgAAAAFxAH4AHnNxAH4AH0BpvDw8PDw8eHEAfgAIc3EAfgAcP0AAAAAAAAF3CAAAAAIAAAABcQB+ACNxAH4AJXhxAH4ACHEAfgBGc3EAfgAcP0AAAAAAAAx3CAAAABAAAAAMcQB+ACdxAH4AKHEAfgApcQB+ACpxAH4AK3EAfgAscQB+AC1xAH4ALnEAfgAvcQB+ADBxAH4AMXEAfgAycQB+ADNxAH4ANHEAfgA1cQB+ADZxAH4AN3EAfgA4cQB+ADlxAH4AOnEAfgA7cQB+ADxxAH4APXEAfgA+eHEAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAABdnhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAABXcEAAAABXNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4ADkwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ABFMAAZ2YWx1ZXNxAH4ADnhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgBVAAAAAXcEAAAAAXQAAXZ4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AGHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvN3NxAH4AV3NxAH4AVQAAAAF3BAAAAAFxAH4AW3hwc3EAfgBcdXEAfgBfAAAAAXNxAH4AYQAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzhzcQB+AFdzcQB+AFUAAAABdwQAAAABcQB+AFt4cHNxAH4AXHVxAH4AXwAAAAFzcQB+AGEAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85c3EAfgBXc3EAfgBVAAAAAXcEAAAAAXEAfgBbeHBzcQB+AFx1cQB+AF8AAAABc3EAfgBhAAAAAP////90ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvMTBzcQB+AFdzcQB+AFUAAAABdwQAAAABcQB+AFt4cHNxAH4AXHVxAH4AXwAAAAFzcQB+AGEAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMXhzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ABFMAApjb250ZXh0VmFycQB+AAtMAAlpbmRleE5hbWVxAH4AGEwACW9iamVjdFZhcnEAfgALTAAMcHJlZGljYXRlVmFycQB+AAtMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AC0wAB3Zhckxpc3RxAH4ADnhxAH4AAwAAAAAAAAABP+AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////QQGMIAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgBGcQB+AAhxAH4ACHNyAD9vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU21hbGxTdHJpbmdTZXR5vEinhf15QAIAAVsABnZhbHVlc3QAE1tMamF2YS9sYW5nL1N0cmluZzt4cHVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AAF1dAATX2NvbnN0XzljNjhlMTJhX3VyaXEAfgBUcHBzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYXJAQ+6y+v7wxwIABVoACWFub255bW91c0kADmNhY2hlZEhhc2hDb2RlWgAIY29uc3RhbnRMAARuYW1lcQB+ABhMAAV2YWx1ZXQAH0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9WYWx1ZTt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AgHEAfgAIcQB+AAgAAAAAAABxAH4AVHBzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AgHEAfgAIcQB+AAgBAAAAAAFxAH4Ah3NxAH4AYQAAAAAAAAAgdAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC9mb2xsb3dzfnIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3RhdGVtZW50UGF0dGVybiRTY29wZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAEERFRkFVTFRfQ09OVEVYVFNwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AIBxAH4ACHEAfgAIAAAAAAAAcQB+AIZwcAAAc3IAJ29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZW+1cJa3nSn6AgABTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Db21wYXJlJENvbXBhcmVPcDt4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlWYWx1ZU9wZXJhdG9yCgqQ9+QABmoCAAJMAAdsZWZ0QXJncQB+ABRMAAhyaWdodEFyZ3EAfgAUeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AEBxAH4ACHEAfgAIc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AJZxAH4ACHEAfgAIAAAAAAAAcQB+AIZwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AJZxAH4ACHEAfgAIAAAAAAAAcQB+AFRwfnIAMW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQ29tcGFyZSRDb21wYXJlT3AAAAAAAAAAABIAAHhxAH4Aj3QAAk5Fc3EAfgATAAAAAAAAAAFAFAAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9AFAAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ABtxAH4ACHEAfgAIc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AJxxAH4ACHEAfgAIc3EAfgBSdwwAAAAQP0AAAAAAAAFxAH4AhnhzcQB+AFUAAAAFdwQAAAAFc3EAfgBXc3EAfgBVAAAAAXcEAAAAAXQAAXV4cHNxAH4AXHVxAH4AXwAAAAFzcQB+AGEAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci83c3EAfgBXc3EAfgBVAAAAAXcEAAAAAXEAfgCieHBzcQB+AFx1cQB+AF8AAAABc3EAfgBhAAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOHNxAH4AV3NxAH4AVQAAAAF3BAAAAAFxAH4Aonhwc3EAfgBcdXEAfgBfAAAAAXNxAH4AYQAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzlzcQB+AFdzcQB+AFUAAAABdwQAAAABcQB+AKJ4cHNxAH4AXHVxAH4AXwAAAAFzcQB+AGEAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMHNxAH4AV3NxAH4AVQAAAAF3BAAAAAFxAH4Aonhwc3EAfgBcdXEAfgBfAAAAAXNxAH4AYQAAAAD/////dAAnaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzExeHNyACNvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLk5vdGcfRgMluLXEAgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlWYWx1ZU9wZXJhdG9ypZgvcyEVYrgCAAFMAANhcmdxAH4AFHhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgCccQB+AAhxAH4ACHNyACZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4aXN0cy3sZgcPXfAHAgAAeHIANW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuU3ViUXVlcnlWYWx1ZU9wZXJhdG9ymEsAvUdRdFcCAAFMAAhzdWJRdWVyeXEAfgACeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AMFxAH4ACHEAfgAIc3EAfgANAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AMRxAH4ACHEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9BAYwgAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AMVxAH4ACHEAfgAIc3EAfgCBdXEAfgCEAAAAAnEAfgCGdAATX2NvbnN0XzljNjhlMTJhX3VyaXBwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AMZxAH4ACHEAfgAIAAAAAAAAcQB+AIZwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AMZxAH4ACHEAfgAIAQAAAAABcQB+AMlzcQB+AGEAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvZm9sbG93c3EAfgCQcHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDGcQB+AAhxAH4ACAAAAAAAAHEAfgCGcHBzcQB+AFUAAAABdwQAAAABc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9uRWxlbfVEWvAL0OgoAgACTAAEZXhwcnEAfgAUTAAEbmFtZXEAfgAYeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AMVxAH4ACHEAfgAIc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ANFxAH4ACHEAfgAIAAAAAAAAcQB+AIZwdAAzX2Fub25fcGF0aF83MDVkNzYwMTllODViNGIzODhjMGUwYmVmZWJkNDkxN2IwMTIzNDU2eAAAc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////9AzzcAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ABlxAH4ACHEAfgAIc3EAfgCBdXEAfgCEAAAAA3EAfgBUdAATX2NvbnN0XzdkMTdiOTQzX3VyaXQAB29wdE5hbWVwcHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDUcQB+AAhxAH4ACAAAAAAAAHEAfgDYcHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDUcQB+AAhxAH4ACAEAAAAAAXEAfgDXc3EAfgBhAAAAAAAAACB0ACRodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL25hbWVxAH4AkHBzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A1HEAfgAIcQB+AAgAAAAAAABxAH4AVHBwcHNxAH4AkwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAVcQB+AAhxAH4ACHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDecQB+AAhxAH4ACAAAAAAAAHEAfgDYcHNyAC1vcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlZhbHVlQ29uc3RhbnQ2NF8BdcorxgIAAUwABXZhbHVlcQB+AIl4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4A3nEAfgAIcQB+AAhzcgAqb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuaW1wbC5TaW1wbGVMaXRlcmFs6RuLM5iGxvECAARMAAxjb3JlRGF0YXR5cGV0ACtMb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvYmFzZS9Db3JlRGF0YXR5cGU7TAAIZGF0YXR5cGV0AB1Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvSVJJO0wABWxhYmVscQB+ABhMAAhsYW5ndWFnZXEAfgAYeHIALG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQWJzdHJhY3RMaXRlcmFs7iVWLoUHJE0CAAB4cH5yAC1vcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkNvcmVEYXRhdHlwZSRYU0QAAAAAAAAAABIAAHhxAH4Aj3QABlNUUklOR3NyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkludGVybmVkSVJJAllGAIULdQcDAARJAAhoYXNoQ29kZUwACWxvY2FsTmFtZXEAfgAYTAAJbmFtZXNwYWNlcQB+ABhMAAtzdHJpbmdWYWx1ZXEAfgAYeHB3L+LuxxgAIWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIwAGc3RyaW5neHQAAHBxAH4AmnNyABdqYXZhLnV0aWwuTGlua2VkSGFzaFNldNhs11qV3SoeAgAAeHEAfgBSdwwAAAAQP0AAAAAAAAB4c3EAfgBVAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgAYTAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AEnEAfgAIcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhxAH4AwAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgDycQB+AAhxAH4ACHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgD2cQB+AAhxAH4ACAAAAAAAAHEAfgCGcAF4c3EAfgBVAAAAAXcEAAAAAXNxAH4A0AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAPcQB+AAhxAH4ACHNxAH4A9AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgD5cQB+AAhxAH4ACHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgD6cQB+AAhxAH4ACAAAAAAAAHEAfgCGcAFxAH4A83gBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4ADnhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAMcQB+AAhxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+ABhMAA9wcm9qZWN0aW9uQWxpYXNxAH4AGEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgD+cQB+AAhxAH4ACAFxAH4A83BzcQB+ANAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhzcQB+AA0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhzcQB+AAkAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhwcQB+AAhxAH4ACHEAfgEGcQB+AAhxAH4ACHEAfgEFAXNxAH4A/AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEGcQB+AAhxAH4ACHVxAH4A/wAAAAFzcQB+AQEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BCHEAfgAIcQB+AAgBcQB+APNwcQB+AQRzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4ADnhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AVQAAAAF3BAAAAAFxAH4BCnhxAH4BD3BxAH4ACHEAfgAIc3EAfgAQAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AQVxAH4ACHEAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARBxAH4ACHEAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARFxAH4ACHEAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARJxAH4ACHEAfgAIc3EAfgAWAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARNxAH4ACHEAfgAIcHNxAH4AGgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEUcQB+AAhxAH4ACHBzcQB+ABoAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BFXEAfgAIcQB+AAhwc3EAfgBLAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARZxAH4ACHEAfgAIc3EAfgDtdwwAAAACP0AAAAAAAAFxAH4AonhxAH4An3NxAH4ASwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEWcQB+AAhxAH4ACHNxAH4A7XcMAAAAAj9AAAAAAAABcQB+AFt4cQB+AFYAAHNxAH4AfQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEVcQB+AAhxAH4ACHNxAH4AgXVxAH4AhAAAAAN0AAF1cQB+AId0AAF2cHBzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BG3EAfgAIcQB+AAgAAAAAAABxAH4BH3BzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BG3EAfgAIcQB+AAgBAAAAAAFxAH4Ah3EAfgCMcQB+AJBwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARtxAH4ACHEAfgAIAAAAAAAAcQB+AR5wcAAAc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARRxAH4ACHEAfgAIc3EAfgCBdXEAfgCEAAAAA3QAAXZxAH4A13QAB29wdE5hbWVwcHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEjcQB+AAhxAH4ACAAAAAAAAHEAfgEncHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEjcQB+AAhxAH4ACAEAAAAAAXEAfgDXcQB+ANtxAH4AkHBzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BI3EAfgAIcQB+AAgAAAAAAABxAH4BJnBwcHNxAH4AkwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgETcQB+AAhxAH4ACHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgErcQB+AAhxAH4ACAAAAAAAAHEAfgCGcHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgErcQB+AAhxAH4ACAAAAAAAAHEAfgBUcHEAfgCac3EAfgC/AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARJxAH4ACHEAfgAIc3EAfgDCAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AS5xAH4ACHEAfgAIc3EAfgATAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AS9xAH4ACHEAfgAIc3EAfgB9AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ATBxAH4ACHEAfgAIcHBwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ATFxAH4ACHEAfgAIAQAAAAAAcQB+ANNwc3EAfgCIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ATFxAH4ACHEAfgAIAQAAAAABcQB+AMlxAH4AzHEAfgCQcHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgExcQB+AAhxAH4ACAAAAAAAAHQAAXVwcHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlNhbWVUZXJtIqx0VpK6rLQCAAB4cQB+AJUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BMHEAfgAIcQB+AAhzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BN3EAfgAIcQB+AAgAAAAAAAB0AAF1cHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgE3cQB+AAhxAH4ACAEAAAAAAHEAfgDTcHNxAH4AkwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgERcQB+AAhxAH4ACHNxAH4AiAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgE7cQB+AAhxAH4ACAAAAAAAAHEAfgDYcHNxAH4A4AAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgE7cQB+AAhxAH4ACHEAfgDmcQB+AJpzcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+AFUAAAABdwQAAAABc3EAfgDwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARBxAH4ACHEAfgAIcQB+APNzcQB+APQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BQXEAfgAIcQB+AAhzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BQnEAfgAIcQB+AAgAAAAAAAB0AAF1cAF4c3EAfgBVAAAAAXcEAAAAAXEAfgEEeHEAfgAIcQB+AAhzcQB+APQAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BBHEAfgAIcQB+AAhzcQB+AIgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BRnEAfgAIcQB+AAgAAAAAAABxAH4BRHABcQB+APNzcQB+AFxxAH4BAHA=\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE {\n VALUES ?v { }\n ?u ?v .\n FILTER (?u != ?v)\n VALUES ?u { }\n FILTER NOT EXISTS {\n ?u ?u .\n BIND(?u AS ?_anon_path_705d76019e85b4b388c0e0befebd4917b0123456)\n }\n OPTIONAL {\n ?v ?optName .\n }\n FILTER (?optName != \"\")\n}", + "debugMetrics" : { + "optimizer.candidateCount" : "4", + "optimizer.score" : "205.88235294117646", + "optimizer.decisionTrace" : "initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen", + "optimizer.configuredStrategy" : "hybrid", + "optimizer.decision" : "expand chosen Filter", + "optimizer.rejectionReason" : "higher adjusted cost", + "optimizer.strategy" : "greedy", + "optimizer.estimateSource" : "cardinality+learned filter stats", + "optimizer.originalOrder" : "[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]", + "optimizer.thresholds" : "DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25", + "optimizer.chosenOrder" : "[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]", + "optimizer.initiallyBoundVars" : "[]", + "optimizer.scoreComponents" : "rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1", + "optimizer.scopeBarriers" : "segment only; separator barriers preserved outside this segment", + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "42", + "maxDepth" : "12", + "leafNodeCount" : "19", + "maxBranchingFactor" : "3", + "joinNodeCount" : "3", + "filterNodeCount" : "3", + "statementPatternCount" : "3", + "anonymousTypeTokenCount" : "1", + "joinAlgorithmCounts" : "=1,JoinIterator=2", + "structureSignatureRawSha256" : "166df0b96f2a231bc3da84a7feb7b90981342dfd1f0460bcdb284f86cda064c1", + "structureSignatureNormalizedSha256" : "0e5544e941cf4f0bed713652453e72bdb8d01abfc3a158dec81c74aeb48831ad", + "joinAlgorithmSignatureSha256" : "5b41d7967c2c7b49db14f1efc492a174b96c78d904853175cce0e0e273a1decf", + "actualResultSizesSignatureSha256" : "468bb7a7fbb4b235f614ed9583fd65437f1748467b01a48878ee68379471d55e", + "estimatesSignatureSha256" : "45f340ae4cdd0c31259c6908f5d4768c6084cfd59f0d51a26224c04338e970c2", + "joinAlgorithmMultisetSignatureSha256" : "7022883413ba1f71e2202b99a201d7b828d70c56b46b11247ab91fa6ccdd6f22", + "actualResultSizesMultisetSignatureSha256" : "9aa5ccbe956b29f4cee18c47852a9779852ed9e007b8a443d34bb3fd9ae43081", + "estimatesMultisetSignatureSha256" : "ebc79ac658529bb636df4b8b28a872ea02731e3958f8cbc94d5da28763517798", + "statementPatternEstimatesMultisetSignatureSha256" : "a00359b9c7cf96113789b040815143b2da6a70b00cf0bda213cd0b6d710f1184", + "statementPatternEstimateTokenCount" : "3", + "modeledWorkUnits" : "447653.7", + "modeledInputRowsSum" : "607037", + "modeledOutputRowsSum" : "303904", + "modeledJoinInputRowsSum" : "160086", + "modeledJoinOutputRowsSum" : "420", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=0.2;filter=1.5;group=0;join=144174;projection=0;scan=303478;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=6;filter=3;group=2;join=3;projection=3;scan=3;unknown=20", + "modeledOperatorCountByCategorySignatureSha256" : "6b3f26cf967e729253576a7a555495e2e36e9c171384ecd86a9a59226c174925", + "modeledInputRowsByCategory" : "distinct=0;extension=143749;filter=75;group=0;join=159735;projection=0;scan=303478;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "a76f8ea32e2542c5eb22185cde516d7c3b809954c78f0876ab572d8fbb423551", + "modeledOutputRowsByCategory" : "distinct=0;extension=1;filter=5;group=0;join=420;projection=0;scan=303478;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "524303652f6e2179db574a8e8bb7cda3285815620f5b59ad665111eea29bd3b5", + "modeledFilterInputRowsSum" : "75", + "modeledFilterOutputRowsSum" : "5", + "modeledFilterPassRatio" : "0.066667", + "modeledFilterRejectRatio" : "0.933333", + "modeledJoinWorkByAlgorithm" : "JoinIterator=144174;UNKNOWN=0", + "modeledJoinWorkByAlgorithmSignatureSha256" : "98efef9d6bdbdd59bc97398d7a652fbfdd9b925a48fb6e78144a82e8b80f11ae", + "modeledWorkVector" : "workUnits=447653.7|barrierCount=4|joinInputRowsSum=160086|joinOutputRowsSum=420|operatorCountByCategory=distinct=2;extension=6;filter=3;group=2;join=3;projection=3;scan=3;unknown=20|joinWorkByAlgorithm=JoinIterator=144174;UNKNOWN=0|categories=distinct=0;extension=0.2;filter=1.5;group=0;join=144174;projection=0;scan=303478;unknown=0", + "modeledWorkVectorSignatureSha256" : "d585367cf12113af2569a589e426dfdc7a67618bf7c3951a39e1a9ffe3820124", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]|nodes=1|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Exists[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (_anon_path_)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0|inputRows=143748|outputRows=0|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=3|workUnits=1.5|inputRows=75|outputRows=5|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=2|workUnits=144174|inputRows=143753|outputRows=420|selfTimeActual=0|totalTimeActual=0;LeftJoin[UNKNOWN]|nodes=1|workUnits=0|inputRows=15982|outputRows=0|selfTimeActual=0|totalTimeActual=0;Not[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;StatementPattern[UNKNOWN]|nodes=3|workUnits=303478|inputRows=303478|outputRows=303478|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"\")[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optName)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=u)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=v)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "ef2cf8667a16c22cadea8a8d52c8f0d6ca0fa0f00b9093f2bc38044413587808", + "operatorWorkTopContributors" : "StatementPattern[UNKNOWN]:303478;Join[JoinIterator]:144174;Filter[UNKNOWN]:1.5;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]:0.2;BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]:0;Compare (!=)[UNKNOWN]:0;Count (Distinct)[UNKNOWN]:0;Exists[UNKNOWN]:0", + "estimateActualComparableNodeCount" : "0", + "estimateActualAbsErrorSum" : "0", + "estimateActualRelativeErrorMean" : "0", + "estimateActualQErrorP50" : "0", + "estimateActualQErrorP95" : "0", + "estimateActualQErrorMax" : "0", + "joinEstimateActualComparableNodeCount" : "0", + "joinEstimateActualQErrorP50" : "0", + "joinEstimateActualQErrorP95" : "0", + "joinEstimateActualQErrorMax" : "0", + "costEstimateSum" : "5.5", + "costEstimateMax" : "5", + "resultSizeEstimateSum" : "303904", + "resultSizeEstimateMax" : "143748", + "modeledHasNextCallCountSum" : "0", + "modeledHasNextTrueCountSum" : "0", + "modeledHasNextTimeNanosSum" : "0", + "modeledNextCallCountSum" : "0", + "modeledNextTimeNanosSum" : "0", + "modeledJoinRightIteratorCreateCountSum" : "0", + "modeledJoinLeftBindingSetConsumedCountSum" : "0", + "modeledJoinRightBindingSetConsumedCountSum" : "0", + "modeledJoinTelemetryNodeCount" : "3", + "modeledJoinRightBindingsPerLeftRatio" : "0", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "0", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "0", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "0", + "modeledSourceRowsScannedSum" : "0", + "modeledSourceRowsMatchedSum" : "0", + "modeledSourceRowsFilteredSum" : "0", + "modeledSourceFilterOutRatio" : "0", + "modeledIteratorTelemetryNodeCount" : "43", + "modeledHasNextTimeMillisSum" : "0", + "modeledNextTimeMillisSum" : "0" + } + }, + "telemetry" : { + "level" : "Telemetry", + "explanationText" : "Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=13.3M, nextCallCountActual=1, nextTimeNanosActual=33.5K, firstRowTimeNanosActual=13.3M, openCountActual=1, lastRowTimeNanosActual=13.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.7M, avgNextNanosActual=33.5K)\n╠══ ProjectionElemList (hasNextFalseCountActual=0)\n║ ProjectionElem \"count\" (hasNextFalseCountActual=0)\n╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=13.3M, nextCallCountActual=1, nextTimeNanosActual=16.8K, firstRowTimeNanosActual=13.3M, openCountActual=1, lastRowTimeNanosActual=13.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.7M, avgNextNanosActual=16.8K)\n ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=13.3M, nextCallCountActual=1, nextTimeNanosActual=917, aggregateEvalCountActual=9, firstRowTimeNanosActual=13.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=13.4M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.7M, avgNextNanosActual=917)\n │ ╠══ Filter (resultSizeActual=9, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=10.6M, nextCallCountActual=9, nextTimeNanosActual=2.3K, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, firstRowTimeNanosActual=3.8M, exprEvalCountActual=9, openCountActual=1, exprTrueCountActual=9, lastRowTimeNanosActual=11.5M, closeCountActual=1, exprEvalTimeNanosActual=419.0K, inputRowsActual=9, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.82, avgHasNextNanosActual=967.8K, avgNextNanosActual=259, filterRejectRateActual=0)\n │ ║ ├── Compare (!=) (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=379.7K, hasNextFalseCountActual=0)\n │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ │ ValueConstant (value=\"\") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=26.6K, hasNextFalseCountActual=0)\n │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=10.0M, nextCallCountActual=9, nextTimeNanosActual=1.7K, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, firstRowTimeNanosActual=3.4M, leftRowsWithMatchActual=9, openCountActual=1, lastRowTimeNanosActual=10.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18, rowsDroppedActual=9, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=754.2K, stddevActual=868, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=1.0M, avgNextNanosActual=199, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0)\n │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, resultSizeActual=9, joinRightIteratorsCreatedActual=70, joinLeftBindingsConsumedActual=79, joinRightBindingsConsumedActual=9, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=79, rowsDroppedActual=70, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=79, rightRowsScannedActual=9, avgRightRowsPerLeftActual=0.11, joinOutputPerLeftActual=0.11) [left]\n │ ║ ║ ├── Filter (resultSizeActual=70, hasNextCallCountActual=71, hasNextTrueCountActual=70, hasNextTimeNanosActual=4.8M, nextCallCountActual=70, nextTimeNanosActual=17.8K, sourceRowsScannedActual=70, sourceRowsMatchedActual=70, sourceRowsFilteredActual=0, filterSelectivitySource=unknown, deferredFilterScope=root, firstRowTimeNanosActual=2.2M, exprEvalCountActual=70, openCountActual=1, exprTrueCountActual=70, lastRowTimeNanosActual=10.8M, closeCountActual=1, exprEvalTimeNanosActual=814.1K, inputRowsActual=70, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=68.3K, avgNextNanosActual=255, filterRejectRateActual=0) [left]\n │ ║ ║ │ ╠══ Compare (!=) (exprEvalCountActual=70, exprTrueCountActual=70, exprEvalTimeNanosActual=560.5K, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, resultSizeActual=70, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=75, rowsDroppedActual=5, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.0M, stddevActual=1.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=70, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14)\n │ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=6.7K, nextCallCountActual=5, nextTimeNanosActual=4.7K, firstRowTimeNanosActual=162.3K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=10.5M, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=1, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.1K, avgNextNanosActual=958) [left]\n │ ║ ║ │ └── StatementPattern [index: ospc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=70, hasNextCallCountActual=75, hasNextTrueCountActual=70, hasNextTimeNanosActual=1.8M, nextCallCountActual=70, nextTimeNanosActual=386.1K, sourceRowsScannedActual=897, sourceRowsMatchedActual=70, sourceRowsFilteredActual=827, plannedIndexName=ospc, firstRowTimeNanosActual=27.9K, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=1.2M, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=25.3K, avgNextNanosActual=5.5K, indexHitRateActual=0.08) [right]\n │ ║ ║ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=2.1M, nextCallCountActual=9, nextTimeNanosActual=2.7K, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, firstRowTimeNanosActual=47.0K, exprEvalCountActual=9, openCountActual=70, exprTrueCountActual=9, lastRowTimeNanosActual=11.5K, closeCountActual=70, exprEvalTimeNanosActual=461.5K, inputRowsActual=9, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=26.6K, avgNextNanosActual=310, filterRejectRateActual=0) [right]\n │ ║ ║ ╠══ Not (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=444.1K, hasNextFalseCountActual=0)\n │ ║ ║ ║ Exists (exprEvalCountActual=9, exprFalseCountActual=9, exprEvalTimeNanosActual=421.8K, inputRowsActual=0, hasNextFalseCountActual=0)\n │ ║ ║ ║ Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0)\n │ ║ ║ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=9, hasNextTimeNanosActual=54.2K, sourceRowsScannedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=5.5K, closeCountActual=9, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0, avgHasNextNanosActual=6.0K, indexHitRateActual=0)\n │ ║ ║ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0)\n │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ║ └── ExtensionElem (_anon_path_1105d76019e85b4b388c0e0befebd4917b0) (hasNextFalseCountActual=0)\n │ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=537.8K, nextCallCountActual=9, nextTimeNanosActual=3.8K, firstRowTimeNanosActual=9.5K, openCountActual=70, bindingsProvidedActual=9, lastRowTimeNanosActual=6.0K, closeCountActual=70, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=6.8K, avgNextNanosActual=426)\n │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9, hasNextCallCountActual=18, hasNextTrueCountActual=9, hasNextTimeNanosActual=135.4K, nextCallCountActual=9, nextTimeNanosActual=34.5K, sourceRowsScannedActual=18, sourceRowsMatchedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, firstRowTimeNanosActual=14.1K, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=60.8K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5K, avgNextNanosActual=3.8K, indexHitRateActual=0.50) [right]\n │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0)\n │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0)\n │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0)\n │ ╚══ GroupElem (count) (hasNextFalseCountActual=0)\n │ Count (Distinct) (hasNextFalseCountActual=0)\n │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0)\n └── ExtensionElem (count) (hasNextFalseCountActual=0)\n Count (Distinct) (hasNextFalseCountActual=0)\n Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0)\n", + "explanationJson" : "{\n \"type\" : \"Projection\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 13318291,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 33541,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 13366833,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 13450375,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"ProjectionElemList\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"ProjectionElem \\\"count\\\"\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n } ]\n }, {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 13310291,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 16834,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 13365209,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 13449875,\n \"closeCountActual\" : 1\n },\n \"plans\" : [ {\n \"type\" : \"Group ()\",\n \"resultSizeActual\" : 1,\n \"hasNextCallCountActual\" : 2,\n \"hasNextTrueCountActual\" : 1,\n \"hasNextTimeNanosActual\" : 13301500,\n \"nextCallCountActual\" : 1,\n \"nextTimeNanosActual\" : 917,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"aggregateEvalCountActual\" : 9,\n \"firstRowTimeNanosActual\" : 13355958,\n \"groupsCreatedActual\" : 1,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 13445583,\n \"maxGroupSizeActual\" : 9,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1,\n \"varsDroppedActual\" : 5\n },\n \"doubleMetricsActual\" : {\n \"avgGroupSizeActual\" : 9.0\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\",\n \"metricOrigin.varsDroppedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 9,\n \"hasNextCallCountActual\" : 11,\n \"hasNextTrueCountActual\" : 10,\n \"hasNextTimeNanosActual\" : 10645375,\n \"nextCallCountActual\" : 9,\n \"nextTimeNanosActual\" : 2331,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 9,\n \"sourceRowsMatchedActual\" : 9,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 3864000,\n \"exprEvalCountActual\" : 9,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 9,\n \"lastRowTimeNanosActual\" : 11573333,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 418956.0\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 9,\n \"exprTrueCountActual\" : 9\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 379708.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=optName)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"ValueConstant (value=\\\"\\\")\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 1,\n \"exprFalseCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 26625.0\n }\n } ]\n }, {\n \"type\" : \"LeftJoin\",\n \"resultSizeActual\" : 9,\n \"hasNextCallCountActual\" : 10,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 10099750,\n \"nextCallCountActual\" : 9,\n \"nextTimeNanosActual\" : 1791,\n \"joinRightIteratorsCreatedActual\" : 9,\n \"joinLeftBindingsConsumedActual\" : 9,\n \"joinRightBindingsConsumedActual\" : 9,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 3486709,\n \"leftRowsWithMatchActual\" : 9,\n \"openCountActual\" : 1,\n \"lastRowTimeNanosActual\" : 10862959,\n \"closeCountActual\" : 1,\n \"maxRightRowsPerLeftActual\" : 1\n },\n \"algorithm\" : \"LeftJoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 350.0,\n \"resultSizeActual\" : 9,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 70,\n \"joinLeftBindingsConsumedActual\" : 79,\n \"joinRightBindingsConsumedActual\" : 9,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"optimizer.candidateCount\" : 4\n },\n \"doubleMetricsActual\" : {\n \"optimizer.score\" : 205.88235294117646\n },\n \"stringMetricsActual\" : {\n \"optimizer.decisionTrace\" : \"initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen\",\n \"optimizer.configuredStrategy\" : \"hybrid\",\n \"optimizer.decision\" : \"expand chosen Filter\",\n \"optimizer.rejectionReason\" : \"higher adjusted cost\",\n \"optimizer.strategy\" : \"greedy\",\n \"optimizer.estimateSource\" : \"cardinality+learned filter stats\",\n \"optimizer.originalOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]\",\n \"optimizer.thresholds\" : \"DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25\",\n \"optimizer.chosenOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]\",\n \"optimizer.initiallyBoundVars\" : \"[]\",\n \"optimizer.scoreComponents\" : \"rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1\",\n \"optimizer.scopeBarriers\" : \"segment only; separator barriers preserved outside this segment\"\n },\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"Filter\",\n \"resultSizeActual\" : 70,\n \"hasNextCallCountActual\" : 71,\n \"hasNextTrueCountActual\" : 70,\n \"hasNextTimeNanosActual\" : 4846880,\n \"nextCallCountActual\" : 70,\n \"nextTimeNanosActual\" : 17879,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 70,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 70,\n \"sourceRowsMatchedActual\" : 70,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 2267000,\n \"exprEvalCountActual\" : 70,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 1,\n \"exprTrueCountActual\" : 70,\n \"lastRowTimeNanosActual\" : 10815625,\n \"closeCountActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 814085.0\n },\n \"stringMetricsPlanned\" : {\n \"filterSelectivitySource\" : \"unknown\",\n \"deferredFilterScope\" : \"root\"\n },\n \"plans\" : [ {\n \"type\" : \"Compare (!=)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 70,\n \"exprTrueCountActual\" : 70\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 560543.0\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=v)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"Join\",\n \"resultSizeEstimate\" : 70.0,\n \"resultSizeActual\" : 70,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 5,\n \"joinLeftBindingsConsumedActual\" : 5,\n \"joinRightBindingsConsumedActual\" : 70,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"optimizer.candidateCount\" : 4\n },\n \"doubleMetricsActual\" : {\n \"optimizer.score\" : 205.88235294117646\n },\n \"stringMetricsActual\" : {\n \"optimizer.decisionTrace\" : \"initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen\",\n \"optimizer.configuredStrategy\" : \"hybrid\",\n \"optimizer.decision\" : \"expand chosen Filter\",\n \"optimizer.rejectionReason\" : \"higher adjusted cost\",\n \"optimizer.strategy\" : \"greedy\",\n \"optimizer.estimateSource\" : \"cardinality+learned filter stats\",\n \"optimizer.originalOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]\",\n \"optimizer.thresholds\" : \"DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25\",\n \"optimizer.chosenOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]\",\n \"optimizer.initiallyBoundVars\" : \"[]\",\n \"optimizer.scoreComponents\" : \"rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1\",\n \"optimizer.scopeBarriers\" : \"segment only; separator barriers preserved outside this segment\"\n },\n \"algorithm\" : \"JoinIterator\",\n \"plans\" : [ {\n \"type\" : \"BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])\",\n \"costEstimate\" : 0.0,\n \"resultSizeEstimate\" : 1.0,\n \"resultSizeActual\" : 5,\n \"hasNextCallCountActual\" : 6,\n \"hasNextTrueCountActual\" : 5,\n \"hasNextTimeNanosActual\" : 6792,\n \"nextCallCountActual\" : 5,\n \"nextTimeNanosActual\" : 4791,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 5,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 162333,\n \"openCountActual\" : 1,\n \"bindingsProvidedActual\" : 5,\n \"lastRowTimeNanosActual\" : 10524625,\n \"optimizer.candidateCount\" : 4,\n \"closeCountActual\" : 1,\n \"varsAddedActual\" : 1\n },\n \"doubleMetricsActual\" : {\n \"optimizer.score\" : 205.88235294117646\n },\n \"stringMetricsActual\" : {\n \"optimizer.decisionTrace\" : \"initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen\",\n \"optimizer.configuredStrategy\" : \"hybrid\",\n \"optimizer.decision\" : \"expand chosen Filter\",\n \"optimizer.rejectionReason\" : \"higher adjusted cost\",\n \"optimizer.strategy\" : \"greedy\",\n \"optimizer.estimateSource\" : \"cardinality+learned filter stats\",\n \"optimizer.originalOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]\",\n \"optimizer.thresholds\" : \"DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25\",\n \"optimizer.chosenOrder\" : \"[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]\",\n \"optimizer.initiallyBoundVars\" : \"[]\",\n \"optimizer.scoreComponents\" : \"rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1\",\n \"optimizer.scopeBarriers\" : \"segment only; separator barriers preserved outside this segment\",\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n }, {\n \"type\" : \"StatementPattern [index: ospc] \",\n \"costEstimate\" : 0.5,\n \"resultSizeEstimate\" : 143748.0,\n \"resultSizeActual\" : 70,\n \"hasNextCallCountActual\" : 75,\n \"hasNextTrueCountActual\" : 70,\n \"hasNextTimeNanosActual\" : 1895453,\n \"nextCallCountActual\" : 70,\n \"nextTimeNanosActual\" : 386169,\n \"joinRightIteratorsCreatedActual\" : 5,\n \"joinLeftBindingsConsumedActual\" : 5,\n \"joinRightBindingsConsumedActual\" : 70,\n \"sourceRowsScannedActual\" : 897,\n \"sourceRowsMatchedActual\" : 70,\n \"sourceRowsFilteredActual\" : 827,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 27958,\n \"indexLookupCountActual\" : 5,\n \"openCountActual\" : 5,\n \"lastRowTimeNanosActual\" : 1223916,\n \"closeCountActual\" : 5,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"stringMetricsPlanned\" : {\n \"plannedIndexName\" : \"ospc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n }, {\n \"type\" : \"Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=v)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"Filter\",\n \"costEstimate\" : 5.0,\n \"resultSizeEstimate\" : 5.0,\n \"resultSizeActual\" : 9,\n \"hasNextCallCountActual\" : 79,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 2100790,\n \"nextCallCountActual\" : 9,\n \"nextTimeNanosActual\" : 2791,\n \"joinRightIteratorsCreatedActual\" : 70,\n \"joinLeftBindingsConsumedActual\" : 70,\n \"joinRightBindingsConsumedActual\" : 9,\n \"sourceRowsScannedActual\" : 9,\n \"sourceRowsMatchedActual\" : 9,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 47084,\n \"exprEvalCountActual\" : 9,\n \"exprFalseCountActual\" : 0,\n \"predicateErrorCountActual\" : 0,\n \"openCountActual\" : 70,\n \"exprTrueCountActual\" : 9,\n \"lastRowTimeNanosActual\" : 11500,\n \"closeCountActual\" : 70\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 461458.0\n },\n \"plans\" : [ {\n \"type\" : \"Not\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 9,\n \"exprTrueCountActual\" : 9\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 444081.0\n },\n \"plans\" : [ {\n \"type\" : \"Exists\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"exprEvalCountActual\" : 9,\n \"exprFalseCountActual\" : 9\n },\n \"doubleMetricsActual\" : {\n \"exprEvalTimeNanosActual\" : 421789.0\n },\n \"plans\" : [ {\n \"type\" : \"Extension\",\n \"resultSizeActual\" : 0,\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"plans\" : [ {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"resultSizeEstimate\" : 143748.0,\n \"resultSizeActual\" : 0,\n \"hasNextCallCountActual\" : 9,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 54251,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 9,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 9,\n \"longMetricsActual\" : {\n \"indexLookupCountActual\" : 9,\n \"openCountActual\" : 9,\n \"lastRowTimeNanosActual\" : 5500,\n \"closeCountActual\" : 9,\n \"varsAddedActual\" : 2\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"stringMetricsPlanned\" : {\n \"plannedIndexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n }, {\n \"type\" : \"ExtensionElem (_anon_path_1105d76019e85b4b388c0e0befebd4917b0)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])\",\n \"resultSizeActual\" : 9,\n \"hasNextCallCountActual\" : 79,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 537832,\n \"nextCallCountActual\" : 9,\n \"nextTimeNanosActual\" : 3832,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 9583,\n \"openCountActual\" : 70,\n \"bindingsProvidedActual\" : 9,\n \"lastRowTimeNanosActual\" : 6083,\n \"closeCountActual\" : 70,\n \"varsAddedActual\" : 1\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n }\n } ]\n } ]\n }, {\n \"type\" : \"StatementPattern [index: spoc] \",\n \"resultSizeEstimate\" : 15982.0,\n \"resultSizeActual\" : 9,\n \"hasNextCallCountActual\" : 18,\n \"hasNextTrueCountActual\" : 9,\n \"hasNextTimeNanosActual\" : 135456,\n \"nextCallCountActual\" : 9,\n \"nextTimeNanosActual\" : 34583,\n \"joinRightIteratorsCreatedActual\" : 9,\n \"joinLeftBindingsConsumedActual\" : 9,\n \"joinRightBindingsConsumedActual\" : 9,\n \"sourceRowsScannedActual\" : 18,\n \"sourceRowsMatchedActual\" : 9,\n \"sourceRowsFilteredActual\" : 9,\n \"longMetricsActual\" : {\n \"firstRowTimeNanosActual\" : 14167,\n \"indexLookupCountActual\" : 9,\n \"openCountActual\" : 9,\n \"lastRowTimeNanosActual\" : 60875,\n \"closeCountActual\" : 9,\n \"varsAddedActual\" : 3\n },\n \"stringMetricsActual\" : {\n \"metricOrigin.varsAddedActual\" : \"derived\"\n },\n \"stringMetricsPlanned\" : {\n \"plannedIndexName\" : \"spoc\"\n },\n \"plans\" : [ {\n \"type\" : \"Var (name=v)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n }, {\n \"type\" : \"Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0\n }, {\n \"type\" : \"Var (name=optName)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"GroupElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"bound\"\n }\n } ]\n } ]\n } ]\n }, {\n \"type\" : \"ExtensionElem (count)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Count (Distinct)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"plans\" : [ {\n \"type\" : \"Var (name=u)\",\n \"hasNextCallCountActual\" : 0,\n \"hasNextTrueCountActual\" : 0,\n \"hasNextTimeNanosActual\" : 0,\n \"nextCallCountActual\" : 0,\n \"nextTimeNanosActual\" : 0,\n \"joinRightIteratorsCreatedActual\" : 0,\n \"joinLeftBindingsConsumedActual\" : 0,\n \"joinRightBindingsConsumedActual\" : 0,\n \"sourceRowsScannedActual\" : 0,\n \"sourceRowsMatchedActual\" : 0,\n \"sourceRowsFilteredActual\" : 0,\n \"stringMetricsActual\" : {\n \"bindingState\" : \"unbound\"\n }\n } ]\n } ]\n } ]\n } ]\n}", + "tupleExprTree" : "QueryRoot (resultSizeActual=1.00)\n Projection (resultSizeActual=1.00)\n ProjectionElemList\n ProjectionElem \"count\"\n Extension (resultSizeActual=1.00)\n Group () (resultSizeActual=1.00)\n Filter (resultSizeActual=9.00)\n Compare (!=)\n Var (name=optName)\n ValueConstant (value=\"\")\n LeftJoin (LeftJoinIterator) (resultSizeActual=9.00)\n Join (JoinIterator) (resultSizeEstimate=350, resultSizeActual=9.00)\n Filter (resultSizeActual=70)\n Compare (!=)\n Var (name=u)\n Var (name=v)\n Join (JoinIterator) (resultSizeEstimate=70, resultSizeActual=70)\n BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5.00)\n StatementPattern [index: ospc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=70)\n Var (name=u)\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n Var (name=v)\n Filter (costEstimate=5.00, resultSizeEstimate=5.00, resultSizeActual=9.00)\n Not\n Exists\n Extension (resultSizeActual=0)\n StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0)\n Var (name=u)\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\n Var (name=u)\n ExtensionElem (_anon_path_1105d76019e85b4b388c0e0befebd4917b0)\n Var (name=u)\n BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=9.00)\n StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9.00)\n Var (name=v)\n Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\n Var (name=optName)\n GroupElem (count)\n Count (Distinct)\n Var (name=u)\n ExtensionElem (count)\n Count (Distinct)\n Var (name=u)\n", + "tupleExprJson" : "{\n \"format\" : \"java-serialized-base64-v1\",\n \"tupleExprClass\" : \"org.eclipse.rdf4j.query.algebra.QueryRoot\",\n \"tupleExprTree\" : \"QueryRoot (resultSizeActual=1.00)\\n Projection (resultSizeActual=1.00)\\n ProjectionElemList\\n ProjectionElem \\\"count\\\"\\n Extension (resultSizeActual=1.00)\\n Group () (resultSizeActual=1.00)\\n Filter (resultSizeActual=9.00)\\n Compare (!=)\\n Var (name=optName)\\n ValueConstant (value=\\\"\\\")\\n LeftJoin (LeftJoinIterator) (resultSizeActual=9.00)\\n Join (JoinIterator) (resultSizeEstimate=350, resultSizeActual=9.00)\\n Filter (resultSizeActual=70)\\n Compare (!=)\\n Var (name=u)\\n Var (name=v)\\n Join (JoinIterator) (resultSizeEstimate=70, resultSizeActual=70)\\n BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5.00)\\n StatementPattern [index: ospc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=70)\\n Var (name=u)\\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\\n Var (name=v)\\n Filter (costEstimate=5.00, resultSizeEstimate=5.00, resultSizeActual=9.00)\\n Not\\n Exists\\n Extension (resultSizeActual=0)\\n StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0)\\n Var (name=u)\\n Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)\\n Var (name=u)\\n ExtensionElem (_anon_path_1105d76019e85b4b388c0e0befebd4917b0)\\n Var (name=u)\\n BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=9.00)\\n StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9.00)\\n Var (name=v)\\n Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)\\n Var (name=optName)\\n GroupElem (count)\\n Count (Distinct)\\n Var (name=u)\\n ExtensionElem (count)\\n Count (Distinct)\\n Var (name=u)\\n\",\n \"fingerprintSha256\" : \"8525c435390e66b81ec0aa465e93b1e72896eada55407f781f4e6347a4e308e6\",\n \"payloadBase64\" : \"rO0ABXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlF1ZXJ5Um9vdA1fKjLSug+1AgAAeHIAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVW5hcnlUdXBsZU9wZXJhdG9yl2MCYBltodMCAAFMAANhcmd0ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9UdXBsZUV4cHI7eHIANm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQWJzdHJhY3RRdWVyeU1vZGVsTm9kZSm4KpCqDYWSAgAZRAALY2FyZGluYWxpdHlEAAxjb3N0RXN0aW1hdGVKABZoYXNOZXh0Q2FsbENvdW50QWN0dWFsSgAWaGFzTmV4dFRpbWVOYW5vc0FjdHVhbEoAFmhhc05leHRUcnVlQ291bnRBY3R1YWxaABVpc1ZhcmlhYmxlU2NvcGVDaGFuZ2VKAB5qb2luTGVmdEJpbmRpbmdzQ29uc3VtZWRBY3R1YWxKAB9qb2luUmlnaHRCaW5kaW5nc0NvbnN1bWVkQWN0dWFsSgAfam9pblJpZ2h0SXRlcmF0b3JzQ3JlYXRlZEFjdHVhbEoAE25leHRDYWxsQ291bnRBY3R1YWxKABNuZXh0VGltZU5hbm9zQWN0dWFsSgAQcmVzdWx0U2l6ZUFjdHVhbEQAEnJlc3VsdFNpemVFc3RpbWF0ZVoAF3J1bnRpbWVUZWxlbWV0cnlFbmFibGVkSgAYc291cmNlUm93c0ZpbHRlcmVkQWN0dWFsSgAXc291cmNlUm93c01hdGNoZWRBY3R1YWxKABdzb3VyY2VSb3dzU2Nhbm5lZEFjdHVhbEoAFHRvdGFsVGltZU5hbm9zQWN0dWFsTAATZG91YmxlTWV0cmljc0FjdHVhbHQAD0xqYXZhL3V0aWwvTWFwO0wAFGRvdWJsZU1ldHJpY3NQbGFubmVkcQB+AARMABFsb25nTWV0cmljc0FjdHVhbHEAfgAETAASbG9uZ01ldHJpY3NQbGFubmVkcQB+AARMAAZwYXJlbnR0ADBMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9RdWVyeU1vZGVsTm9kZTtMABNzdHJpbmdNZXRyaWNzQWN0dWFscQB+AARMABRzdHJpbmdNZXRyaWNzUGxhbm5lZHEAfgAEeHAAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAIAAAAAAMs7WAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAilkAAAAAAAAAAb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3IAHmphdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eU1hcFk2FIVa3OfQAgAAeHBxAH4ACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAZ3CAAAAAgAAAAFdAAQb3V0cHV0Um93c0FjdHVhbHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQAF2ZpcnN0Um93VGltZU5hbm9zQWN0dWFsc3EAfgAMAAAAAADL99J0ABBjbG9zZUNvdW50QWN0dWFscQB+AA50AA9vcGVuQ291bnRBY3R1YWxxAH4ADnQAFmxhc3RSb3dUaW1lTmFub3NBY3R1YWxzcQB+AAwAAAAAAM0tjnhxAH4ACHBxAH4ACHEAfgAIc3IAKm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbmlSPAZPHDtSAgADWgAIc3VicXVlcnlMAAxwcm9qRWxlbUxpc3R0ADRMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbUxpc3Q7TAARcHJvamVjdGlvbkNvbnRleHR0ACVMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYXI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAACAAAAAADLOJMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAIMFAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIcQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAMv2MXEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAM08h3hxAH4ACHEAfgAGcQB+AAhxAH4ACHNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkV4dGVuc2lvbtQK4vJzVJ/OAgABTAAIZWxlbWVudHN0ABBMamF2YS91dGlsL0xpc3Q7eHEAfgABAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAACAAAAAADLGVMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAEHCAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3EAfgAIcQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAAVxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAMvv2XEAfgARcQB+AA5xAH4AEnEAfgAOcQB+ABNzcQB+AAwAAAAAAM06k3hxAH4ACHEAfgAYcQB+AAhxAH4ACHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3Vw9kcb0HgPM/kCAAJMAA1ncm91cEJpbmRpbmdzdAAPTGphdmEvdXRpbC9TZXQ7TAANZ3JvdXBFbGVtZW50c3EAfgAdeHEAfgABAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAACAAAAAADK9vwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAOVAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXQAEmF2Z0dyb3VwU2l6ZUFjdHVhbHNyABBqYXZhLmxhbmcuRG91YmxlgLPCSilr+wQCAAFEAAV2YWx1ZXhxAH4ADUAiAAAAAAAAeHEAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAIdAAYYWdncmVnYXRlRXZhbENvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAlxAH4AC3EAfgAOcQB+AA9zcQB+AAwAAAAAAMvLtnQAE2dyb3Vwc0NyZWF0ZWRBY3R1YWxxAH4ADnEAfgAScQB+AA5xAH4AE3NxAH4ADAAAAAAAzSnPdAASbWF4R3JvdXBTaXplQWN0dWFscQB+ACtxAH4AEXEAfgAOeHEAfgAIcQB+AB5xAH4ACHEAfgAIc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRmlsdGVyMHu9pSkqq/UCAAFMAAljb25kaXRpb250ACtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9WYWx1ZUV4cHI7eHEAfgABAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAALAAAAAACib38AAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAkbAAAAAAAAAAm/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAn//////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXQAF2V4cHJFdmFsVGltZU5hbm9zQWN0dWFsc3EAfgAnQRmSMAAAAAB4cQB+AAhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3EAfgArcQB+AA9zcQB+AAwAAAAAADr1wHQAE2V4cHJFdmFsQ291bnRBY3R1YWxxAH4AK3QAFGV4cHJGYWxzZUNvdW50QWN0dWFsc3EAfgAMAAAAAAAAAAB0ABlwcmVkaWNhdGVFcnJvckNvdW50QWN0dWFscQB+ADpxAH4AEnEAfgAOdAATZXhwclRydWVDb3VudEFjdHVhbHEAfgArcQB+ABNzcQB+AAwAAAAAALCYVXEAfgARcQB+AA54cQB+AAhxAH4AJHEAfgAIcQB+AAhzcgAob3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5MZWZ0Sm9pbjDKyyRoGfI6AgABTAAJY29uZGl0aW9ucQB+ADF4cgAzb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5CaW5hcnlUdXBsZU9wZXJhdG9yPpjeZGh0c4wCAANMAA1hbGdvcml0aG1OYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7TAAHbGVmdEFyZ3EAfgACTAAIcmlnaHRBcmdxAH4AAnhxAH4AAwAAAAAAAAABv/AAAAAAAAAAAAAAAAAACgAAAAAAmhwmAAAAAAAAAAkAAAAAAAAAAAkAAAAAAAAACQAAAAAAAAAJAAAAAAAAAAkAAAAAAAAG/wAAAAAAAAAJv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHEAfgAIc3EAfgAJP0AAAAAAAAx3CAAAABAAAAAHcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAA1M/V0ABdsZWZ0Um93c1dpdGhNYXRjaEFjdHVhbHEAfgArcQB+ABJxAH4ADnEAfgATc3EAfgAMAAAAAAClwW9xAH4AEXEAfgAOdAAZbWF4UmlnaHRSb3dzUGVyTGVmdEFjdHVhbHEAfgAOeHEAfgAIcQB+ADJxAH4ACHEAfgAIdAAQTGVmdEpvaW5JdGVyYXRvcnNyACRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkpvaW6UWdWvX4m6BAIAAloACWNhY2hlYWJsZVoACW1lcmdlSm9pbnhxAH4APwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8AAAAAAAAAAE8AAAAAAAAACQAAAAAAAABG/////////////////////wAAAAAAAAAJQHXgAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAF0AA9vcHRpbWl6ZXIuc2NvcmVzcQB+ACdAabw8PDw8PHhxAH4ACHNxAH4ACT9AAAAAAAABdwgAAAACAAAAAXQAGG9wdGltaXplci5jYW5kaWRhdGVDb3VudHNxAH4ADAAAAAAAAAAEeHEAfgAIcQB+AEFzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAx0ABdvcHRpbWl6ZXIuZGVjaXNpb25UcmFjZXQE/2luaXRpYWwgY2FuZGlkYXRlIGxlZnQ9QmluZGluZ1NldEFzc2lnbm1lbnQgKFtbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvN10sIFt2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci84XSwgW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzldLCBbdi4uLiByaWdodD1GaWx0ZXIgc2NvcmU9MzEuMjUgcmF3Um93cz01LjAgZWZmZWN0aXZlUm93cz01LjAgc2hhcmVkVmFycz0wIGJvdW5kQW5jaG9ycz0wIGNoZWFwRmlsdGVycz0xIGV4cGVuc2l2ZUZpbHRlcnM9MCBmaWx0ZXJQYXNzUmF0aW89LTEuMCB0aWVCcmVha2VySW5kZXg9MCBkZWNpc2lvbj1yZWplY3RlZCByZWFzb249aGlnaGVyIGFkanVzdGVkIGNvc3Q7IGluaXRpYWwgY2FuZGlkYXRlIGxlZnQ9QmluZGluZ1NldEFzc2lnbm1lbnQgKFtbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvN10sIFt2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci84XSwgW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzldLCBbdi4uLiByaWdodD1TUCg/dSBmb2xsb3dzID92KSBzY29yZT0yNS43MzUyOTQxMTc2NDcwNTggcmF3Um93cz03MC4wIGVmZmVjdGl2ZVJvd3M9NzAuMCBzaGFyZWRWYXJzPTEgYm91bmRBbmNob3JzPTAgY2hlYXBGaWx0ZXJzPTEgZXhwZW5zaXZlRmlsdGVycz0wIGZpbHRlclBhc3NSYXRpbz0tMS4wIHRpZUJyZWFrZXJJbmRleD0wIGRlY2lzaW9uPWNob3NlbiByZWFzb249Y2hvc2VuOyBpbml0aWFsIGNhbmRpZGF0ZSBsZWZ0PUZpbHRlciByaWdodD1TUCg/dSBmb2xsb3dzID92KSBzY29yZT0yNS43MzUyOTQxMTc2NDcwNTggcmF3Um93cz03MTg3NDAuMCBlZmZlY3RpdmVSb3dzPTcwLjAgc2hhcmVkVmFycz0xIGJvdW5kQW5jaG9ycz0wIGNoZWFwRmlsdGVycz0xIGV4cGVuc2l2ZUZpbHRlcnM9MCBmaWx0ZXJQYXNzUmF0aW89LTEuMCB0aWVCcmVha2VySW5kZXg9MSBkZWNpc2lvbj1yZWplY3RlZCByZWFzb249bGF0ZXIgdGllLWJyZWFrZXIgaW5kZXg7IGV4cGFuZCBjYW5kaWRhdGUgbGVmdD1Kb2luIHJpZ2h0PUZpbHRlciBzY29yZT0yMDUuODgyMzUyOTQxMTc2NDYgcmF3Um93cz0zNTAuMCBlZmZlY3RpdmVSb3dzPTM1MC4wIHNoYXJlZFZhcnM9MSBib3VuZEFuY2hvcnM9MCBjaGVhcEZpbHRlcnM9MCBleHBlbnNpdmVGaWx0ZXJzPTAgZmlsdGVyUGFzc1JhdGlvPS0xLjAgdGllQnJlYWtlckluZGV4PTEgZGVjaXNpb249Y2hvc2VuIHJlYXNvbj1jaG9zZW50ABxvcHRpbWl6ZXIuY29uZmlndXJlZFN0cmF0ZWd5dAAGaHlicmlkdAASb3B0aW1pemVyLmRlY2lzaW9udAAUZXhwYW5kIGNob3NlbiBGaWx0ZXJ0ABlvcHRpbWl6ZXIucmVqZWN0aW9uUmVhc29udAAUaGlnaGVyIGFkanVzdGVkIGNvc3R0ABJvcHRpbWl6ZXIuc3RyYXRlZ3l0AAZncmVlZHl0ABhvcHRpbWl6ZXIuZXN0aW1hdGVTb3VyY2V0ACBjYXJkaW5hbGl0eStsZWFybmVkIGZpbHRlciBzdGF0c3QAF29wdGltaXplci5vcmlnaW5hbE9yZGVydAC9W0JpbmRpbmdTZXRBc3NpZ25tZW50IChbW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzddLCBbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOF0sIFt2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85XSwgW3YuLi4sIEZpbHRlciwgU1AoP3UgZm9sbG93cyA/dilddAAUb3B0aW1pemVyLnRocmVzaG9sZHN0Ab1EWU5BTUlDX1BST0dSQU1NSU5HX0pPSU5fQVJHX0xJTUlUPTgsIE1FUkdFX0pPSU5fQ0FSRElOQUxJVFlfU0laRV9ESUZGX01VTFRJUExJRVI9MTAsIEFWT0lEQUJMRV9DUk9TU19KT0lOX1BFTkFMVFk9MTAuMCwgVU5BTkNIT1JFRF9JTklUSUFMX1BBSVJfUEVOQUxUWT01LjAsIFNIQVJFRF9WQVJfQk9OVVNfUEVSX1ZBUj0xLjcsIE1BWF9TSEFSRURfVkFSX0JPTlVTPTMuNCwgQk9VTkRfQU5DSE9SX0JPTlVTX1BFUl9WQVI9MS40LCBNQVhfQk9VTkRfQU5DSE9SX0JPTlVTPTIuOCwgQ0hFQVBfRklMVEVSX0JPTlVTX1BFUl9GSUxURVI9MS42LCBNQVhfQ0hFQVBfRklMVEVSX0JPTlVTPTIuNTYsIEVYUEVOU0lWRV9GSUxURVJfQk9OVVNfUEVSX0ZJTFRFUj0xLjEsIE1BWF9FWFBFTlNJVkVfRklMVEVSX0JPTlVTPTEuMjEsIE1JTl9VTkxPQ0tFRF9GSUxURVJfUEFTU19SQVRJTz0wLjI1dAAVb3B0aW1pemVyLmNob3Nlbk9yZGVydAC9W0JpbmRpbmdTZXRBc3NpZ25tZW50IChbW3Y9aHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzddLCBbdj1odHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOF0sIFt2PWh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85XSwgW3YuLi4sIFNQKD91IGZvbGxvd3MgP3YpLCBGaWx0ZXJddAAcb3B0aW1pemVyLmluaXRpYWxseUJvdW5kVmFyc3QAAltddAAZb3B0aW1pemVyLnNjb3JlQ29tcG9uZW50c3QArnJhd1Jvd3M9MzUwLjAsIGVmZmVjdGl2ZVJvd3M9MzUwLjAsIGFkanVzdGVkQ29zdD0yMDUuODgyMzUyOTQxMTc2NDYsIHNoYXJlZFZhcnM9MSwgYm91bmRBbmNob3JzPTAsIGNoZWFwRmlsdGVycz0wLCBleHBlbnNpdmVGaWx0ZXJzPTAsIGZpbHRlclBhc3NSYXRpbz0tMS4wLCB0aWVCcmVha2VySW5kZXg9MXQAF29wdGltaXplci5zY29wZUJhcnJpZXJzdAA/c2VnbWVudCBvbmx5OyBzZXBhcmF0b3IgYmFycmllcnMgcHJlc2VydmVkIG91dHNpZGUgdGhpcyBzZWdtZW50eHEAfgAIdAAMSm9pbkl0ZXJhdG9yc3EAfgAwAAAAAAAAAAG/8AAAAAAAAAAAAAAAAABHAAAAAABJ9SAAAAAAAAAARgAAAAAAAAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgAAAAAAAEXXAAAAAAAAAEa/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAABGAAAAAAAAAEb//////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQSjYCgAAAAB4cQB+AAhzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAlxAH4AC3NxAH4ADAAAAAAAAABGcQB+AA9zcQB+AAwAAAAAACKXeHEAfgA4cQB+AG5xAH4AOXEAfgA6cQB+ADtxAH4AOnEAfgAScQB+AA5xAH4APHEAfgBucQB+ABNzcQB+AAwAAAAAAKUIiXEAfgARcQB+AA54cQB+AAhxAH4ASXEAfgAIc3EAfgAJP0AAAAAAAAN3CAAAAAQAAAACdAAXZmlsdGVyU2VsZWN0aXZpdHlTb3VyY2V0AAd1bmtub3dudAATZGVmZXJyZWRGaWx0ZXJTY29wZXQABHJvb3R4c3EAfgBIAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wAAAAAAAAAABQAAAAAAAABGAAAAAAAAAAX/////////////////////AAAAAAAAAEZAUYAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgBLc3EAfgAnQGm8PDw8PDx4cQB+AAhzcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ATnEAfgBPeHEAfgAIcQB+AGpzcQB+AAk/QAAAAAAADHcIAAAAEAAAAAxxAH4AUXEAfgBScQB+AFNxAH4AVHEAfgBVcQB+AFZxAH4AV3EAfgBYcQB+AFlxAH4AWnEAfgBbcQB+AFxxAH4AXXEAfgBecQB+AF9xAH4AYHEAfgBhcQB+AGJxAH4AY3EAfgBkcQB+AGVxAH4AZnEAfgBncQB+AGh4cQB+AAhxAH4AaXNyADRvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkJpbmRpbmdTZXRBc3NpZ25tZW50N9Z2Fr6OiCMCAAJMAAxiaW5kaW5nTmFtZXNxAH4AI0wAC2JpbmRpbmdTZXRzdAAUTGphdmEvbGFuZy9JdGVyYWJsZTt4cQB+AAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAaiAAAAAAAAAAFAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAErcAAAAAAAAABT/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+AEtzcQB+ACdAabw8PDw8PHhxAH4ACHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAAB3EAfgALc3EAfgAMAAAAAAAAAAVxAH4AD3NxAH4ADAAAAAAAAnodcQB+ABJxAH4ADnQAFmJpbmRpbmdzUHJvdmlkZWRBY3R1YWxxAH4AgXEAfgATc3EAfgAMAAAAAACgl9FxAH4ATnEAfgBPcQB+ABFxAH4ADnhxAH4ACHEAfgB2c3EAfgAJP0AAAAAAAAx3CAAAABAAAAAMcQB+AFFxAH4AUnEAfgBTcQB+AFRxAH4AVXEAfgBWcQB+AFdxAH4AWHEAfgBZcQB+AFpxAH4AW3EAfgBccQB+AF1xAH4AXnEAfgBfcQB+AGBxAH4AYXEAfgBicQB+AGNxAH4AZHEAfgBlcQB+AGZxAH4AZ3EAfgBoeHEAfgAIc3IAEWphdmEudXRpbC5IYXNoU2V0ukSFlZa4tzQDAAB4cHcMAAAAED9AAAAAAAABdAABdnhzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAABXcEAAAABXNyACtvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5pbXBsLkxpc3RCaW5kaW5nU2V016Vi6/S1rCECAANMAAxiaW5kaW5nTmFtZXNxAH4AHUwAFGJpbmRpbmdOYW1lc1NldENhY2hlcQB+ACNMAAZ2YWx1ZXNxAH4AHXhyACpvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5BYnN0cmFjdEJpbmRpbmdTZXTb/9KTjjc9QAIAAHhwc3EAfgCJAAAAAXcEAAAAAXQAAXZ4cHNyABpqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdNmkPL7NiAbSAgABWwABYXQAE1tMamF2YS9sYW5nL09iamVjdDt4cHVyACBbTG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLlZhbHVlO9DrErSHSHnWAgAAeHAAAAABc3IAJm9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmltcGwuU2ltcGxlSVJJmkUqQ5NmRm4CAAJJAAxsb2NhbE5hbWVJZHhMAAlpcmlTdHJpbmdxAH4AQHhyAChvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5iYXNlLkFic3RyYWN0SVJJbD8POgeR8JYCAAFJAA5jYWNoZWRIYXNoQ29kZXhwAAAAAAAAACV0ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvN3NxAH4Ai3NxAH4AiQAAAAF3BAAAAAFxAH4Aj3hwc3EAfgCQdXEAfgCTAAAAAXNxAH4AlQAAAAAAAAAldAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzhzcQB+AItzcQB+AIkAAAABdwQAAAABcQB+AI94cHNxAH4AkHVxAH4AkwAAAAFzcQB+AJUAAAAAAAAAJXQAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci85c3EAfgCLc3EAfgCJAAAAAXcEAAAAAXEAfgCPeHBzcQB+AJB1cQB+AJMAAAABc3EAfgCVAAAAAAAAACV0ACdodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvMTBzcQB+AItzcQB+AIkAAAABdwQAAAABcQB+AI94cHNxAH4AkHVxAH4AkwAAAAFzcQB+AJUAAAAAAAAAJXQAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMXhzcgAwb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuNfP+pm3u91ICAAlMABNhc3N1cmVkQmluZGluZ05hbWVzcQB+ACNMAApjb250ZXh0VmFycQB+ABdMAAlpbmRleE5hbWVxAH4AQEwACW9iamVjdFZhcnEAfgAXTAAMcHJlZGljYXRlVmFycQB+ABdMAAVzY29wZXQAOExvcmcvZWNsaXBzZS9yZGY0ai9xdWVyeS9hbGdlYnJhL1N0YXRlbWVudFBhdHRlcm4kU2NvcGU7TAAOc3RhdGVtZW50T3JkZXJ0AC9Mb3JnL2VjbGlwc2UvcmRmNGovY29tbW9uL29yZGVyL1N0YXRlbWVudE9yZGVyO0wACnN1YmplY3RWYXJxAH4AF0wAB3Zhckxpc3RxAH4AHXhxAH4AAwAAAAAAAAABP+AAAAAAAAAAAAAAAAAASwAAAAAAHOwdAAAAAAAAAEYAAAAAAAAAAAUAAAAAAAAARgAAAAAAAAAFAAAAAAAAAEYAAAAAAAXkeQAAAAAAAABGQQGMIAAAAAAAAAAAAAAAAzsAAAAAAAAARgAAAAAAAAOB//////////9xAH4ACHEAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AbnEAfgAPc3EAfgAMAAAAAAAAbTZ0ABZpbmRleExvb2t1cENvdW50QWN0dWFscQB+AIFxAH4AEXEAfgCBcQB+ABJxAH4AgXEAfgATc3EAfgAMAAAAAAASrOx4cQB+AAhxAH4AdnEAfgAIcQB+AAhzcgA/b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdGF0ZW1lbnRQYXR0ZXJuJFNtYWxsU3RyaW5nU2V0ebxIp4X9eUACAAFbAAZ2YWx1ZXN0ABNbTGphdmEvbGFuZy9TdHJpbmc7eHB1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAADdAABdXQAE19jb25zdF85YzY4ZTEyYV91cmlxAH4AiHB0AARvc3Bjc3IAI29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuVmFyQEPusvr+8McCAAVaAAlhbm9ueW1vdXNJAA5jYWNoZWRIYXNoQ29kZVoACGNvbnN0YW50TAAEbmFtZXEAfgBATAAFdmFsdWV0AB9Mb3JnL2VjbGlwc2UvcmRmNGovbW9kZWwvVmFsdWU7eHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ALRxAH4ACHEAfgAIAAAAAAAAcQB+AIhwc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ALRxAH4ACHEAfgAIAQAAAAABcQB+AL9zcQB+AJUAAAAAAAAAIHQAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvZm9sbG93c35yADZvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlN0YXRlbWVudFBhdHRlcm4kU2NvcGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0ABBERUZBVUxUX0NPTlRFWFRTcHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgC0cQB+AAhxAH4ACAAAAAAAAHEAfgC+cHAAAHNyACdvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvbXBhcmVvtXCWt50p+gIAAUwACG9wZXJhdG9ydAAzTG9yZy9lY2xpcHNlL3JkZjRqL3F1ZXJ5L2FsZ2VicmEvQ29tcGFyZSRDb21wYXJlT3A7eHIAM29yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuQmluYXJ5VmFsdWVPcGVyYXRvcgoKkPfkAAZqAgACTAAHbGVmdEFyZ3EAfgAxTAAIcmlnaHRBcmdxAH4AMXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0EhGz4AAAAAeHEAfgAIc3EAfgAJP0AAAAAAAAN3CAAAAAQAAAACcQB+ADhxAH4AbnEAfgA8cQB+AG54cQB+AAhxAH4AanEAfgAIcQB+AAhzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Az3EAfgAIcQB+AAgAAAAAAABxAH4AvnBzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Az3EAfgAIcQB+AAgAAAAAAABxAH4AiHB+cgAxb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Db21wYXJlJENvbXBhcmVPcAAAAAAAAAAAEgAAeHEAfgDIdAACTkVzcQB+ADAAAAAAAAAAAUAUAAAAAAAAAAAAAAAAAE8AAAAAACAONgAAAAAAAAAJAAAAAAAAAABGAAAAAAAAAAkAAAAAAAAARgAAAAAAAAAJAAAAAAAACucAAAAAAAAACUAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAACf//////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBHCpIAAAAAHhxAH4ACHNxAH4ACT9AAAAAAAAMdwgAAAAQAAAACXEAfgALcQB+ACtxAH4AD3NxAH4ADAAAAAAAALfscQB+ADhxAH4AK3EAfgA5cQB+ADpxAH4AO3EAfgA6cQB+ABJxAH4AbnEAfgA8cQB+ACtxAH4AE3NxAH4ADAAAAAAAACzscQB+ABFxAH4AbnhxAH4ACHEAfgBJcQB+AAhxAH4ACHNxAH4AewAAAAAAAAABv/AAAAAAAAAAAAAAAAAATwAAAAAACDToAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAO+AAAAAAAAAAJv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////9xAH4ACHEAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAAJW9xAH4AEXEAfgBucQB+ABJxAH4AbnEAfgCDcQB+ACtxAH4AE3NxAH4ADAAAAAAAABfDeHEAfgAIcQB+ANhxAH4ACHEAfgAIc3EAfgCGdwwAAAAQP0AAAAAAAAFxAH4AvnhzcQB+AIkAAAAFdwQAAAAFc3EAfgCLc3EAfgCJAAAAAXcEAAAAAXQAAXV4c3IAF2phdmEudXRpbC5MaW5rZWRIYXNoU2V02GzXWpXdKh4CAAB4cQB+AIZ3DAAAABA/QAAAAAAAAXEAfgDmeHNxAH4AkHVxAH4AkwAAAAFzcQB+AJUAAAAA/////3QAJmh0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci83c3EAfgCLc3EAfgCJAAAAAXcEAAAAAXEAfgDmeHNxAH4A53cMAAAAED9AAAAAAAABcQB+AOZ4c3EAfgCQdXEAfgCTAAAAAXNxAH4AlQAAAAD/////dAAmaHR0cDovL2V4YW1wbGUuY29tL3RoZW1lL3NvY2lhbC91c2VyLzhzcQB+AItzcQB+AIkAAAABdwQAAAABcQB+AOZ4c3EAfgDndwwAAAAQP0AAAAAAAAFxAH4A5nhzcQB+AJB1cQB+AJMAAAABc3EAfgCVAAAAAP////90ACZodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL3VzZXIvOXNxAH4Ai3NxAH4AiQAAAAF3BAAAAAFxAH4A5nhzcQB+AOd3DAAAABA/QAAAAAAAAXEAfgDmeHNxAH4AkHVxAH4AkwAAAAFzcQB+AJUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMHNxAH4Ai3NxAH4AiQAAAAF3BAAAAAFxAH4A5nhzcQB+AOd3DAAAABA/QAAAAAAAAXEAfgDmeHNxAH4AkHVxAH4AkwAAAAFzcQB+AJUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvdXNlci8xMXhzcgAjb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Ob3RnH0YDJbi1xAIAAHhyADJvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlVuYXJ5VmFsdWVPcGVyYXRvcqWYL3MhFWK4AgABTAADYXJncQB+ADF4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBGxrEAAAAAHhxAH4ACHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+ACtxAH4APHEAfgAreHEAfgAIcQB+ANhxAH4ACHEAfgAIc3IAJm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXhpc3RzLexmBw9d8AcCAAB4cgA1b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5TdWJRdWVyeVZhbHVlT3BlcmF0b3KYSwC9R1F0VwIAAUwACHN1YlF1ZXJ5cQB+AAJ4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////c3EAfgAJP0AAAAAAAAF3CAAAAAIAAAABcQB+ADRzcQB+ACdBGb50AAAAAHhxAH4ACHNxAH4ACT9AAAAAAAADdwgAAAAEAAAAAnEAfgA4cQB+ACtxAH4AOXEAfgAreHEAfgAIcQB+AQtxAH4ACHEAfgAIc3EAfgAcAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD/////////////////////////////////////////////////////AAAAAAAAAAC/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARFxAH4ACHEAfgAIc3EAfgCxAAAAAAAAAAG/8AAAAAAAAAAAAAAAAAAJAAAAAAAA0+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAYwgAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAn//////////3EAfgAIcQB+AAhzcQB+AAk/QAAAAAAABncIAAAACAAAAARxAH4At3EAfgArcQB+ABFxAH4AK3EAfgAScQB+ACtxAH4AE3NxAH4ADAAAAAAAABV8eHEAfgAIcQB+ARVxAH4ACHEAfgAIc3EAfgC5dXEAfgC8AAAAAnEAfgC+dAATX2NvbnN0XzljNjhlMTJhX3VyaXB0AARzcG9jc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARZxAH4ACHEAfgAIAAAAAAAAcQB+AL5wc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARZxAH4ACHEAfgAIAQAAAAABcQB+ARtzcQB+AJUAAAAA/////3QAJ2h0dHA6Ly9leGFtcGxlLmNvbS90aGVtZS9zb2NpYWwvZm9sbG93c3EAfgDJcHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEWcQB+AAhxAH4ACAAAAAAAAHEAfgC+cHBzcQB+AIkAAAABdwQAAAABc3IALW9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuRXh0ZW5zaW9uRWxlbfVEWvAL0OgoAgACTAAEZXhwcnEAfgAxTAAEbmFtZXEAfgBAeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ARVxAH4ACHEAfgAIc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+ASRxAH4ACHEAfgAIAAAAAAAAcQB+AL5wdAAuX2Fub25fcGF0aF8xMTA1ZDc2MDE5ZTg1YjRiMzg4YzBlMGJlZmViZDQ5MTdiMHgAAHNxAH4AsQAAAAAAAAABv/AAAAAAAAAAAAAAAAAAEgAAAAAAAhEgAAAAAAAAAAkAAAAAAAAAAAkAAAAAAAAACQAAAAAAAAAJAAAAAAAAAAkAAAAAAACHFwAAAAAAAAAJQM83AAAAAAAAAAAAAAAAAAkAAAAAAAAACQAAAAAAAAAS//////////9xAH4ACHEAfgAIc3EAfgAJP0AAAAAAAAZ3CAAAAAgAAAAGcQB+AAtxAH4AK3EAfgAPc3EAfgAMAAAAAAAAN1dxAH4At3EAfgArcQB+ABFxAH4AK3EAfgAScQB+ACtxAH4AE3NxAH4ADAAAAAAAAO3LeHEAfgAIcQB+AEFxAH4ACHEAfgAIc3EAfgC5dXEAfgC8AAAAA3EAfgCIdAATX2NvbnN0XzdkMTdiOTQzX3VyaXQAB29wdE5hbWVwdAAEc3BvY3NxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEncQB+AAhxAH4ACAAAAAAAAHEAfgEucHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgEncQB+AAhxAH4ACAEAAAAAAXEAfgEtc3EAfgCVAAAAAP////90ACRodHRwOi8vZXhhbXBsZS5jb20vdGhlbWUvc29jaWFsL25hbWVxAH4AyXBzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BJ3EAfgAIcQB+AAgAAAAAAABxAH4AiHBwcHNxAH4AzAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9zcQB+AAk/QAAAAAAAAXcIAAAAAgAAAAFxAH4ANHNxAH4AJ0EXLPAAAAAAeHEAfgAIc3EAfgAJP0AAAAAAAAN3CAAAAAQAAAACcQB+ADhxAH4AK3EAfgA8cQB+ACt4cQB+AAhxAH4AMnEAfgAIcQB+AAhzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BNXEAfgAIcQB+AAgAAAAAAABxAH4BLnBzcgAtb3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5WYWx1ZUNvbnN0YW50NjRfAXXKK8YCAAFMAAV2YWx1ZXEAfgDCeHEAfgADAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3NxAH4ACT9AAAAAAAABdwgAAAACAAAAAXEAfgA0c3EAfgAnQNoAQAAAAAB4cQB+AAhzcQB+AAk/QAAAAAAAA3cIAAAABAAAAAJxAH4AOHEAfgAOcQB+ADlxAH4ADnhxAH4ACHEAfgE1cQB+AAhxAH4ACHNyACpvcmcuZWNsaXBzZS5yZGY0ai5tb2RlbC5pbXBsLlNpbXBsZUxpdGVyYWzpG4szmIbG8QIABEwADGNvcmVEYXRhdHlwZXQAK0xvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9iYXNlL0NvcmVEYXRhdHlwZTtMAAhkYXRhdHlwZXQAHUxvcmcvZWNsaXBzZS9yZGY0ai9tb2RlbC9JUkk7TAAFbGFiZWxxAH4AQEwACGxhbmd1YWdlcQB+AEB4cgAsb3JnLmVjbGlwc2UucmRmNGoubW9kZWwuYmFzZS5BYnN0cmFjdExpdGVyYWzuJVYuhQckTQIAAHhwfnIALW9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuQ29yZURhdGF0eXBlJFhTRAAAAAAAAAAAEgAAeHEAfgDIdAAGU1RSSU5Hc3IAKG9yZy5lY2xpcHNlLnJkZjRqLm1vZGVsLmJhc2UuSW50ZXJuZWRJUkkCWUYAhQt1BwMABEkACGhhc2hDb2RlTAAJbG9jYWxOYW1lcQB+AEBMAAluYW1lc3BhY2VxAH4AQEwAC3N0cmluZ1ZhbHVlcQB+AEB4cHcv4u7HGAAhaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjAAZzdHJpbmd4dAAAcHEAfgDWc3EAfgDndwwAAAAQP0AAAAAAAAB4c3EAfgCJAAAAAXcEAAAAAXNyAClvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkdyb3VwRWxlbRwTUHZe8KB6AgACTAAEbmFtZXEAfgBATAAIb3BlcmF0b3J0ADNMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9BZ2dyZWdhdGVPcGVyYXRvcjt4cQB+AAMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4AJHEAfgAIcQB+AAh0AAVjb3VudHNyACVvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLkNvdW50wxukTDaaN4ACAAB4cgA5b3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5BYnN0cmFjdEFnZ3JlZ2F0ZU9wZXJhdG9yN7vtjRtBMb0CAAFaAAhkaXN0aW5jdHhxAH4BCgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFOcQB+AAhxAH4ACHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFScQB+AAhxAH4ACAAAAAAAAHEAfgC+cAF4c3EAfgCJAAAAAXcEAAAAAXNxAH4BIwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAecQB+AAhxAH4ACHNxAH4BUAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFVcQB+AAhxAH4ACHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFWcQB+AAhxAH4ACAAAAAAAAHEAfgC+cAFxAH4BT3gBc3IAMm9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW1MaXN0AlJ6/MTyRPsCAAJbAAhlbGVtZW50c3QAMVtMb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9Qcm9qZWN0aW9uRWxlbTtMAAxlbGVtZW50c0xpc3RxAH4AHXhxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgAYcQB+AAhxAH4ACHVyADFbTG9yZy5lY2xpcHNlLnJkZjRqLnF1ZXJ5LmFsZ2VicmEuUHJvamVjdGlvbkVsZW070Ge2o+LOFPUCAAB4cAAAAAFzcgAub3JnLmVjbGlwc2UucmRmNGoucXVlcnkuYWxnZWJyYS5Qcm9qZWN0aW9uRWxlbY8tG6n5YmkOAgAEWgAdYWdncmVnYXRlT3BlcmF0b3JJbkV4cHJlc3Npb25MAARuYW1lcQB+AEBMAA9wcm9qZWN0aW9uQWxpYXNxAH4AQEwAEHNvdXJjZUV4cHJlc3Npb250AC9Mb3JnL2VjbGlwc2UvcmRmNGovcXVlcnkvYWxnZWJyYS9FeHRlbnNpb25FbGVtO3hxAH4AAwAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFacQB+AAhxAH4ACAFxAH4BT3BzcQB+ASMAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhzcQB+ABwAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhzcQB+ABUAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhzcQB+AAAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhwcQB+AAhxAH4ACHEAfgFicQB+AAhxAH4ACHEAfgFhAXNxAH4BWAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFicQB+AAhxAH4ACHVxAH4BWwAAAAFzcQB+AV0AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BZHEAfgAIcQB+AAgBcQB+AU9wcQB+AWBzcgAmamF2YS51dGlsLkNvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3T8DyUxteyOEAIAAUwABGxpc3RxAH4AHXhyACxqYXZhLnV0aWwuQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlvbhlCAIDLXvceAgABTAABY3QAFkxqYXZhL3V0aWwvQ29sbGVjdGlvbjt4cHNxAH4AiQAAAAF3BAAAAAFxAH4BZnhxAH4Ba3BxAH4ACHEAfgAIc3EAfgAiAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AWFxAH4ACHEAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AWxxAH4ACHEAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AW1xAH4ACHEAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AW5xAH4ACHEAfgAIc3EAfgA+AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AW9xAH4ACHEAfgAIcHNxAH4ASAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFwcQB+AAhxAH4ACHBzcQB+AEgAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BcXEAfgAIcQB+AAhwc3EAfgB7AAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AXJxAH4ACHEAfgAIc3EAfgDndwwAAAACP0AAAAAAAAFxAH4A5nhxAH4A43NxAH4AewAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFycQB+AAhxAH4ACHNxAH4A53cMAAAAAj9AAAAAAAABcQB+AI94cQB+AIoAAHNxAH4AsQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFxcQB+AAhxAH4ACHNxAH4AuXVxAH4AvAAAAAN0AAF1cQB+AL90AAF2cHBzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Bd3EAfgAIcQB+AAgAAAAAAABxAH4Be3BzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Bd3EAfgAIcQB+AAgBAAAAAAFxAH4Av3EAfgDFcQB+AMlwc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AXdxAH4ACHEAfgAIAAAAAAAAcQB+AXpwcAAAc3EAfgCxAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AXBxAH4ACHEAfgAIc3EAfgC5dXEAfgC8AAAAA3QAAXZxAH4BLXQAB29wdE5hbWVwcHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgF/cQB+AAhxAH4ACAAAAAAAAHEAfgGDcHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgF/cQB+AAhxAH4ACAEAAAAAAXEAfgEtcQB+ATJxAH4AyXBzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Bf3EAfgAIcQB+AAgAAAAAAABxAH4BgnBwcHNxAH4AzAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFvcQB+AAhxAH4ACHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgGHcQB+AAhxAH4ACAAAAAAAAHEAfgC+cHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgGHcQB+AAhxAH4ACAAAAAAAAHEAfgCIcHEAfgDWc3EAfgEJAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AW5xAH4ACHEAfgAIc3EAfgEPAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AYpxAH4ACHEAfgAIc3EAfgAwAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AYtxAH4ACHEAfgAIc3EAfgCxAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AYxxAH4ACHEAfgAIcHBwc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AY1xAH4ACHEAfgAIAQAAAAAAcQB+ASZwc3EAfgDBAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AY1xAH4ACHEAfgAIAQAAAAABcQB+ARtxAH4BH3EAfgDJcHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgGNcQB+AAhxAH4ACAAAAAAAAHQAAXVwcHNyAChvcmcuZWNsaXBzZS5yZGY0ai5xdWVyeS5hbGdlYnJhLlNhbWVUZXJtIqx0VpK6rLQCAAB4cQB+AM4AAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BjHEAfgAIcQB+AAhzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4Bk3EAfgAIcQB+AAgAAAAAAAB0AAF1cHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgGTcQB+AAhxAH4ACAEAAAAAAHEAfgEmcHNxAH4AzAAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgFtcQB+AAhxAH4ACHNxAH4AwQAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgGXcQB+AAhxAH4ACAAAAAAAAHEAfgEucHNxAH4BOgAAAAAAAAABv/AAAAAAAAD///////////////////////////////8A////////////////////////////////////////////////////////////////v/AAAAAAAAAA//////////////////////////////////////////9xAH4ACHEAfgAIcQB+AAhxAH4ACHEAfgGXcQB+AAhxAH4ACHEAfgFDcQB+ANZzcgARamF2YS51dGlsLkNvbGxTZXJXjqu2OhuoEQMAAUkAA3RhZ3hwAAAAAncEAAAAAHhzcQB+AIkAAAABdwQAAAABc3EAfgFMAAAAAAAAAAG/8AAAAAAAAP///////////////////////////////wD///////////////////////////////////////////////////////////////+/8AAAAAAAAAD//////////////////////////////////////////3EAfgAIcQB+AAhxAH4ACHEAfgAIcQB+AWxxAH4ACHEAfgAIcQB+AU9zcQB+AVAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BnXEAfgAIcQB+AAhzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BnnEAfgAIcQB+AAgAAAAAAAB0AAF1cAF4c3EAfgCJAAAAAXcEAAAAAXEAfgFgeHEAfgAIcQB+AAhzcQB+AVAAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BYHEAfgAIcQB+AAhzcQB+AMEAAAAAAAAAAb/wAAAAAAAA////////////////////////////////AP///////////////////////////////////////////////////////////////7/wAAAAAAAAAP//////////////////////////////////////////cQB+AAhxAH4ACHEAfgAIcQB+AAhxAH4BonEAfgAIcQB+AAgAAAAAAABxAH4BoHABcQB+AU9zcQB+AJBxAH4BXHA=\"\n}", + "irRenderedQuery" : "SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE {\n VALUES ?v { }\n ?u ?v .\n FILTER (?u != ?v)\n VALUES ?u { }\n FILTER NOT EXISTS {\n ?u ?u .\n BIND(?u AS ?_anon_path_1105d76019e85b4b388c0e0befebd4917b0)\n }\n OPTIONAL {\n ?v ?optName .\n }\n FILTER (?optName != \"\")\n}", + "debugMetrics" : { + "optimizer.candidateCount" : "4", + "optimizer.score" : "205.88235294117646", + "optimizer.decisionTrace" : "initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen", + "optimizer.configuredStrategy" : "hybrid", + "optimizer.decision" : "expand chosen Filter", + "optimizer.rejectionReason" : "higher adjusted cost", + "optimizer.strategy" : "greedy", + "optimizer.estimateSource" : "cardinality+learned filter stats", + "optimizer.originalOrder" : "[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)]", + "optimizer.thresholds" : "DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25", + "optimizer.chosenOrder" : "[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter]", + "optimizer.initiallyBoundVars" : "[]", + "optimizer.scoreComponents" : "rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1", + "optimizer.scopeBarriers" : "segment only; separator barriers preserved outside this segment", + "rootType" : "Projection", + "rootTypeNormalized" : "Projection", + "rootAlgorithm" : "", + "rootCostEstimate" : "", + "rootResultSizeEstimate" : "", + "rootResultSizeActual" : "1", + "rootTotalTimeActual" : "", + "rootSelfTimeActual" : "", + "planNodeCount" : "42", + "maxDepth" : "12", + "leafNodeCount" : "19", + "maxBranchingFactor" : "3", + "joinNodeCount" : "3", + "filterNodeCount" : "3", + "statementPatternCount" : "3", + "anonymousTypeTokenCount" : "1", + "joinAlgorithmCounts" : "LeftJoinIterator=1,JoinIterator=2", + "structureSignatureRawSha256" : "4bb2eb37cb3ca968eb3bdd001f0c77d07176ba265235520b99b71e2b876714e7", + "structureSignatureNormalizedSha256" : "35b1d4e8002c062597bad7d1cb2aa4ef76636fe3cd6f60f12e7beed23b0eabdc", + "joinAlgorithmSignatureSha256" : "277f17cda592da2eb5bff64cf918afed912a42e3ec45df95d5f8fceb044a06fd", + "actualResultSizesSignatureSha256" : "81090df3e9a1f45a45b125683537e8fea6a7bed6fc533b281f8099cdd078e84a", + "estimatesSignatureSha256" : "91f641129e6e6ff85919a6e967d7f5d7b19d7af9f107f1641dcee541121504aa", + "joinAlgorithmMultisetSignatureSha256" : "287e6e50269d63c758fc37e3d9221b88bd061ef63a99a284c229e60fe9814c30", + "actualResultSizesMultisetSignatureSha256" : "b40f4eba32cbb5fc397816c479048afc0dd2d53dc4318a1275acc672fb214223", + "estimatesMultisetSignatureSha256" : "7254a56b5ba70a89da340755bcefc7f6f3b6030ba00018d0ae39f19afb1e1334", + "statementPatternEstimatesMultisetSignatureSha256" : "a00359b9c7cf96113789b040815143b2da6a70b00cf0bda213cd0b6d710f1184", + "statementPatternEstimateTokenCount" : "3", + "modeledWorkUnits" : "374.7499999999999994", + "modeledInputRowsSum" : "280", + "modeledOutputRowsSum" : "272", + "modeledJoinInputRowsSum" : "172", + "modeledJoinOutputRowsSum" : "88", + "modeledSelfTimeActualSum" : "0", + "modeledTotalTimeActualSum" : "0", + "modeledBarrierCount" : "4", + "modeledWorkByCategory" : "distinct=0;extension=3;filter=26.3999999999999994;group=6.3;join=260;projection=0.05;scan=79;unknown=0", + "modeledOperatorCountByCategory" : "distinct=2;extension=6;filter=3;group=2;join=3;projection=3;scan=3;unknown=20", + "modeledOperatorCountByCategorySignatureSha256" : "6b3f26cf967e729253576a7a555495e2e36e9c171384ecd86a9a59226c174925", + "modeledInputRowsByCategory" : "distinct=0;extension=15;filter=88;group=9;join=88;projection=1;scan=79;unknown=0", + "modeledInputRowsByCategorySignatureSha256" : "455c19538092dad8937c3e51b1ffbda8f4c537e45cf12709d714794b8d027181", + "modeledOutputRowsByCategory" : "distinct=0;extension=15;filter=88;group=1;join=88;projection=1;scan=79;unknown=0", + "modeledOutputRowsByCategorySignatureSha256" : "d0da5561719e8c2411ffe41af8dcbf58d72eae9d243f9381f74493c071a4c9d5", + "modeledFilterInputRowsSum" : "88", + "modeledFilterOutputRowsSum" : "88", + "modeledFilterPassRatio" : "1", + "modeledFilterRejectRatio" : "0", + "modeledJoinWorkByAlgorithm" : "JoinIterator=233;LeftJoinIterator=27", + "modeledJoinWorkByAlgorithmSignatureSha256" : "0ae5f264972a2918a57d4ad10226db19f5b84f5d9a844c78494ba125795a44cc", + "modeledWorkVector" : "workUnits=374.7499999999999994|barrierCount=4|joinInputRowsSum=172|joinOutputRowsSum=88|operatorCountByCategory=distinct=2;extension=6;filter=3;group=2;join=3;projection=3;scan=3;unknown=20|joinWorkByAlgorithm=JoinIterator=233;LeftJoinIterator=27|categories=distinct=0;extension=3;filter=26.3999999999999994;group=6.3;join=260;projection=0.05;scan=79;unknown=0", + "modeledWorkVectorSignatureSha256" : "f1134bb1c3411079711ece97a8aeb963f8f45ffe23b9cf62ad1fc8015a35f8b9", + "operatorWorkByTypeAlgorithm" : "BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]|nodes=1|workUnits=1.8|inputRows=9|outputRows=9|selfTimeActual=0|totalTimeActual=0;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]|nodes=1|workUnits=1|inputRows=5|outputRows=5|selfTimeActual=0|totalTimeActual=0;Compare (!=)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Count (Distinct)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Exists[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (_anon_path_)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ExtensionElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Extension[UNKNOWN]|nodes=2|workUnits=0.2|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;Filter[UNKNOWN]|nodes=3|workUnits=26.3999999999999994|inputRows=88|outputRows=88|selfTimeActual=0|totalTimeActual=0;Group ()[UNKNOWN]|nodes=1|workUnits=6.3|inputRows=9|outputRows=1|selfTimeActual=0|totalTimeActual=0;GroupElem (count)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Join[JoinIterator]|nodes=2|workUnits=233|inputRows=79|outputRows=79|selfTimeActual=0|totalTimeActual=0;LeftJoin[LeftJoinIterator]|nodes=1|workUnits=27|inputRows=9|outputRows=9|selfTimeActual=0|totalTimeActual=0;Not[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElem \"count\"[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;ProjectionElemList[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Projection[UNKNOWN]|nodes=1|workUnits=0.05|inputRows=1|outputRows=1|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: ospc] [UNKNOWN]|nodes=1|workUnits=70|inputRows=70|outputRows=70|selfTimeActual=0|totalTimeActual=0;StatementPattern [index: spoc] [UNKNOWN]|nodes=2|workUnits=9|inputRows=9|outputRows=9|selfTimeActual=0|totalTimeActual=0;ValueConstant (value=\"\")[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous)[UNKNOWN]|nodes=1|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=optName)[UNKNOWN]|nodes=2|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=u)[UNKNOWN]|nodes=7|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0;Var (name=v)[UNKNOWN]|nodes=3|workUnits=0|inputRows=0|outputRows=0|selfTimeActual=0|totalTimeActual=0", + "operatorWorkBreakdownSignatureSha256" : "de8bb28b79d696ec43dd9d4cb26a017ef9eee6e9d6295908a016c33676aa15da", + "operatorWorkTopContributors" : "Join[JoinIterator]:233;StatementPattern [index: ospc] [UNKNOWN]:70;LeftJoin[LeftJoinIterator]:27;Filter[UNKNOWN]:26.3999999999999994;StatementPattern [index: spoc] [UNKNOWN]:9;Group ()[UNKNOWN]:6.3;BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]])[UNKNOWN]:1.8;BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]])[UNKNOWN]:1", + "estimateActualComparableNodeCount" : "7", + "estimateActualAbsErrorSum" : "303748", + "estimateActualRelativeErrorMean" : "21087.779138321995", + "estimateActualQErrorP50" : "38.888888888889", + "estimateActualQErrorP95" : "143748", + "estimateActualQErrorMax" : "143748", + "joinEstimateActualComparableNodeCount" : "2", + "joinEstimateActualQErrorP50" : "1", + "joinEstimateActualQErrorP95" : "38.888888888889", + "joinEstimateActualQErrorMax" : "38.888888888889", + "costEstimateSum" : "5.5", + "costEstimateMax" : "5", + "resultSizeEstimateSum" : "303904", + "resultSizeEstimateMax" : "143748", + "resultSizeActualSum" : "272", + "resultSizeActualMax" : "70", + "modeledHasNextCallCountSum" : "366", + "modeledHasNextTrueCountSum" : "195", + "modeledHasNextTimeNanosSum" : "83571661", + "modeledNextCallCountSum" : "194", + "modeledNextTimeNanosSum" : "540876", + "modeledJoinRightIteratorCreateCountSum" : "168", + "modeledJoinLeftBindingSetConsumedCountSum" : "252", + "modeledJoinRightBindingSetConsumedCountSum" : "176", + "modeledJoinTelemetryNodeCount" : "3", + "modeledJoinRightBindingsPerLeftRatio" : "0.698413", + "modeledJoinRightBindingSetConsumedPerRightIteratorAverage" : "1.047619", + "modeledJoinRightIteratorCreatePerJoinNodeAverage" : "56", + "modeledJoinLeftBindingSetConsumedPerJoinNodeAverage" : "84", + "modeledJoinRightBindingSetConsumedPerJoinNodeAverage" : "58.666667", + "modeledSourceRowsScannedSum" : "1012", + "modeledSourceRowsMatchedSum" : "167", + "modeledSourceRowsFilteredSum" : "845", + "modeledSourceFilterOutRatio" : "0.83498", + "modeledIteratorTelemetryNodeCount" : "43", + "modeledHasNextTimeMillisSum" : "83.571661", + "modeledNextTimeMillisSum" : "0.540876", + "modeledHasNextPerNextRatio" : "1.886598", + "modeledHasNextTruePerNextRatio" : "1.005155" + } + } + } +} \ No newline at end of file From be83a0f55eaf43cb126429004b066744276b05e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 20:50:38 +0200 Subject: [PATCH 26/43] slower and faster --- .../lmdb/benchmark/explain-2026-04-20-3.md | 12094 ++++++++++++++++ 1 file changed, 12094 insertions(+) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md new file mode 100644 index 00000000000..b02579c4087 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md @@ -0,0 +1,12094 @@ +Theme: MEDICAL_RECORDS z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 178 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 54 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=5.9K, firstRowTimeNanosActual=107.7M, openCountActual=1, lastRowTimeNanosActual=107.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=5.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=3.5K, firstRowTimeNanosActual=107.7M, openCountActual=1, lastRowTimeNanosActual=107.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=3.6K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=29.1K, firstRowTimeNanosActual=107.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=107.7M, maxGroupSizeActual=29.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=29.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=29.1K, rowsDroppedActual=29.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=250) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K, hasNextCallCountActual=29.1K, hasNextTrueCountActual=29.1K, hasNextTimeNanosActual=97.6M, nextCallCountActual=29.1K, nextTimeNanosActual=338.3K, joinRightIteratorsCreatedActual=14.5K, joinLeftBindingsConsumedActual=14.5K, joinRightBindingsConsumedActual=29.1K, firstRowTimeNanosActual=107.9K, leftRowsWithMatchActual=14.5K, openCountActual=1, lastRowTimeNanosActual=107.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=43.6K, rowsDroppedActual=14.5K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=12, leftRowsProbedActual=14.5K, rightRowsScannedActual=29.1K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=14.5K, hasNextCallCountActual=14.5K, hasNextTrueCountActual=14.5K, hasNextTimeNanosActual=75.9M, nextCallCountActual=14.5K, nextTimeNanosActual=208.0K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=14.5K, sourceRowsFilteredActual=10.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=87.0K, exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, openCountActual=1, exprTrueCountActual=14.5K, lastRowTimeNanosActual=107.3M, closeCountActual=1, exprEvalTimeNanosActual=18.1M, inputRowsActual=24.9K, rowsDroppedActual=10.4K, selectivityActual=0.58, expansionFactorActual=0.58, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.2K, avgNextNanosActual=14, filterRejectRateActual=0.42) [left] +│ ║ │ ╠══ Compare (>=) (exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, exprTrueCountActual=14.5K, exprEvalTimeNanosActual=15.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="2024-06-01"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=12.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=55.6M, nextCallCountActual=24.9K, nextTimeNanosActual=321.3K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=65.0K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=107.2M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=13, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=923.2K, nextCallCountActual=8.3K, nextTimeNanosActual=569.9K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=22.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=107.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=68, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=44.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=2.1K, openCountActual=8.3K, lastRowTimeNanosActual=8.3K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=668, avgNextNanosActual=46) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=958, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=8.2K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=183, avgNextNanosActual=50, indexHitRateActual=0.75) [left] +│ ║ │ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.6M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=792, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.4K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=253, avgNextNanosActual=48, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optDate) (hasNextFalseCountActual=0) +│ ║ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=29.1K, hasNextCallCountActual=72.9K, hasNextTrueCountActual=58.3K, hasNextTimeNanosActual=7.6M, nextCallCountActual=29.1K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=43.6K, sourceRowsMatchedActual=29.1K, sourceRowsFilteredActual=14.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=14.5K, openCountActual=14.5K, lastRowTimeNanosActual=2.0K, closeCountActual=14.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=14.5K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=104, avgNextNanosActual=40, indexHitRateActual=0.67) [right] +│ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (>=) +│ ║ │ ║ Var (name=optDate) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="2024-06-01"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) +│ ║ │ ║ o: Var (name=date) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optDate) +│ ║ │ Var (name=date) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] +│ ║ s: Var (name=patient) (bindingState=bound) +│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ o: Var (name=med) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?date . +BIND(?date AS ?optDate) +} +FILTER (?optDate >= "2024-06-01"^^) +OPTIONAL { +?patient ?med . +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 307 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 125 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=3.7K, firstRowTimeNanosActual=232.8M, openCountActual=1, lastRowTimeNanosActual=232.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=3.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=232.8M, openCountActual=1, lastRowTimeNanosActual=232.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=58.0K, firstRowTimeNanosActual=232.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=232.8M, maxGroupSizeActual=58.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=58.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=58.0K, rowsDroppedActual=58.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=542) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=190.7M, nextCallCountActual=58.0K, nextTimeNanosActual=669.0K, joinRightIteratorsCreatedActual=58.0K, joinLeftBindingsConsumedActual=58.0K, joinRightBindingsConsumedActual=58.0K, firstRowTimeNanosActual=120.2K, leftRowsWithMatchActual=58.0K, openCountActual=1, lastRowTimeNanosActual=232.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=116.1K, rowsDroppedActual=58.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=12, leftRowsProbedActual=58.0K, rightRowsScannedActual=58.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Union (resultSizeActual=58.0K, hasNextFalseCountActual=0, leftRowsConsumedActual=58.0K, rightRowsConsumedActual=0, leftRowsOutputContributionActual=58.0K, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=102.4M, nextCallCountActual=58.0K, nextTimeNanosActual=598.4K, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=41.6K, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=108.9K, exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, openCountActual=1, exprTrueCountActual=58.0K, lastRowTimeNanosActual=232.6M, closeCountActual=1, exprEvalTimeNanosActual=19.3M, inputRowsActual=99.6K, rowsDroppedActual=41.6K, selectivityActual=0.58, expansionFactorActual=0.58, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=10, filterRejectRateActual=0.42) +│ ║ │ ║ ├── Or (exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, exprTrueCountActual=58.0K, shortCircuitCountActual=41.6K, exprEvalTimeNanosActual=12.4M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=99.6K, exprFalseCountActual=58.0K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=4.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=58.0K, exprFalseCountActual=41.6K, exprTrueCountActual=16.4K, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, resultSizeActual=99.6K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=49.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=49.8K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.2K, nextCallCountActual=2, nextTimeNanosActual=667, firstRowTimeNanosActual=94.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=107.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=403, avgNextNanosActual=334) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=66.5K, joinLeftBindingsConsumedActual=66.5K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=116.3K, rowsDroppedActual=66.5K, expansionFactorActual=0.43, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=66.5K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=0.75, joinOutputPerLeftActual=0.75) [right] +│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=67.2K, resultSizeActual=66.5K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=66.5K, hasNextTimeNanosActual=7.5M, nextCallCountActual=66.5K, nextTimeNanosActual=3.0M, sourceRowsScannedActual=66.5K, sourceRowsMatchedActual=66.5K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=39.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=205.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=46, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.6K, resultSizeActual=49.8K, hasNextCallCountActual=116.3K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=27.8M, nextCallCountActual=49.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=116.3K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=66.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=66.5K, openCountActual=66.5K, lastRowTimeNanosActual=3.8K, closeCountActual=66.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.5K, nextPerHasNextRatioActual=0.43, avgHasNextNanosActual=239, avgNextNanosActual=40, indexHitRateActual=0.43) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=33.3K, rowsDroppedActual=33.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=4.3M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=500, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, resultSizeActual=33.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=16.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=16.7K) +│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.8K, nextCallCountActual=2, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=206.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=206.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=611, avgNextNanosActual=646) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=33.3K, rowsDroppedActual=16.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=16.6K, nextTimeNanosActual=661.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=206.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=232.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.1M, nextCallCountActual=16.6K, nextTimeNanosActual=530.4K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=417, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=1.2K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=243, avgNextNanosActual=32, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=58.0K, hasNextCallCountActual=116.1K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=22.8M, nextCallCountActual=58.0K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=116.1K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=58.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=58.0K, openCountActual=58.0K, lastRowTimeNanosActual=667, closeCountActual=58.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=197, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=alt) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=code) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="DX-202") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=code) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=code) (bindingState=bound) +│ ║ │ │ ValueConstant (value="DX-202") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ o: Var (name=alt) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity ?code . +?entity a . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +UNION +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity a . +?entity ?code . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +OPTIONAL { +?entity ?alt . +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 222 ms +Warmup execution 1/9 +Warmup execution 2/9 +Warmup execution 3/9 +Warmup execution 4/9 +Warmup execution 5/9 +Warmup execution 6/9 +Warmup execution 7/9 +Warmup execution 8/9 +Warmup execution 9/9 +Fastest execution time: 100 ms + +Projection (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=36.3K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=269) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "practitioner" (hasNextFalseCountActual=0) +║ ProjectionElem "encCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=19.6K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=146) +├── Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=11.1K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=83) +│ ╠══ Filter (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=2.3K, sourceRowsScannedActual=135, sourceRowsMatchedActual=135, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=173.0M, exprEvalCountActual=135, openCountActual=1, exprTrueCountActual=135, lastRowTimeNanosActual=173.2M, closeCountActual=1, exprEvalTimeNanosActual=88.1K, inputRowsActual=135, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=17, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=135, exprTrueCountActual=135, exprEvalTimeNanosActual=76.8K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=16.2K, hasNextFalseCountActual=0) +│ ║ └── Group (practitioner) (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.0M, nextCallCountActual=135, nextTimeNanosActual=3.5K, aggregateEvalCountActual=532, firstRowTimeNanosActual=173.0M, groupsCreatedActual=135, openCountActual=1, lastRowTimeNanosActual=173.2M, maxGroupSizeActual=3, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.97, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=266, rowsDroppedActual=131, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=26) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=266, hasNextCallCountActual=268, hasNextTrueCountActual=267, hasNextTimeNanosActual=172.2M, nextCallCountActual=266, nextTimeNanosActual=3.5K, joinRightIteratorsCreatedActual=135, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=266, firstRowTimeNanosActual=169.2K, leftRowsWithMatchActual=135, openCountActual=1, lastRowTimeNanosActual=172.8M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=401, rowsDroppedActual=135, expansionFactorActual=0.66, sampleCountActual=2, varianceActual=0.98, stddevActual=0.99, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=642.9K, avgNextNanosActual=13, leftRowsProbedActual=135, rightRowsScannedActual=266, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K, resultSizeActual=135, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=135, inputRowsActual=25.1K, rowsDroppedActual=24.9K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=19, stddevActual=4.38, confidenceScoreActual=0.27, hasNextFalseCountActual=0, leftRowsProbedActual=135, rightRowsScannedActual=135, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.7M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=16.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=172.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=148, avgNextNanosActual=41, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=17.6M, nextCallCountActual=24.9K, nextTimeNanosActual=688.5K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=6.7K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=353, avgNextNanosActual=28, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, resultSizeActual=135, hasNextCallCountActual=25.1K, hasNextTrueCountActual=135, hasNextTimeNanosActual=83.9M, nextCallCountActual=135, nextTimeNanosActual=1.9K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=135, sourceRowsFilteredActual=24.8K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=666, exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, openCountActual=24.9K, exprTrueCountActual=135, lastRowTimeNanosActual=4.2K, closeCountActual=24.9K, exprEvalTimeNanosActual=20.5M, inputRowsActual=24.9K, rowsDroppedActual=24.8K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=3.3K, avgNextNanosActual=14, filterRejectRateActual=0.99) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, exprTrueCountActual=135, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=731.8K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2024-02-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=643.8K, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=10.0M, nextCallCountActual=24.9K, nextTimeNanosActual=671.2K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=202, avgNextNanosActual=27, indexHitRateActual=0.50) +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=266, hasNextCallCountActual=663, hasNextTrueCountActual=528, hasNextTimeNanosActual=83.1K, nextCallCountActual=266, nextTimeNanosActual=9.2K, sourceRowsScannedActual=401, sourceRowsMatchedActual=266, sourceRowsFilteredActual=135, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=135, openCountActual=135, lastRowTimeNanosActual=2.5K, closeCountActual=135, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=135, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=125, avgNextNanosActual=35, indexHitRateActual=0.66) [right] +│ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (encCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (encCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "practitioner" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (practitioner) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=date) (bindingState=bound) +│ ║ │ │ ValueConstant (value="2024-01-01"^^) +│ ║ │ │ ValueConstant (value="2024-02-01"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) +│ ║ │ o: Var (name=date) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] +│ ║ s: Var (name=enc) (bindingState=bound) +│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ o: Var (name=cond) (bindingState=unbound) +│ ║ GroupElem (_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=enc) (bindingState=bound) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=enc) (bindingState=unbound) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc ?practitioner . +?enc a . +?enc ?date . +FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) +OPTIONAL { +?enc ?cond . +} +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) + + +Theme: MEDICAL_RECORDS z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 194 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 93 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=152.9M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=152.9M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=708) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=38.7K, firstRowTimeNanosActual=152.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=152.9M, maxGroupSizeActual=38.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=38.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38.7K, rowsDroppedActual=38.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=542) +│ ╠══ Difference (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=141.6M, nextCallCountActual=38.7K, nextTimeNanosActual=366.9K, firstRowTimeNanosActual=18.8M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=9.47, leftRowsConsumedActual=38.7K, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=117.7M, nextCallCountActual=38.7K, nextTimeNanosActual=459.8K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=38.7K, sourceRowsFilteredActual=10.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=37.2K, exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, openCountActual=1, exprTrueCountActual=38.7K, lastRowTimeNanosActual=152.8M, closeCountActual=1, exprEvalTimeNanosActual=15.8M, inputRowsActual=49.6K, rowsDroppedActual=10.8K, selectivityActual=0.78, expansionFactorActual=0.78, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=12, filterRejectRateActual=0.22) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, exprTrueCountActual=38.7K, exprEvalTimeNanosActual=12.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=17.9K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=98.6M, nextCallCountActual=49.6K, nextTimeNanosActual=549.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=49.6K, firstRowTimeNanosActual=35.9K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=152.8M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=57.9K, rowsDroppedActual=8.3K, expansionFactorActual=0.86, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=11, leftRowsProbedActual=8.3K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=5.96, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.96, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=933.4K, nextCallCountActual=8.3K, nextTimeNanosActual=500.8K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=152.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=60, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=49.6K, hasNextCallCountActual=140.6K, hasNextTrueCountActual=132.3K, hasNextTimeNanosActual=87.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, firstRowTimeNanosActual=2.2K, openCountActual=8.3K, lastRowTimeNanosActual=11.8K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=620, avgNextNanosActual=41) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=49.6K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=99.3K, rowsDroppedActual=49.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] +│ ║ │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.4M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=11.6K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=193, avgNextNanosActual=42, indexHitRateActual=0.75) [left] +│ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ o: Var (name=_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=12.6M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=958, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.6K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=170, avgNextNanosActual=41, indexHitRateActual=0.67) [right] +│ ║ │ ║ │ s: Var (name=_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.2K, resultSizeActual=49.6K, hasNextCallCountActual=99.3K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=20.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=99.3K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=49.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=49.6K, openCountActual=49.6K, lastRowTimeNanosActual=1.1K, closeCountActual=49.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=203, avgNextNanosActual=43, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=18.7M, sourceRowsScannedActual=21.4K, sourceRowsFilteredActual=21.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, openCountActual=1, lastRowTimeNanosActual=18.7M, closeCountActual=1, exprEvalTimeNanosActual=15.7M, inputRowsActual=21.4K, rowsDroppedActual=21.4K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=18.7M, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, exprEvalTimeNanosActual=14.6M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=12.2M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=10.6M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="test") (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=679.8K, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=21.4K, resultSizeActual=21.4K, hasNextCallCountActual=21.4K, hasNextTrueCountActual=21.4K, hasNextTimeNanosActual=1.2M, nextCallCountActual=21.4K, nextTimeNanosActual=664.5K, sourceRowsScannedActual=21.4K, sourceRowsMatchedActual=21.4K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=18.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=60, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="60"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] +│ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) +│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ │ ║ o: Var (name=_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=unbound) +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ │ s: Var (name=_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=obs) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optValue) +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="test") +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) +│ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient / ?obs . +?obs ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 60) +MINUS { +?patient ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "test")) +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 429 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 221 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=3.0K, firstRowTimeNanosActual=413.3M, openCountActual=1, lastRowTimeNanosActual=413.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=3.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=413.3M, openCountActual=1, lastRowTimeNanosActual=413.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=1.4K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=709, aggregateEvalCountActual=41.6K, firstRowTimeNanosActual=413.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=413.3M, maxGroupSizeActual=41.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=41.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=41.6K, rowsDroppedActual=41.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=709) +│ ╠══ Filter (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=389.4M, nextCallCountActual=41.6K, nextTimeNanosActual=542.3K, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.1K, exprEvalCountActual=41.6K, openCountActual=1, exprTrueCountActual=41.6K, lastRowTimeNanosActual=413.1M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=37.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=41.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.4K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Exists (exprEvalCountActual=41.6K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=34.7M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=0, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=14.5M, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, plannedIndexName=spoc, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=291, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=351, indexHitRateActual=1.00) +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=347.6M, nextCallCountActual=41.6K, nextTimeNanosActual=546.9K, joinRightIteratorsCreatedActual=41.6K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, firstRowTimeNanosActual=31.1K, leftRowsWithMatchActual=41.6K, openCountActual=1, lastRowTimeNanosActual=413.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=83.2K, rowsDroppedActual=41.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.09, stddevActual=0.30, confidenceScoreActual=0.61, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.4K, avgNextNanosActual=13, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K, resultSizeActual=41.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, inputRowsActual=91.4K, rowsDroppedActual=49.8K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=74.8K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=25.3K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=10.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=413.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=125, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.7K, resultSizeActual=49.8K, hasNextCallCountActual=74.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=17.1M, nextCallCountActual=49.8K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.0K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=21.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=229, avgNextNanosActual=44, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=44.1K, resultSizeActual=41.6K, hasNextCallCountActual=91.4K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=151.7M, nextCallCountActual=41.6K, nextTimeNanosActual=521.5K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=8.2K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=792, exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, openCountActual=49.8K, exprTrueCountActual=41.6K, lastRowTimeNanosActual=3.3K, closeCountActual=49.8K, exprEvalTimeNanosActual=11.3M, inputRowsActual=49.8K, rowsDroppedActual=8.2K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.17) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, exprTrueCountActual=41.6K, shortCircuitCountActual=24.9K, exprEvalTimeNanosActual=7.8M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=49.8K, exprFalseCountActual=24.8K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=3.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="DX-200") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=24.8K, exprFalseCountActual=8.2K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=22.0M, nextCallCountActual=49.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=666, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=1.0K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=222, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=41.6K, hasNextCallCountActual=83.2K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=16.3M, nextCallCountActual=41.6K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=83.2K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=41.6K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=1.4K, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=41.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=196, avgNextNanosActual=38, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.7K) +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ o: Var (name=obs) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ ║ │ o: Var (name=cond) (bindingState=unbound) +│ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=code) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="DX-200") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=code) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="DX-201") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ ║ s: Var (name=cond) (bindingState=bound) +│ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ ║ o: Var (name=code) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] +│ ║ s: Var (name=enc) (bindingState=bound) +│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ o: Var (name=practitioner) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=enc) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc a . +?enc ?cond . +?cond ?code . +FILTER ((?code = "DX-200") || (?code = "DX-201")) +OPTIONAL { +?enc ?practitioner . +} +FILTER EXISTS { +?enc ?obs . +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 92 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 51 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=50.0M, openCountActual=1, lastRowTimeNanosActual=50.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=2.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=50.0M, openCountActual=1, lastRowTimeNanosActual=50.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=50.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=50.0M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=667, avgGroupSizeActual=0) +│ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, resultSizeActual=0, joinType=Cartesian product, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ├── Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=49.9M, sourceRowsScannedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, openCountActual=1, lastRowTimeNanosActual=49.9M, closeCountActual=1, exprEvalTimeNanosActual=3.5M, inputRowsActual=3.0K, rowsDroppedActual=3.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=49.9M, filterRejectRateActual=1.00) [left] +│ ║ │ ╠══ Not (exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, exprEvalTimeNanosActual=3.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Exists (exprEvalCountActual=3.0K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=3.1M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.6M, sourceRowsScannedActual=3.0K, sourceRowsMatchedActual=3.0K, plannedIndexName=spoc, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=625, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=527, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=8.05, stddevActual=2.84, confidenceScoreActual=0.34, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=13, stddevActual=3.58, confidenceScoreActual=0.30, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinLeftBindingsConsumedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=58, stddevActual=7.63, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=3.0K, rightRowsScannedActual=3.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, resultSizeActual=3.0K, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=34.7M, nextCallCountActual=3.0K, nextTimeNanosActual=36.7K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=46.6K, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=48.5K, exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, openCountActual=1, exprTrueCountActual=3.0K, lastRowTimeNanosActual=49.9M, optimizer.candidateCount=16, closeCountActual=1, optimizer.score=25.4K, exprEvalTimeNanosActual=26.5M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=49.6K, rowsDroppedActual=46.6K, selectivityActual=0.06, expansionFactorActual=0.06, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.4K, avgNextNanosActual=12, filterRejectRateActual=0.94) [left] +│ ║ │ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) (exprEvalCountActual=49.6K, exprTrueCountActual=49.6K, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=48.6K, exprTrueCountActual=48.6K, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) (exprEvalCountActual=47.5K, exprTrueCountActual=47.5K, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.2M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=17.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=49.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=63, avgNextNanosActual=45, indexHitRateActual=1.00) +│ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ └── StatementPattern [index: ospc] (costEstimate=111, resultSizeEstimate=49.7K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=2.4M, nextCallCountActual=3.0K, nextTimeNanosActual=128.0K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=ospc, firstRowTimeNanosActual=459, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=3.5K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=397, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: ospc] (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.2M, nextCallCountActual=3.0K, nextTimeNanosActual=119.3K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=ospc, firstRowTimeNanosActual=417, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=2.6K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=39, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=8.3K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=2.5M, nextCallCountActual=3.0K, nextTimeNanosActual=106.9K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=1.7K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=411, avgNextNanosActual=35, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +│ ║ │ ╠══ Not +│ ║ │ ║ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ ║ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ ║ o: Var (name=cond) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ │ ║ │ ╠══ ListMemberOperator +│ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) +│ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) +│ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) +│ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) +│ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) +│ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) +│ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) +│ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] +│ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) +│ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] +│ ║ │ │ s: Var (name=patient) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ │ o: Var (name=enc) (bindingState=bound) +│ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] +│ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?obs ?value . +FILTER (?value IN (50, 60, 70)) +?enc ?obs . +?patient ?enc . +?patient a . +FILTER NOT EXISTS { +?enc ?cond . +} +VALUES ?limit { 55 } +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 150 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 69 ms + +Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.5M, nextCallCountActual=8.3K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=140) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "patient" (hasNextFalseCountActual=0) +║ ProjectionElem "medCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.3M, nextCallCountActual=8.3K, nextTimeNanosActual=886.7K, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=106) +├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.1M, nextCallCountActual=8.3K, nextTimeNanosActual=451.3K, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=54) +│ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=117.9M, nextCallCountActual=8.3K, nextTimeNanosActual=87.5K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=115.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=120.7M, closeCountActual=1, exprEvalTimeNanosActual=1.5M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.1K, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=904.0K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=36.0K, hasNextFalseCountActual=0) +│ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=115.7M, nextCallCountActual=8.3K, nextTimeNanosActual=122.4K, aggregateEvalCountActual=133.6K, firstRowTimeNanosActual=115.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=120.7M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=8.02, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.8K, rowsDroppedActual=58.4K, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.9K, avgNextNanosActual=15) +│ ║ Filter (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=78.6M, nextCallCountActual=66.8K, nextTimeNanosActual=959.0K, sourceRowsScannedActual=66.8K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.3K, exprEvalCountActual=66.8K, openCountActual=1, exprTrueCountActual=66.8K, lastRowTimeNanosActual=113.1M, closeCountActual=1, exprEvalTimeNanosActual=7.4M, inputRowsActual=66.8K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=66.8K, exprTrueCountActual=66.8K, exprEvalTimeNanosActual=2.6M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optMed) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=66.5M, nextCallCountActual=66.8K, nextTimeNanosActual=866.5K, joinRightIteratorsCreatedActual=33.3K, joinLeftBindingsConsumedActual=33.3K, joinRightBindingsConsumedActual=66.8K, firstRowTimeNanosActual=38.0K, leftRowsWithMatchActual=33.3K, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=100.1K, rowsDroppedActual=33.3K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=996, avgNextNanosActual=13, leftRowsProbedActual=33.3K, rightRowsScannedActual=66.8K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=33.3K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=33.3K, hasNextTimeNanosActual=6.7M, nextCallCountActual=33.3K, nextTimeNanosActual=608.3K, firstRowTimeNanosActual=21.7K, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=201, avgNextNanosActual=18, leftRowsConsumedActual=8.3K, rightRowsConsumedActual=24.9K, leftRowsOutputContributionActual=8.3K, rightRowsOutputContributionActual=24.9K) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=772.8K, nextCallCountActual=8.3K, nextTimeNanosActual=401.5K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=19.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=33.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=48, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=2.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=33.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=87, avgNextNanosActual=56, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=33.3M, nextCallCountActual=66.8K, nextTimeNanosActual=7.6M, firstRowTimeNanosActual=709, openCountActual=33.3K, lastRowTimeNanosActual=1.9K, closeCountActual=33.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=199, avgNextNanosActual=115) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=22.2M, nextCallCountActual=66.8K, nextTimeNanosActual=4.1M, sourceRowsScannedActual=100.1K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=33.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=33.3K, openCountActual=33.3K, lastRowTimeNanosActual=1.7K, closeCountActual=33.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=133, avgNextNanosActual=62, indexHitRateActual=0.67) +│ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optMed) (hasNextFalseCountActual=0) +│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (medCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (medCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (patient) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optMed) (bindingState=bound) +│ ║ │ Var (name=patient) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) +│ ║ ║ │ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) +│ ║ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ o: Var (name=enc) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ o: Var (name=med) (bindingState=unbound) +│ ║ └── ExtensionElem (optMed) +│ ║ Var (name=med) (bindingState=bound) +│ ║ GroupElem (_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123) +│ ║ Count +│ ║ Var (name=med) (bindingState=bound) +│ ║ GroupElem (medCount) +│ ║ Count (Distinct) +│ ║ Var (name=med) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123) +│ Count +│ Var (name=med) (bindingState=unbound) +└── ExtensionElem (medCount) +Count (Distinct) +Var (name=med) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { +{ +?patient a . +} +UNION +{ +?patient ?enc . +} +OPTIONAL { +?patient ?med . +BIND(?med AS ?optMed) +} +FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) + + +Theme: MEDICAL_RECORDS z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 185 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 89 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=147.8M, openCountActual=1, lastRowTimeNanosActual=147.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=147.8M, openCountActual=1, lastRowTimeNanosActual=147.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=875) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=500, firstRowTimeNanosActual=147.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=147.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=500, avgGroupSizeActual=0) +│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=147.7M, openCountActual=1, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=30.5K, rowsDroppedActual=30.5K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=147.8M, leftRowsConsumedActual=13.8K, rightRowsConsumedActual=16.6K, overlapRowsActual=13.8K) +│ ║ ├── Filter (resultSizeActual=13.8K, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=113.4M, nextCallCountActual=13.8K, nextTimeNanosActual=169.9K, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=21.8K, exprEvalCountActual=13.8K, openCountActual=1, exprTrueCountActual=13.8K, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=15.0M, metricOrigin.varsAddedActual=derived, inputRowsActual=13.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.2K, avgNextNanosActual=12, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=13.8K, exprTrueCountActual=13.8K, exprEvalTimeNanosActual=14.2M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=0, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=7.5M, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, plannedIndexName=ospc, indexLookupCountActual=13.8K, openCountActual=13.8K, lastRowTimeNanosActual=459, closeCountActual=13.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=544, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K, resultSizeActual=13.8K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=13.8K, inputRowsActual=30.5K, rowsDroppedActual=16.6K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=13.8K, avgRightRowsPerLeftActual=0.83, joinOutputPerLeftActual=0.83) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.7M, nextCallCountActual=16.6K, nextTimeNanosActual=698.2K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ │ Var (name=patient) +│ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ Var (name=med) +│ ║ │ │ , firstRowTimeNanosActual=7.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=42, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=13.7K, resultSizeActual=13.8K, hasNextCallCountActual=30.5K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=54.9M, nextCallCountActual=13.8K, nextTimeNanosActual=165.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=2.7K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, openCountActual=16.6K, exprTrueCountActual=13.8K, lastRowTimeNanosActual=5.4K, closeCountActual=16.6K, exprEvalTimeNanosActual=3.7M, inputRowsActual=16.6K, rowsDroppedActual=2.7K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.8K, avgNextNanosActual=12, filterRejectRateActual=0.17) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, exprTrueCountActual=13.8K, shortCircuitCountActual=8.3K, exprEvalTimeNanosActual=2.5M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=16.6K, exprFalseCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="MED-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.1K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=8.3K, exprFalseCountActual=2.7K, exprTrueCountActual=5.5K, exprEvalTimeNanosActual=429.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="MED-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=10.6M, nextCallCountActual=16.6K, nextTimeNanosActual=559.9K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=3.1K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=318, avgNextNanosActual=34, indexHitRateActual=0.50) +│ ║ │ s: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=7.4M, nextCallCountActual=16.6K, nextTimeNanosActual=161.8K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.8K, exprEvalCountActual=16.6K, openCountActual=1, exprTrueCountActual=16.6K, lastRowTimeNanosActual=15.2M, closeCountActual=1, exprEvalTimeNanosActual=4.6M, inputRowsActual=16.6K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=449, avgNextNanosActual=9.70, filterRejectRateActual=0) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=3.8M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=841.7K, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=dose) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="x") (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=443.1K, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=16.6K, nextTimeNanosActual=593.5K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=15.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=36, indexHitRateActual=1.00) +│ ║ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=dose) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ ║ o: Var (name=med) (bindingState=bound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) +│ ║ │ │ Var (name=patient) +│ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ Var (name=med) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=med) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=code) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="MED-1000") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=code) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="MED-1001") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ s: Var (name=med) (bindingState=bound) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=dose) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="x") +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) +│ ║ s: Var (name=med) (bindingState=unbound) +│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) +│ ║ o: Var (name=dose) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=med) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=med) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { +?med a . +?med ?code . +FILTER ((?code = "MED-1000") || (?code = "MED-1001")) +FILTER EXISTS { +?patient ?med . +} +MINUS { +?med ?dose . +FILTER (CONTAINS(LCASE(STR(?dose)), "x")) +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 106 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 64 ms + +Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=94.2M, nextCallCountActual=8.3K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=144) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "patient" (hasNextFalseCountActual=0) +║ ProjectionElem "encCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=94.0M, nextCallCountActual=8.3K, nextTimeNanosActual=907.0K, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=109) +├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.8M, nextCallCountActual=8.3K, nextTimeNanosActual=412.0K, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=49) +│ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.6M, nextCallCountActual=8.3K, nextTimeNanosActual=60.2K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=91.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=96.5M, closeCountActual=1, exprEvalTimeNanosActual=1.2M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.2K, avgNextNanosActual=7.23, filterRejectRateActual=0) +│ ║ ├── Compare (>=) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=611.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.7K, hasNextFalseCountActual=0) +│ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=91.7M, nextCallCountActual=8.3K, nextTimeNanosActual=137.4K, aggregateEvalCountActual=49.9K, firstRowTimeNanosActual=91.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=96.5M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24.9K, rowsDroppedActual=16.6K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.0K, avgNextNanosActual=16) +│ ║ Filter (resultSizeActual=24.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=24.9K, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=887.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optPractitioner) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=19.3M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=8.1M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, plannedIndexName=spoc, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=416, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=326, indexHitRateActual=1.00) +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=44.6M, nextCallCountActual=24.9K, nextTimeNanosActual=323.3K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=18.7K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=87.9M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=13, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=837.2K, nextCallCountActual=8.3K, nextTimeNanosActual=476.6K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=100, avgNextNanosActual=57, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=36.3M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=1.0K, openCountActual=8.3K, lastRowTimeNanosActual=8.1K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=545, avgNextNanosActual=42) [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=7.9K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=166, avgNextNanosActual=45, indexHitRateActual=0.75) [left] +│ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.0K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.8K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242, avgNextNanosActual=43, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optPractitioner) (hasNextFalseCountActual=0) +│ ║ Var (name=practitioner) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (encCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (encCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (patient) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) +│ ║ │ ║ Var (name=patient) (bindingState=bound) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ o: Var (name=cond) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ s: Var (name=patient) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ o: Var (name=enc) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound) +│ ║ └── ExtensionElem (optPractitioner) +│ ║ Var (name=practitioner) (bindingState=bound) +│ ║ GroupElem (_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0) +│ ║ Count +│ ║ Var (name=enc) (bindingState=bound) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0) +│ Count +│ Var (name=enc) (bindingState=unbound) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) + + +Theme: MEDICAL_RECORDS z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 600 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 322 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=575.3M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=2.2K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=575.3M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=65.3K, firstRowTimeNanosActual=575.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=575.3M, maxGroupSizeActual=65.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=65.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=65.3K, rowsDroppedActual=65.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=708) +│ ╠══ Difference (resultSizeActual=65.3K, hasNextCallCountActual=65.3K, hasNextTrueCountActual=65.3K, hasNextTimeNanosActual=563.8M, nextCallCountActual=65.3K, nextTimeNanosActual=940.4K, firstRowTimeNanosActual=63.5M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, varsDroppedActual=4, metricOrigin.varsDroppedActual=derived, inputRowsActual=109.5K, rowsDroppedActual=44.1K, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.6K, avgNextNanosActual=14, leftRowsConsumedActual=99.6K, rightRowsConsumedActual=9.8K, overlapRowsActual=34.3K) +│ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=99.6K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=454.8M, nextCallCountActual=99.6K, nextTimeNanosActual=1.3M, joinRightIteratorsCreatedActual=99.6K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, firstRowTimeNanosActual=41.6K, leftRowsWithMatchActual=99.6K, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=199.3K, rowsDroppedActual=99.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.04, stddevActual=1.02, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.6K, avgNextNanosActual=14, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.1K, resultSizeActual=99.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, optimizer.candidateCount=9, optimizer.score=51.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=149.5K, rowsDroppedActual=49.8K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=2483.5M, stddevActual=49.8K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.1K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.8K) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=49.0K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.15, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=49.8K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=112, resultSizeEstimate=49.8K, resultSizeActual=49.8K, hasNextCallCountActual=49.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=5.6M, nextCallCountActual=49.8K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=575.3M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=47, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ └── Filter (costEstimate=255, resultSizeEstimate=65.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=148.5M, nextCallCountActual=49.8K, nextTimeNanosActual=648.7K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.97, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=1.5K, exprEvalCountActual=49.8K, openCountActual=49.8K, exprTrueCountActual=49.8K, lastRowTimeNanosActual=10.3K, closeCountActual=49.8K, exprEvalTimeNanosActual=11.8M, inputRowsActual=49.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.5K, avgNextNanosActual=13, filterRejectRateActual=0) [right] +│ ║ │ ║ │ ║ ╠══ ListMemberOperator (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=8.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=1.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=24.8K, exprTrueCountActual=24.8K, exprEvalTimeNanosActual=790.5K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") (exprEvalCountActual=8.2K, exprTrueCountActual=8.2K, exprEvalTimeNanosActual=358.8K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=26.2M, nextCallCountActual=49.8K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=7.7K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=74.9K, resultSizeEstimate=25.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=20.2M, nextCallCountActual=49.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=5.5K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=204, avgNextNanosActual=37, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=99.6K, hasNextCallCountActual=149.5K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=10.6M, nextCallCountActual=99.6K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=208, openCountActual=49.8K, bindingsProvidedActual=99.6K, lastRowTimeNanosActual=4.2K, closeCountActual=49.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=71, avgNextNanosActual=11) [right] +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=99.6K, hasNextCallCountActual=199.3K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=40.8M, nextCallCountActual=99.6K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=199.3K, sourceRowsMatchedActual=99.6K, sourceRowsFilteredActual=99.6K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=99.6K, openCountActual=99.6K, lastRowTimeNanosActual=1.4K, closeCountActual=99.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=99.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K, resultSizeActual=9.8K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=49.6K, joinRightBindingsConsumedActual=9.8K, inputRowsActual=59.5K, rowsDroppedActual=49.6K, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=49.6K, rightRowsScannedActual=9.8K, avgRightRowsPerLeftActual=0.20, joinOutputPerLeftActual=0.20) +│ ║ ╠══ StatementPattern [index: psoc] (costEstimate=3721.4M, resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.1M, nextCallCountActual=49.6K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=21.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=57.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=32, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Filter (new scope) (resultSizeActual=9.8K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.8K, hasNextTimeNanosActual=19.8M, nextCallCountActual=9.8K, nextTimeNanosActual=124.9K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=9.8K, sourceRowsFilteredActual=39.7K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.5K, exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, openCountActual=1, exprTrueCountActual=9.8K, lastRowTimeNanosActual=21.6M, closeCountActual=1, exprEvalTimeNanosActual=11.5M, inputRowsActual=49.6K, rowsDroppedActual=39.7K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, filterRejectRateActual=0.80) [right] +│ ║ ├── Compare (<) (exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, exprTrueCountActual=9.8K, exprEvalTimeNanosActual=8.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=6.6K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.2M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=9.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=41, indexHitRateActual=1.00) +│ ║ s: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── LeftJoin +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.3K, optimizer.candidateCount=9, optimizer.score=51.3K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.3K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=49.1K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) +│ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) +│ ║ │ ║ │ ║ └── Filter (costEstimate=255, resultSizeEstimate=65.2K, plannedFilterPassRatio=0.97, filterSelectivitySource=learned_filter) [right] +│ ║ │ ║ │ ║ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") +│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") +│ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) +│ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) +│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] +│ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) +│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] +│ ║ │ s: Var (name=enc) (bindingState=bound) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) (bindingState=unbound) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) +│ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] +│ ║ ║ s: Var (name=enc) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) (bindingState=unbound) +│ ║ ╚══ Filter (new scope) (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) [right] +│ ║ ├── Compare (<) +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ │ ValueConstant (value="60"^^) +│ ║ └── StatementPattern (resultSizeEstimate=49.7K) +│ ║ s: Var (name=obs) (bindingState=unbound) +│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ o: Var (name=value) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=enc) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=enc) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { +?enc ?cond . +?cond ?condCode . +FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) +?enc a . +VALUES ?code { "DX-200" "DX-201" } +OPTIONAL { +?enc ?practitioner . +} +MINUS { +?enc ?obs . +{ +{ +?obs ?value . +FILTER (?value < 60) +} +} +} +} + + +Theme: MEDICAL_RECORDS z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 754 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 384 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=739.5M, openCountActual=1, lastRowTimeNanosActual=739.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=739.5M, openCountActual=1, lastRowTimeNanosActual=739.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=1.2K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=66.3K, firstRowTimeNanosActual=739.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=739.5M, maxGroupSizeActual=66.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=66.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.3K, rowsDroppedActual=66.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=66.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=66.3K, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=15.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=559.8M, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=66.3K, exprFalseCountActual=66.3K, exprEvalTimeNanosActual=556.5M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=8.2K, resultSizeActual=0, joinRightIteratorsCreatedActual=138.8K, joinLeftBindingsConsumedActual=138.8K, inputRowsActual=138.8K, rowsDroppedActual=138.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=138.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) +│ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=138.8K, hasNextCallCountActual=205.1K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=33.1M, nextCallCountActual=138.8K, nextTimeNanosActual=5.7M, sourceRowsScannedActual=205.1K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=66.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=708, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=7.4K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=162, avgNextNanosActual=41, indexHitRateActual=0.68) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=m2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeActual=0, hasNextCallCountActual=138.8K, hasNextTimeNanosActual=273.8M, sourceRowsScannedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedFilterPassRatio=0.50, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern, exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=1.8K, closeCountActual=138.8K, exprEvalTimeNanosActual=16.0M, inputRowsActual=138.8K, rowsDroppedActual=138.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.0K, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Compare (=) (exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, exprEvalTimeNanosActual=9.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="MED-1005") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=138.8K, hasNextCallCountActual=277.6K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=54.1M, nextCallCountActual=138.8K, nextTimeNanosActual=5.4M, sourceRowsScannedActual=277.6K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) +│ ║ │ Var (name=c) +│ ║ │ ValueConstant (value="MED-1005") +│ ║ │ , plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=708, closeCountActual=138.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=195, avgNextNanosActual=39, indexHitRateActual=0.50) +│ ║ │ s: Var (name=m2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=131.4M, nextCallCountActual=66.3K, nextTimeNanosActual=883.4K, joinRightIteratorsCreatedActual=66.3K, joinLeftBindingsConsumedActual=66.3K, joinRightBindingsConsumedActual=66.3K, firstRowTimeNanosActual=27.7K, leftRowsWithMatchActual=66.3K, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=132.7K, rowsDroppedActual=66.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, leftRowsProbedActual=66.3K, rightRowsScannedActual=66.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=66.3M, nextCallCountActual=66.3K, nextTimeNanosActual=809.2K, firstRowTimeNanosActual=26.0K, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1000, avgNextNanosActual=12, leftRowsConsumedActual=16.6K, rightRowsConsumedActual=49.6K, leftRowsOutputContributionActual=16.6K, rightRowsOutputContributionActual=49.6K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=25.0K, rowsDroppedActual=8.3K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.3K, nextTimeNanosActual=404.9K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=17.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=203.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=127, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=25.0K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.4M, nextCallCountActual=16.6K, nextTimeNanosActual=700.3K, sourceRowsScannedActual=25.0K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=21.1K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=336, avgNextNanosActual=42, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] +│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.3K, nextTimeNanosActual=451.0K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=203.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=123, avgNextNanosActual=54, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.2K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.9M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=709, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=43.0K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=209, avgNextNanosActual=43, indexHitRateActual=0.75) [right] +│ ║ ║ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=17.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.7K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=11.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=230, avgNextNanosActual=44, indexHitRateActual=0.67) [right] +│ ║ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=21.4K, resultSizeActual=66.3K, hasNextCallCountActual=132.7K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=27.6M, nextCallCountActual=66.3K, nextTimeNanosActual=3.2M, sourceRowsScannedActual=132.7K, sourceRowsMatchedActual=66.3K, sourceRowsFilteredActual=66.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=8.7K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=49, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=7.9K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ │ s: Var (name=patient) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ o: Var (name=m2) (bindingState=unbound) +│ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=c) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="MED-1005") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) +│ ║ │ Var (name=c) +│ ║ │ ValueConstant (value="MED-1005") +│ ║ │ , plannedLookupComponents=[S, P]) +│ ║ │ s: Var (name=m2) (bindingState=bound) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=c) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=patient) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ ║ │ o: Var (name=med) (bindingState=unbound) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ s: Var (name=patient) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[S, P]) [right] +│ ║ ║ s: Var (name=enc) (bindingState=bound) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] +│ ║ s: Var (name=patient) (bindingState=bound) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ +?patient a . +?patient ?med . +} +UNION +{ +?patient a . +?patient ?enc . +?enc ?obs . +} +OPTIONAL { +?patient ?optName . +} +FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 3 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=717.3K, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=730.1K, openCountActual=1, lastRowTimeNanosActual=734.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358.7K, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=716.6K, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=745.4K, openCountActual=1, lastRowTimeNanosActual=749.0K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358.3K, avgNextNanosActual=1000) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=714.8K, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=6, firstRowTimeNanosActual=744.9K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=747.7K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=357.4K, avgNextNanosActual=250) +│ ╠══ Extension (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=638.5K, nextCallCountActual=6, nextTimeNanosActual=41.2K, firstRowTimeNanosActual=129.4K, openCountActual=1, lastRowTimeNanosActual=697.2K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=79.8K, avgNextNanosActual=6.9K) +│ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=632.5K, nextCallCountActual=6, nextTimeNanosActual=249, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=119.7K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=679.7K, closeCountActual=1, exprEvalTimeNanosActual=34.3K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=79.1K, avgNextNanosActual=42, filterRejectRateActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=33.4K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user0") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=29.0K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user1") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=957, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user2") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=458, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=585.8K, nextCallCountActual=6, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=96.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=673.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=83.7K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=517.9K, nextCallCountActual=6, nextTimeNanosActual=418, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=86.5K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=665.1K, closeCountActual=1, exprEvalTimeNanosActual=25.2K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=74.0K, avgNextNanosActual=70, filterRejectRateActual=0) [left] +│ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=23.9K, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=6, joinRightIteratorsCreatedActual=33, joinRightBindingsConsumedActual=6, inputRowsActual=39, rowsDroppedActual=33, expansionFactorActual=0.15, sampleCountActual=2, varianceActual=0.05, stddevActual=0.22, confidenceScoreActual=0.62, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=33, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=33, inputRowsActual=36, rowsDroppedActual=3, expansionFactorActual=0.92, sampleCountActual=2, varianceActual=4.7M, stddevActual=2.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=33, avgRightRowsPerLeftActual=11, joinOutputPerLeftActual=11) [left] +│ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=2.4K, nextCallCountActual=3, nextTimeNanosActual=1.0K, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.5K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=657.1K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=604, avgNextNanosActual=347) [left] +│ ║ │ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=36, hasNextTrueCountActual=33, hasNextTimeNanosActual=298.9K, nextCallCountActual=33, nextTimeNanosActual=10.4K, sourceRowsScannedActual=513, sourceRowsMatchedActual=33, sourceRowsFilteredActual=480, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ │ │ │ Var (name=u) +│ ║ │ │ │ Var (name=v) +│ ║ │ │ │ , firstRowTimeNanosActual=3.0K, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=154.9K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=8.3K, avgNextNanosActual=316, indexHitRateActual=0.06) +│ ║ │ │ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, resultSizeActual=6, hasNextCallCountActual=39, hasNextTrueCountActual=6, hasNextTimeNanosActual=30.2K, nextCallCountActual=6, nextTimeNanosActual=165, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=292, openCountActual=33, bindingsProvidedActual=6, lastRowTimeNanosActual=1.4K, closeCountActual=33, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.15, avgHasNextNanosActual=776, avgNextNanosActual=28) [right] +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=22.8K, nextCallCountActual=6, nextTimeNanosActual=1.5K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=2.7K, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=11.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.9K, avgNextNanosActual=264, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (pair) (hasNextFalseCountActual=0) +│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=30.1K, hasNextFalseCountActual=0) +│ ║ ├── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=14.9K, hasNextFalseCountActual=0) +│ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=pair) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=pair) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Extension +│ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="user0") +│ ║ │ ║ ValueConstant (value="user1") +│ ║ │ ║ ValueConstant (value="user2") +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ │ │ ╠══ Compare (!=) +│ ║ │ │ ║ Var (name=u) (bindingState=bound) +│ ║ │ │ ║ Var (name=v) (bindingState=bound) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) +│ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] +│ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ │ │ │ Var (name=u) +│ ║ │ │ │ Var (name=v) +│ ║ │ │ │ ) +│ ║ │ │ │ s: Var (name=u) (bindingState=unbound) +│ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ │ │ o: Var (name=v) (bindingState=bound) +│ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] +│ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ │ s: Var (name=u) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (pair) +│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) +│ ║ ├── Str +│ ║ │ Var (name=u) (bindingState=bound) +│ ║ └── Str +│ ║ Var (name=v) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=pair) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=pair) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +VALUES ?u { } +FILTER (?u != ?v) +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 173 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 139 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=8.7M, openCountActual=1, lastRowTimeNanosActual=8.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=1.6K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=958, firstRowTimeNanosActual=8.7M, openCountActual=1, lastRowTimeNanosActual=8.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=958) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=459, aggregateEvalCountActual=4, firstRowTimeNanosActual=8.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.7M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=459) +│ ╠══ Difference (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=8.6M, nextCallCountActual=4, nextTimeNanosActual=166, firstRowTimeNanosActual=8.4M, openCountActual=1, lastRowTimeNanosActual=8.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.4M, avgNextNanosActual=42, leftRowsConsumedActual=4, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, resultSizeActual=4, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=4, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=10, rowsDroppedActual=6, expansionFactorActual=0.40, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) +│ ║ │ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=28.5K, nextCallCountActual=6, nextTimeNanosActual=375, sourceRowsScannedActual=9, sourceRowsMatchedActual=6, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=17.9K, exprEvalCountActual=9, exprFalseCountActual=3, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=8.6M, closeCountActual=1, exprEvalTimeNanosActual=4.5K, inputRowsActual=9, rowsDroppedActual=3, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=4.1K, avgNextNanosActual=63, filterRejectRateActual=0.33) [left] +│ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=9, exprFalseCountActual=3, exprTrueCountActual=6, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=9, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=9, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=12, rowsDroppedActual=3, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=9.00, stddevActual=3.00, confidenceScoreActual=0.33, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=9, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) +│ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=2.2K, nextCallCountActual=3, nextTimeNanosActual=958, firstRowTimeNanosActual=4.4K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=8.6M, optimizer.candidateCount=64, closeCountActual=1, varsAddedActual=1, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=553, avgNextNanosActual=319) +│ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=9, hasNextCallCountActual=12, hasNextTrueCountActual=9, hasNextTimeNanosActual=12.8K, nextCallCountActual=9, nextTimeNanosActual=541, firstRowTimeNanosActual=375, openCountActual=3, bindingsProvidedActual=9, lastRowTimeNanosActual=64.8K, closeCountActual=3, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.1K, avgNextNanosActual=60) +│ ║ │ ╚══ Filter (resultSizeActual=4, hasNextCallCountActual=10, hasNextTrueCountActual=4, hasNextTimeNanosActual=175.5K, nextCallCountActual=4, nextTimeNanosActual=125, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=13.1K, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, exprTrueCountActual=4, lastRowTimeNanosActual=19.5K, closeCountActual=6, varsAddedActual=2, exprEvalTimeNanosActual=63.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, rowsDroppedActual=2, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=17.6K, avgNextNanosActual=31, filterRejectRateActual=0.33) [right] +│ ║ │ ├── Exists (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, exprEvalTimeNanosActual=62.6K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ │ Filter (resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=4, hasNextTimeNanosActual=18.3K, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, lastRowTimeNanosActual=4.1K, exprTrueCountActual=4, closeCountActual=6, exprEvalTimeNanosActual=6.3K, inputRowsActual=6, rowsDroppedActual=6, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.1K, filterRejectRateActual=0.33) +│ ║ │ │ ├── Or (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=6, exprFalseCountActual=4, exprTrueCountActual=2, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ ValueConstant (value="user0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=4, exprFalseCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) +│ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ValueConstant (value="user1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.0K, nextCallCountActual=6, nextTimeNanosActual=1.1K, sourceRowsScannedActual=8, sourceRowsMatchedActual=6, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=505, avgNextNanosActual=194, indexHitRateActual=0.75) +│ ║ │ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3.54554037480904E13M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=2.466497186E8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.9440932578245E12M, stddevActual=1715.8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.8K, stddevActual=43, confidenceScoreActual=0.04, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.2K, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] +│ ║ │ ║ │ ║ │ ╠══ Filter (resultSizeActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, inputRowsActual=18, rowsDroppedActual=12, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ │ ║ │ ║ │ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ ╚══ Compare (!=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=916, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=18, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=18, inputRowsActual=24, rowsDroppedActual=6, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=143.3M, stddevActual=12.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=18, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) +│ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=12.7K, nextCallCountActual=6, nextTimeNanosActual=2.5K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=16.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1K, avgNextNanosActual=417, indexHitRateActual=0.50) [left] +│ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=5.0K, nextCallCountActual=18, nextTimeNanosActual=292, firstRowTimeNanosActual=208, openCountActual=6, bindingsProvidedActual=18, lastRowTimeNanosActual=14.6K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=212, avgNextNanosActual=16) [right] +│ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.2K, nextCallCountActual=6, nextTimeNanosActual=458, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=12.0K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=76, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.8K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=10.9K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.1K, nextCallCountActual=6, nextTimeNanosActual=458, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=9.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=431, avgNextNanosActual=76, indexHitRateActual=0.50) [right] +│ ║ │ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, nextCallCountActual=6, nextTimeNanosActual=376, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=8.6K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=63, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.2K, nextCallCountActual=6, nextTimeNanosActual=293, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=7.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=274, avgNextNanosActual=49, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.3M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.3M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.3M, indexHitRateActual=0) +│ ║ ║ s: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ ExtensionElem (_anon_path_1473f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) +│ ║ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] +│ ║ │ ║ ├── Compare (!=) +│ ║ │ ║ │ Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ Var (name=u2) (bindingState=bound) +│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] +│ ║ │ ├── Exists +│ ║ │ │ Filter (plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) +│ ║ │ │ ├── Or +│ ║ │ │ │ ╠══ Compare (=) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ║ ValueConstant (value="user0") +│ ║ │ │ │ ╚══ Compare (=) +│ ║ │ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ValueConstant (value="user1") +│ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ │ s: Var (name=u1) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] +│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] +│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] +│ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.2K) [left] +│ ║ │ ║ │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) [left] +│ ║ │ ║ │ ║ │ ║ ├── And +│ ║ │ ║ │ ║ │ ║ │ ╠══ Compare (!=) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u2) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ │ ╚══ Compare (!=) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K) +│ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] +│ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound) +│ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) +│ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) +│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) +│ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ ║ s: Var (name=u2) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ ║ o: Var (name=u3) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ │ s: Var (name=u3) (bindingState=bound) +│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ │ o: Var (name=u2) (bindingState=bound) +│ ║ └── Extension +│ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ s: Var (name=u1) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=u1) (bindingState=unbound) +│ ║ ╚══ ExtensionElem (_anon_path_0573f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Var (name=u1) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u1) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u1) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { +VALUES (?u1 ?u2) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u1 != ?u2) +?u1 ?u2 . +VALUES ?u3 { } +FILTER ((?u2 != ?u3) && (?u1 != ?u3)) +?u1 ?u3 . +?u2 ?u1 . +?u3 ?u1 . +?u2 ?u3 . +?u3 ?u2 . +FILTER EXISTS { +?u1 ?name . +FILTER ((?name = "user0") || (?name = "user1")) +} +MINUS { +?u1 ?u1 . +BIND(?u1 AS ?_anon_path_0573f2fe36952f541b08a42a7b8ce15e70d) +} +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 6 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 3 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=299.1K, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=304.6K, openCountActual=1, lastRowTimeNanosActual=310.3K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.6K, avgNextNanosActual=1.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.0K, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=314.0K, openCountActual=1, lastRowTimeNanosActual=318.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.0K, avgNextNanosActual=584) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=295.7K, nextCallCountActual=1, nextTimeNanosActual=83, aggregateEvalCountActual=6, firstRowTimeNanosActual=314.2K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=316.1K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=147.9K, avgNextNanosActual=83) +│ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=261.8K, nextCallCountActual=6, nextTimeNanosActual=168, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=85.5K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=278.1K, closeCountActual=1, exprEvalTimeNanosActual=3.0K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=32.7K, avgNextNanosActual=28, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=251.3K, nextCallCountActual=6, nextTimeNanosActual=84, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=82.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=258.9K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=35.9K, avgNextNanosActual=14, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=234.5K, nextCallCountActual=6, nextTimeNanosActual=209, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root, firstRowTimeNanosActual=80.6K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=253.6K, closeCountActual=1, exprEvalTimeNanosActual=13.8K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=33.5K, avgNextNanosActual=35, filterRejectRateActual=0) [left] +│ ║ ║ ├── Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=13.1K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.7K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=458, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=959, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=57, joinRightBindingsConsumedActual=6, inputRowsActual=63, rowsDroppedActual=57, expansionFactorActual=0.10, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105, resultSizeActual=57, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=57, inputRowsActual=61, rowsDroppedActual=4, expansionFactorActual=0.93, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=57, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.2K, nextCallCountActual=4, nextTimeNanosActual=583, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.6K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=245.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=442, avgNextNanosActual=146) [left] +│ ║ ║ ║ └── Filter (resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=120.7K, nextCallCountActual=57, nextTimeNanosActual=1.0K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=1.3K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=40.0K, closeCountActual=4, exprEvalTimeNanosActual=53.4K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=2.0K, avgNextNanosActual=19, filterRejectRateActual=0) [right] +│ ║ ║ ║ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=47.3K, hasNextFalseCountActual=0) +│ ║ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=34.4K, nextCallCountActual=57, nextTimeNanosActual=18.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ , Compare (!=) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ , firstRowTimeNanosActual=1000, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=38.5K, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=566, avgNextNanosActual=325, indexHitRateActual=0.08) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, resultSizeActual=6, hasNextCallCountActual=63, hasNextTrueCountActual=6, hasNextTimeNanosActual=18.0K, nextCallCountActual=6, nextTimeNanosActual=210, plannedWorkRows=12, plannedBoundVars=[u, v], firstRowTimeNanosActual=250, openCountActual=57, bindingsProvidedActual=6, lastRowTimeNanosActual=375, closeCountActual=57, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.10, avgHasNextNanosActual=287, avgNextNanosActual=35) [right] +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.7K, nextCallCountActual=6, nextTimeNanosActual=583, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=875, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=313, avgNextNanosActual=97, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root) [left] +│ ║ ║ ├── Exists +│ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ s: Var (name=v) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=u) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [right] +│ ║ ║ ║ ╠══ Compare (!=) +│ ║ ║ ║ ║ Var (name=u) (bindingState=bound) +│ ║ ║ ║ ║ Var (name=v) (bindingState=bound) +│ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ , Compare (!=) +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ ) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER EXISTS { +?v ?u . +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 5 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 4 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.9K, openCountActual=1, lastRowTimeNanosActual=187.8K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "u" (hasNextFalseCountActual=0) +║ ProjectionElem "degree" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.4K, openCountActual=1, lastRowTimeNanosActual=192.7K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.5K) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.1K, openCountActual=1, lastRowTimeNanosActual=192.5K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.2K) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=176.8K, sourceRowsScannedActual=3, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=3, exprFalseCountActual=3, openCountActual=1, lastRowTimeNanosActual=187.5K, closeCountActual=1, exprEvalTimeNanosActual=1.3K, inputRowsActual=3, rowsDroppedActual=3, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=176.9K, filterRejectRateActual=1.00) +│ ║ ├── Compare (>=) (exprEvalCountActual=3, exprFalseCountActual=3, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) +│ ║ └── Group (u) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=172.4K, nextCallCountActual=3, nextTimeNanosActual=126, aggregateEvalCountActual=12, firstRowTimeNanosActual=182.9K, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=185.0K, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=3, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=43.1K, avgNextNanosActual=42) +│ ║ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=149.6K, nextCallCountActual=6, nextTimeNanosActual=249, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=48.4K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=158.2K, closeCountActual=1, exprEvalTimeNanosActual=3.5K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=18.7K, avgNextNanosActual=42, filterRejectRateActual=0) +│ ║ ├── ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.7K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user3") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=667, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user4") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=294, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user5") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user6") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=142.4K, nextCallCountActual=6, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=44.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=151.3K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=20.3K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=122.6K, nextCallCountActual=6, nextTimeNanosActual=84, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=41.8K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=148.2K, closeCountActual=1, exprEvalTimeNanosActual=1.7K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=17.5K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=57, joinRightBindingsConsumedActual=6, inputRowsActual=63, rowsDroppedActual=57, expansionFactorActual=0.10, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105, resultSizeActual=57, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=57, inputRowsActual=61, rowsDroppedActual=4, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.6M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=57, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.8K, nextCallCountActual=4, nextTimeNanosActual=626, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.0K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=143.5K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=567, avgNextNanosActual=157) [left] +│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=28.3K, nextCallCountActual=57, nextTimeNanosActual=5.3K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ , firstRowTimeNanosActual=750, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=30.8K, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=464, avgNextNanosActual=94, indexHitRateActual=0.08) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, resultSizeActual=6, hasNextCallCountActual=63, hasNextTrueCountActual=6, hasNextTimeNanosActual=33.4K, nextCallCountActual=6, nextTimeNanosActual=125, plannedWorkRows=12, plannedBoundVars=[u, v], firstRowTimeNanosActual=334, openCountActual=57, bindingsProvidedActual=6, lastRowTimeNanosActual=750, closeCountActual=57, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.10, avgHasNextNanosActual=530, avgNextNanosActual=21) [right] +│ ║ ╚══ Extension (resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=6.6K, nextCallCountActual=6, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=625, openCountActual=6, lastRowTimeNanosActual=1.7K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=552, avgNextNanosActual=167) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.2K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.4K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358, avgNextNanosActual=42, indexHitRateActual=0.50) +│ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) +│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (degree) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (degree) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "degree" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── Group (u) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optAlias) (bindingState=bound) +│ ║ │ ValueConstant (value="user3") +│ ║ │ ValueConstant (value="user4") +│ ║ │ ValueConstant (value="user5") +│ ║ │ ValueConstant (value="user6") +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ ║ ├── Compare (!=) +│ ║ ║ │ Var (name=u) (bindingState=bound) +│ ║ ║ │ Var (name=v) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ ) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=u) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (optAlias) +│ ║ Var (name=optName) (bindingState=bound) +│ ║ GroupElem (_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ║ GroupElem (degree) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567) +│ Count (Distinct) +│ Var (name=v) (bindingState=unbound) +└── ExtensionElem (degree) +Count (Distinct) +Var (name=v) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { +VALUES ?v { } +?u ?v . +VALUES ?u { } +FILTER (?u != ?v) +OPTIONAL { +?u ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 3) + + +Theme: SOCIAL_MEDIA z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 7 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 6 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=607.1K, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=604.9K, openCountActual=1, lastRowTimeNanosActual=614.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=303.6K, avgNextNanosActual=666) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=601.3K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=610.6K, openCountActual=1, lastRowTimeNanosActual=613.2K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=300.7K, avgNextNanosActual=292) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=599.5K, nextCallCountActual=1, nextTimeNanosActual=125, aggregateEvalCountActual=9, firstRowTimeNanosActual=610.7K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=611.8K, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=299.8K, avgNextNanosActual=125) +│ ╠══ Filter (resultSizeActual=9, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=575.8K, nextCallCountActual=9, nextTimeNanosActual=251, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=64.7K, exprEvalCountActual=9, openCountActual=1, exprTrueCountActual=9, lastRowTimeNanosActual=585.8K, closeCountActual=1, exprEvalTimeNanosActual=2.5K, inputRowsActual=9, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.82, avgHasNextNanosActual=52.4K, avgNextNanosActual=28, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.8K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=563.5K, nextCallCountActual=9, nextTimeNanosActual=209, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, firstRowTimeNanosActual=62.9K, leftRowsWithMatchActual=9, openCountActual=1, lastRowTimeNanosActual=570.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18, rowsDroppedActual=9, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=754.2K, stddevActual=868, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=56.4K, avgNextNanosActual=23, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, resultSizeActual=9, joinRightIteratorsCreatedActual=70, joinLeftBindingsConsumedActual=79, joinRightBindingsConsumedActual=9, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=79, rowsDroppedActual=70, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=79, rightRowsScannedActual=9, avgRightRowsPerLeftActual=0.11, joinOutputPerLeftActual=0.11) [left] +│ ║ ║ ├── Filter (resultSizeActual=70, hasNextCallCountActual=71, hasNextTrueCountActual=70, hasNextTimeNanosActual=126.0K, nextCallCountActual=70, nextTimeNanosActual=1.2K, sourceRowsScannedActual=70, sourceRowsMatchedActual=70, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=18.2K, exprEvalCountActual=70, openCountActual=1, exprTrueCountActual=70, lastRowTimeNanosActual=567.2K, closeCountActual=1, exprEvalTimeNanosActual=47.5K, inputRowsActual=70, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.8K, avgNextNanosActual=18, filterRejectRateActual=0) [left] +│ ║ ║ │ ╠══ Compare (!=) (exprEvalCountActual=70, exprTrueCountActual=70, exprEvalTimeNanosActual=42.3K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, resultSizeActual=70, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=75, rowsDroppedActual=5, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.0M, stddevActual=1.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=70, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) +│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.2K, nextCallCountActual=5, nextTimeNanosActual=10.7K, firstRowTimeNanosActual=9.9K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=564.1K, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=1, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=201, avgNextNanosActual=2.2K) [left] +│ ║ ║ │ └── StatementPattern [index: ospc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=70, hasNextCallCountActual=75, hasNextTrueCountActual=70, hasNextTimeNanosActual=37.0K, nextCallCountActual=70, nextTimeNanosActual=7.5K, sourceRowsScannedActual=897, sourceRowsMatchedActual=70, sourceRowsFilteredActual=827, plannedIndexName=ospc, firstRowTimeNanosActual=750, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=125.0K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=493, avgNextNanosActual=108, indexHitRateActual=0.08) [right] +│ ║ ║ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=88.9K, nextCallCountActual=9, nextTimeNanosActual=250, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=1.7K, exprEvalCountActual=9, openCountActual=70, exprTrueCountActual=9, lastRowTimeNanosActual=875, closeCountActual=70, exprEvalTimeNanosActual=16.5K, inputRowsActual=9, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=1.1K, avgNextNanosActual=28, filterRejectRateActual=0) [right] +│ ║ ║ ╠══ Not (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=15.7K, hasNextFalseCountActual=0) +│ ║ ║ ║ Exists (exprEvalCountActual=9, exprFalseCountActual=9, exprEvalTimeNanosActual=14.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ ║ Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=9, hasNextTimeNanosActual=4.5K, sourceRowsScannedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=583, closeCountActual=9, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0, avgHasNextNanosActual=505, indexHitRateActual=0) +│ ║ ║ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── ExtensionElem (_anon_path_5783f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=26.3K, nextCallCountActual=9, nextTimeNanosActual=250, firstRowTimeNanosActual=375, openCountActual=70, bindingsProvidedActual=9, lastRowTimeNanosActual=375, closeCountActual=70, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=334, avgNextNanosActual=28) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9, hasNextCallCountActual=18, hasNextTrueCountActual=9, hasNextTimeNanosActual=4.9K, nextCallCountActual=9, nextTimeNanosActual=459, sourceRowsScannedActual=18, sourceRowsMatchedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.0K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=276, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ Var (name=u) (bindingState=bound) +│ ║ ║ │ ║ Var (name=v) (bindingState=bound) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=u) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=v) (bindingState=bound) +│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [right] +│ ║ ║ ╠══ Not +│ ║ ║ ║ Exists +│ ║ ║ ║ Extension +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) +│ ║ ║ ║ └── ExtensionElem (_anon_path_9783f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ ║ ║ Var (name=u) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER NOT EXISTS { +?u ?u . +BIND(?u AS ?_anon_path_9783f2fe36952f541b08a42a7b8ce15e70d012345678) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName != "") +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 1091 ms +Warmup execution 1/1 +Fastest execution time: 769 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=1036.0M, openCountActual=1, lastRowTimeNanosActual=1036.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=1.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=1036.0M, openCountActual=1, lastRowTimeNanosActual=1036.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=494, firstRowTimeNanosActual=1036.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1036.0M, maxGroupSizeActual=494, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=494, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=494, rowsDroppedActual=493, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=625) +│ ╠══ Filter (resultSizeActual=494, hasNextCallCountActual=496, hasNextTrueCountActual=495, hasNextTimeNanosActual=1035.2M, nextCallCountActual=494, nextTimeNanosActual=10.9K, sourceRowsScannedActual=494, sourceRowsMatchedActual=494, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=231.2K, exprEvalCountActual=494, openCountActual=1, exprTrueCountActual=494, lastRowTimeNanosActual=1036.0M, closeCountActual=1, exprEvalTimeNanosActual=312.4K, inputRowsActual=494, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1M, avgNextNanosActual=22, filterRejectRateActual=0) +│ ║ ├── ListMemberOperator (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=242.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user7") (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=47.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user8") (exprEvalCountActual=415, exprTrueCountActual=415, exprEvalTimeNanosActual=30.8K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user9") (exprEvalCountActual=313, exprTrueCountActual=313, exprEvalTimeNanosActual=27.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user10") (exprEvalCountActual=216, exprTrueCountActual=216, exprEvalTimeNanosActual=18.1K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user11") (exprEvalCountActual=106, exprTrueCountActual=106, exprEvalTimeNanosActual=17.9K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=494, hasNextCallCountActual=495, hasNextTrueCountActual=494, hasNextTimeNanosActual=1034.7M, nextCallCountActual=494, nextTimeNanosActual=7.0K, joinRightIteratorsCreatedActual=494, joinLeftBindingsConsumedActual=494, joinRightBindingsConsumedActual=494, firstRowTimeNanosActual=226.7K, leftRowsWithMatchActual=494, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=988, rowsDroppedActual=494, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1M, avgNextNanosActual=14, leftRowsProbedActual=494, rightRowsScannedActual=494, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (HashJoinIteration) (resultSizeActual=494, joinLeftBindingsConsumedActual=499, inputRowsActual=1.4M, rowsDroppedActual=1.4M, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=499, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.99) [left] +│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.4K, nextCallCountActual=5, nextTimeNanosActual=834, firstRowTimeNanosActual=53.6K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=77.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=243, avgNextNanosActual=167) [left] +│ ║ ║ └── Union (new scope) (resultSizeActual=1.4M, hasNextFalseCountActual=0, leftRowsConsumedActual=192, rightRowsConsumedActual=1.4M, leftRowsOutputContributionActual=192, rightRowsOutputContributionActual=1.4M) [right] +│ ║ ║ ╠══ Extension (new scope) (resultSizeActual=192, hasNextCallCountActual=193, hasNextTrueCountActual=192, hasNextTimeNanosActual=152.8M, nextCallCountActual=192, nextTimeNanosActual=11.0K, firstRowTimeNanosActual=37.2K, openCountActual=1, lastRowTimeNanosActual=153.3M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=792.0K, avgNextNanosActual=57) +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M, resultSizeActual=192, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=192, inputRowsActual=143.9K, rowsDroppedActual=143.7K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=139.8K, stddevActual=374, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=192, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) +│ ║ ║ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=13.3M, nextCallCountActual=143.7K, nextTimeNanosActual=6.2M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=25.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=153.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=44, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=192, hasNextCallCountActual=143.9K, hasNextTrueCountActual=192, hasNextTimeNanosActual=67.6M, nextCallCountActual=192, nextTimeNanosActual=13.7K, sourceRowsScannedActual=143.9K, sourceRowsMatchedActual=192, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=417, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=470, avgNextNanosActual=72, indexHitRateActual=0.00) [right] +│ ║ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ Extension (new scope) (resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=149.6M, nextCallCountActual=1.4M, nextTimeNanosActual=107.8M, firstRowTimeNanosActual=153.3M, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=75) +│ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=1.4M, resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=119.9M, nextCallCountActual=1.4M, nextTimeNanosActual=52.0M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.4M, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=153.3M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=36, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=post) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=post) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=494, hasNextCallCountActual=988, hasNextTrueCountActual=494, hasNextTimeNanosActual=301.8K, nextCallCountActual=494, nextTimeNanosActual=32.4K, sourceRowsScannedActual=988, sourceRowsMatchedActual=494, sourceRowsFilteredActual=494, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=494, openCountActual=494, lastRowTimeNanosActual=2.7K, closeCountActual=494, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=494, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=306, avgNextNanosActual=66, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=activity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=activity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="user7") +│ ║ │ ValueConstant (value="user8") +│ ║ │ ValueConstant (value="user9") +│ ║ │ ValueConstant (value="user10") +│ ║ │ ValueConstant (value="user11") +│ ║ └── LeftJoin +│ ║ ╠══ Join (HashJoinIteration) [left] +│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union (new scope) [right] +│ ║ ║ ╠══ Extension (new scope) +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) +│ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] +│ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) +│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) +│ ║ ║ ║ └── ExtensionElem (activity) +│ ║ ║ ║ Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ Extension (new scope) +│ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) +│ ║ ║ │ s: Var (name=post) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) +│ ║ ║ │ o: Var (name=u) (bindingState=unbound) +│ ║ ║ └── ExtensionElem (activity) +│ ║ ║ Var (name=post) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=activity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=activity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { } +{ +?u ?v . +?v ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post ?u . +BIND(?post AS ?activity) +} +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 5 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 3 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.5K, openCountActual=1, lastRowTimeNanosActual=274.7K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "u" (hasNextFalseCountActual=0) +║ ProjectionElem "connections" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.3K, openCountActual=1, lastRowTimeNanosActual=278.9K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.4K) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.0K, openCountActual=1, lastRowTimeNanosActual=278.7K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.0K) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=260.2K, sourceRowsScannedActual=5, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=5, exprFalseCountActual=5, openCountActual=1, lastRowTimeNanosActual=273.5K, closeCountActual=1, exprEvalTimeNanosActual=1.3K, inputRowsActual=5, rowsDroppedActual=5, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=260.3K, filterRejectRateActual=1.00) +│ ║ ├── Compare (>=) (exprEvalCountActual=5, exprFalseCountActual=5, exprEvalTimeNanosActual=748, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ └── Group (u) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=255.9K, nextCallCountActual=5, nextTimeNanosActual=124, aggregateEvalCountActual=40, firstRowTimeNanosActual=268.9K, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=271.1K, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=4, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=15, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=42.7K, avgNextNanosActual=25) +│ ║ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=234.4K, nextCallCountActual=20, nextTimeNanosActual=334, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.7K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=244.1K, closeCountActual=1, exprEvalTimeNanosActual=3.7K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=10.7K, avgNextNanosActual=17, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=224.2K, nextCallCountActual=20, nextTimeNanosActual=249, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=17.5K, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=236.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=10.7K, avgNextNanosActual=12, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=193.5K, nextCallCountActual=20, nextTimeNanosActual=542, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=15.7K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=232.6K, closeCountActual=1, exprEvalTimeNanosActual=3.3K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=9.2K, avgNextNanosActual=27, filterRejectRateActual=0) [left] +│ ║ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=87, joinRightBindingsConsumedActual=20, inputRowsActual=107, rowsDroppedActual=87, expansionFactorActual=0.19, sampleCountActual=2, varianceActual=1.58, stddevActual=1.26, confidenceScoreActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=87, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=87, inputRowsActual=93, rowsDroppedActual=6, expansionFactorActual=0.94, sampleCountActual=2, varianceActual=681.7K, stddevActual=826, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=87, avgRightRowsPerLeftActual=15, joinOutputPerLeftActual=15) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=834, nextCallCountActual=6, nextTimeNanosActual=374, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.7K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=227.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=119, avgNextNanosActual=62) [left] +│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=43.2K, nextCallCountActual=87, nextTimeNanosActual=7.3K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=87, sourceRowsFilteredActual=1.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ , firstRowTimeNanosActual=667, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=18.6K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=465, avgNextNanosActual=84, indexHitRateActual=0.07) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, resultSizeActual=20, hasNextCallCountActual=107, hasNextTrueCountActual=20, hasNextTimeNanosActual=57.1K, nextCallCountActual=20, nextTimeNanosActual=415, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=292, openCountActual=87, bindingsProvidedActual=20, lastRowTimeNanosActual=375, closeCountActual=87, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=87, nextPerHasNextRatioActual=0.19, avgHasNextNanosActual=534, avgNextNanosActual=21) [right] +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=10.6K, nextCallCountActual=20, nextTimeNanosActual=917, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1000, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=46, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (connections) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (connections) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "u" +║ ProjectionElem "connections" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="5"^^) +│ ║ └── Group (u) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] +│ ║ ║ ├── Compare (!=) +│ ║ ║ │ Var (name=u) (bindingState=bound) +│ ║ ║ │ Var (name=v) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] +│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] +│ ║ ║ ║ Var (name=u) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ║ ) +│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=bound) +│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ GroupElem (_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ║ GroupElem (connections) +│ ║ Count (Distinct) +│ ║ Var (name=v) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count (Distinct) +│ Var (name=v) (bindingState=unbound) +└── ExtensionElem (connections) +Count (Distinct) +Var (name=v) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES ?v { } +?u ?v . +VALUES ?u { } +FILTER (?u != ?v) +OPTIONAL { +?u ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) + + +Theme: SOCIAL_MEDIA z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 13 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 11 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=833) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=459, aggregateEvalCountActual=20, firstRowTimeNanosActual=9.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.0M, maxGroupSizeActual=20, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=20, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=19, selectivityActual=0.05, expansionFactorActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=459) +│ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=581, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=8.6M, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.9M, closeCountActual=1, exprEvalTimeNanosActual=14.3K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=408.0K, avgNextNanosActual=29, filterRejectRateActual=0) +│ ║ ├── ListMemberOperator (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=11.6K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user12") (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user13") (exprEvalCountActual=16, exprTrueCountActual=16, exprEvalTimeNanosActual=960, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user14") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=665, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user15") (exprEvalCountActual=8, exprTrueCountActual=8, exprEvalTimeNanosActual=627, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user16") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=374, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user17") (hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=666, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=8.5M, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=8.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=426.1K, avgNextNanosActual=33, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Difference (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=583, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=424.3K, avgNextNanosActual=29, leftRowsConsumedActual=20, rightRowsConsumedActual=0, overlapRowsActual=0) [left] +│ ║ ║ ├── Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=339.4K, nextCallCountActual=20, nextTimeNanosActual=414, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root, firstRowTimeNanosActual=30.1K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.9M, closeCountActual=1, exprEvalTimeNanosActual=45.4K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=16.2K, avgNextNanosActual=21, filterRejectRateActual=0) +│ ║ ║ │ ╠══ Exists (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=43.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=20, hasNextTrueCountActual=20, hasNextTimeNanosActual=11.7K, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, plannedIndexName=spoc, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=500, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=586, indexHitRateActual=1.00) +│ ║ ║ │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=87, joinRightBindingsConsumedActual=20, inputRowsActual=107, rowsDroppedActual=87, expansionFactorActual=0.19, sampleCountActual=2, varianceActual=1.58, stddevActual=1.26, confidenceScoreActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) +│ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=87, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=87, inputRowsActual=93, rowsDroppedActual=6, expansionFactorActual=0.94, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=87, avgRightRowsPerLeftActual=15, joinOutputPerLeftActual=15) [left] +│ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=1.6K, nextCallCountActual=6, nextTimeNanosActual=460, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.0K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=8.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=238, avgNextNanosActual=77) [left] +│ ║ ║ │ │ ╚══ Filter (resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=143.7K, nextCallCountActual=87, nextTimeNanosActual=1.4K, sourceRowsScannedActual=87, sourceRowsMatchedActual=87, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=1.0K, exprEvalCountActual=87, openCountActual=6, exprTrueCountActual=87, lastRowTimeNanosActual=24.2K, closeCountActual=6, exprEvalTimeNanosActual=61.6K, inputRowsActual=87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=1.5K, avgNextNanosActual=17, filterRejectRateActual=0) [right] +│ ║ ║ │ │ ├── Compare (!=) (exprEvalCountActual=87, exprTrueCountActual=87, exprEvalTimeNanosActual=55.1K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=49.6K, nextCallCountActual=87, nextTimeNanosActual=8.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=87, sourceRowsFilteredActual=1.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ , Compare (!=) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ , firstRowTimeNanosActual=833, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=22.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=534, avgNextNanosActual=99, indexHitRateActual=0.07) +│ ║ ║ │ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, resultSizeActual=20, hasNextCallCountActual=107, hasNextTrueCountActual=20, hasNextTimeNanosActual=30.0K, nextCallCountActual=20, nextTimeNanosActual=541, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=250, openCountActual=87, bindingsProvidedActual=20, lastRowTimeNanosActual=375, closeCountActual=87, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=87, nextPerHasNextRatioActual=0.19, avgHasNextNanosActual=280, avgNextNanosActual=27) [right] +│ ║ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.5M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.5M, indexHitRateActual=0) +│ ║ ║ ║ s: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ ExtensionElem (_anon_path_4993f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=12.7K, nextCallCountActual=20, nextTimeNanosActual=2.1K, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1.5K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=318, avgNextNanosActual=108, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="user12") +│ ║ │ ValueConstant (value="user13") +│ ║ │ ValueConstant (value="user14") +│ ║ │ ValueConstant (value="user15") +│ ║ │ ValueConstant (value="user16") +│ ║ │ ValueConstant (value="user17") +│ ║ └── LeftJoin +│ ║ ╠══ Difference [left] +│ ║ ║ ├── Filter (plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root) +│ ║ ║ │ ╠══ Exists +│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) +│ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] +│ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ │ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [right] +│ ║ ║ │ │ ├── Compare (!=) +│ ║ ║ │ │ │ Var (name=u) (bindingState=bound) +│ ║ ║ │ │ │ Var (name=v) (bindingState=bound) +│ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists +│ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ , Compare (!=) +│ ║ ║ │ │ Var (name=u) +│ ║ ║ │ │ Var (name=v) +│ ║ ║ │ │ ) +│ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) +│ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ o: Var (name=v) (bindingState=bound) +│ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] +│ ║ ║ └── Extension +│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) +│ ║ ║ ║ s: Var (name=v) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ o: Var (name=v) (bindingState=unbound) +│ ║ ║ ╚══ ExtensionElem (_anon_path_9993f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ ║ Var (name=v) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=v) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=u) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=u) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { +VALUES ?v { } +?u ?v . +FILTER (?u != ?v) +VALUES ?u { } +FILTER EXISTS { +?v ?u . +} +MINUS { +?v ?v . +BIND(?v AS ?_anon_path_9993f2fe36952f541b08a42a7b8ce15e70d012345678) +} +OPTIONAL { +?v ?optName . +} +FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 1523 ms +Warmup execution 1/1 +Fastest execution time: 963 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=1472.6M, openCountActual=1, lastRowTimeNanosActual=1472.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=750, firstRowTimeNanosActual=1472.6M, openCountActual=1, lastRowTimeNanosActual=1472.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=750) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=18, firstRowTimeNanosActual=1472.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1472.6M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=541) +│ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=1472.5M, nextCallCountActual=18, nextTimeNanosActual=542, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=18, sourceRowsFilteredActual=1.1K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=37.7K, exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=1472.5M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=1.1K, rowsDroppedActual=1.1K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=73.6M, avgNextNanosActual=30, filterRejectRateActual=0.98) +│ ║ ├── ListMemberOperator (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=18, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user0") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=75.0K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user1") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=50.3K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="user2") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=56.1K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1470.8M, nextCallCountActual=1.1K, nextTimeNanosActual=20.9K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=1.1K, firstRowTimeNanosActual=26.4K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=1472.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=2.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2M, avgNextNanosActual=18, leftRowsProbedActual=1.1K, rightRowsScannedActual=1.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1469.3M, nextCallCountActual=1.1K, nextTimeNanosActual=81.8K, firstRowTimeNanosActual=25.7K, openCountActual=1, lastRowTimeNanosActual=1472.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2M, avgNextNanosActual=70) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=1.2M, joinRightBindingsConsumedActual=1.1K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.2M, rowsDroppedActual=1.2M, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=3.7K, stddevActual=61, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=1.2M, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=1.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4M, rowsDroppedActual=143.7K, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=16, stddevActual=4.01, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=1.2M, avgRightRowsPerLeftActual=9.02, joinOutputPerLeftActual=9.02) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=47.9K, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=14.7M, nextCallCountActual=143.7K, nextTimeNanosActual=7.2M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1472.5M, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=3, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=50, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=1.2M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.2M, hasNextTimeNanosActual=160.9M, nextCallCountActual=1.2M, nextTimeNanosActual=57.6M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.2M, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=7.4K, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=112, avgNextNanosActual=44, indexHitRateActual=0.90) [right] +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=1.1K, hasNextCallCountActual=1.2M, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=548.3M, nextCallCountActual=1.1K, nextTimeNanosActual=51.2K, sourceRowsScannedActual=1.2M, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.2M, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=1.2M, openCountActual=1.2M, lastRowTimeNanosActual=500, closeCountActual=1.2M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2M, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=423, avgNextNanosActual=44, indexHitRateActual=0.00) [right] +│ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ExtensionElem (cycleStart) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=1.1K, hasNextCallCountActual=2.3K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=602.1K, nextCallCountActual=1.1K, nextTimeNanosActual=65.7K, sourceRowsScannedActual=2.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1.7K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="user0") +│ ║ │ ValueConstant (value="user1") +│ ║ │ ValueConstant (value="user2") +│ ║ └── LeftJoin +│ ║ ╠══ Extension [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=c) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=a) (bindingState=bound) +│ ║ ║ └── ExtensionElem (cycleStart) +│ ║ ║ Var (name=a) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=a) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +?a ?b . +?b ?c . +?c ?a . +BIND(?a AS ?cycleStart) +OPTIONAL { +?a ?optName . +} +FILTER (?optName IN ("user0", "user1", "user2")) +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 52 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 46 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=14.9M, openCountActual=1, lastRowTimeNanosActual=14.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=1.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=14.9M, openCountActual=1, lastRowTimeNanosActual=14.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=542) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=343, firstRowTimeNanosActual=14.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=14.9M, maxGroupSizeActual=343, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=343, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=343, rowsDroppedActual=342, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=375) +│ ╠══ Filter (resultSizeActual=343, hasNextCallCountActual=345, hasNextTrueCountActual=344, hasNextTimeNanosActual=14.8M, nextCallCountActual=343, nextTimeNanosActual=4.4K, sourceRowsScannedActual=343, sourceRowsMatchedActual=343, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=35.6K, exprEvalCountActual=343, openCountActual=1, exprTrueCountActual=343, lastRowTimeNanosActual=14.9M, closeCountActual=1, exprEvalTimeNanosActual=55.8K, inputRowsActual=343, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=43.1K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=343, exprTrueCountActual=343, exprEvalTimeNanosActual=23.8K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=834, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=343, hasNextCallCountActual=344, hasNextTrueCountActual=343, hasNextTimeNanosActual=14.7M, nextCallCountActual=343, nextTimeNanosActual=5.7K, joinRightIteratorsCreatedActual=343, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, firstRowTimeNanosActual=32.9K, leftRowsWithMatchActual=343, openCountActual=1, lastRowTimeNanosActual=14.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=686, rowsDroppedActual=343, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=43.0K, avgNextNanosActual=17, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, resultSizeActual=343, joinRightIteratorsCreatedActual=8.9K, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=9.2K, rowsDroppedActual=8.9K, expansionFactorActual=0.04, sampleCountActual=2, varianceActual=191.5K, stddevActual=438, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, resultSizeActual=8.9K, joinLeftBindingsConsumedActual=4, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=8.9K, rowsDroppedActual=4, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.2K) [left] +│ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.7K, nextCallCountActual=4, nextTimeNanosActual=625, firstRowTimeNanosActual=3.9K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=14.8M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=1, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=358, avgNextNanosActual=156) [left] +│ ║ ║ │ ╚══ Filter (resultSizeActual=8.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, rowsDroppedActual=67, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprFalseCountActual=67, exprTrueCountActual=8.9K, exprEvalTimeNanosActual=333.9K, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M, resultSizeActual=9.0K, inputRowsActual=9.8K, rowsDroppedActual=850, expansionFactorActual=0.91, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=850, joinLeftBindingsConsumedActual=57, inputRowsActual=907, rowsDroppedActual=57, expansionFactorActual=0.94, hasNextFalseCountActual=0, leftRowsProbedActual=57, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=15) [left] +│ ║ ║ │ ║ ├── Filter (resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=98.8K, nextCallCountActual=57, nextTimeNanosActual=1.1K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.4K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=4.6M, closeCountActual=4, exprEvalTimeNanosActual=41.2K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.6K, avgNextNanosActual=20, filterRejectRateActual=0) [left] +│ ║ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=37.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (costEstimate=189, resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=34.5K, nextCallCountActual=57, nextTimeNanosActual=8.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexName=ospc, firstRowTimeNanosActual=1.1K, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=4.6M, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=566, avgNextNanosActual=151, indexHitRateActual=0.08) +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── Filter (resultSizeActual=850, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=850, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ║ ╠══ Compare (!=) (exprEvalCountActual=850, exprTrueCountActual=850, exprEvalTimeNanosActual=202.4K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=850, hasNextCallCountActual=907, hasNextTrueCountActual=850, hasNextTimeNanosActual=104.5K, nextCallCountActual=850, nextTimeNanosActual=32.7K, sourceRowsScannedActual=907, sourceRowsMatchedActual=850, sourceRowsFilteredActual=57, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=57, openCountActual=57, lastRowTimeNanosActual=260.1K, closeCountActual=57, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=115, avgNextNanosActual=39, indexHitRateActual=0.94) +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ Filter (resultSizeActual=9.0K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprTrueCountActual=9.0K, exprEvalTimeNanosActual=445.4K, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=9.0K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.0K, hasNextTimeNanosActual=1.0M, nextCallCountActual=9.0K, nextTimeNanosActual=452.1K, sourceRowsScannedActual=9.8K, sourceRowsMatchedActual=9.0K, sourceRowsFilteredActual=850, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=850, openCountActual=850, lastRowTimeNanosActual=7.5K, closeCountActual=850, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=850, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=102, avgNextNanosActual=50, indexHitRateActual=0.91) +│ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=d) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=343, hasNextCallCountActual=9.2K, hasNextTrueCountActual=343, hasNextTimeNanosActual=3.5M, nextCallCountActual=343, nextTimeNanosActual=19.7K, sourceRowsScannedActual=9.2K, sourceRowsMatchedActual=343, sourceRowsFilteredActual=8.9K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=8.9K, openCountActual=8.9K, lastRowTimeNanosActual=459, closeCountActual=8.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.9K, nextPerHasNextRatioActual=0.04, avgHasNextNanosActual=386, avgNextNanosActual=58, indexHitRateActual=0.04) [right] +│ ║ ║ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=239.4K, nextCallCountActual=343, nextTimeNanosActual=51.3K, firstRowTimeNanosActual=916, openCountActual=343, lastRowTimeNanosActual=3.2K, closeCountActual=343, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=349, avgNextNanosActual=150) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=143.4K, nextCallCountActual=343, nextTimeNanosActual=25.1K, sourceRowsScannedActual=686, sourceRowsMatchedActual=343, sourceRowsFilteredActual=343, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=343, openCountActual=343, lastRowTimeNanosActual=2.8K, closeCountActual=343, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=73, indexHitRateActual=0.50) +│ ║ │ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) +│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optAlias) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] +│ ║ ║ │ ├── Compare (!=) +│ ║ ║ │ │ Var (name=d) (bindingState=bound) +│ ║ ║ │ │ Var (name=a) (bindingState=bound) +│ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] +│ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] +│ ║ ║ │ ║ │ ╠══ Compare (!=) +│ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) +│ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) +│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [right] +│ ║ ║ │ ║ ╠══ Compare (!=) +│ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) +│ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) +│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) +│ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [right] +│ ║ ║ │ ├── Compare (!=) +│ ║ ║ │ │ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ Var (name=d) (bindingState=bound) +│ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) +│ ║ ║ │ s: Var (name=c) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=d) (bindingState=unbound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=d) (bindingState=bound) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=a) (bindingState=bound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=b) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (optAlias) +│ ║ Var (name=optName) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { } +?a ?b . +FILTER (?a != ?b) +?b ?c . +FILTER (?b != ?c) +?c ?d . +FILTER (?c != ?d) +FILTER (?d != ?a) +?d ?a . +OPTIONAL { +?b ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias != "") +} + + +Theme: SOCIAL_MEDIA z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 130 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 122 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=589.2K, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=594.3K, openCountActual=1, lastRowTimeNanosActual=600.8K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=294.6K, avgNextNanosActual=1.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=588.0K, nextCallCountActual=1, nextTimeNanosActual=500, firstRowTimeNanosActual=604.0K, openCountActual=1, lastRowTimeNanosActual=608.5K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=294.0K, avgNextNanosActual=500) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=585.0K, nextCallCountActual=1, nextTimeNanosActual=209, aggregateEvalCountActual=12, firstRowTimeNanosActual=604.4K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=606.2K, maxGroupSizeActual=12, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=12, rowsDroppedActual=11, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292.5K, avgNextNanosActual=209) +│ ╠══ Filter (resultSizeActual=12, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=18, rowsDroppedActual=6, selectivityActual=0.67, expansionFactorActual=0.67, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=5.4K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user7") (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=373, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user9") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user10") (hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user11") (hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=129.9K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=18, hasNextTrueCountActual=12, hasNextTimeNanosActual=32.1K, sourceRowsScannedActual=18, sourceRowsMatchedActual=12, sourceRowsFilteredActual=6, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=18, exprFalseCountActual=6, openCountActual=18, lastRowTimeNanosActual=3.5K, exprTrueCountActual=12, closeCountActual=18, exprEvalTimeNanosActual=5.6K, inputRowsActual=18, rowsDroppedActual=18, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.8K, filterRejectRateActual=0.33) +│ ║ │ ╠══ Or (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, shortCircuitCountActual=6, exprEvalTimeNanosActual=4.7K, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=18, exprFalseCountActual=12, exprTrueCountActual=6, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="user7") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=708, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=752, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=7.3K, nextCallCountActual=18, nextTimeNanosActual=1.2K, sourceRowsScannedActual=24, sourceRowsMatchedActual=18, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=958, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=306, avgNextNanosActual=70, indexHitRateActual=0.75) +│ ║ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=413.1K, nextCallCountActual=18, nextTimeNanosActual=414, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=35.0K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=557.1K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.20451578E7M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=21.7K, avgNextNanosActual=23, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, resultSizeActual=18, joinRightIteratorsCreatedActual=33, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51, rowsDroppedActual=33, expansionFactorActual=0.35, sampleCountActual=2, varianceActual=3.89992814938E10M, stddevActual=197.5M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, resultSizeActual=33, joinLeftBindingsConsumedActual=20, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=53, rowsDroppedActual=20, expansionFactorActual=0.62, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.65) [left] +│ ║ ║ │ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=22.9K, nextCallCountActual=20, nextTimeNanosActual=667, sourceRowsScannedActual=25, sourceRowsMatchedActual=20, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=8.8K, exprEvalCountActual=25, exprFalseCountActual=5, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=554.2K, closeCountActual=1, exprEvalTimeNanosActual=4.6K, inputRowsActual=25, rowsDroppedActual=5, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=1.1K, avgNextNanosActual=33, filterRejectRateActual=0.20) [left] +│ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=25, exprFalseCountActual=5, exprTrueCountActual=20, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=25, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=25, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=30, rowsDroppedActual=5, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=100, stddevActual=10, confidenceScoreActual=0.15, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=25, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) +│ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.3K, nextCallCountActual=5, nextTimeNanosActual=542, firstRowTimeNanosActual=3.5K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=553.2K, optimizer.candidateCount=81, closeCountActual=1, varsAddedActual=1, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=222, avgNextNanosActual=108) +│ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=25, hasNextCallCountActual=30, hasNextTrueCountActual=25, hasNextTimeNanosActual=6.8K, nextCallCountActual=25, nextTimeNanosActual=667, firstRowTimeNanosActual=250, openCountActual=5, bindingsProvidedActual=25, lastRowTimeNanosActual=16.3K, closeCountActual=5, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=228, avgNextNanosActual=27) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=33, joinRightIteratorsCreatedActual=68, joinRightBindingsConsumedActual=33, inputRowsActual=101, rowsDroppedActual=68, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=33) [right] +│ ║ ║ │ ├── Filter (resultSizeActual=68, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.80, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=85, rowsDroppedActual=17, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=85, exprFalseCountActual=17, exprTrueCountActual=68, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) +│ ║ ║ │ │ ║ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ ║ Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=85, joinRightIteratorsCreatedActual=17, joinRightBindingsConsumedActual=85, inputRowsActual=102, rowsDroppedActual=17, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=17.9M, stddevActual=4.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=85) +│ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=17, joinRightIteratorsCreatedActual=36, joinRightBindingsConsumedActual=17, inputRowsActual=53, rowsDroppedActual=36, expansionFactorActual=0.32, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=17) [left] +│ ║ ║ │ │ │ ╠══ Filter (resultSizeActual=36, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=45, rowsDroppedActual=9, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ ║ │ │ │ ║ ├── Compare (!=) (exprEvalCountActual=45, exprFalseCountActual=9, exprTrueCountActual=36, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=64.7M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=45) +│ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=9, joinRightIteratorsCreatedActual=27, joinRightBindingsConsumedActual=9, inputRowsActual=36, rowsDroppedActual=27, expansionFactorActual=0.25, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9) [left] +│ ║ ║ │ │ │ ║ ║ ├── Filter (resultSizeActual=27, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.60, filterSelectivitySource=learned_filter, inputRowsActual=45, rowsDroppedActual=18, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] +│ ║ ║ │ │ │ ║ ║ │ ╠══ And (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=45, exprFalseCountActual=9, exprTrueCountActual=36, exprEvalTimeNanosActual=2.6K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) (exprEvalCountActual=36, exprFalseCountActual=9, exprTrueCountActual=27, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=63.4M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=45, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) +│ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=29, hasNextTrueCountActual=9, hasNextTimeNanosActual=13.3K, nextCallCountActual=9, nextTimeNanosActual=1.3K, sourceRowsScannedActual=29, sourceRowsMatchedActual=9, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=875, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=6.1K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=461, avgNextNanosActual=153, indexHitRateActual=0.31) [left] +│ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=6.7K, nextCallCountActual=45, nextTimeNanosActual=750, firstRowTimeNanosActual=208, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=4.3K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=125, avgNextNanosActual=17) [right] +│ ║ ║ │ │ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=36, hasNextTrueCountActual=9, hasNextTimeNanosActual=10.2K, nextCallCountActual=9, nextTimeNanosActual=417, sourceRowsScannedActual=36, sourceRowsMatchedActual=9, sourceRowsFilteredActual=27, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=27, openCountActual=27, lastRowTimeNanosActual=333, closeCountActual=27, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=27, nextPerHasNextRatioActual=0.25, avgHasNextNanosActual=286, avgNextNanosActual=46, indexHitRateActual=0.25) [right] +│ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=6.4K, nextCallCountActual=45, nextTimeNanosActual=792, firstRowTimeNanosActual=250, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=53.3K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=119, avgNextNanosActual=18) [right] +│ ║ ║ │ │ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=17, hasNextCallCountActual=53, hasNextTrueCountActual=17, hasNextTimeNanosActual=14.5K, nextCallCountActual=17, nextTimeNanosActual=793, sourceRowsScannedActual=53, sourceRowsMatchedActual=17, sourceRowsFilteredActual=36, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=36, openCountActual=36, lastRowTimeNanosActual=375, closeCountActual=36, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=36, nextPerHasNextRatioActual=0.32, avgHasNextNanosActual=275, avgNextNanosActual=47, indexHitRateActual=0.32) [right] +│ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=85, hasNextCallCountActual=102, hasNextTrueCountActual=85, hasNextTimeNanosActual=12.1K, nextCallCountActual=85, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=250, openCountActual=17, bindingsProvidedActual=85, lastRowTimeNanosActual=6.2K, closeCountActual=17, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=17, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=119, avgNextNanosActual=19) [right] +│ ║ ║ │ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=101, hasNextTrueCountActual=33, hasNextTimeNanosActual=26.7K, nextCallCountActual=33, nextTimeNanosActual=1.4K, sourceRowsScannedActual=101, sourceRowsMatchedActual=33, sourceRowsFilteredActual=68, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=68, openCountActual=68, lastRowTimeNanosActual=1.6K, closeCountActual=68, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=68, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=264, avgNextNanosActual=43, indexHitRateActual=0.33) [right] +│ ║ ║ │ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=18, hasNextCallCountActual=51, hasNextTrueCountActual=18, hasNextTimeNanosActual=12.1K, nextCallCountActual=18, nextTimeNanosActual=1.1K, sourceRowsScannedActual=51, sourceRowsMatchedActual=18, sourceRowsFilteredActual=33, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=33, openCountActual=33, lastRowTimeNanosActual=375, closeCountActual=33, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=239, avgNextNanosActual=62, indexHitRateActual=0.35) [right] +│ ║ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=9.2K, nextCallCountActual=18, nextTimeNanosActual=1.3K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=6.9K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=257, avgNextNanosActual=77, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="user7") +│ ║ │ ║ ValueConstant (value="user8") +│ ║ │ ║ ValueConstant (value="user9") +│ ║ │ ║ ValueConstant (value="user10") +│ ║ │ ║ ValueConstant (value="user11") +│ ║ │ ╚══ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="user7") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="user8") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) +│ ║ │ s: Var (name=a) (bindingState=bound) +│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] +│ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) +│ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) +│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] +│ ║ ║ │ ├── Filter (plannedFilterPassRatio=0.80, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] +│ ║ ║ │ │ ╠══ Compare (!=) +│ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) +│ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) +│ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) +│ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] +│ ║ ║ │ │ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] +│ ║ ║ │ │ │ ║ ├── Compare (!=) +│ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) +│ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) +│ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] +│ ║ ║ │ │ │ ║ ║ ├── Filter (plannedFilterPassRatio=0.60, filterSelectivitySource=learned_filter) [left] +│ ║ ║ │ │ │ ║ ║ │ ╠══ And +│ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) +│ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] +│ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) +│ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) +│ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) +│ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] +│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ │ s: Var (name=d) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ │ o: Var (name=e) (bindingState=bound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ s: Var (name=e) (bindingState=bound) +│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ o: Var (name=a) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=e) (bindingState=bound) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=a) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=a) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES (?a ?b) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?a != ?b) +?a ?b . +VALUES ?c { } +FILTER ((?a != ?c) && (?b != ?c)) +?b ?c . +VALUES ?d { } +FILTER (?c != ?d) +?c ?d . +VALUES ?e { } +FILTER (?d != ?e) +?d ?e . +?e ?a . +OPTIONAL { +?e ?optName . +} +FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} + + +Theme: LIBRARY z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 1465 ms +Warmup execution 1/1 +Fastest execution time: 775 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=1388.6M, openCountActual=1, lastRowTimeNanosActual=1388.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=1.4K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=1388.6M, openCountActual=1, lastRowTimeNanosActual=1388.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=833) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=770.9K, firstRowTimeNanosActual=1388.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1388.6M, maxGroupSizeActual=770.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=770.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=770.9K, rowsDroppedActual=770.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=625) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=770.9K, hasNextCallCountActual=770.9K, hasNextTrueCountActual=770.9K, hasNextTimeNanosActual=1236.7M, nextCallCountActual=770.9K, nextTimeNanosActual=10.9M, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=770.9K, firstRowTimeNanosActual=27.2K, leftRowsWithMatchActual=386.3K, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=1.1M, rowsDroppedActual=386.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=14, leftRowsProbedActual=386.3K, rightRowsScannedActual=770.9K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=753.3M, nextCallCountActual=386.3K, nextTimeNanosActual=5.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.2K, exprEvalCountActual=386.3K, openCountActual=1, exprTrueCountActual=386.3K, lastRowTimeNanosActual=1388.5M, closeCountActual=1, exprEvalTimeNanosActual=42.2M, inputRowsActual=386.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.9K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=15.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optBranch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=683.8M, nextCallCountActual=386.3K, nextTimeNanosActual=5.5M, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=386.3K, firstRowTimeNanosActual=24.4K, leftRowsWithMatchActual=128.8K, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=515.1K, rowsDroppedActual=128.8K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, leftRowsProbedActual=128.8K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=13.9M, nextCallCountActual=128.8K, nextTimeNanosActual=8.5M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=10.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=66, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=386.3K, hasNextCallCountActual=1.0M, hasNextTrueCountActual=901.3K, hasNextTimeNanosActual=551.2M, nextCallCountActual=386.3K, nextTimeNanosActual=17.5M, firstRowTimeNanosActual=1.2K, openCountActual=128.8K, lastRowTimeNanosActual=9.1K, closeCountActual=128.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=535, avgNextNanosActual=45) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=515.1K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=80.1M, nextCallCountActual=386.3K, nextTimeNanosActual=22.4M, sourceRowsScannedActual=515.1K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=128.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=583, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=8.9K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=156, avgNextNanosActual=58, indexHitRateActual=0.75) [left] +│ ║ │ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=166.9M, nextCallCountActual=386.3K, nextTimeNanosActual=21.2M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=1.9K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=216, avgNextNanosActual=55, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optBranch) (hasNextFalseCountActual=0) +│ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=257.2K, resultSizeActual=770.9K, hasNextCallCountActual=1.9M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=202.8M, nextCallCountActual=770.9K, nextTimeNanosActual=34.9M, sourceRowsScannedActual=1.1M, sourceRowsMatchedActual=770.9K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=833, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=105, avgNextNanosActual=45, indexHitRateActual=0.67) [right] +│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optBranch) (bindingState=bound) +│ ║ │ ║ Var (name=book) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] +│ ║ │ │ s: Var (name=book) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ s: Var (name=book) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=copy) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optBranch) +│ ║ │ Var (name=branch) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) (bindingState=bound) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=book) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=book) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +OPTIONAL { +?book ?copy . +?copy ?branch . +BIND(?branch AS ?optBranch) +} +FILTER (?optBranch != ?book) +OPTIONAL { +?book ?author . +} +} + + +Theme: LIBRARY z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 324 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 201 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=306.8M, openCountActual=1, lastRowTimeNanosActual=306.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=2.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=306.8M, openCountActual=1, lastRowTimeNanosActual=306.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=4, firstRowTimeNanosActual=306.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=306.8M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=541) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=306.7M, nextCallCountActual=4, nextTimeNanosActual=83, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.2K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=306.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=51.1M, avgNextNanosActual=21, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=11.0M, nextCallCountActual=4, nextTimeNanosActual=291, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=10.1K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=54.4K, exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=306.7M, closeCountActual=1, exprEvalTimeNanosActual=4.6M, inputRowsActual=10.1K, rowsDroppedActual=10.1K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=2.2M, avgNextNanosActual=73, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=3.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=3.0M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=425.6K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, resultSizeActual=10.1K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=5.0K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.21, stddevActual=0.46, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=5.1K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.3K, nextCallCountActual=2, nextTimeNanosActual=917, firstRowTimeNanosActual=32.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=44.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=445, avgNextNanosActual=459) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K, resultSizeActual=5.0K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=5.0K, inputRowsActual=10.1K, rowsDroppedActual=5.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16, stddevActual=3.96, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=5.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.1K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=447.2K, nextCallCountActual=5.0K, nextTimeNanosActual=228.5K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=11.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=88, avgNextNanosActual=45, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5.0K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=2.1M, nextCallCountActual=5.0K, nextTimeNanosActual=257.2K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=5.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=1.6K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, inputRowsActual=257.7K, rowsDroppedActual=257.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=107.9M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=81.8M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=11.4M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, resultSizeActual=257.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=128.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=128.9K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=625, nextCallCountActual=2, nextTimeNanosActual=500, firstRowTimeNanosActual=11.1M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=11.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=208, avgNextNanosActual=250) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=128.8K, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=128.8K, inputRowsActual=257.7K, rowsDroppedActual=128.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=128.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=130.6K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=11.7M, nextCallCountActual=128.8K, nextTimeNanosActual=5.5M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=11.1M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=306.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=43, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=133.3K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=67.6M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=1.4K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.9K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=500, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=490, indexHitRateActual=0) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Member 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Member 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ o: Var (name=copy) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +UNION +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity ?name . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +OPTIONAL { +?entity ?copy . +} +} + + +Theme: LIBRARY z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 242 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 123 ms + +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=5.7K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "author" (hasNextFalseCountActual=0) +║ ProjectionElem "bookCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=4.3K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.4K) +├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=4.2K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.4K) +│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=3.6K, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=227.3M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=227.3M, closeCountActual=1, exprEvalTimeNanosActual=4.9K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.2K, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=4.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) +│ ║ └── Group (author) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=541, aggregateEvalCountActual=30, firstRowTimeNanosActual=227.3M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=227.3M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=5.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=15, rowsDroppedActual=12, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=180) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=15, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=227.2M, nextCallCountActual=15, nextTimeNanosActual=459, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=15, firstRowTimeNanosActual=54.2K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=227.2M, closeCountActual=1, maxRightRowsPerLeftActual=5, inputRowsActual=18, rowsDroppedActual=3, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=67.7M, stddevActual=8.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.88, avgHasNextNanosActual=13.4M, avgNextNanosActual=31, leftRowsProbedActual=3, rightRowsScannedActual=15, avgRightRowsPerLeftActual=5.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K, resultSizeActual=3, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=3, inputRowsActual=40.2K, rowsDroppedActual=40.2K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=118.5K, stddevActual=344, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=12.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=227.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, resultSizeActual=3, hasNextCallCountActual=40.2K, hasNextTrueCountActual=3, hasNextTimeNanosActual=135.1M, nextCallCountActual=3, nextTimeNanosActual=83, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=40.2K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.6K, exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, openCountActual=40.2K, exprTrueCountActual=3, lastRowTimeNanosActual=3.2K, closeCountActual=40.2K, exprEvalTimeNanosActual=31.8M, inputRowsActual=40.2K, rowsDroppedActual=40.2K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, exprTrueCountActual=3, exprEvalTimeNanosActual=29.2M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Author 1") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Author 2") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Author 3") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=40.2K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=19.0M, nextCallCountActual=40.2K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=1.4K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=257.2K, resultSizeActual=15, hasNextCallCountActual=42, hasNextTrueCountActual=39, hasNextTimeNanosActual=5.0K, nextCallCountActual=15, nextTimeNanosActual=666, sourceRowsScannedActual=18, sourceRowsMatchedActual=15, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=625, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.2K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=119, avgNextNanosActual=44, indexHitRateActual=0.83) [right] +│ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (bookCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (bookCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "bookCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (author) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=author) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) +│ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=authorName) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Author 1") +│ ║ │ │ ValueConstant (value="Author 2") +│ ║ │ │ ValueConstant (value="Author 3") +│ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) +│ ║ │ s: Var (name=author) (bindingState=bound) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ o: Var (name=authorName) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) (bindingState=unbound) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) (bindingState=bound) +│ ║ GroupElem (_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=book) (bindingState=bound) +│ ║ GroupElem (bookCount) +│ ║ Count (Distinct) +│ ║ Var (name=book) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=book) (bindingState=unbound) +└── ExtensionElem (bookCount) +Count (Distinct) +Var (name=book) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { +?author a . +?author ?authorName . +FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) +OPTIONAL { +?book ?author . +} +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) + + +Theme: LIBRARY z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 92 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 54 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=82.3M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=709, firstRowTimeNanosActual=82.3M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=709) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.9K, firstRowTimeNanosActual=82.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=82.3M, maxGroupSizeActual=7.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=8.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.9K, rowsDroppedActual=7.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=542) +│ ╠══ Difference (resultSizeActual=7.9K, hasNextCallCountActual=7.9K, hasNextTrueCountActual=7.9K, hasNextTimeNanosActual=77.7M, nextCallCountActual=7.9K, nextTimeNanosActual=91.6K, firstRowTimeNanosActual=39.8M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.2K, rowsDroppedActual=3.3K, selectivityActual=0.71, expansionFactorActual=0.71, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.8K, avgNextNanosActual=12, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=1.1K, overlapRowsActual=2.1K) +│ ║ ├── Filter (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=33.1M, nextCallCountActual=10.1K, nextTimeNanosActual=127.9K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.5K, exprEvalCountActual=10.1K, openCountActual=1, exprTrueCountActual=10.1K, lastRowTimeNanosActual=82.3M, closeCountActual=1, exprEvalTimeNanosActual=6.2M, inputRowsActual=10.1K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=10.1K, exprTrueCountActual=10.1K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=26.1M, nextCallCountActual=10.1K, nextTimeNanosActual=107.7K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, firstRowTimeNanosActual=48.2K, leftRowsWithMatchActual=10.1K, openCountActual=1, lastRowTimeNanosActual=82.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=11, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=20.3K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=20.3K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=579.3K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=23.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=82.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=57, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.4M, nextCallCountActual=10.1K, nextTimeNanosActual=521.8K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=541, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=7.2M, nextCallCountActual=10.1K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=500, openCountActual=10.1K, lastRowTimeNanosActual=2.7K, closeCountActual=10.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=359, avgNextNanosActual=148) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=649.6K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=2.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233, avgNextNanosActual=64, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optDue) (hasNextFalseCountActual=0) +│ ║ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=38.4M, nextCallCountActual=1.1K, nextTimeNanosActual=15.8K, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=44.2K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=33.8M, exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=39.2M, closeCountActual=1, exprEvalTimeNanosActual=31.5M, inputRowsActual=45.3K, rowsDroppedActual=44.2K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=34.6K, avgNextNanosActual=14, filterRejectRateActual=0.98) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=29.0M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=24.2M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=20.5M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="member 1") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.5M, nextCallCountActual=45.3K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=39.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=78, avgNextNanosActual=29, indexHitRateActual=1.00) +│ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optDue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="2024-01-10"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ ║ s: Var (name=loan) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ ║ o: Var (name=due) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optDue) +│ ║ │ Var (name=due) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="member 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=member) (bindingState=unbound) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan ?member . +?loan a . +OPTIONAL { +?loan ?due . +BIND(?due AS ?optDue) +} +FILTER (?optDue > "2024-01-10"^^) +MINUS { +?member ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) +} +} + + +Theme: LIBRARY z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 848 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 447 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.1M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=836.1M, openCountActual=1, lastRowTimeNanosActual=836.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.1M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.1M, nextCallCountActual=1, nextTimeNanosActual=958, firstRowTimeNanosActual=836.1M, openCountActual=1, lastRowTimeNanosActual=836.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.1M, avgNextNanosActual=958) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.0M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=836.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=836.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.0M, avgNextNanosActual=542, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=836.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=836.0M) +│ ║ ├── Exists (hasNextFalseCountActual=0) +│ ║ │ StatementPattern (resultSizeEstimate=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=836.0M, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=836.0M, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=0, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, inputRowsActual=128.8K, rowsDroppedActual=128.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=15.1M, nextCallCountActual=128.8K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=47, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=133.3K, resultSizeActual=0, hasNextCallCountActual=128.8K, hasNextTimeNanosActual=500.3M, sourceRowsScannedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], filterSelectivitySource=cardinality, plannedLookupComponents=[S, O, P], exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=3.8K, closeCountActual=128.8K, exprEvalTimeNanosActual=105.6M, inputRowsActual=128.8K, rowsDroppedActual=128.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.9K, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=97.6M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=82.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Book 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Book 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=76.8M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=1.5K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=298, avgNextNanosActual=39, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=title) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ s: Var (name=book) (bindingState=bound) +│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=book) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], filterSelectivitySource=cardinality, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=title) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Book 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=title) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Book 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) +│ ║ ║ s: Var (name=book) (bindingState=bound) +│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ ║ o: Var (name=title) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] +│ ║ s: Var (name=book) (bindingState=bound) +│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ o: Var (name=author) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=book) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=book) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { +?book a . +?book ?title . +FILTER ((?title = "Book 1") || (?title = "Book 2")) +OPTIONAL { +?book ?author . +} +FILTER EXISTS { +?book ?copy . +} +} + + +Theme: LIBRARY z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 66 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 35 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=61.6M, openCountActual=1, lastRowTimeNanosActual=61.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=61.6M, openCountActual=1, lastRowTimeNanosActual=61.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=217, firstRowTimeNanosActual=61.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=61.6M, maxGroupSizeActual=217, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=217, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=217, rowsDroppedActual=216, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=708) +│ ╠══ Filter (resultSizeActual=217, hasNextCallCountActual=219, hasNextTrueCountActual=218, hasNextTimeNanosActual=61.3M, nextCallCountActual=217, nextTimeNanosActual=2.7K, sourceRowsScannedActual=217, sourceRowsMatchedActual=217, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=845.5K, exprEvalCountActual=217, openCountActual=1, exprTrueCountActual=217, lastRowTimeNanosActual=61.6M, closeCountActual=1, exprEvalTimeNanosActual=924.3K, inputRowsActual=217, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=280.0K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Not (exprEvalCountActual=217, exprTrueCountActual=217, exprEvalTimeNanosActual=907.9K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=890.1K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=217, hasNextTimeNanosActual=549.8K, sourceRowsScannedActual=217, sourceRowsFilteredActual=217, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=217, exprFalseCountActual=217, openCountActual=217, lastRowTimeNanosActual=2.7K, closeCountActual=217, exprEvalTimeNanosActual=107.1K, inputRowsActual=217, rowsDroppedActual=217, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.5K, filterRejectRateActual=1.00) +│ ║ │ ╠══ Compare (<) (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=97.8K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=217, hasNextCallCountActual=434, hasNextTrueCountActual=217, hasNextTimeNanosActual=98.5K, nextCallCountActual=217, nextTimeNanosActual=7.9K, sourceRowsScannedActual=434, sourceRowsMatchedActual=217, sourceRowsFilteredActual=217, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=217, openCountActual=217, lastRowTimeNanosActual=1.5K, closeCountActual=217, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M, resultSizeActual=217, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=217, inputRowsActual=10.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.02, sampleCountActual=2, varianceActual=0.46, stddevActual=0.68, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=217) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=10.1K, joinType=Cartesian product, inputRowsActual=10.1K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.06, stddevActual=0.25, confidenceScoreActual=0.62, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=10.2K, joinOutputPerLeftActual=10.2K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=17.2K, nextCallCountActual=1, nextTimeNanosActual=5.2K, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=7.8K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=61.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.6K, avgNextNanosActual=5.3K) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=15.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.5M, nextCallCountActual=10.1K, nextTimeNanosActual=892.0K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=due) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=10.2K) +│ ║ ║ Var (name=loan) +│ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ ║ Var (name=due) +│ ║ ║ , firstRowTimeNanosActual=12.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=61.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=156, avgNextNanosActual=88, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=511, resultSizeActual=217, hasNextCallCountActual=10.3K, hasNextTrueCountActual=217, hasNextTimeNanosActual=34.3M, nextCallCountActual=217, nextTimeNanosActual=3.8K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=217, sourceRowsFilteredActual=9.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=917, exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, openCountActual=10.1K, exprTrueCountActual=217, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, exprEvalTimeNanosActual=6.5M, inputRowsActual=10.1K, rowsDroppedActual=9.9K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.02, avgHasNextNanosActual=3.3K, avgNextNanosActual=18, filterRejectRateActual=0.98) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, exprTrueCountActual=217, exprEvalTimeNanosActual=5.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=loanDate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=10.1K, exprEvalTimeNanosActual=231.6K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2024-01-02"^^) (exprEvalCountActual=10.0K, exprEvalTimeNanosActual=260.4K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.5M, nextCallCountActual=10.1K, nextTimeNanosActual=384.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=1.1K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=272, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=loanDate) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=due) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ o: Var (name=due) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=due) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=10.2K) +│ ║ ║ Var (name=loan) +│ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ ║ Var (name=due) +│ ║ ║ ) +│ ║ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=511, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=loanDate) (bindingState=bound) +│ ║ │ ValueConstant (value="2024-01-01"^^) +│ ║ │ ValueConstant (value="2024-01-02"^^) +│ ║ └── StatementPattern (resultSizeEstimate=10.2K) +│ ║ s: Var (name=loan) (bindingState=bound) +│ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) +│ ║ o: Var (name=loanDate) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +VALUES ?threshold { "2024-01-01"^^ } +?loan a . +?loan ?loanDate . +FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) +FILTER NOT EXISTS { +?loan ?due . +FILTER (?due < ?threshold) +} +} + + +Theme: LIBRARY z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 30007 ms + +Timed out while retrieving explanation! Explanation may be incomplete! +You can change the timeout by setting .setMaxExecutionTime(...) on your query. + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "member" (hasNextFalseCountActual=0) +║ ProjectionElem "loanCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +│ ║ ├── Compare (>) (hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.4K, hasNextFalseCountActual=0) +│ ║ └── Group (member) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29998.6M, aggregateEvalCountActual=54.0M, groupsCreatedActual=5.0K, openCountActual=1, lastRowTimeNanosActual=29998.6M, maxGroupSizeActual=10.1K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=5.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=27.0M, rowsDroppedActual=27.0M, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +│ ║ Filter (resultSizeActual=27.0M, hasNextCallCountActual=27.0M, hasNextTrueCountActual=27.0M, hasNextTimeNanosActual=15679.6M, nextCallCountActual=27.0M, nextTimeNanosActual=306.4M, sourceRowsScannedActual=27.0M, sourceRowsMatchedActual=27.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=74.1K, exprEvalCountActual=27.0M, openCountActual=1, exprTrueCountActual=27.0M, lastRowTimeNanosActual=29997.6M, closeCountActual=1, exprEvalTimeNanosActual=3264.2M, inputRowsActual=27.0M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=581, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=27.0M, exprTrueCountActual=27.0M, exprEvalTimeNanosActual=1277.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=27.0M, hasNextCallCountActual=27.0M, hasNextTrueCountActual=27.0M, hasNextTimeNanosActual=10018.4M, nextCallCountActual=27.0M, nextTimeNanosActual=350.3M, joinRightIteratorsCreatedActual=12.8K, joinLeftBindingsConsumedActual=12.8K, joinRightBindingsConsumedActual=27.0M, firstRowTimeNanosActual=21.4K, leftRowsWithMatchActual=12.8K, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, maxRightRowsPerLeftActual=10.1K, inputRowsActual=27.0M, rowsDroppedActual=12.8K, expansionFactorActual=1.00, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=371, avgNextNanosActual=13, leftRowsProbedActual=12.8K, rightRowsScannedActual=27.0M, avgRightRowsPerLeftActual=2.1K, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.1K, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=12.8K, hasNextCallCountActual=12.8K, hasNextTrueCountActual=12.8K, hasNextTimeNanosActual=16.8M, nextCallCountActual=12.8K, nextTimeNanosActual=322.0K, firstRowTimeNanosActual=17.7K, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, sampleCountActual=2, varianceActual=0.20, stddevActual=0.45, confidenceScoreActual=0.58, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=25, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=2.6K, leftRowsOutputContributionActual=10.1K, rightRowsOutputContributionActual=2.6K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=569.7K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=13.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=39.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=107, avgNextNanosActual=56, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.9M, nextCallCountActual=10.1K, nextTimeNanosActual=548.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=459, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=291, avgNextNanosActual=54, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.1K, resultSizeActual=2.6K, hasNextCallCountActual=2.6K, hasNextTrueCountActual=2.6K, hasNextTimeNanosActual=1.4M, nextCallCountActual=2.6K, nextTimeNanosActual=329.0K, sourceRowsScannedActual=2.6K, sourceRowsMatchedActual=2.6K, plannedIndexName=ospc, firstRowTimeNanosActual=39.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=564, avgNextNanosActual=124, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=27.0M, hasNextCallCountActual=81.0M, hasNextTrueCountActual=80.9M, hasNextTimeNanosActual=5461.0M, nextCallCountActual=27.0M, nextTimeNanosActual=2403.3M, firstRowTimeNanosActual=1.3K, openCountActual=12.8K, lastRowTimeNanosActual=5.4M, closeCountActual=12.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12.8K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=67, avgNextNanosActual=89) [right] +│ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=27.0M, hasNextCallCountActual=81.0M, hasNextTrueCountActual=80.9M, hasNextTimeNanosActual=3327.1M, nextCallCountActual=27.0M, nextTimeNanosActual=1122.4M, sourceRowsScannedActual=27.0M, sourceRowsMatchedActual=27.0M, sourceRowsFilteredActual=12.8K, plannedIndexName=psoc, firstRowTimeNanosActual=1.2K, indexLookupCountActual=12.8K, openCountActual=12.8K, lastRowTimeNanosActual=5.4M, closeCountActual=12.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12.8K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=41, avgNextNanosActual=42, indexHitRateActual=1.00) +│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optCopy) (hasNextFalseCountActual=0) +│ ║ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (loanCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (member) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optCopy) (bindingState=bound) +│ ║ │ Var (name=member) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) +│ ║ ║ s: Var (name=member) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ └── ExtensionElem (optCopy) +│ ║ Var (name=copy) (bindingState=bound) +│ ║ GroupElem (_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567) +│ ║ Count +│ ║ Var (name=loan) (bindingState=bound) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567) +│ Count +│ Var (name=loan) (bindingState=unbound) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ +?loan ?member . +?loan a . +} +UNION +{ +?member a . +} +OPTIONAL { +?loan ?copy . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) + + +Theme: LIBRARY z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 3469 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=3450.3M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=5.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=3450.3M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=2.9K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, aggregateEvalCountActual=77.2K, firstRowTimeNanosActual=3450.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3450.3M, maxGroupSizeActual=77.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=77.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=77.2K, rowsDroppedActual=77.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=1.2K) +│ ╠══ Difference (resultSizeActual=77.2K, hasNextCallCountActual=77.2K, hasNextTrueCountActual=77.2K, hasNextTimeNanosActual=3424.0M, nextCallCountActual=77.2K, nextTimeNanosActual=1.5M, firstRowTimeNanosActual=285.5M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, inputRowsActual=231.5K, rowsDroppedActual=154.2K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=44.3K, avgNextNanosActual=20, leftRowsConsumedActual=154.4K, rightRowsConsumedActual=77.1K, overlapRowsActual=77.1K) +│ ║ ├── Filter (resultSizeActual=154.4K, hasNextCallCountActual=154.4K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=2974.6M, nextCallCountActual=154.4K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=154.4K, sourceRowsMatchedActual=154.4K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=84.3K, exprEvalCountActual=154.4K, openCountActual=1, exprTrueCountActual=154.4K, lastRowTimeNanosActual=3450.2M, closeCountActual=1, exprEvalTimeNanosActual=142.5M, inputRowsActual=154.4K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.3K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=154.4K, exprTrueCountActual=154.4K, exprEvalTimeNanosActual=133.4M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=154.4K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=54.5M, sourceRowsScannedActual=154.4K, sourceRowsMatchedActual=154.4K, plannedIndexName=spoc, indexLookupCountActual=154.4K, openCountActual=154.4K, lastRowTimeNanosActual=417, closeCountActual=154.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=154.4K, joinRightIteratorsCreatedActual=386.3K, joinRightBindingsConsumedActual=154.4K, inputRowsActual=540.7K, rowsDroppedActual=386.3K, expansionFactorActual=0.29, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=154.4K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=389.0K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=48.6M, nextCallCountActual=386.3K, nextTimeNanosActual=17.0M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ │ ║ Var (name=copy) +│ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ │ ║ , firstRowTimeNanosActual=23.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3450.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=126, avgNextNanosActual=44, indexHitRateActual=1.00) +│ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=202.7M, nextCallCountActual=386.3K, nextTimeNanosActual=14.5M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=6.3K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=262, avgNextNanosActual=38, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=0, resultSizeActual=154.4K, hasNextCallCountActual=540.7K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=1336.7M, nextCallCountActual=154.4K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=154.4K, sourceRowsFilteredActual=231.9K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=386.3K, exprFalseCountActual=231.9K, openCountActual=386.3K, exprTrueCountActual=154.4K, lastRowTimeNanosActual=3.4K, closeCountActual=386.3K, exprEvalTimeNanosActual=93.3M, inputRowsActual=386.3K, rowsDroppedActual=231.9K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.29, avgHasNextNanosActual=2.5K, avgNextNanosActual=13, filterRejectRateActual=0.60) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=386.3K, exprFalseCountActual=231.9K, exprTrueCountActual=154.4K, shortCircuitCountActual=77.1K, exprEvalTimeNanosActual=69.4M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Branch 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=309.2K, exprFalseCountActual=231.9K, exprTrueCountActual=77.2K, exprEvalTimeNanosActual=14.9M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Branch 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=181.0M, nextCallCountActual=386.3K, nextTimeNanosActual=16.7M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=1.0K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=43, indexHitRateActual=0.50) +│ ║ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=branchName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=77.1K, hasNextCallCountActual=77.1K, hasNextTrueCountActual=77.1K, hasNextTimeNanosActual=155.0M, nextCallCountActual=77.1K, nextTimeNanosActual=731.4K, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=77.1K, sourceRowsFilteredActual=309.2K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.1K, exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, openCountActual=1, exprTrueCountActual=77.1K, lastRowTimeNanosActual=200.7M, closeCountActual=1, exprEvalTimeNanosActual=93.8M, inputRowsActual=386.3K, rowsDroppedActual=309.2K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=9.49, filterRejectRateActual=0.80) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=70.2M, hasNextFalseCountActual=0) +│ ║ ║ ├── Str (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=21.1M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="branch/0") (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=26.6M, nextCallCountActual=386.3K, nextTimeNanosActual=12.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=200.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=69, avgNextNanosActual=32, indexHitRateActual=1.00) +│ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ ║ s: Var (name=copy) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ │ ║ Var (name=copy) +│ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ │ ║ ) +│ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=copy) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=0, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=branchName) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Branch 0") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=branchName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="Branch 1") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ │ s: Var (name=branch) (bindingState=bound) +│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ o: Var (name=branchName) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=branch) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="branch/0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) +│ ║ s: Var (name=copy) (bindingState=unbound) +│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ o: Var (name=branch) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=copy) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=copy) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { +?copy ?branch . +?copy a . +?branch ?branchName . +FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) +FILTER EXISTS { +?copy a . +} +MINUS { +?copy ?branch . +FILTER (CONTAINS(STR(?branch), "branch/0")) +} +} + + +Theme: LIBRARY z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 171 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 117 ms + +Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=317) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "author" (hasNextFalseCountActual=0) +║ ProjectionElem "loanCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=179) +├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=108) +│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=375, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=124.4M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=124.5M, closeCountActual=1, exprEvalTimeNanosActual=6.4K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=38, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=5.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.7K, hasNextFalseCountActual=0) +│ ║ └── Group (author) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=709, aggregateEvalCountActual=20, firstRowTimeNanosActual=124.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=124.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=15, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=71) +│ ║ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=208, sourceRowsScannedActual=20.2K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=20.2K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=104.0K, exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=124.4M, closeCountActual=1, exprEvalTimeNanosActual=9.8M, inputRowsActual=20.2K, rowsDroppedActual=20.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=10.4M, avgNextNanosActual=21, filterRejectRateActual=1.00) +│ ║ ├── ListMemberOperator (exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, exprTrueCountActual=10, exprEvalTimeNanosActual=7.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Member 1") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=592.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Member 2") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=672.0K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=794.3K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20.2K, hasNextCallCountActual=20.2K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=113.1M, nextCallCountActual=20.2K, nextTimeNanosActual=177.9K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, firstRowTimeNanosActual=28.4K, leftRowsWithMatchActual=20.2K, openCountActual=1, lastRowTimeNanosActual=124.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=30, stddevActual=5.46, confidenceScoreActual=0.24, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=8.79, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=30.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.01, stddevActual=0.11, confidenceScoreActual=0.64, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20.2K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=38, stddevActual=6.16, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=342, stddevActual=18, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=343, stddevActual=19, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.4M, nextCallCountActual=10.1K, nextTimeNanosActual=546.4K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=7.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=124.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=144, avgNextNanosActual=54, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.5M, nextCallCountActual=10.1K, nextTimeNanosActual=541.9K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=10.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=275, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=13.1M, nextCallCountActual=10.1K, nextTimeNanosActual=578.5K, sourceRowsScannedActual=30.7K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=20.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O], firstRowTimeNanosActual=625, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=9.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=650, avgNextNanosActual=57, indexHitRateActual=0.33) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=12.6M, nextCallCountActual=10.1K, nextTimeNanosActual=578.3K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.2K, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=8.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=620, avgNextNanosActual=57, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=135.9K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=476.3K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=6.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=47, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=266.2K, resultSizeActual=20.2K, hasNextCallCountActual=30.3K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=5.2M, nextCallCountActual=20.2K, nextTimeNanosActual=987.6K, sourceRowsScannedActual=30.3K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=5.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=173, avgNextNanosActual=49, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=265.2K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=8.4M, nextCallCountActual=20.2K, nextTimeNanosActual=851.0K, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=375, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1.8K, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=8.9M, nextCallCountActual=20.2K, nextTimeNanosActual=980.9K, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1000, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=48, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (loanCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "author" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (author) +│ ║ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="Member 1") +│ ║ │ ValueConstant (value="Member 2") +│ ║ │ ValueConstant (value="Member 3") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) +│ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=book) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ ║ │ o: Var (name=author) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=loan) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] +│ ║ s: Var (name=member) (bindingState=bound) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ GroupElem (_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count +│ ║ Var (name=loan) (bindingState=bound) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count +│ Var (name=loan) (bindingState=unbound) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +?loan ?member . +?loan ?copy . +?book ?copy . +?copy ?branch . +?book a . +?book ?author . +?loan a . +OPTIONAL { +?member ?optName . +} +FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) + + +Theme: LIBRARY z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 163 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 107 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=110.0M, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=110.0M, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=2, firstRowTimeNanosActual=110.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=110.0M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=17, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=708) +│ ╠══ Filter (resultSizeActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=2, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=5.9K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTitle) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=28.2K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=27.4K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=2, hasNextTimeNanosActual=18.5K, sourceRowsScannedActual=2, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=2, exprFalseCountActual=2, openCountActual=2, lastRowTimeNanosActual=9.1K, closeCountActual=2, exprEvalTimeNanosActual=8.3K, inputRowsActual=2, rowsDroppedActual=2, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.3K, filterRejectRateActual=1.00) +│ ║ │ ├── Compare (<) (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=8.0K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=4.8K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=104, indexHitRateActual=0.50) +│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.9M, nextCallCountActual=2, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=93.1K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=9.223372036854776E17M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=36.7M, avgNextNanosActual=104, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=9.223372036854776E17M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.866511454927122E15M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.776968444044E11M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M, resultSizeActual=2, joinRightIteratorsCreatedActual=30, joinRightBindingsConsumedActual=2, inputRowsActual=32, rowsDroppedActual=30, expansionFactorActual=0.06, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3792528.1M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M, resultSizeActual=30, joinRightIteratorsCreatedActual=10, joinRightBindingsConsumedActual=30, inputRowsActual=40, rowsDroppedActual=10, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=8.665262962E8M, stddevActual=29.4M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=30) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M, resultSizeActual=10, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=10, inputRowsActual=12, rowsDroppedActual=2, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=153.1M, stddevActual=12.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.2K, nextCallCountActual=2, nextTimeNanosActual=1.0K, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=6.3K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=110.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=750, avgNextNanosActual=521) [left] +│ ║ ║ │ ║ │ ║ │ ║ └── Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.8M, nextCallCountActual=2, nextTimeNanosActual=375, sourceRowsScannedActual=90.6K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=90.6K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=18.9K, exprEvalCountActual=90.6K, predicateErrorCountActual=90.6K, openCountActual=2, exprTrueCountActual=2, lastRowTimeNanosActual=55.5M, closeCountActual=2, exprEvalTimeNanosActual=85.9M, inputRowsActual=90.6K, rowsDroppedActual=90.6K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=27.5M, avgNextNanosActual=188, filterRejectRateActual=1.00) [right] +│ ║ ║ │ ║ │ ║ │ ║ ╠══ Or (exprEvalCountActual=90.6K, exprTrueCountActual=2, exprErrorCountActual=90.6K, exprEvalTimeNanosActual=74.6M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) (exprEvalCountActual=90.6K, exprErrorCountActual=90.6K, exprEvalTimeNanosActual=9.2M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) (exprEvalCountActual=90.6K, exprFalseCountActual=90.6K, exprTrueCountActual=2, exprEvalTimeNanosActual=46.5M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=91.6K, resultSizeActual=90.6K, hasNextCallCountActual=90.6K, hasNextTrueCountActual=90.6K, hasNextTimeNanosActual=8.4M, nextCallCountActual=90.6K, nextTimeNanosActual=10.9M, sourceRowsScannedActual=90.6K, sourceRowsMatchedActual=90.6K, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=target) +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") +│ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P], firstRowTimeNanosActual=8.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=55.4M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=121, indexHitRateActual=1.00) +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=259.0K, resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.9K, nextCallCountActual=10, nextTimeNanosActual=1.2K, sourceRowsScannedActual=12, sourceRowsMatchedActual=10, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O], firstRowTimeNanosActual=3.2K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=73.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=660, avgNextNanosActual=121, indexHitRateActual=0.83) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=761.7K, resultSizeActual=30, hasNextCallCountActual=40, hasNextTrueCountActual=30, hasNextTimeNanosActual=21.5K, nextCallCountActual=30, nextTimeNanosActual=2.2K, sourceRowsScannedActual=40, sourceRowsMatchedActual=30, sourceRowsFilteredActual=10, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.7K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=7.6K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=538, avgNextNanosActual=75, indexHitRateActual=0.75) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=32, hasNextTrueCountActual=2, hasNextTimeNanosActual=25.5K, nextCallCountActual=2, nextTimeNanosActual=41, sourceRowsScannedActual=62, sourceRowsMatchedActual=2, sourceRowsFilteredActual=60, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O], firstRowTimeNanosActual=1.2K, indexLookupCountActual=30, openCountActual=30, lastRowTimeNanosActual=500, closeCountActual=30, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=30, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=800, avgNextNanosActual=21, indexHitRateActual=0.03) [right] +│ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=4.9K, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.2K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=31.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2K, avgNextNanosActual=104, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.1K, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=27.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=281, avgNextNanosActual=105, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.6K, nextCallCountActual=2, nextTimeNanosActual=41, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.1K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=25.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=667, avgNextNanosActual=21, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.6K, nextCallCountActual=2, nextTimeNanosActual=125, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=709, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=22.5K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=417, avgNextNanosActual=63, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optTitle) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTitle) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ├── Compare (<) +│ ║ │ │ Var (name=due) (bindingState=bound) +│ ║ │ │ ValueConstant (value="2024-01-10"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ o: Var (name=due) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] +│ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ ║ │ ║ │ ║ │ ║ ╠══ Or +│ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") +│ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=target) +│ ║ ║ │ ║ │ ║ │ ║ Compare (=) +│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) +│ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") +│ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=loan) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ o: Var (name=member) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=member) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] +│ ║ s: Var (name=book) (bindingState=bound) +│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ o: Var (name=optTitle) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=member) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=member) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { +VALUES ?target { "Author 1" "Author 2" } +?author ?authorName . +FILTER ((?authorName = ?target) || (?authorName = "Author 3")) +?book ?author . +?book ?copy . +?loan ?copy . +?loan a . +?loan ?member . +?member a . +OPTIONAL { +?book ?optTitle . +} +FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} + + +Theme: LIBRARY z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 713 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 289 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.5M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=708.5M, openCountActual=1, lastRowTimeNanosActual=708.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.3M, avgNextNanosActual=2.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.5M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=708.5M, openCountActual=1, lastRowTimeNanosActual=708.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.3M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.4M, nextCallCountActual=1, nextTimeNanosActual=875, aggregateEvalCountActual=618.4K, firstRowTimeNanosActual=708.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=708.5M, maxGroupSizeActual=618.4K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=618.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=618.4K, rowsDroppedActual=618.4K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.2M, avgNextNanosActual=875) +│ ╠══ Difference (resultSizeActual=618.4K, hasNextCallCountActual=618.4K, hasNextTrueCountActual=618.4K, hasNextTimeNanosActual=656.9M, nextCallCountActual=618.4K, nextTimeNanosActual=6.8M, firstRowTimeNanosActual=97.1M, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=772.6K, rowsDroppedActual=154.2K, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.1K, avgNextNanosActual=11, leftRowsConsumedActual=772.6K, rightRowsConsumedActual=1, overlapRowsActual=154.2K) +│ ║ ├── Filter (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=427.3M, nextCallCountActual=772.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.5K, exprEvalCountActual=772.6K, openCountActual=1, exprTrueCountActual=772.6K, lastRowTimeNanosActual=708.4M, closeCountActual=1, exprEvalTimeNanosActual=84.7M, inputRowsActual=772.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=553, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=772.6K, exprTrueCountActual=772.6K, exprEvalTimeNanosActual=32.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=281.9M, nextCallCountActual=772.6K, nextTimeNanosActual=10.2M, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=772.6K, firstRowTimeNanosActual=13.1K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, maxRightRowsPerLeftActual=77.3K, inputRowsActual=772.6K, rowsDroppedActual=10, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=365, avgNextNanosActual=13, leftRowsProbedActual=10, rightRowsScannedActual=772.6K, avgRightRowsPerLeftActual=77.3K, joinMatchRateActual=1.00, joinOutputPerLeftActual=77.3K, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Union (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=81.2K, nextCallCountActual=10, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=8.0K, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=7.4K, avgNextNanosActual=133, leftRowsConsumedActual=5, rightRowsConsumedActual=5, leftRowsOutputContributionActual=5, rightRowsOutputContributionActual=5) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=4.9K, nextCallCountActual=5, nextTimeNanosActual=1.1K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=5.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=365.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=820, avgNextNanosActual=225, indexHitRateActual=0.83) +│ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00, resultSizeActual=5, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=10, rowsDroppedActual=5, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=20.5M, stddevActual=4.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=7.9K, nextCallCountActual=5, nextTimeNanosActual=1.0K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=365.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.3K, avgNextNanosActual=208, indexHitRateActual=0.83) [left] +│ ║ │ │ │ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5, hasNextCallCountActual=10, hasNextTrueCountActual=5, hasNextTimeNanosActual=16.2K, nextCallCountActual=5, nextTimeNanosActual=1.2K, sourceRowsScannedActual=10, sourceRowsMatchedActual=5, sourceRowsFilteredActual=5, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[S, P], firstRowTimeNanosActual=2.1K, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=72.1M, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.6K, avgNextNanosActual=242, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=157.7M, nextCallCountActual=772.6K, nextTimeNanosActual=65.5M, firstRowTimeNanosActual=1.7K, openCountActual=10, lastRowTimeNanosActual=72.1M, closeCountActual=10, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=85) [right] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=99.7M, nextCallCountActual=772.6K, nextTimeNanosActual=30.9M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=10, plannedIndexName=ospc, firstRowTimeNanosActual=1.7K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=72.1M, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=43, avgNextNanosActual=40, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optCopy) (hasNextFalseCountActual=0) +│ ║ │ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=37.5M, nextCallCountActual=1, nextTimeNanosActual=167, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=45.3K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=33.3M, exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=37.5M, closeCountActual=1, exprEvalTimeNanosActual=30.8M, inputRowsActual=45.3K, rowsDroppedActual=45.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=18.8M, avgNextNanosActual=167, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=28.2M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=23.9M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=20.4M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="branch 0") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.3M, nextCallCountActual=45.3K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=37.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optCopy) (bindingState=bound) +│ ║ │ ║ Var (name=branch) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) +│ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) +│ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) +│ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=branch) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) +│ ║ │ ║ s: Var (name=copy) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) +│ ║ │ ║ o: Var (name=branch) (bindingState=bound) +│ ║ │ ╚══ ExtensionElem (optCopy) +│ ║ │ Var (name=copy) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="branch 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=branch) (bindingState=unbound) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=branch) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=branch) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ +?branch a . +} +UNION +{ +?branch a . +?branch ?name . +} +OPTIONAL { +?copy ?branch . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?branch) +MINUS { +?branch ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) +} +} + + +Theme: ENGINEERING z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 471 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 252 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=452.7M, openCountActual=1, lastRowTimeNanosActual=452.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=452.7M, openCountActual=1, lastRowTimeNanosActual=452.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=667, aggregateEvalCountActual=132.6K, firstRowTimeNanosActual=452.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=452.7M, maxGroupSizeActual=132.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=132.7K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=667) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=368.0M, nextCallCountActual=132.6K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=43.4K, leftRowsWithMatchActual=132.6K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=11, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) +│ ║ ├── Filter (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=228.1M, nextCallCountActual=132.6K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.0K, exprEvalCountActual=132.6K, openCountActual=1, exprTrueCountActual=132.6K, lastRowTimeNanosActual=452.6M, closeCountActual=1, exprEvalTimeNanosActual=13.6M, inputRowsActual=132.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=132.6K, exprTrueCountActual=132.6K, exprEvalTimeNanosActual=5.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optAssembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=204.1M, nextCallCountActual=132.6K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=19.9K, leftRowsWithMatchActual=132.6K, openCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5K, avgNextNanosActual=8.95, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.9M, nextCallCountActual=132.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=11.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=64, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=93.0M, nextCallCountActual=132.6K, nextTimeNanosActual=20.9M, firstRowTimeNanosActual=625, openCountActual=132.6K, lastRowTimeNanosActual=2.9K, closeCountActual=132.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=351, avgNextNanosActual=158) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=59.3M, nextCallCountActual=132.6K, nextTimeNanosActual=9.4M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=2.7K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=72, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optAssembly) (hasNextFalseCountActual=0) +│ ║ │ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=55.7M, nextCallCountActual=132.6K, nextTimeNanosActual=7.4M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optAssembly) (bindingState=bound) +│ ║ │ ║ Var (name=component) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] +│ ║ │ │ s: Var (name=component) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ ║ s: Var (name=component) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optAssembly) +│ ║ │ Var (name=assembly) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) (bindingState=bound) +│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ o: Var (name=dep) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=component) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=component) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +OPTIONAL { +?component ?assembly . +BIND(?assembly AS ?optAssembly) +} +FILTER (?optAssembly != ?component) +OPTIONAL { +?component ?dep . +} +} + + +Theme: ENGINEERING z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 298 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 190 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=298.9M, openCountActual=1, lastRowTimeNanosActual=298.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=298.9M, openCountActual=1, lastRowTimeNanosActual=299.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=4, firstRowTimeNanosActual=298.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=299.0M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=500) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=298.9M, nextCallCountActual=4, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=42.0K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=298.9M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=49.8M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.2M, nextCallCountActual=4, nextTimeNanosActual=250, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=1.0K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=42.2K, exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=298.9M, closeCountActual=1, exprEvalTimeNanosActual=484.4K, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=242.5K, avgNextNanosActual=63, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=410.0K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=312.1K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=38.4K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, resultSizeActual=1.0K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=522, expansionFactorActual=1.99, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=520) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=749, firstRowTimeNanosActual=28.2K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=38.7K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=361, avgNextNanosActual=375) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.5K, stddevActual=128, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=51.8K, nextCallCountActual=520, nextTimeNanosActual=25.7K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=14.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=229.9K, nextCallCountActual=520, nextTimeNanosActual=27.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=265.3K, rowsDroppedActual=265.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=107.6M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=80.2M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=9.9M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, resultSizeActual=265.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=132.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=132.7K) +│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=208, nextCallCountActual=2, nextTimeNanosActual=126, firstRowTimeNanosActual=2.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=2.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=69, avgNextNanosActual=63) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K, resultSizeActual=132.6K, joinRightIteratorsCreatedActual=134.1K, joinLeftBindingsConsumedActual=134.1K, joinRightBindingsConsumedActual=132.6K, inputRowsActual=266.7K, rowsDroppedActual=134.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.1K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=0.99, joinOutputPerLeftActual=0.99) [right] +│ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=134.2K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=14.6M, nextCallCountActual=134.1K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=1.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=298.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=45, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=137.2K, resultSizeActual=132.6K, hasNextCallCountActual=266.7K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=60.6M, nextCallCountActual=132.6K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=266.7K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=134.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=134.1K, openCountActual=134.1K, lastRowTimeNanosActual=375, closeCountActual=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=134.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=42, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.2K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=333, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=323, indexHitRateActual=0) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="REQ-1002") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="REQ-1002") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +UNION +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity ?name . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +OPTIONAL { +?entity ?assembly . +} +} + + +Theme: ENGINEERING z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 10 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 5 ms + +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=917, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=306) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "assembly" (hasNextFalseCountActual=0) +║ ProjectionElem "componentCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=542, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=181) +├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=335, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=112) +│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=41, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=5.7M, closeCountActual=1, exprEvalTimeNanosActual=1.4K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=957, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.1K, hasNextFalseCountActual=0) +│ ║ └── Group (assembly) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.6M, nextCallCountActual=3, nextTimeNanosActual=83, aggregateEvalCountActual=840, firstRowTimeNanosActual=5.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=5.7M, maxGroupSizeActual=148, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=140, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=420, rowsDroppedActual=417, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=28) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=420, hasNextCallCountActual=422, hasNextTrueCountActual=421, hasNextTimeNanosActual=5.4M, nextCallCountActual=420, nextTimeNanosActual=6.4K, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=420, firstRowTimeNanosActual=21.4K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=5.6M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=423, rowsDroppedActual=3, expansionFactorActual=0.99, sampleCountActual=2, varianceActual=22.5K, stddevActual=150, confidenceScoreActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=15, leftRowsProbedActual=3, rightRowsScannedActual=420, avgRightRowsPerLeftActual=140, joinMatchRateActual=1.00, joinOutputPerLeftActual=140, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=3, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=924, joinRightBindingsConsumedActual=3, inputRowsActual=924, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=924, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=84.9K, nextCallCountActual=921, nextTimeNanosActual=36.4K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=92, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=3, hasNextCallCountActual=924, hasNextTrueCountActual=3, hasNextTimeNanosActual=3.1M, nextCallCountActual=3, nextTimeNanosActual=84, sourceRowsScannedActual=921, sourceRowsMatchedActual=3, sourceRowsFilteredActual=918, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.8K, exprEvalCountActual=921, exprFalseCountActual=918, openCountActual=921, exprTrueCountActual=3, lastRowTimeNanosActual=3.3K, closeCountActual=921, exprEvalTimeNanosActual=699.6K, inputRowsActual=921, rowsDroppedActual=918, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=921, exprFalseCountActual=918, exprTrueCountActual=3, exprEvalTimeNanosActual=645.5K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=assemblyName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Assembly 1") (exprEvalCountActual=921, exprTrueCountActual=921, exprEvalTimeNanosActual=28.2K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=920, exprTrueCountActual=920, exprEvalTimeNanosActual=28.3K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Assembly 3") (exprEvalCountActual=919, exprTrueCountActual=919, exprEvalTimeNanosActual=36.2K, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=426.8K, nextCallCountActual=921, nextTimeNanosActual=34.8K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=ListMemberOperator +│ ║ │ Var (name=assemblyName) +│ ║ │ ValueConstant (value="Assembly 1") +│ ║ │ ValueConstant (value="Assembly 2") +│ ║ │ ValueConstant (value="Assembly 3") +│ ║ │ , firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.4K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=232, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=assemblyName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=420, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=47.3K, nextCallCountActual=420, nextTimeNanosActual=15.0K, sourceRowsScannedActual=423, sourceRowsMatchedActual=420, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=709, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=106.3K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=38, avgNextNanosActual=36, indexHitRateActual=0.99) [right] +│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (componentCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (componentCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "assembly" +║ ProjectionElem "componentCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (assembly) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=assemblyName) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ ValueConstant (value="Assembly 3") +│ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=ListMemberOperator +│ ║ │ Var (name=assemblyName) +│ ║ │ ValueConstant (value="Assembly 1") +│ ║ │ ValueConstant (value="Assembly 2") +│ ║ │ ValueConstant (value="Assembly 3") +│ ║ │ ) +│ ║ │ s: Var (name=assembly) (bindingState=bound) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=assemblyName) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) (bindingState=unbound) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) (bindingState=bound) +│ ║ GroupElem (_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count +│ ║ Var (name=component) (bindingState=bound) +│ ║ GroupElem (componentCount) +│ ║ Count (Distinct) +│ ║ Var (name=component) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count +│ Var (name=component) (bindingState=unbound) +└── ExtensionElem (componentCount) +Count (Distinct) +Var (name=component) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { +?assembly a . +?assembly ?assemblyName . +FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) +OPTIONAL { +?component ?assembly . +} +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) + + +Theme: ENGINEERING z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 207 ms +Warmup execution 1/9 +Warmup execution 2/9 +Warmup execution 3/9 +Warmup execution 4/9 +Warmup execution 5/9 +Warmup execution 6/9 +Warmup execution 7/9 +Warmup execution 8/9 +Warmup execution 9/9 +Fastest execution time: 143 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=185.1M, openCountActual=1, lastRowTimeNanosActual=185.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=185.2M, openCountActual=1, lastRowTimeNanosActual=185.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=625) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=185.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=185.2M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=500) +│ ╠══ Difference (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=184.8M, nextCallCountActual=1.0K, nextTimeNanosActual=11.5K, firstRowTimeNanosActual=181.8M, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=45.3K, rowsDroppedActual=44.3K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=177.4K, avgNextNanosActual=11, leftRowsConsumedActual=1.5K, rightRowsConsumedActual=43.7K, overlapRowsActual=517) +│ ║ ├── Filter (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.5K, nextTimeNanosActual=20.2K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=21.5K, exprEvalCountActual=1.5K, openCountActual=1, exprTrueCountActual=1.5K, lastRowTimeNanosActual=185.1M, closeCountActual=1, exprEvalTimeNanosActual=183.7K, inputRowsActual=1.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=72.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTest) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.7M, nextCallCountActual=1.5K, nextTimeNanosActual=16.6K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=1.5K, firstRowTimeNanosActual=18.0K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=2.0K, rowsDroppedActual=520, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=11, leftRowsProbedActual=520, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=2.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.99, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=1.0K, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1.0K, rightRowsScannedActual=520, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=56.7K, nextCallCountActual=520, nextTimeNanosActual=32.3K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=9.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=62, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=239.1K, nextCallCountActual=520, nextTimeNanosActual=35.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=6.0K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=68, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=591.2K, nextCallCountActual=1.5K, nextTimeNanosActual=167.7K, firstRowTimeNanosActual=667, openCountActual=520, lastRowTimeNanosActual=5.0K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=142, avgNextNanosActual=108) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=369.2K, nextCallCountActual=1.5K, nextTimeNanosActual=76.3K, sourceRowsScannedActual=2.0K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.9K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=89, avgNextNanosActual=49, indexHitRateActual=0.75) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optTest) (hasNextFalseCountActual=0) +│ ║ │ Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=43.7K, hasNextCallCountActual=43.7K, hasNextTrueCountActual=43.7K, hasNextTimeNanosActual=111.9M, nextCallCountActual=43.7K, nextTimeNanosActual=562.8K, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=43.7K, sourceRowsFilteredActual=90.3K, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=700.1K, exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, openCountActual=1, exprTrueCountActual=43.7K, lastRowTimeNanosActual=150.8M, closeCountActual=1, exprEvalTimeNanosActual=88.2M, inputRowsActual=134.1K, rowsDroppedActual=90.3K, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=13, filterRejectRateActual=0.67) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, exprTrueCountActual=43.7K, exprEvalTimeNanosActual=80.4M, hasNextFalseCountActual=0) +│ ║ ║ ├── Str (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=65.3M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="Component 1") (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=4.2M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.1K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=10.7M, nextCallCountActual=134.1K, nextTimeNanosActual=4.8M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=150.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTest) (bindingState=bound) +│ ║ │ ║ Var (name=requirement) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=requirement) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ │ ║ o: Var (name=test) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optTest) +│ ║ │ Var (name=test) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="Component 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ s: Var (name=component) (bindingState=unbound) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement ?component . +?requirement a . +OPTIONAL { +?requirement ?test . +BIND(?test AS ?optTest) +} +FILTER (?optTest != ?requirement) +MINUS { +?component ?name . +FILTER (CONTAINS(STR(?name), "Component 1")) +} +} + + +Theme: ENGINEERING z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 857 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 455 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=848.1M, openCountActual=1, lastRowTimeNanosActual=848.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=6.4K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=5.4K, firstRowTimeNanosActual=848.1M, openCountActual=1, lastRowTimeNanosActual=848.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=5.5K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=2, firstRowTimeNanosActual=848.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=848.1M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=848.0M, nextCallCountActual=2, nextTimeNanosActual=83, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=64.2K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=848.0M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=3.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212.0M, avgNextNanosActual=42, filterRejectRateActual=0) +│ ║ ├── Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=3.0K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=708, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=417, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) +│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=848.0M, nextCallCountActual=2, nextTimeNanosActual=126, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=60.8K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=848.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=989.3M, stddevActual=31.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=282.7M, avgNextNanosActual=63, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K, resultSizeActual=2, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=2, inputRowsActual=132.6K, rowsDroppedActual=132.6K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=2.9M, stddevActual=1.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=132.6K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.9K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=13.7M, nextCallCountActual=132.6K, nextTimeNanosActual=5.3M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=848.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=6.9K, resultSizeActual=2, hasNextCallCountActual=132.6K, hasNextTrueCountActual=2, hasNextTimeNanosActual=498.5M, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=132.6K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.9K, exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, openCountActual=132.6K, exprTrueCountActual=2, lastRowTimeNanosActual=3.4K, closeCountActual=132.6K, exprEvalTimeNanosActual=98.8M, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=104, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=91.1M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=1, exprEvalTimeNanosActual=76.1M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Component 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Component 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=65.9M, nextCallCountActual=132.6K, nextTimeNanosActual=5.2M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=248, avgNextNanosActual=40, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.1K, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=6.6K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292, avgNextNanosActual=21, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=component) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Component 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Component 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ ║ s: Var (name=component) (bindingState=bound) +│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ ║ o: Var (name=name) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=component) (bindingState=bound) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=component) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=component) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { +?component a . +?component ?name . +FILTER ((?name = "Component 1") || (?name = "Component 2")) +OPTIONAL { +?component ?assembly . +} +FILTER EXISTS { +?component ?dep . +} +} + + +Theme: ENGINEERING z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 20 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 8 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=9.5K, firstRowTimeNanosActual=12.7M, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=9.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=7.4K, firstRowTimeNanosActual=12.7M, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=7.4K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=5.5K, firstRowTimeNanosActual=12.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=12.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=5.6K, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=12.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, openCountActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=12.7M) +│ ║ ├── Not (hasNextFalseCountActual=0) +│ ║ │ Exists (hasNextFalseCountActual=0) +│ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (<) (hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K, resultSizeActual=0, joinRightIteratorsCreatedActual=1.5K, inputRowsActual=1.5K, rowsDroppedActual=1.5K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=1.5K, joinType=Cartesian product, inputRowsActual=1.5K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=1.6K, joinOutputPerLeftActual=1.6K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.4K, nextCallCountActual=1, nextTimeNanosActual=333, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.1K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2K, avgNextNanosActual=333) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=164.6K, nextCallCountActual=1.5K, nextTimeNanosActual=152.5K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=value2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ Var (name=measurement) +│ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ Var (name=value2) +│ ║ ║ , firstRowTimeNanosActual=1.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=98, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=78, resultSizeActual=0, hasNextCallCountActual=1.5K, hasNextTimeNanosActual=8.5M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], filterSelectivitySource=heuristic, plannedLookupComponents=[S, O, P], exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1.5K, lastRowTimeNanosActual=3.8K, closeCountActual=1.5K, exprEvalTimeNanosActual=4.1M, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=5.5K, filterRejectRateActual=1.00) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=4.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=256.7K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=780.8K, nextCallCountActual=1.5K, nextTimeNanosActual=67.5K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=1.5K, openCountActual=1.5K, lastRowTimeNanosActual=1.7K, closeCountActual=1.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.5K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=251, avgNextNanosActual=43, indexHitRateActual=0.50) +│ ║ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=value2) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) +│ ║ │ s: Var (name=measurement) (bindingState=bound) +│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ │ o: Var (name=value2) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=value2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ Var (name=measurement) +│ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ Var (name=value2) +│ ║ ║ ) +│ ║ ║ s: Var (name=measurement) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=78, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], filterSelectivitySource=heuristic, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ │ ValueConstant (value="0.9"^^) +│ ║ │ ValueConstant (value="0.95"^^) +│ ║ └── StatementPattern (resultSizeEstimate=1.6K) +│ ║ s: Var (name=measurement) (bindingState=bound) +│ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ o: Var (name=value) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=measurement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=measurement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { +VALUES ?threshold { 0.85 } +?measurement a . +?measurement ?value . +FILTER (?value IN (0.9, 0.95)) +FILTER NOT EXISTS { +?measurement ?value2 . +FILTER (?value2 < ?threshold) +} +} + + +Theme: ENGINEERING z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 441 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 262 ms + +Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=120.4K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.2K, avgNextNanosActual=232) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "component" (hasNextFalseCountActual=0) +║ ProjectionElem "reqCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=73.5K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.2K, avgNextNanosActual=141) +├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=44.5K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.1K, avgNextNanosActual=86) +│ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.3M, nextCallCountActual=520, nextTimeNanosActual=9.5K, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=132.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=391.7M, exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=430.6M, closeCountActual=1, exprEvalTimeNanosActual=27.0M, inputRowsActual=132.6K, rowsDroppedActual=132.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.1K, avgNextNanosActual=18, filterRejectRateActual=1.00) +│ ║ ├── Compare (>) (exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, exprTrueCountActual=520, exprEvalTimeNanosActual=7.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=4.5K, hasNextFalseCountActual=0) +│ ║ └── Group (component) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=392.6M, nextCallCountActual=132.6K, nextTimeNanosActual=4.2M, aggregateEvalCountActual=266.3K, firstRowTimeNanosActual=391.7M, groupsCreatedActual=132.6K, openCountActual=1, lastRowTimeNanosActual=430.6M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=133.1K, rowsDroppedActual=520, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=32) +│ ║ Filter (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=241.1M, nextCallCountActual=133.1K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=133.1K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=35.9K, exprEvalCountActual=133.1K, predicateErrorCountActual=1, openCountActual=1, exprTrueCountActual=133.1K, lastRowTimeNanosActual=347.7M, closeCountActual=1, exprEvalTimeNanosActual=15.5M, inputRowsActual=133.1K, rowsDroppedActual=1, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, filterRejectRateActual=0.00) +│ ║ ├── Compare (!=) (exprEvalCountActual=133.1K, exprTrueCountActual=133.1K, exprErrorCountActual=1, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=215.3M, nextCallCountActual=133.1K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=133.1K, joinLeftBindingsConsumedActual=133.1K, joinRightBindingsConsumedActual=133.1K, firstRowTimeNanosActual=30.0K, leftRowsWithMatchActual=133.1K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=266.3K, rowsDroppedActual=133.1K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=8.62, leftRowsProbedActual=133.1K, rightRowsScannedActual=133.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) +│ ║ ╠══ Union (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=25.7M, nextCallCountActual=133.1K, nextTimeNanosActual=2.5M, firstRowTimeNanosActual=24.3K, openCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=193, avgNextNanosActual=19, leftRowsConsumedActual=520, rightRowsConsumedActual=132.6K, leftRowsOutputContributionActual=520, rightRowsOutputContributionActual=132.6K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=63.2K, nextCallCountActual=520, nextTimeNanosActual=25.9K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=17.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=121, avgNextNanosActual=50, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=258.4K, nextCallCountActual=520, nextTimeNanosActual=29.8K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=791, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.1K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=57, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.3M, nextCallCountActual=132.6K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=3.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=45, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=97.5M, nextCallCountActual=133.1K, nextTimeNanosActual=20.7M, firstRowTimeNanosActual=583, openCountActual=133.1K, lastRowTimeNanosActual=2.0K, closeCountActual=133.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=366, avgNextNanosActual=156) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=62.9M, nextCallCountActual=133.1K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=266.3K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=133.1K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=133.1K, openCountActual=133.1K, lastRowTimeNanosActual=1.7K, closeCountActual=133.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=69, indexHitRateActual=0.50) +│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) +│ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (reqCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (component) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optDep) (bindingState=bound) +│ ║ │ Var (name=component) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) +│ ║ ║ s: Var (name=component) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) (bindingState=unbound) +│ ║ └── ExtensionElem (optDep) +│ ║ Var (name=dep) (bindingState=bound) +│ ║ GroupElem (_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=requirement) (bindingState=bound) +│ ║ GroupElem (reqCount) +│ ║ Count (Distinct) +│ ║ Var (name=requirement) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=requirement) (bindingState=unbound) +└── ExtensionElem (reqCount) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +{ +?requirement ?component . +?requirement a . +} +UNION +{ +?component a . +} +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) > 0) + + +Theme: ENGINEERING z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 12 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 8 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=666) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=334) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=209, firstRowTimeNanosActual=8.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=209, avgGroupSizeActual=0) +│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsDroppedActual=3, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.5M, leftRowsConsumedActual=2, rightRowsConsumedActual=1.5K, overlapRowsActual=2) +│ ║ ├── Filter (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.2M, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=14.7K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=8.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.1M, avgNextNanosActual=21, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=8.3K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=874, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=542, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=437, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27, resultSizeActual=2, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=2, inputRowsActual=522, rowsDroppedActual=520, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=39, stddevActual=6.25, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=47.0K, nextCallCountActual=520, nextTimeNanosActual=19.0K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ │ Var (name=requirement) +│ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ Var (name=component) +│ ║ │ │ , firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=27, resultSizeActual=2, hasNextCallCountActual=522, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.9M, nextCallCountActual=2, sourceRowsScannedActual=520, sourceRowsMatchedActual=2, sourceRowsFilteredActual=518, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=4.1K, exprEvalCountActual=520, exprFalseCountActual=518, openCountActual=520, exprTrueCountActual=2, lastRowTimeNanosActual=3.4K, closeCountActual=520, exprEvalTimeNanosActual=379.6K, inputRowsActual=520, rowsDroppedActual=518, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=0, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=520, exprFalseCountActual=518, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=350.3K, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=520, exprFalseCountActual=519, exprTrueCountActual=1, exprEvalTimeNanosActual=290.0K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="REQ-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=791, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=519, exprFalseCountActual=518, exprTrueCountActual=1, exprEvalTimeNanosActual=22.2K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="REQ-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=244.9K, nextCallCountActual=520, nextTimeNanosActual=19.7K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.3K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=235, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=3.1K, joinLeftBindingsConsumedActual=3.1K, joinRightBindingsConsumedActual=1.5K, inputRowsActual=4.6K, rowsDroppedActual=3.1K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=3.1K, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) +│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=3.1K, resultSizeActual=3.1K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=3.1K, hasNextTimeNanosActual=209.7K, nextCallCountActual=3.1K, nextTimeNanosActual=122.3K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=3.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=1.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=4.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=67, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.6K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.1M, nextCallCountActual=1.5K, nextTimeNanosActual=81.7K, sourceRowsScannedActual=4.6K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=3.1K, openCountActual=3.1K, lastRowTimeNanosActual=333, closeCountActual=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.1K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=239, avgNextNanosActual=53, indexHitRateActual=0.33) [right] +│ ║ s: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=520) +│ ║ │ ║ s: Var (name=requirement) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ ║ o: Var (name=component) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) +│ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ │ Var (name=requirement) +│ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ │ Var (name=component) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=requirement) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=27, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="REQ-1000") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="REQ-1001") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) +│ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) +│ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ o: Var (name=test) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[S, P]) [right] +│ ║ s: Var (name=test) (bindingState=bound) +│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ o: Var (name=measurement) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?name . +FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) +FILTER EXISTS { +?requirement ?component . +} +MINUS { +?requirement ?test . +?test ?measurement . +} +} + + +Theme: ENGINEERING z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 7 ms + +Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=85.0K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=164) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "component" (hasNextFalseCountActual=0) +║ ProjectionElem "reqCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=61.6K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=119) +├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=30.4K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=59) +│ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=4.9K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3.7M, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=4.0M, closeCountActual=1, exprEvalTimeNanosActual=82.0K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=9.54, filterRejectRateActual=0) +│ ║ ├── Compare (>=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=49.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) +│ ║ └── Group (component) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.7M, nextCallCountActual=520, nextTimeNanosActual=9.0K, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=3.7M, groupsCreatedActual=520, openCountActual=1, lastRowTimeNanosActual=4.0M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.1K, avgNextNanosActual=17) +│ ║ Filter (resultSizeActual=520, hasNextCallCountActual=522, hasNextTrueCountActual=521, hasNextTimeNanosActual=2.7M, nextCallCountActual=520, nextTimeNanosActual=8.6K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.0K, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=3.6M, closeCountActual=1, exprEvalTimeNanosActual=68.6K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3K, avgNextNanosActual=17, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=22.9K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=2.6M, nextCallCountActual=520, nextTimeNanosActual=6.8K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, firstRowTimeNanosActual=16.6K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=3.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.1K, avgNextNanosActual=13, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=520) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=57.3K, nextCallCountActual=520, nextTimeNanosActual=29.1K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=5.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=110, avgNextNanosActual=56, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=469.8K, nextCallCountActual=520, nextTimeNanosActual=27.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.8K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=452, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=236.5K, nextCallCountActual=520, nextTimeNanosActual=31.1K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, P], firstRowTimeNanosActual=459, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=60, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=656, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=243.7K, nextCallCountActual=520, nextTimeNanosActual=27.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=3.6K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=371.4K, nextCallCountActual=520, nextTimeNanosActual=67.2K, firstRowTimeNanosActual=667, openCountActual=520, lastRowTimeNanosActual=2.7K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=357, avgNextNanosActual=129) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=236.6K, nextCallCountActual=520, nextTimeNanosActual=24.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=2.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=228, avgNextNanosActual=47, indexHitRateActual=0.50) +│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) +│ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (reqCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "component" +║ ProjectionElem "reqCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (component) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optDep) (bindingState=bound) +│ ║ │ Var (name=component) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] +│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=requirement) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ s: Var (name=component) (bindingState=bound) +│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) +│ ║ │ o: Var (name=dep) (bindingState=unbound) +│ ║ └── ExtensionElem (optDep) +│ ║ Var (name=dep) (bindingState=bound) +│ ║ GroupElem (_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Count +│ ║ Var (name=requirement) (bindingState=bound) +│ ║ GroupElem (reqCount) +│ ║ Count (Distinct) +│ ║ Var (name=requirement) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d) +│ Count +│ Var (name=requirement) (bindingState=unbound) +└── ExtensionElem (reqCount) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?requirement ?component . +?component a . +?component ?assembly . +?requirement a . +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) + + +Theme: ENGINEERING z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 15 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 11 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=2.1M, openCountActual=1, lastRowTimeNanosActual=2.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=584) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=2.1M, openCountActual=1, lastRowTimeNanosActual=2.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=334) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=125, firstRowTimeNanosActual=2.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=125, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.9K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (hasNextFalseCountActual=0) +│ ║ │ StatementPattern (resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.0M, openCountActual=1, lastRowTimeNanosActual=2.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1M, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] +│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.0M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterPassRatio=0.05, filterSelectivitySource=heuristic, exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1, lastRowTimeNanosActual=2.0M, optimizer.candidateCount=16, closeCountActual=1, exprEvalTimeNanosActual=1.8M, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1M, filterRejectRateActual=1.00) [left] +│ ║ ║ │ ║ │ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=85.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=92.0K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=83.5K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=124.0K, nextCallCountActual=1.5K, nextTimeNanosActual=49.4K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=32, indexHitRateActual=1.00) +│ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=520) +│ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ │ o: Var (name=component) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, plannedFilterPassRatio=0.05, filterSelectivitySource=heuristic, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ║ ├── ListMemberOperator +│ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) +│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) +│ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] +│ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] +│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) +│ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] +│ ║ ║ │ s: Var (name=requirement) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] +│ ║ s: Var (name=component) (bindingState=unbound) +│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=requirement) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=requirement) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?measurement ?value . +FILTER (?value IN (0.85, 0.9, 0.95)) +?test ?measurement . +?requirement ?test . +?requirement a . +VALUES ?threshold { 0.85 } +OPTIONAL { +?component ?optName . +} +FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} + + +Theme: ENGINEERING z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 6 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=7.5M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=1.2K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=7.5M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=708) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=283, firstRowTimeNanosActual=7.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=7.5M, maxGroupSizeActual=283, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=283, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=283, rowsDroppedActual=282, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=416) +│ ╠══ Difference (resultSizeActual=283, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=7.4M, nextCallCountActual=283, nextTimeNanosActual=3.7K, firstRowTimeNanosActual=959.2K, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=804, rowsDroppedActual=521, selectivityActual=0.35, expansionFactorActual=0.35, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=26.2K, avgNextNanosActual=13, leftRowsConsumedActual=284, rightRowsConsumedActual=520, overlapRowsActual=1) +│ ║ ├── Filter (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=4.1K, sourceRowsScannedActual=284, sourceRowsMatchedActual=284, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=42.7K, exprEvalCountActual=284, openCountActual=1, exprTrueCountActual=284, lastRowTimeNanosActual=7.4M, closeCountActual=1, exprEvalTimeNanosActual=34.4K, inputRowsActual=284, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.0K, avgNextNanosActual=15, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=284, exprTrueCountActual=284, exprEvalTimeNanosActual=15.6K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optComponent) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=5.5K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=284, firstRowTimeNanosActual=42.0K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=286, rowsDroppedActual=2, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=21.8K, avgNextNanosActual=20, leftRowsProbedActual=2, rightRowsScannedActual=284, avgRightRowsPerLeftActual=142, joinMatchRateActual=1.00, joinOutputPerLeftActual=142, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=2, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=923, joinRightBindingsConsumedActual=2, inputRowsActual=923, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=923, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=100.2K, nextCallCountActual=921, nextTimeNanosActual=36.1K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Filter (resultSizeActual=2, hasNextCallCountActual=923, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.5M, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=921, sourceRowsMatchedActual=2, sourceRowsFilteredActual=919, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=3.7K, exprEvalCountActual=921, exprFalseCountActual=919, openCountActual=921, exprTrueCountActual=2, lastRowTimeNanosActual=3.5K, closeCountActual=921, exprEvalTimeNanosActual=712.1K, inputRowsActual=921, rowsDroppedActual=919, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=21, filterRejectRateActual=1.00) [right] +│ ║ │ │ ├── Or (exprEvalCountActual=921, exprFalseCountActual=919, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=658.2K, hasNextFalseCountActual=0) +│ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=921, exprFalseCountActual=920, exprTrueCountActual=1, exprEvalTimeNanosActual=545.5K, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=920, exprFalseCountActual=919, exprTrueCountActual=1, exprEvalTimeNanosActual=39.6K, hasNextFalseCountActual=0) +│ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=477.5K, nextCallCountActual=921, nextTimeNanosActual=34.5K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=Or +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ , firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.2K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=259, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=57.4K, nextCallCountActual=284, nextTimeNanosActual=30.0K, firstRowTimeNanosActual=1.1K, openCountActual=2, lastRowTimeNanosActual=201.5K, closeCountActual=2, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=106) [right] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=33.1K, nextCallCountActual=284, nextTimeNanosActual=10.0K, sourceRowsScannedActual=286, sourceRowsMatchedActual=284, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=200.9K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=39, avgNextNanosActual=35, indexHitRateActual=0.99) +│ ║ │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optComponent) (hasNextFalseCountActual=0) +│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=43.1K, nextCallCountActual=520, nextTimeNanosActual=20.0K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=714.4K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=39, indexHitRateActual=1.00) +│ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optComponent) (bindingState=bound) +│ ║ │ ║ Var (name=assembly) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) +│ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ │ │ ├── Or +│ ║ │ │ │ ╠══ Compare (=) +│ ║ │ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") +│ ║ │ │ │ ╚══ Compare (=) +│ ║ │ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=Or +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 1") +│ ║ │ │ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Assembly 2") +│ ║ │ │ ) +│ ║ │ │ s: Var (name=assembly) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) +│ ║ │ ║ s: Var (name=component) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ │ ║ o: Var (name=assembly) (bindingState=bound) +│ ║ │ ╚══ ExtensionElem (optComponent) +│ ║ │ Var (name=component) (bindingState=bound) +│ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) +│ ║ s: Var (name=requirement) (bindingState=unbound) +│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) +│ ║ o: Var (name=component) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=assembly) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=assembly) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { +?assembly a . +?assembly ?name . +FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) +OPTIONAL { +?component ?assembly . +BIND(?component AS ?optComponent) +} +FILTER (?optComponent != ?assembly) +MINUS { +?requirement ?component . +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 958 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 424 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=935.3M, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=2.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=935.3M, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=1.5M, firstRowTimeNanosActual=935.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=935.3M, maxGroupSizeActual=1.5M, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.6M, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5M, rowsDroppedActual=1.5M, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=1.1K) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5M, hasNextCallCountActual=1.5M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=779.3M, nextCallCountActual=1.5M, nextTimeNanosActual=20.4M, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=267.2K, joinRightBindingsConsumedActual=1.5M, firstRowTimeNanosActual=22.7K, leftRowsWithMatchActual=267.2K, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=1.8M, rowsDroppedActual=267.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=497, avgNextNanosActual=13, leftRowsProbedActual=267.2K, rightRowsScannedActual=1.5M, avgRightRowsPerLeftActual=5.86, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.86, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=193.1M, nextCallCountActual=267.2K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.8K, exprEvalCountActual=267.2K, openCountActual=1, exprTrueCountActual=267.2K, lastRowTimeNanosActual=935.2M, closeCountActual=1, exprEvalTimeNanosActual=28.4M, inputRowsActual=267.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=722, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=267.2K, exprTrueCountActual=267.2K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optNeighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=143.9M, nextCallCountActual=267.2K, nextTimeNanosActual=3.4M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, firstRowTimeNanosActual=17.7K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=935.2M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=538, avgNextNanosActual=13, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinMatchRateActual=1.00, joinOutputPerLeftActual=6.64, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.3M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=935.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=73, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=71.5M, nextCallCountActual=267.2K, nextTimeNanosActual=25.2M, firstRowTimeNanosActual=666, openCountActual=40.2K, lastRowTimeNanosActual=28.9K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=94, avgNextNanosActual=94) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=41.9M, nextCallCountActual=267.2K, nextTimeNanosActual=11.3M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=28.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=55, avgNextNanosActual=42, indexHitRateActual=0.87) +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optNeighbor) (hasNextFalseCountActual=0) +│ ║ │ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=4.4M, hasNextTrueCountActual=4.1M, hasNextTimeNanosActual=242.8M, nextCallCountActual=1.5M, nextTimeNanosActual=75.7M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=2.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=55, avgNextNanosActual=48, indexHitRateActual=0.85) [right] +│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) +│ ║ │ ║ Var (name=node) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optNeighbor) +│ ║ │ Var (name=neighbor) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?neighbor . +BIND(?neighbor AS ?optNeighbor) +} +FILTER (?optNeighbor != ?node) +OPTIONAL { +?node ?w . +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 3024 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.7M, nextCallCountActual=1, nextTimeNanosActual=5.2K, firstRowTimeNanosActual=3021.7M, openCountActual=1, lastRowTimeNanosActual=3021.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.9M, avgNextNanosActual=5.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.7M, nextCallCountActual=1, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=3021.7M, openCountActual=1, lastRowTimeNanosActual=3021.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.9M, avgNextNanosActual=3.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.6M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=716.1K, firstRowTimeNanosActual=3021.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3021.7M, maxGroupSizeActual=716.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=716.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=716.1K, rowsDroppedActual=716.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.8M, avgNextNanosActual=1.1K) +│ ╠══ Filter (resultSizeActual=716.1K, hasNextCallCountActual=716.1K, hasNextTrueCountActual=716.1K, hasNextTimeNanosActual=2861.0M, nextCallCountActual=716.1K, nextTimeNanosActual=9.5M, sourceRowsScannedActual=3.5M, sourceRowsMatchedActual=716.1K, sourceRowsFilteredActual=2.8M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=108.6K, exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, openCountActual=1, exprTrueCountActual=716.1K, lastRowTimeNanosActual=3021.6M, closeCountActual=1, exprEvalTimeNanosActual=1010.8M, inputRowsActual=3.5M, rowsDroppedActual=2.8M, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=13, filterRejectRateActual=0.80) +│ ║ ├── Or (exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, exprTrueCountActual=716.1K, shortCircuitCountActual=358.5K, exprEvalTimeNanosActual=743.7M, hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (=) (exprEvalCountActual=3.5M, exprFalseCountActual=3.2M, exprTrueCountActual=358.5K, exprEvalTimeNanosActual=313.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Compare (=) (exprEvalCountActual=3.2M, exprFalseCountActual=2.8M, exprTrueCountActual=357.6K, exprEvalTimeNanosActual=242.9M, hasNextFalseCountActual=0) +│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.1K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=3.5M, hasNextCallCountActual=3.5M, hasNextTrueCountActual=3.5M, hasNextTimeNanosActual=1564.1M, nextCallCountActual=3.5M, nextTimeNanosActual=44.2M, joinRightIteratorsCreatedActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinRightBindingsConsumedActual=3.5M, firstRowTimeNanosActual=52.9K, leftRowsWithMatchActual=615.0K, openCountActual=1, lastRowTimeNanosActual=3021.5M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=4.1M, rowsDroppedActual=615.0K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=437, avgNextNanosActual=12, leftRowsProbedActual=615.0K, rightRowsScannedActual=3.5M, avgRightRowsPerLeftActual=5.82, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.82, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinType=Cartesian product, inputRowsActual=615.0K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=615.0K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=6.9K, nextCallCountActual=2, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=10.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=3021.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=2.3K, avgNextNanosActual=1.5K) [left] +│ ║ ║ └── Union (resultSizeActual=615.0K, sampleCountActual=2, varianceActual=2.91, stddevActual=1.71, confidenceScoreActual=0.42, hasNextFalseCountActual=0, leftRowsConsumedActual=534.5K, rightRowsConsumedActual=80.5K, leftRowsOutputContributionActual=534.5K, rightRowsOutputContributionActual=80.5K) [right] +│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=534.5K, joinRightIteratorsCreatedActual=80.5K, joinLeftBindingsConsumedActual=80.5K, joinRightBindingsConsumedActual=534.5K, inputRowsActual=615.0K, rowsDroppedActual=80.5K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=80.5K, rightRowsScannedActual=534.5K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) +│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=9.0M, nextCallCountActual=80.5K, nextTimeNanosActual=8.0M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.5K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1315.8M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=100, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=534.5K, hasNextCallCountActual=615.0K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=71.8M, nextCallCountActual=534.5K, nextTimeNanosActual=37.9M, sourceRowsScannedActual=615.0K, sourceRowsMatchedActual=534.5K, sourceRowsFilteredActual=80.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=80.5K, openCountActual=80.5K, lastRowTimeNanosActual=40.2K, closeCountActual=80.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=80.5K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=117, avgNextNanosActual=71, indexHitRateActual=0.87) [right] +│ ║ ║ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=8.1M, nextCallCountActual=80.5K, nextTimeNanosActual=7.0M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1315.8M, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1520.6M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=87, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=3.5M, hasNextCallCountActual=10.1M, hasNextTrueCountActual=9.5M, hasNextTimeNanosActual=601.3M, nextCallCountActual=3.5M, nextTimeNanosActual=167.4M, sourceRowsScannedActual=4.1M, sourceRowsMatchedActual=3.5M, sourceRowsFilteredActual=615.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=615.0K, openCountActual=615.0K, lastRowTimeNanosActual=4.2K, closeCountActual=615.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=615.0K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=59, avgNextNanosActual=47, indexHitRateActual=0.85) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) +│ ║ ├── Or +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ╚══ Compare (=) +│ ║ │ Var (name=w) (bindingState=bound) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union [right] +│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ s: Var (name=entity) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) +│ ║ ║ s: Var (name=entity) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +VALUES ?target { 1 2 } +{ +?entity a . +?entity ?targetNode . +} +UNION +{ +?entity a . +} +OPTIONAL { +?entity ?w . +} +FILTER ((?w = ?target) || (?w = 3)) +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 3321 ms + +Projection (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3305.1M, nextCallCountActual=36.7K, nextTimeNanosActual=5.6M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.9K, avgNextNanosActual=154) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "node" (hasNextFalseCountActual=0) +║ ProjectionElem "neighborCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3304.4M, nextCallCountActual=36.7K, nextTimeNanosActual=3.9M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.9K, avgNextNanosActual=107) +├── Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3303.4M, nextCallCountActual=36.7K, nextTimeNanosActual=2.1M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.8K, avgNextNanosActual=59) +│ ╠══ Filter (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3302.3M, nextCallCountActual=36.7K, nextTimeNanosActual=445.5K, sourceRowsScannedActual=36.7K, sourceRowsMatchedActual=36.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3290.1M, exprEvalCountActual=36.7K, openCountActual=1, exprTrueCountActual=36.7K, lastRowTimeNanosActual=3314.9M, closeCountActual=1, exprEvalTimeNanosActual=8.6M, inputRowsActual=36.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.8K, avgNextNanosActual=12, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=36.7K, exprTrueCountActual=36.7K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=18.3K, hasNextFalseCountActual=0) +│ ║ └── Group (node) (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3290.5M, nextCallCountActual=36.7K, nextTimeNanosActual=985.0K, aggregateEvalCountActual=941.0K, firstRowTimeNanosActual=3290.1M, groupsCreatedActual=36.7K, openCountActual=1, lastRowTimeNanosActual=3314.8M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=470.5K, rowsDroppedActual=433.7K, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.5K, avgNextNanosActual=27) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=470.5K, hasNextCallCountActual=470.5K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=3085.4M, nextCallCountActual=470.5K, nextTimeNanosActual=6.4M, joinRightIteratorsCreatedActual=470.5K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=66, firstRowTimeNanosActual=50.0K, leftRowsWithMatchActual=66, openCountActual=1, emptyRightProbeCountActual=470.4K, lastRowTimeNanosActual=3281.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=470.5K, rowsDroppedActual=66, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=4.1M, stddevActual=2.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=14, leftRowsProbedActual=470.5K, rightRowsScannedActual=66, avgRightRowsPerLeftActual=0.00, joinMatchRateActual=0.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=470.4K) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K, resultSizeActual=470.5K, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=470.5K, inputRowsActual=737.8K, rowsDroppedActual=267.2K, expansionFactorActual=0.64, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=470.5K, rightRowsScannedActual=470.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.5M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=15.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3277.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=138, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=44.0M, nextCallCountActual=267.2K, nextTimeNanosActual=11.1M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=114.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=143, avgNextNanosActual=42, indexHitRateActual=0.87) [right] +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, resultSizeActual=470.5K, hasNextCallCountActual=737.8K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=1774.6M, nextCallCountActual=470.5K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=1.5M, sourceRowsMatchedActual=470.5K, sourceRowsFilteredActual=1.0M, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=1.5M, exprFalseCountActual=1.0M, openCountActual=267.2K, exprTrueCountActual=470.5K, lastRowTimeNanosActual=9.5K, closeCountActual=267.2K, exprEvalTimeNanosActual=637.4M, inputRowsActual=1.5M, rowsDroppedActual=1.0M, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.64, avgHasNextNanosActual=2.4K, avgNextNanosActual=12, filterRejectRateActual=0.70) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=1.5M, exprFalseCountActual=1.0M, exprTrueCountActual=470.5K, exprEvalTimeNanosActual=545.8M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="1"^^) (exprEvalCountActual=1.5M, exprTrueCountActual=1.5M, exprEvalTimeNanosActual=78.2M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="2"^^) (exprEvalCountActual=1.4M, exprTrueCountActual=1.4M, exprEvalTimeNanosActual=73.0M, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="3"^^) (exprEvalCountActual=1.2M, exprTrueCountActual=1.2M, exprEvalTimeNanosActual=59.4M, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=1.8M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=232.4M, nextCallCountActual=1.5M, nextTimeNanosActual=64.9M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=7.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=127, avgNextNanosActual=41, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=66, hasNextCallCountActual=470.5K, hasNextTrueCountActual=66, hasNextTimeNanosActual=242.5M, nextCallCountActual=66, nextTimeNanosActual=3.1K, sourceRowsScannedActual=470.5K, sourceRowsMatchedActual=66, sourceRowsFilteredActual=470.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=470.5K, openCountActual=470.5K, lastRowTimeNanosActual=417, closeCountActual=470.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=470.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=515, avgNextNanosActual=47, indexHitRateActual=0.00) [right] +│ ║ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (node) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ ║ └── Filter (resultSizeEstimate=67.1K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ ╠══ ListMemberOperator +│ ║ │ ║ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ ║ ValueConstant (value="1"^^) +│ ║ │ ║ ║ ValueConstant (value="2"^^) +│ ║ │ ║ ║ ValueConstant (value="3"^^) +│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node, w], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ o: Var (name=neighbor) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] +│ ║ s: Var (name=neighbor) (bindingState=bound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) (bindingState=bound) +│ ║ GroupElem (_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012) +│ ║ Count +│ ║ Var (name=neighbor) (bindingState=bound) +│ ║ GroupElem (neighborCount) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012) +│ Count +│ Var (name=neighbor) (bindingState=unbound) +└── ExtensionElem (neighborCount) +Count (Distinct) +Var (name=neighbor) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3)) +?node ?neighbor . +OPTIONAL { +?neighbor ?node . +} +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + + +Theme: HIGHLY_CONNECTED z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 320 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 136 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=304.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=1.6K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=304.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=750, aggregateEvalCountActual=111.5K, firstRowTimeNanosActual=304.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=304.2M, maxGroupSizeActual=111.5K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=111.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=111.5K, rowsDroppedActual=111.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=750) +│ ╠══ Difference (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=271.9M, nextCallCountActual=111.5K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=13, leftRowsConsumedActual=111.5K, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=190.0M, nextCallCountActual=111.5K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=111.5K, sourceRowsFilteredActual=111.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.6K, exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, openCountActual=1, exprTrueCountActual=111.5K, lastRowTimeNanosActual=304.2M, closeCountActual=1, exprEvalTimeNanosActual=40.4M, inputRowsActual=222.7K, rowsDroppedActual=111.2K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.50) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, exprTrueCountActual=111.5K, exprEvalTimeNanosActual=26.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=222.7K, hasNextCallCountActual=222.7K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=132.3M, nextCallCountActual=222.7K, nextTimeNanosActual=2.2M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=222.7K, firstRowTimeNanosActual=15.4K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=263.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=594, avgNextNanosActual=10, leftRowsProbedActual=40.2K, rightRowsScannedActual=222.7K, avgRightRowsPerLeftActual=5.53, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.53, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3.8M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=74, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=67.6M, nextCallCountActual=222.7K, nextTimeNanosActual=22.1M, firstRowTimeNanosActual=666, openCountActual=40.2K, lastRowTimeNanosActual=5.6K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=108, avgNextNanosActual=99) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=42.9M, nextCallCountActual=222.7K, nextTimeNanosActual=10.3M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=5.3K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=68, avgNextNanosActual=47, indexHitRateActual=0.85) +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optWeight) (hasNextFalseCountActual=0) +│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=65.2M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, exprEvalTimeNanosActual=24.4M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=65.2M, filterRejectRateActual=1.00) +│ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=9.4M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=17.0M, nextCallCountActual=267.2K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optWeight) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="5"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optWeight) +│ ║ │ Var (name=w) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) (bindingState=bound) +│ ║ ║ Var (name=node) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=node) (bindingState=unbound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=neighbor) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight > 5) +MINUS { +?node ?neighbor . +FILTER (?neighbor = ?node) +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 669 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 345 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=653.8M, openCountActual=1, lastRowTimeNanosActual=653.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=327.0M, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.9M, nextCallCountActual=1, nextTimeNanosActual=916, firstRowTimeNanosActual=653.8M, openCountActual=1, lastRowTimeNanosActual=653.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=327.0M, avgNextNanosActual=916) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.8M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=653.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=653.8M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=326.9M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=652.7M, nextCallCountActual=1.0K, nextTimeNanosActual=15.2K, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.1K, exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, openCountActual=1, exprTrueCountActual=1.0K, lastRowTimeNanosActual=653.8M, closeCountActual=1, exprEvalTimeNanosActual=190.6M, inputRowsActual=238.7K, rowsDroppedActual=237.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=602.2K, avgNextNanosActual=14, filterRejectRateActual=1.00) +│ ║ ├── Exists (exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, exprTrueCountActual=1.0K, exprEvalTimeNanosActual=176.6M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=238.7K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=70.3M, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedIndexName=spoc, indexLookupCountActual=238.7K, openCountActual=238.7K, lastRowTimeNanosActual=333, closeCountActual=238.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=237.6K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=295, indexHitRateActual=0.00) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=238.7K, hasNextCallCountActual=238.7K, hasNextTrueCountActual=238.7K, hasNextTimeNanosActual=445.6M, nextCallCountActual=238.7K, nextTimeNanosActual=3.2M, joinRightIteratorsCreatedActual=44.6K, joinLeftBindingsConsumedActual=44.6K, joinRightBindingsConsumedActual=237.7K, firstRowTimeNanosActual=19.9K, leftRowsWithMatchActual=43.5K, openCountActual=1, emptyRightProbeCountActual=1.0K, lastRowTimeNanosActual=653.8M, closeCountActual=1, maxRightRowsPerLeftActual=23.2K, inputRowsActual=282.3K, rowsDroppedActual=43.5K, expansionFactorActual=0.85, sampleCountActual=2, varianceActual=0.00, stddevActual=0.06, confidenceScoreActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.9K, avgNextNanosActual=14, leftRowsProbedActual=44.6K, rightRowsScannedActual=237.7K, avgRightRowsPerLeftActual=5.33, joinMatchRateActual=0.98, joinOutputPerLeftActual=5.35, leftJoinNullExtendedRowsActual=1.0K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K, resultSizeActual=44.6K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=84.8K, joinRightBindingsConsumedActual=44.6K, inputRowsActual=84.8K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=84.8K, rightRowsScannedActual=44.6K, avgRightRowsPerLeftActual=0.53, joinOutputPerLeftActual=0.53) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.2M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=5.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=653.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=41, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=44.8K, resultSizeActual=44.6K, hasNextCallCountActual=84.8K, hasNextTrueCountActual=44.6K, hasNextTimeNanosActual=233.7M, nextCallCountActual=44.6K, nextTimeNanosActual=694.9K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.6K, sourceRowsFilteredActual=178.1K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.6K, exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, openCountActual=40.2K, exprTrueCountActual=44.6K, lastRowTimeNanosActual=16.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=60.3M, inputRowsActual=222.7K, rowsDroppedActual=178.1K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=16, filterRejectRateActual=0.80) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, exprTrueCountActual=44.6K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=46.7M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.4K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=19.6M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=200.4K, exprFalseCountActual=178.1K, exprTrueCountActual=22.3K, exprEvalTimeNanosActual=15.5M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=37.1M, nextCallCountActual=222.7K, nextTimeNanosActual=9.4M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=14.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=141, avgNextNanosActual=43, indexHitRateActual=0.85) +│ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=267.3K, resultSizeActual=237.7K, hasNextCallCountActual=670.5K, hasNextTrueCountActual=625.9K, hasNextTimeNanosActual=46.8M, nextCallCountActual=237.7K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=282.3K, sourceRowsMatchedActual=237.7K, sourceRowsFilteredActual=44.6K, plannedIndexName=ospc, firstRowTimeNanosActual=542, indexLookupCountActual=44.6K, openCountActual=44.6K, lastRowTimeNanosActual=4.7K, closeCountActual=44.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44.6K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=70, avgNextNanosActual=42, indexHitRateActual=0.84) [right] +│ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ o: Var (name=neighbor) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=w) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="1"^^) +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=w) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="2"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ s: Var (name=node) (bindingState=bound) +│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ o: Var (name=w) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] +│ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 1) || (?w = 2)) +OPTIONAL { +?neighbor ?node . +} +FILTER EXISTS { +?node ?neighbor . +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 670 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 309 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=665.0M, openCountActual=1, lastRowTimeNanosActual=665.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=2.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=665.0M, openCountActual=1, lastRowTimeNanosActual=665.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=6.0K, firstRowTimeNanosActual=665.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=665.0M, maxGroupSizeActual=6.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6.0K, rowsDroppedActual=6.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=583) +│ ╠══ Filter (resultSizeActual=6.0K, hasNextCallCountActual=6.0K, hasNextTrueCountActual=6.0K, hasNextTimeNanosActual=661.0M, nextCallCountActual=6.0K, nextTimeNanosActual=83.7K, sourceRowsScannedActual=66.7K, sourceRowsMatchedActual=6.0K, sourceRowsFilteredActual=60.6K, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=78.2K, exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, openCountActual=1, exprTrueCountActual=6.0K, lastRowTimeNanosActual=664.9M, closeCountActual=1, exprEvalTimeNanosActual=274.2M, inputRowsActual=66.7K, rowsDroppedActual=60.6K, selectivityActual=0.09, expansionFactorActual=0.09, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109.0K, avgNextNanosActual=14, filterRejectRateActual=0.91) +│ ║ ├── Not (exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, exprTrueCountActual=6.0K, exprEvalTimeNanosActual=269.8M, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=66.7K, exprFalseCountActual=6.0K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=266.2M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=66.7K, hasNextTrueCountActual=60.6K, hasNextTimeNanosActual=85.0M, sourceRowsScannedActual=172.5K, sourceRowsMatchedActual=60.6K, sourceRowsFilteredActual=111.8K, plannedFilterPassRatio=0.26, filterSelectivitySource=learned_filter, exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, openCountActual=66.7K, lastRowTimeNanosActual=1.2K, exprTrueCountActual=60.6K, closeCountActual=66.7K, exprEvalTimeNanosActual=23.8M, inputRowsActual=172.5K, rowsDroppedActual=172.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.3K, filterRejectRateActual=0.65) +│ ║ │ ╠══ Compare (<) (exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=17.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=172.5K, hasNextCallCountActual=178.5K, hasNextTrueCountActual=172.5K, hasNextTimeNanosActual=33.4M, nextCallCountActual=172.5K, nextTimeNanosActual=7.7M, sourceRowsScannedActual=178.5K, sourceRowsMatchedActual=172.5K, sourceRowsFilteredActual=6.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=66.7K, openCountActual=66.7K, lastRowTimeNanosActual=2.2K, closeCountActual=66.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=188, avgNextNanosActual=45, indexHitRateActual=0.97) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M, resultSizeActual=66.7K, joinRightIteratorsCreatedActual=40.2K, joinRightBindingsConsumedActual=66.7K, inputRowsActual=106.9K, rowsDroppedActual=40.2K, expansionFactorActual=0.62, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=66.7K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, resultSizeActual=40.2K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=40.2K, joinType=Cartesian product, inputRowsActual=40.2K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=40.2K, avgRightRowsPerLeftActual=40.3K, joinOutputPerLeftActual=40.3K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.3K, nextCallCountActual=1, nextTimeNanosActual=500, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.8K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=664.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=667, avgNextNanosActual=500) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.0M, nextCallCountActual=40.2K, nextTimeNanosActual=3.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=w2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ Var (name=node) +│ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ Var (name=w2) +│ ║ ║ , firstRowTimeNanosActual=7.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=664.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=126, avgNextNanosActual=89, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=67.0K, resultSizeActual=66.7K, hasNextCallCountActual=106.9K, hasNextTrueCountActual=66.7K, hasNextTimeNanosActual=262.7M, nextCallCountActual=66.7K, nextTimeNanosActual=789.3K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=66.7K, sourceRowsFilteredActual=156.0K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=958, exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, openCountActual=40.2K, exprTrueCountActual=66.7K, lastRowTimeNanosActual=18.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=92.4M, inputRowsActual=222.7K, rowsDroppedActual=156.0K, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.62, avgHasNextNanosActual=2.5K, avgNextNanosActual=12, filterRejectRateActual=0.70) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, exprTrueCountActual=66.7K, exprEvalTimeNanosActual=78.1M, hasNextFalseCountActual=0) +│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="4"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=10.9M, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=200.5K, exprTrueCountActual=200.5K, exprEvalTimeNanosActual=10.2M, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="6"^^) (exprEvalCountActual=178.3K, exprTrueCountActual=178.3K, exprEvalTimeNanosActual=8.9M, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=41.2M, nextCallCountActual=222.7K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=16.1K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=157, avgNextNanosActual=41, indexHitRateActual=0.85) +│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.26, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=w2) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w2) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=w2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=222.8K) +│ ║ ║ Var (name=node) +│ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ ║ Var (name=w2) +│ ║ ║ ) +│ ║ ║ s: Var (name=node) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=w) (bindingState=bound) +│ ║ │ ValueConstant (value="4"^^) +│ ║ │ ValueConstant (value="5"^^) +│ ║ │ ValueConstant (value="6"^^) +│ ║ └── StatementPattern (resultSizeEstimate=222.8K) +│ ║ s: Var (name=node) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=w) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 4 } +?node a . +?node ?w . +FILTER (?w IN (4, 5, 6)) +FILTER NOT EXISTS { +?node ?w2 . +FILTER (?w2 < ?threshold) +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 3289 ms + +Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3273.4M, nextCallCountActual=40.2K, nextTimeNanosActual=5.9M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=147) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "node" (hasNextFalseCountActual=0) +║ ProjectionElem "neighborCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3272.5M, nextCallCountActual=40.2K, nextTimeNanosActual=4.0M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=101) +├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3271.6M, nextCallCountActual=40.2K, nextTimeNanosActual=2.2M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=55) +│ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3270.4M, nextCallCountActual=40.2K, nextTimeNanosActual=562.5K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3256.0M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3283.6M, closeCountActual=1, exprEvalTimeNanosActual=9.9M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) +│ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3256.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.8M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3256.0M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3283.5M, maxGroupSizeActual=138.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80.9K, avgNextNanosActual=45) +│ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2603.6M, nextCallCountActual=2.9M, nextTimeNanosActual=33.6M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=45.2K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3247.5M, closeCountActual=1, exprEvalTimeNanosActual=489.0M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=886, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=270.8M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1885.7M, nextCallCountActual=2.9M, nextTimeNanosActual=34.1M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=26.7K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=642, avgNextNanosActual=12, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=163.6M, nextCallCountActual=534.5K, nextTimeNanosActual=9.7M, firstRowTimeNanosActual=24.5K, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0.73, stddevActual=0.85, confidenceScoreActual=0.52, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=306, avgNextNanosActual=18, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.7M, nextCallCountActual=40.2K, nextTimeNanosActual=2.8M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=17.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1643.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=119, avgNextNanosActual=72, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=39.9M, nextCallCountActual=267.2K, nextTimeNanosActual=14.9M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=53.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=130, avgNextNanosActual=56, indexHitRateActual=0.87) [right] +│ ║ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.3M, nextCallCountActual=267.2K, nextTimeNanosActual=16.5M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1643.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=62, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=913.9M, nextCallCountActual=2.9M, nextTimeNanosActual=307.9M, firstRowTimeNanosActual=958, openCountActual=534.5K, lastRowTimeNanosActual=8.0K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=110, avgNextNanosActual=105) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=574.4M, nextCallCountActual=2.9M, nextTimeNanosActual=134.4M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=7.7K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=69, avgNextNanosActual=46, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) +│ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "neighborCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (node) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optWeight) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── ExtensionElem (optWeight) +│ ║ Var (name=w) (bindingState=bound) +│ ║ GroupElem (_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ Count +│ ║ Var (name=neighbor) (bindingState=bound) +│ ║ GroupElem (neighborCount) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234) +│ Count +│ Var (name=neighbor) (bindingState=unbound) +└── ExtensionElem (neighborCount) +Count (Distinct) +Var (name=neighbor) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { +{ +?node a . +?node ?neighbor . +} +UNION +{ +?neighbor ?node . +} +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) + + +Theme: HIGHLY_CONNECTED z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 507 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 254 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=505.7M, openCountActual=1, lastRowTimeNanosActual=505.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=5.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=505.7M, openCountActual=1, lastRowTimeNanosActual=505.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=2.8K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, aggregateEvalCountActual=44.7K, firstRowTimeNanosActual=505.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=505.8M, maxGroupSizeActual=44.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=44.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=44.7K, rowsDroppedActual=44.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=1.0K) +│ ╠══ Difference (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=480.5M, nextCallCountActual=44.7K, nextTimeNanosActual=609.5K, firstRowTimeNanosActual=69.2M, openCountActual=1, lastRowTimeNanosActual=505.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.7K, avgNextNanosActual=14, leftRowsConsumedActual=44.7K, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=403.5M, nextCallCountActual=44.7K, nextTimeNanosActual=644.0K, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=61.9K, exprEvalCountActual=44.7K, openCountActual=1, exprTrueCountActual=44.7K, lastRowTimeNanosActual=505.6M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=43.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=44.7K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.0K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=44.7K, exprTrueCountActual=44.7K, exprEvalTimeNanosActual=40.9M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=17.2M, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, plannedIndexName=spoc, indexLookupCountActual=44.7K, openCountActual=44.7K, lastRowTimeNanosActual=459, closeCountActual=44.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=385, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K, resultSizeActual=44.7K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=44.7K, inputRowsActual=85.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=44.7K, avgRightRowsPerLeftActual=1.11, joinOutputPerLeftActual=1.11) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.3M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=neighbor) +│ ║ │ │ , firstRowTimeNanosActual=8.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=505.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=41, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=44.9K, resultSizeActual=44.7K, hasNextCallCountActual=85.0K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=237.3M, nextCallCountActual=44.7K, nextTimeNanosActual=631.2K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=177.9K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.5K, exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, openCountActual=40.2K, exprTrueCountActual=44.7K, lastRowTimeNanosActual=5.9K, closeCountActual=40.2K, exprEvalTimeNanosActual=60.2M, inputRowsActual=222.7K, rowsDroppedActual=177.9K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=14, filterRejectRateActual=0.80) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, exprTrueCountActual=44.7K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=46.7M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.5K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=18.9M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=200.5K, exprFalseCountActual=177.9K, exprTrueCountActual=22.5K, exprEvalTimeNanosActual=15.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="9"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=250, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=36.9M, nextCallCountActual=222.7K, nextTimeNanosActual=7.9M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=791, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=3.2K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=140, avgNextNanosActual=36, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=69.1M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=69.1M, closeCountActual=1, exprEvalTimeNanosActual=25.4M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=69.2M, filterRejectRateActual=1.00) +│ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=9.8M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=16.7M, nextCallCountActual=267.2K, nextTimeNanosActual=12.3M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=69.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=63, avgNextNanosActual=46, indexHitRateActual=1.00) +│ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=neighbor) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=w) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="8"^^) +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="9"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) (bindingState=bound) +│ ║ ║ Var (name=node) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 8) || (?w = 9)) +FILTER EXISTS { +?node ?neighbor . +} +MINUS { +?neighbor ?node . +FILTER (?neighbor = ?node) +} +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 2325 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=2320.2M, openCountActual=1, lastRowTimeNanosActual=2320.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=2.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=2320.2M, openCountActual=1, lastRowTimeNanosActual=2320.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=1.3K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=432, firstRowTimeNanosActual=2320.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2320.2M, maxGroupSizeActual=432, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=432, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=432, rowsDroppedActual=431, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=625) +│ ╠══ Filter (resultSizeActual=432, hasNextCallCountActual=434, hasNextTrueCountActual=433, hasNextTimeNanosActual=2319.8M, nextCallCountActual=432, nextTimeNanosActual=5.7K, sourceRowsScannedActual=1.6K, sourceRowsMatchedActual=432, sourceRowsFilteredActual=1.1K, plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=56.5K, exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=432, lastRowTimeNanosActual=2320.2M, closeCountActual=1, exprEvalTimeNanosActual=874.5K, inputRowsActual=1.6K, rowsDroppedActual=1.1K, selectivityActual=0.27, expansionFactorActual=0.27, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3M, avgNextNanosActual=13, filterRejectRateActual=0.73) +│ ║ ├── ListMemberOperator (exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, exprTrueCountActual=432, exprEvalTimeNanosActual=750.2K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="7"^^) (exprEvalCountActual=1.6K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=114.6K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1.4K, exprTrueCountActual=1.4K, exprEvalTimeNanosActual=90.3K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="9"^^) (exprEvalCountActual=1.3K, exprTrueCountActual=1.3K, exprEvalTimeNanosActual=82.9K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=2318.8M, nextCallCountActual=1.6K, nextTimeNanosActual=30.1K, joinRightIteratorsCreatedActual=294, joinLeftBindingsConsumedActual=294, joinRightBindingsConsumedActual=1.6K, firstRowTimeNanosActual=43.7K, leftRowsWithMatchActual=294, openCountActual=1, lastRowTimeNanosActual=2320.1M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=1.9K, rowsDroppedActual=294, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4M, avgNextNanosActual=19, leftRowsProbedActual=294, rightRowsScannedActual=1.6K, avgRightRowsPerLeftActual=5.54, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.54, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Filter (resultSizeActual=294, hasNextCallCountActual=295, hasNextTrueCountActual=294, hasNextTimeNanosActual=2318.1M, nextCallCountActual=294, nextTimeNanosActual=15.0K, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=42.6K, exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, openCountActual=1, exprTrueCountActual=294, lastRowTimeNanosActual=2320.1M, closeCountActual=1, exprEvalTimeNanosActual=1613.0M, inputRowsActual=1.7M, rowsDroppedActual=1.7M, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.9M, avgNextNanosActual=51, filterRejectRateActual=1.00) [left] +│ ║ ║ ├── Exists (exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, exprTrueCountActual=294, exprEvalTimeNanosActual=1487.4M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1.7M, hasNextTrueCountActual=294, hasNextTimeNanosActual=735.1M, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedIndexName=spoc, indexLookupCountActual=1.7M, openCountActual=1.7M, lastRowTimeNanosActual=375, closeCountActual=1.7M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.7M, nextPerHasNextRatioActual=0, avgHasNextNanosActual=421, indexHitRateActual=0.00) +│ ║ ║ │ s: Var (name=end) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K, resultSizeActual=1.7M, joinRightIteratorsCreatedActual=267.2K, joinRightBindingsConsumedActual=1.7M, inputRowsActual=2.0M, rowsDroppedActual=267.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=3.67, stddevActual=1.92, confidenceScoreActual=0.41, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.7M) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] +│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.8M, nextCallCountActual=40.2K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2320.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=121, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=42.3M, nextCallCountActual=267.2K, nextTimeNanosActual=12.9M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=666, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=78.4K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=138, avgNextNanosActual=49, indexHitRateActual=0.87) [right] +│ ║ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=mid) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=1.7M, hasNextCallCountActual=2.0M, hasNextTrueCountActual=1.7M, hasNextTimeNanosActual=269.0M, nextCallCountActual=1.7M, nextTimeNanosActual=75.7M, sourceRowsScannedActual=2.0M, sourceRowsMatchedActual=1.7M, sourceRowsFilteredActual=267.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] +│ ║ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ Var (name=end) +│ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ Var (name=node) +│ ║ ║ , firstRowTimeNanosActual=666, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=14.3K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=134, avgNextNanosActual=43, indexHitRateActual=0.87) +│ ║ ║ s: Var (name=mid) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=end) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.6K, hasNextCallCountActual=4.5K, hasNextTrueCountActual=4.2K, hasNextTimeNanosActual=291.7K, nextCallCountActual=1.6K, nextTimeNanosActual=87.1K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=294, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=294, openCountActual=294, lastRowTimeNanosActual=10.6K, closeCountActual=294, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=294, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=64, avgNextNanosActual=53, indexHitRateActual=0.85) [right] +│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optWeight) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optWeight) (bindingState=bound) +│ ║ │ ValueConstant (value="7"^^) +│ ║ │ ValueConstant (value="8"^^) +│ ║ │ ValueConstant (value="9"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +│ ║ ║ ├── Exists +│ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=end) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=node) (bindingState=bound) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ s: Var (name=node) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] +│ ║ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ Var (name=end) +│ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ Var (name=node) +│ ║ ║ ) +│ ║ ║ s: Var (name=mid) (bindingState=bound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=end) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) (bindingState=bound) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=optWeight) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?mid . +?mid ?end . +FILTER EXISTS { +?end ?node . +} +OPTIONAL { +?node ?optWeight . +} +FILTER (?optWeight IN (7, 8, 9)) +} + + +Theme: HIGHLY_CONNECTED z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 3282 ms + +Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3270.3M, nextCallCountActual=40.2K, nextTimeNanosActual=5.4M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=135) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "node" (hasNextFalseCountActual=0) +║ ProjectionElem "degree" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3269.5M, nextCallCountActual=40.2K, nextTimeNanosActual=3.6M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=90) +├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3268.6M, nextCallCountActual=40.2K, nextTimeNanosActual=2.0M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=51) +│ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3267.3M, nextCallCountActual=40.2K, nextTimeNanosActual=566.1K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3252.0M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3279.6M, closeCountActual=1, exprEvalTimeNanosActual=11.0M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=6.2M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3252.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3252.0M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3279.6M, maxGroupSizeActual=134.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80.8K, avgNextNanosActual=41) +│ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2579.0M, nextCallCountActual=2.9M, nextTimeNanosActual=32.8M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=40.7K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3243.6M, closeCountActual=1, exprEvalTimeNanosActual=481.3M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=878, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=269.7M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1865.7M, nextCallCountActual=2.9M, nextTimeNanosActual=34.9M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=23.4K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=635, avgNextNanosActual=12, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=114.1M, nextCallCountActual=534.5K, nextTimeNanosActual=10.7M, firstRowTimeNanosActual=17.1K, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=213, avgNextNanosActual=20, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] +│ ║ ║ ├── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=26.9M, nextCallCountActual=267.2K, nextTimeNanosActual=15.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=20.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1519.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=59, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.4M, nextCallCountActual=267.2K, nextTimeNanosActual=17.4M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1519.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=65, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=942.9M, nextCallCountActual=2.9M, nextTimeNanosActual=310.0M, firstRowTimeNanosActual=625, openCountActual=534.5K, lastRowTimeNanosActual=5.9K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=114, avgNextNanosActual=106) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=596.8M, nextCallCountActual=2.9M, nextTimeNanosActual=139.4M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=5.6K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=72, avgNextNanosActual=47, indexHitRateActual=0.85) +│ ║ │ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) +│ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (degree) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (degree) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "node" +║ ProjectionElem "degree" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (node) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optWeight) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=node) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=neighbor) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=neighbor) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── ExtensionElem (optWeight) +│ ║ Var (name=w) (bindingState=bound) +│ ║ GroupElem (_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=neighbor) (bindingState=bound) +│ ║ GroupElem (degree) +│ ║ Count (Distinct) +│ ║ Var (name=neighbor) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=neighbor) (bindingState=unbound) +└── ExtensionElem (degree) +Count (Distinct) +Var (name=neighbor) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { +?node (|^) ?neighbor . +OPTIONAL { +?neighbor ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight != 0) +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 1) + + +Theme: HIGHLY_CONNECTED z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 1159 ms +Warmup execution 1/1 +Fastest execution time: 537 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=1120.7M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=5.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=1120.7M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=3.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=95, firstRowTimeNanosActual=1120.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1120.7M, maxGroupSizeActual=95, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=95, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=95, rowsDroppedActual=94, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=1.1K) +│ ╠══ Difference (resultSizeActual=95, hasNextCallCountActual=97, hasNextTrueCountActual=96, hasNextTimeNanosActual=1120.5M, nextCallCountActual=95, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=32.0M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=11.6M, avgNextNanosActual=18, leftRowsConsumedActual=95, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=95, hasNextCallCountActual=96, hasNextTrueCountActual=95, hasNextTimeNanosActual=1105.7M, nextCallCountActual=95, nextTimeNanosActual=1.7K, sourceRowsScannedActual=89.1K, sourceRowsMatchedActual=95, sourceRowsFilteredActual=89.0K, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=17.3M, exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, openCountActual=1, exprTrueCountActual=95, lastRowTimeNanosActual=1120.6M, closeCountActual=1, exprEvalTimeNanosActual=654.8M, inputRowsActual=89.1K, rowsDroppedActual=89.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=11.5M, avgNextNanosActual=18, filterRejectRateActual=1.00) +│ ║ │ ╠══ Not (exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, exprTrueCountActual=95, exprEvalTimeNanosActual=649.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Exists (exprEvalCountActual=89.1K, exprFalseCountActual=95, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=643.3M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.4K, resultSizeActual=0, joinRightIteratorsCreatedActual=115.3K, joinLeftBindingsConsumedActual=115.3K, joinRightBindingsConsumedActual=89.0K, inputRowsActual=204.3K, rowsDroppedActual=204.3K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=115.3K, rightRowsScannedActual=89.0K, avgRightRowsPerLeftActual=0.77, joinOutputPerLeftActual=0) +│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=115.3K, hasNextCallCountActual=115.4K, hasNextTrueCountActual=115.3K, hasNextTimeNanosActual=39.0M, nextCallCountActual=115.3K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=115.4K, sourceRowsMatchedActual=115.3K, sourceRowsFilteredActual=95, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=834, indexLookupCountActual=89.1K, openCountActual=89.1K, lastRowTimeNanosActual=2.6K, closeCountActual=89.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=95, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=338, avgNextNanosActual=52, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── Filter (resultSizeActual=89.0K, hasNextCallCountActual=115.3K, hasNextTrueCountActual=89.0K, hasNextTimeNanosActual=247.6M, nextCallCountActual=89.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=511.1K, sourceRowsMatchedActual=89.0K, sourceRowsFilteredActual=422.1K, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.4K, exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, openCountActual=115.3K, exprTrueCountActual=89.0K, lastRowTimeNanosActual=1.8K, closeCountActual=115.3K, exprEvalTimeNanosActual=69.6M, inputRowsActual=511.1K, rowsDroppedActual=422.1K, selectivityActual=0.17, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.77, avgHasNextNanosActual=2.1K, avgNextNanosActual=17, filterRejectRateActual=0.83) [right] +│ ║ │ ║ ╠══ Compare (<) (exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=51.1M, hasNextFalseCountActual=0) +│ ║ │ ║ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=511.1K, hasNextCallCountActual=537.5K, hasNextTrueCountActual=511.1K, hasNextTimeNanosActual=80.3M, nextCallCountActual=511.1K, nextTimeNanosActual=25.8M, sourceRowsScannedActual=537.5K, sourceRowsMatchedActual=511.1K, sourceRowsFilteredActual=26.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) +│ ║ │ ║ Var (name=w2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ║ , plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=115.3K, openCountActual=115.3K, lastRowTimeNanosActual=3.1K, closeCountActual=115.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=149, avgNextNanosActual=51, indexHitRateActual=0.95) +│ ║ │ ║ s: Var (name=n2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M, resultSizeActual=89.1K, joinRightIteratorsCreatedActual=40.2K, joinRightBindingsConsumedActual=89.1K, inputRowsActual=129.3K, rowsDroppedActual=40.2K, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=89.1K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, resultSizeActual=40.2K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=40.2K, joinType=Cartesian product, inputRowsActual=40.2K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=40.2K, avgRightRowsPerLeftActual=40.3K, joinOutputPerLeftActual=40.3K) [left] +│ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=4.6K, nextCallCountActual=1, nextTimeNanosActual=750, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.6K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=1120.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.3K, avgNextNanosActual=750) [left] +│ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.2M, nextCallCountActual=40.2K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ │ │ Exists +│ ║ │ │ Join (resultSizeEstimate=127.4K) +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Filter +│ ║ │ │ Compare (<) +│ ║ │ │ Var (name=w2) +│ ║ │ │ Var (name=threshold) +│ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ │ Var (name=w2) +│ ║ │ │ , firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1120.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=130, avgNextNanosActual=99, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=89.4K, resultSizeActual=89.1K, hasNextCallCountActual=129.3K, hasNextTrueCountActual=89.1K, hasNextTimeNanosActual=301.7M, nextCallCountActual=89.1K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=89.1K, sourceRowsFilteredActual=133.6K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, openCountActual=40.2K, exprTrueCountActual=89.1K, lastRowTimeNanosActual=24.1K, closeCountActual=40.2K, exprEvalTimeNanosActual=111.1M, inputRowsActual=222.7K, rowsDroppedActual=133.6K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.69, avgHasNextNanosActual=2.3K, avgNextNanosActual=12, filterRejectRateActual=0.60) [right] +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, exprTrueCountActual=89.1K, exprEvalTimeNanosActual=97.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="1"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="2"^^) (exprEvalCountActual=200.4K, exprTrueCountActual=200.4K, exprEvalTimeNanosActual=10.7M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="3"^^) (exprEvalCountActual=178.1K, exprTrueCountActual=178.1K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="4"^^) (exprEvalCountActual=155.9K, exprTrueCountActual=155.9K, exprEvalTimeNanosActual=8.0M, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=41.2M, nextCallCountActual=222.7K, nextTimeNanosActual=8.8M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=20.7K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=157, avgNextNanosActual=40, indexHitRateActual=0.85) +│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=14.6M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=14.6M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=14.6M, indexHitRateActual=0) +│ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ ExtensionElem (_anon_path_56323f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ │ ╠══ Not +│ ║ │ ║ Exists +│ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=123.5K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) +│ ║ │ ║ └── Filter (plannedFilterPassRatio=0.23, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] +│ ║ │ ║ ╠══ Compare (<) +│ ║ │ ║ ║ Var (name=w2) (bindingState=bound) +│ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) +│ ║ │ ║ Var (name=w2) +│ ║ │ ║ Var (name=threshold) +│ ║ │ ║ , plannedLookupComponents=[S, P]) +│ ║ │ ║ s: Var (name=n2) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w2) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] +│ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ │ │ Exists +│ ║ │ │ Join (resultSizeEstimate=123.5K) +│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ │ Var (name=node) +│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Filter +│ ║ │ │ Compare (<) +│ ║ │ │ Var (name=w2) +│ ║ │ │ Var (name=threshold) +│ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ │ Var (name=n2) +│ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ │ Var (name=w2) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=node) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=w) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="1"^^) +│ ║ │ ║ ValueConstant (value="2"^^) +│ ║ │ ║ ValueConstant (value="3"^^) +│ ║ │ ║ ValueConstant (value="4"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) (bindingState=bound) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) (bindingState=unbound) +│ ║ └── Extension +│ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ s: Var (name=node) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=node) (bindingState=unbound) +│ ║ ╚══ ExtensionElem (_anon_path_17323f2fe36952f541b08a42a7b8ce15e70d0) +│ ║ Var (name=node) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +VALUES ?threshold { 3 } +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3, 4)) +FILTER NOT EXISTS { +?node ?n2 . +?n2 ?w2 . +FILTER (?w2 < ?threshold) +} +MINUS { +?node ?node . +BIND(?node AS ?_anon_path_17323f2fe36952f541b08a42a7b8ce15e70d0) +} +} + + +Theme: TRAIN z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 77 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 41 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.1M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=66.0M, openCountActual=1, lastRowTimeNanosActual=66.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.1M, avgNextNanosActual=1.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.1M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=66.1M, openCountActual=1, lastRowTimeNanosActual=66.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.1M, avgNextNanosActual=667) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.0M, nextCallCountActual=1, nextTimeNanosActual=333, aggregateEvalCountActual=18.0K, firstRowTimeNanosActual=66.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=66.1M, maxGroupSizeActual=18.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=18.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18.0K, rowsDroppedActual=18.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.0M, avgNextNanosActual=333) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=60.3M, nextCallCountActual=18.0K, nextTimeNanosActual=195.8K, joinRightIteratorsCreatedActual=18.0K, joinLeftBindingsConsumedActual=18.0K, joinRightBindingsConsumedActual=18.0K, firstRowTimeNanosActual=14.5K, leftRowsWithMatchActual=18.0K, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36.0K, rowsDroppedActual=18.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=11, leftRowsProbedActual=18.0K, rightRowsScannedActual=18.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=41.6M, nextCallCountActual=18.0K, nextTimeNanosActual=258.6K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=7.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=12.6K, exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, openCountActual=1, exprTrueCountActual=18.0K, lastRowTimeNanosActual=66.0M, closeCountActual=1, exprEvalTimeNanosActual=19.9M, inputRowsActual=25.8K, rowsDroppedActual=7.8K, selectivityActual=0.70, expansionFactorActual=0.70, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.3K, avgNextNanosActual=14, filterRejectRateActual=0.30) [left] +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, exprTrueCountActual=18.0K, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTime) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=1, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=19.7M, nextCallCountActual=25.8K, nextTimeNanosActual=283.6K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=7.7K, leftRowsWithMatchActual=8.6K, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=34.4K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=762, avgNextNanosActual=11, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=791.7K, nextCallCountActual=8.6K, nextTimeNanosActual=512.4K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=4.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=92, avgNextNanosActual=59, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=9.9M, nextCallCountActual=25.8K, nextTimeNanosActual=2.6M, firstRowTimeNanosActual=584, openCountActual=8.6K, lastRowTimeNanosActual=9.8K, closeCountActual=8.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=144, avgNextNanosActual=104) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=6.3M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=9.6K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=93, avgNextNanosActual=45, indexHitRateActual=0.75) +│ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optTime) (hasNextFalseCountActual=0) +│ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=18.0K, hasNextCallCountActual=36.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=7.6M, nextCallCountActual=18.0K, nextTimeNanosActual=886.0K, sourceRowsScannedActual=36.0K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=18.0K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=18.0K, openCountActual=18.0K, lastRowTimeNanosActual=584, closeCountActual=18.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=213, avgNextNanosActual=49, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optTime) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="08:00:00"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] +│ ║ │ │ s: Var (name=service) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ │ ║ s: Var (name=service) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ │ ║ o: Var (name=time) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optTime) +│ ║ │ Var (name=time) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=service) (bindingState=bound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service a . +OPTIONAL { +?service ?time . +BIND(?time AS ?optTime) +} +FILTER (?optTime > "08:00:00"^^) +OPTIONAL { +?service ?name . +} +} + + +Theme: TRAIN z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 96 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 57 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=86.8M, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=86.8M, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=4, firstRowTimeNanosActual=86.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=86.8M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=375) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=86.8M, nextCallCountActual=4, nextTimeNanosActual=124, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.1K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=86.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=14.5M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=67.9M, nextCallCountActual=4, nextTimeNanosActual=208, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=59.7K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=52.2K, exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=86.8M, closeCountActual=1, exprEvalTimeNanosActual=28.0M, inputRowsActual=59.7K, rowsDroppedActual=59.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=13.6M, avgNextNanosActual=52, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=18.0M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, resultSizeActual=59.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=29.9K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=29.9K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=667, nextCallCountActual=2, nextTimeNanosActual=209, firstRowTimeNanosActual=16.9K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=38.3K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=222, avgNextNanosActual=105) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.5M, nextCallCountActual=29.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=67.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=46, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=13.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.6K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=16.9K, rowsDroppedActual=16.9K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=6.9M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=5.1M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=672.9K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, resultSizeActual=16.9K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=8.4K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=8.5K) +│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=541, nextCallCountActual=2, nextTimeNanosActual=292, firstRowTimeNanosActual=67.9M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=67.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=180, avgNextNanosActual=146) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K, resultSizeActual=8.4K, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=8.4K, inputRowsActual=16.9K, rowsDroppedActual=8.4K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=5.16, stddevActual=2.27, confidenceScoreActual=0.38, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=8.4K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=700.6K, nextCallCountActual=8.4K, nextTimeNanosActual=391.0K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=67.9M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=46, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.7M, nextCallCountActual=8.4K, nextTimeNanosActual=455.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=459, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.5K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=219, avgNextNanosActual=54, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.4K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=334, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=365, indexHitRateActual=0) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="OP 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="OP 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] +│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +UNION +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +OPTIONAL { +?entity ?op . +} +} + + +Theme: TRAIN z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 54 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 27 ms + +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=583) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "line" (hasNextFalseCountActual=0) +║ ProjectionElem "sectionCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=916, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=305) +├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=584, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=195) +│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=41, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=46.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=46.7M, closeCountActual=1, exprEvalTimeNanosActual=2.9K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) +│ ║ └── Group (line) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.6M, nextCallCountActual=3, nextTimeNanosActual=334, aggregateEvalCountActual=52, firstRowTimeNanosActual=46.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=46.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=8.67, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=26, rowsDroppedActual=23, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=111) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=26, hasNextCallCountActual=28, hasNextTrueCountActual=27, hasNextTimeNanosActual=46.6M, nextCallCountActual=26, nextTimeNanosActual=416, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=26, firstRowTimeNanosActual=27.1K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=46.6M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=29, rowsDroppedActual=3, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=1.5M, stddevActual=1.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.7M, avgNextNanosActual=16, leftRowsProbedActual=3, rightRowsScannedActual=26, avgRightRowsPerLeftActual=8.67, joinMatchRateActual=1.00, joinOutputPerLeftActual=8.67, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444, resultSizeActual=3, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=3, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=5.4K, stddevActual=73, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=816.8K, nextCallCountActual=8.4K, nextTimeNanosActual=298.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=46.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=35, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=444, resultSizeActual=3, hasNextCallCountActual=8.4K, hasNextTrueCountActual=3, hasNextTimeNanosActual=27.6M, nextCallCountActual=3, nextTimeNanosActual=250, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=8.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.9K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=3, lastRowTimeNanosActual=3.1K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.5M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=83, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=3, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=lineName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Line 0") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=234.8K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Line 1") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=231.3K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Line 2") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=333.0K, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=322.3K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=lineName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=67.4K, resultSizeActual=26, hasNextCallCountActual=75, hasNextTrueCountActual=72, hasNextTimeNanosActual=6.6K, nextCallCountActual=26, nextTimeNanosActual=2.5K, sourceRowsScannedActual=29, sourceRowsMatchedActual=26, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=791, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.0K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=88, avgNextNanosActual=98, indexHitRateActual=0.90) [right] +│ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (sectionCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (sectionCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "sectionCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (line) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=line) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=lineName) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Line 0") +│ ║ │ │ ValueConstant (value="Line 1") +│ ║ │ │ ValueConstant (value="Line 2") +│ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) +│ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=lineName) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] +│ ║ s: Var (name=section) (bindingState=unbound) +│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ o: Var (name=line) (bindingState=bound) +│ ║ GroupElem (_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456) +│ ║ Count +│ ║ Var (name=section) (bindingState=bound) +│ ║ GroupElem (sectionCount) +│ ║ Count (Distinct) +│ ║ Var (name=section) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456) +│ Count +│ Var (name=section) (bindingState=unbound) +└── ExtensionElem (sectionCount) +Count (Distinct) +Var (name=section) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { +?line a . +?line ?lineName . +FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) +OPTIONAL { +?section ?line . +} +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) + + +Theme: TRAIN z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 297 ms +Warmup execution 1/6 +Warmup execution 2/6 +Warmup execution 3/6 +Warmup execution 4/6 +Warmup execution 5/6 +Warmup execution 6/6 +Fastest execution time: 169 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=2.6K, firstRowTimeNanosActual=290.9M, openCountActual=1, lastRowTimeNanosActual=291.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=2.6K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=290.9M, openCountActual=1, lastRowTimeNanosActual=291.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=1.5K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=1000, aggregateEvalCountActual=67.3K, firstRowTimeNanosActual=290.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=291.0M, maxGroupSizeActual=67.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=67.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=67.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=1000) +│ ╠══ Difference (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=246.9M, nextCallCountActual=67.3K, nextTimeNanosActual=742.1K, firstRowTimeNanosActual=35.7M, openCountActual=1, lastRowTimeNanosActual=290.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=9, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=11, leftRowsConsumedActual=67.3K, rightRowsConsumedActual=1, overlapRowsActual=8) +│ ║ ├── Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=189.1M, nextCallCountActual=67.3K, nextTimeNanosActual=925.0K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.4K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=290.8M, closeCountActual=1, exprEvalTimeNanosActual=7.4M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTrack) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=176.6M, nextCallCountActual=67.3K, nextTimeNanosActual=587.2K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=67.3K, firstRowTimeNanosActual=17.4K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=290.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=8.71, leftRowsProbedActual=67.3K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=6.8M, nextCallCountActual=67.3K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=8.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=290.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=60, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.5K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.6M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=709, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.1K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=49.5M, nextCallCountActual=67.3K, nextTimeNanosActual=10.2M, firstRowTimeNanosActual=500, openCountActual=67.3K, lastRowTimeNanosActual=2.0K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=368, avgNextNanosActual=152) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=31.1M, nextCallCountActual=67.3K, nextTimeNanosActual=4.3M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=1.7K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=231, avgNextNanosActual=65, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optTrack) (hasNextFalseCountActual=0) +│ ║ │ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=35.6M, nextCallCountActual=1, nextTimeNanosActual=83, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=22.5M, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=35.6M, closeCountActual=1, exprEvalTimeNanosActual=28.5M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=17.8M, avgNextNanosActual=83, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=25.7M, hasNextFalseCountActual=0) +│ ║ ║ ├── Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=20.9M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="Line 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.3M, nextCallCountActual=46.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=35.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=71, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrack) (bindingState=bound) +│ ║ │ ║ Var (name=section) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ s: Var (name=section) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ ║ s: Var (name=section) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ │ ║ o: Var (name=track) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optTrack) +│ ║ │ Var (name=track) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="Line 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=line) (bindingState=unbound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=section) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=section) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section ?line . +?section a . +OPTIONAL { +?section ?track . +BIND(?track AS ?optTrack) +} +FILTER (?optTrack != ?section) +MINUS { +?line ?name . +FILTER (CONTAINS(STR(?name), "Line 0")) +} +} + + +Theme: TRAIN z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 337 ms +Warmup execution 1/5 +Warmup execution 2/5 +Warmup execution 3/5 +Warmup execution 4/5 +Warmup execution 5/5 +Fastest execution time: 178 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=335.7M, openCountActual=1, lastRowTimeNanosActual=335.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=335.7M, openCountActual=1, lastRowTimeNanosActual=335.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=36, firstRowTimeNanosActual=335.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=335.7M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=36, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=36, rowsDroppedActual=35, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=542) +│ ╠══ Filter (resultSizeActual=36, hasNextCallCountActual=38, hasNextTrueCountActual=37, hasNextTimeNanosActual=335.7M, nextCallCountActual=36, nextTimeNanosActual=585, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=58.9K, exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, openCountActual=1, exprTrueCountActual=36, lastRowTimeNanosActual=335.7M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=209.8M, metricOrigin.varsAddedActual=derived, inputRowsActual=269.5K, rowsDroppedActual=269.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=8.8M, avgNextNanosActual=16, filterRejectRateActual=1.00) +│ ║ ├── Exists (exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, exprTrueCountActual=36, exprEvalTimeNanosActual=192.1M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=269.5K, hasNextTrueCountActual=36, hasNextTimeNanosActual=77.7M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedIndexName=spoc, indexLookupCountActual=269.5K, openCountActual=269.5K, lastRowTimeNanosActual=333, closeCountActual=269.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=269.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=288, indexHitRateActual=0.00) +│ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=106.9M, nextCallCountActual=269.5K, nextTimeNanosActual=4.2M, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=34.9K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=335.6M, closeCountActual=1, maxRightRowsPerLeftActual=134.7K, inputRowsActual=269.5K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=12.1K, stddevActual=110, confidenceScoreActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=397, avgNextNanosActual=16, leftRowsProbedActual=2, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=134.8K, joinMatchRateActual=1.00, joinOutputPerLeftActual=134.8K, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444, resultSizeActual=2, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=2, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=12.2K, stddevActual=110, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] +│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=886.8K, nextCallCountActual=8.4K, nextTimeNanosActual=327.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=4.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=335.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=39, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=444, resultSizeActual=2, hasNextCallCountActual=8.4K, hasNextTrueCountActual=2, hasNextTimeNanosActual=31.3M, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=8.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=11.9K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=2, lastRowTimeNanosActual=3.8K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.4M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=105, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=5.9M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Line 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=365.0K, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Line 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=351.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=42, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=808.6K, hasNextTrueCountActual=808.6K, hasNextTimeNanosActual=27.5M, nextCallCountActual=269.5K, nextTimeNanosActual=9.9M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=2, plannedIndexName=psoc, firstRowTimeNanosActual=3.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=142.1M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=34, avgNextNanosActual=37, indexHitRateActual=1.00) [right] +│ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ s: Var (name=section) (bindingState=bound) +│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ o: Var (name=line) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ s: Var (name=line) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=444, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Line 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Line 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ ║ s: Var (name=line) (bindingState=bound) +│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ ║ o: Var (name=name) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=section) (bindingState=unbound) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?name . +FILTER ((?name = "Line 1") || (?name = "Line 2")) +OPTIONAL { +?section ?op . +} +FILTER EXISTS { +?section ?line . +} +} + + +Theme: TRAIN z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 74 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 43 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=68.1M, openCountActual=1, lastRowTimeNanosActual=68.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=1.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=68.1M, openCountActual=1, lastRowTimeNanosActual=68.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=792) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=24, firstRowTimeNanosActual=68.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=68.1M, maxGroupSizeActual=24, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=24, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24, rowsDroppedActual=23, selectivityActual=0.04, expansionFactorActual=0.04, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=500) +│ ╠══ Filter (resultSizeActual=24, hasNextCallCountActual=26, hasNextTrueCountActual=25, hasNextTimeNanosActual=68.0M, nextCallCountActual=24, nextTimeNanosActual=416, sourceRowsScannedActual=94, sourceRowsMatchedActual=24, sourceRowsFilteredActual=70, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=3.3M, exprEvalCountActual=94, exprFalseCountActual=70, openCountActual=1, exprTrueCountActual=24, lastRowTimeNanosActual=68.1M, closeCountActual=1, exprEvalTimeNanosActual=476.2K, inputRowsActual=94, rowsDroppedActual=70, selectivityActual=0.26, expansionFactorActual=0.26, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=2.6M, avgNextNanosActual=17, filterRejectRateActual=0.74) +│ ║ ├── Not (exprEvalCountActual=94, exprFalseCountActual=70, exprTrueCountActual=24, exprEvalTimeNanosActual=468.3K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=94, exprFalseCountActual=24, exprTrueCountActual=70, exprEvalTimeNanosActual=461.8K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=94, hasNextTrueCountActual=70, hasNextTimeNanosActual=201.6K, sourceRowsScannedActual=213, sourceRowsMatchedActual=70, sourceRowsFilteredActual=143, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, exprEvalCountActual=213, exprFalseCountActual=143, openCountActual=94, lastRowTimeNanosActual=875, exprTrueCountActual=70, closeCountActual=94, exprEvalTimeNanosActual=93.9K, inputRowsActual=213, rowsDroppedActual=213, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, filterRejectRateActual=0.67) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=213, exprFalseCountActual=143, exprTrueCountActual=70, exprEvalTimeNanosActual=86.1K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=late) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=213, hasNextCallCountActual=237, hasNextTrueCountActual=213, hasNextTimeNanosActual=46.3K, nextCallCountActual=213, nextTimeNanosActual=8.1K, sourceRowsScannedActual=237, sourceRowsMatchedActual=213, sourceRowsFilteredActual=24, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=94, openCountActual=94, lastRowTimeNanosActual=2.1K, closeCountActual=94, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=196, avgNextNanosActual=38, indexHitRateActual=0.90) +│ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=late) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M, resultSizeActual=94, joinRightIteratorsCreatedActual=8.6K, joinRightBindingsConsumedActual=94, inputRowsActual=8.7K, rowsDroppedActual=8.6K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=42, stddevActual=6.47, confidenceScoreActual=0.21, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=94) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, resultSizeActual=8.6K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=8.6K, joinType=Cartesian product, inputRowsActual=8.6K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=8.6K, avgRightRowsPerLeftActual=8.6K, joinOutputPerLeftActual=8.6K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=833, nextCallCountActual=1, nextTimeNanosActual=417, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.1K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=68.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=417, avgNextNanosActual=417) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=902.7K, nextCallCountActual=8.6K, nextTimeNanosActual=737.8K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (>) +│ ║ ║ Var (name=late) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=25.8K) +│ ║ ║ Var (name=service) +│ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ ║ Var (name=late) +│ ║ ║ , firstRowTimeNanosActual=4.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=68.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=86, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=1.3K, resultSizeActual=94, hasNextCallCountActual=8.7K, hasNextTrueCountActual=94, hasNextTimeNanosActual=46.6M, nextCallCountActual=94, nextTimeNanosActual=1.6K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=94, sourceRowsFilteredActual=25.7K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=4.3K, exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, openCountActual=8.6K, exprTrueCountActual=94, lastRowTimeNanosActual=6.4K, closeCountActual=8.6K, exprEvalTimeNanosActual=20.4M, inputRowsActual=25.8K, rowsDroppedActual=25.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=5.4K, avgNextNanosActual=18, filterRejectRateActual=1.00) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, exprTrueCountActual=94, exprEvalTimeNanosActual=18.8M, hasNextFalseCountActual=0) +│ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=618.1K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="09:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=550.0K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=34.4K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.3M, nextCallCountActual=25.8K, nextTimeNanosActual=929.8K, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=4.5K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=183, avgNextNanosActual=36, indexHitRateActual=0.75) +│ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=late) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) +│ ║ │ s: Var (name=service) (bindingState=bound) +│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ │ o: Var (name=late) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (>) +│ ║ ║ Var (name=late) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=25.8K) +│ ║ ║ Var (name=service) +│ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ ║ Var (name=late) +│ ║ ║ ) +│ ║ ║ s: Var (name=service) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=time) (bindingState=bound) +│ ║ │ ValueConstant (value="08:00:00"^^) +│ ║ │ ValueConstant (value="09:00:00"^^) +│ ║ └── StatementPattern (resultSizeEstimate=25.8K) +│ ║ s: Var (name=service) (bindingState=bound) +│ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) +│ ║ o: Var (name=time) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +VALUES ?threshold { "10:00:00"^^ } +?service a . +?service ?time . +FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) +FILTER NOT EXISTS { +?service ?late . +FILTER (?late > ?threshold) +} +} + + +Theme: TRAIN z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 167 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 109 ms + +Projection (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=149.2M, nextCallCountActual=7.8K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=149) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "line" (hasNextFalseCountActual=0) +║ ProjectionElem "serviceCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=149.0M, nextCallCountActual=7.8K, nextTimeNanosActual=759.3K, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=97) +├── Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=148.9M, nextCallCountActual=7.8K, nextTimeNanosActual=418.1K, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=53) +│ ╠══ Filter (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=148.6M, nextCallCountActual=7.8K, nextTimeNanosActual=103.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=7.8K, sourceRowsFilteredActual=624, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=146.2M, exprEvalCountActual=8.4K, exprFalseCountActual=624, openCountActual=1, exprTrueCountActual=7.8K, lastRowTimeNanosActual=151.1M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=8.4K, rowsDroppedActual=624, selectivityActual=0.93, expansionFactorActual=0.93, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=13, filterRejectRateActual=0.07) +│ ║ ├── Compare (>) (exprEvalCountActual=8.4K, exprFalseCountActual=624, exprTrueCountActual=7.8K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) +│ ║ └── Group (line) (resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=146.3M, nextCallCountActual=8.4K, nextTimeNanosActual=222.8K, aggregateEvalCountActual=68.6K, firstRowTimeNanosActual=146.2M, groupsCreatedActual=8.4K, openCountActual=1, lastRowTimeNanosActual=151.1M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=9, avgGroupSizeActual=4.06, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=34.3K, rowsDroppedActual=25.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=17.3K, avgNextNanosActual=26) +│ ║ Filter (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=116.7M, nextCallCountActual=34.3K, nextTimeNanosActual=469.5K, sourceRowsScannedActual=34.3K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=29.2K, exprEvalCountActual=34.3K, openCountActual=1, exprTrueCountActual=34.3K, lastRowTimeNanosActual=144.2M, closeCountActual=1, exprEvalTimeNanosActual=21.8M, inputRowsActual=34.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=34.3K, exprTrueCountActual=34.3K, exprEvalTimeNanosActual=19.3M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=92.0M, nextCallCountActual=34.3K, nextTimeNanosActual=278.7K, joinRightIteratorsCreatedActual=34.3K, joinLeftBindingsConsumedActual=34.3K, joinRightBindingsConsumedActual=34.3K, firstRowTimeNanosActual=20.0K, leftRowsWithMatchActual=34.3K, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=68.6K, rowsDroppedActual=34.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.7K, avgNextNanosActual=8.12, leftRowsProbedActual=34.3K, rightRowsScannedActual=34.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=53.1M, nextCallCountActual=34.3K, nextTimeNanosActual=771.9K, firstRowTimeNanosActual=16.5K, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5K, avgNextNanosActual=22, leftRowsConsumedActual=25.8K, rightRowsConsumedActual=8.4K, leftRowsOutputContributionActual=25.8K, rightRowsOutputContributionActual=8.4K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=34.5K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.6K, nextTimeNanosActual=501.4K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=122.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=124, avgNextNanosActual=58, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=26.0K, resultSizeActual=25.8K, hasNextCallCountActual=34.5K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=34.5K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[S, P], firstRowTimeNanosActual=833, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=18.9K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=195, avgNextNanosActual=53, indexHitRateActual=0.75) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=20.8M, nextCallCountActual=25.8K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[S, P], firstRowTimeNanosActual=916, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=3.8K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=402, avgNextNanosActual=60, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=807.7K, nextCallCountActual=8.4K, nextTimeNanosActual=369.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=122.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=44, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=34.3K, hasNextCallCountActual=68.6K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=17.8M, nextCallCountActual=34.3K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=68.6K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=34.3K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=34.3K, openCountActual=34.3K, lastRowTimeNanosActual=1.7K, closeCountActual=34.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=34.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=259, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (serviceCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (serviceCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "line" +║ ProjectionElem "serviceCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (line) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ │ ValueConstant (value="") +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] +│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=section) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ o: Var (name=line) (bindingState=unbound) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) +│ ║ ║ s: Var (name=line) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) (bindingState=bound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ GroupElem (_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01) +│ ║ Count +│ ║ Var (name=service) (bindingState=bound) +│ ║ GroupElem (serviceCount) +│ ║ Count (Distinct) +│ ║ Var (name=service) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01) +│ Count +│ Var (name=service) (bindingState=unbound) +└── ExtensionElem (serviceCount) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { +{ +?service a . +?service ?section . +?section ?line . +} +UNION +{ +?line a . +} +OPTIONAL { +?line ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) + + +Theme: TRAIN z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 235 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 124 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=223.8M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=2.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=223.8M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=1.1K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1, firstRowTimeNanosActual=223.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=223.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=583) +│ ╠══ Difference (resultSizeActual=1, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, firstRowTimeNanosActual=38.7M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=74.6M, avgNextNanosActual=0, leftRowsConsumedActual=1, rightRowsConsumedActual=1, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=65.7K, exprEvalCountActual=2, exprFalseCountActual=1, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=223.7M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=9.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=42, filterRejectRateActual=0.50) +│ ║ │ ╠══ Exists (exprEvalCountActual=2, exprFalseCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.0K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=25.9K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=4.1K, sourceRowsScannedActual=14, sourceRowsMatchedActual=1, sourceRowsFilteredActual=13, plannedIndexName=ospc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=2.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, indexHitRateActual=0.07) +│ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K, resultSizeActual=2, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=2, inputRowsActual=29.9K, rowsDroppedActual=29.8K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=147.1K, stddevActual=384, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=3.1M, nextCallCountActual=29.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ │ Var (name=service) +│ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ │ Var (name=op) +│ ║ │ │ , firstRowTimeNanosActual=12.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=223.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=107, avgNextNanosActual=39, indexHitRateActual=1.00) +│ ║ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=1.5K, resultSizeActual=2, hasNextCallCountActual=29.9K, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.8M, nextCallCountActual=2, nextTimeNanosActual=250, sourceRowsScannedActual=29.8K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=29.8K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=8.4K, exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, openCountActual=29.8K, exprTrueCountActual=2, lastRowTimeNanosActual=3.3K, closeCountActual=29.8K, exprEvalTimeNanosActual=22.4M, inputRowsActual=29.8K, rowsDroppedActual=29.8K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=125, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=20.6M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=17.2M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="OP 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="OP 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.3K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=41, indexHitRateActual=0.50) +│ ║ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=38.6M, nextCallCountActual=1, nextTimeNanosActual=41, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=12.0K, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=38.6M, closeCountActual=1, exprEvalTimeNanosActual=31.6M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=19.3M, avgNextNanosActual=41, filterRejectRateActual=1.00) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=29.0M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=24.5M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=21.0M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="op 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.4M, nextCallCountActual=46.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=38.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=31, indexHitRateActual=1.00) +│ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ ║ s: Var (name=service) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ ║ o: Var (name=op) (bindingState=bound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) +│ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) +│ ║ │ │ Var (name=service) +│ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) +│ ║ │ │ Var (name=op) +│ ║ │ │ ) +│ ║ │ │ s: Var (name=op) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="OP 1") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="OP 2") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ │ s: Var (name=op) (bindingState=bound) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="op 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=op) (bindingState=unbound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=op) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=op) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +?op a . +?op ?name . +FILTER ((?name = "OP 1") || (?name = "OP 2")) +FILTER EXISTS { +?service ?op . +} +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) +} +} + + +Theme: TRAIN z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 248 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 165 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.3M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=221.3M, openCountActual=1, lastRowTimeNanosActual=221.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.7M, avgNextNanosActual=1.7K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=917, firstRowTimeNanosActual=221.3M, openCountActual=1, lastRowTimeNanosActual=221.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=917) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=9, firstRowTimeNanosActual=221.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=221.3M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=500) +│ ╠══ Filter (resultSizeActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=25.8K, rowsDroppedActual=25.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.8K, exprTrueCountActual=9, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Line 0") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Line 1") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=653.2K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=30.5K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K, resultSizeActual=0, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, inputRowsActual=18, rowsDroppedActual=18, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.6K, nextCallCountActual=9, nextTimeNanosActual=458, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.5K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=403, avgNextNanosActual=51, indexHitRateActual=1.00) [left] +│ ║ │ ║ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.4K, nextCallCountActual=9, nextTimeNanosActual=374, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.9K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=389, avgNextNanosActual=42, indexHitRateActual=1.00) [right] +│ ║ │ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=198.9M, nextCallCountActual=25.8K, nextTimeNanosActual=186.8K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=31.5K, leftRowsWithMatchActual=25.8K, openCountActual=1, lastRowTimeNanosActual=221.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=10187.2M, stddevActual=100.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.7K, avgNextNanosActual=7.21, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=83.4K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=83.4K, expansionFactorActual=0.24, sampleCountActual=2, varianceActual=0.58, stddevActual=0.76, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, resultSizeActual=83.4K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=83.4K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=25.8K, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=1.24, stddevActual=1.11, confidenceScoreActual=0.49, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=83.4K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.00, stddevActual=1.00, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=2.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=221.2M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=130, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=14.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=9.2K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=51, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=2.9K, resultSizeEstimate=8.6K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=12.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=8.2K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=44, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=83.4K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=83.4K, hasNextTimeNanosActual=15.6M, nextCallCountActual=83.4K, nextTimeNanosActual=3.6M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=83.4K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=7.3K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=143, avgNextNanosActual=43, indexHitRateActual=0.76) [right] +│ ║ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=s2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=37.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=83.4K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=83.4K, openCountActual=83.4K, lastRowTimeNanosActual=3.0K, closeCountActual=83.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=83.4K, nextPerHasNextRatioActual=0.24, avgHasNextNanosActual=347, avgNextNanosActual=43, indexHitRateActual=0.24) [right] +│ ║ ║ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=14.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=1.9K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=276, avgNextNanosActual=47, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="Line 0") +│ ║ │ ║ ValueConstant (value="Line 1") +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ s: Var (name=s1) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=s2) (bindingState=bound) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] +│ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) +│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] +│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] +│ ║ ║ │ s: Var (name=service) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ o: Var (name=s2) (bindingState=unbound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] +│ ║ ║ s: Var (name=s2) (bindingState=bound) +│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ o: Var (name=line) (bindingState=bound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) (bindingState=bound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service ?s1 . +?s1 ?line . +?service a . +?service ?s2 . +?s2 ?line . +OPTIONAL { +?line ?optName . +} +FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} + + +Theme: TRAIN z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 443 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 272 ms + +Projection (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=449.6M, nextCallCountActual=67.3K, nextTimeNanosActual=9.9M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=147) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "section" (hasNextFalseCountActual=0) +║ ProjectionElem "trackCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=448.3M, nextCallCountActual=67.3K, nextTimeNanosActual=6.4M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=96) +├── Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=446.8M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=55) +│ ╠══ Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=444.7M, nextCallCountActual=67.3K, nextTimeNanosActual=917.7K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=420.0M, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=466.0M, closeCountActual=1, exprEvalTimeNanosActual=18.4M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=14, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=9.0M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.1K, hasNextFalseCountActual=0) +│ ║ └── Group (section) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=420.7M, nextCallCountActual=67.3K, nextTimeNanosActual=1.8M, aggregateEvalCountActual=269.5K, firstRowTimeNanosActual=420.0M, groupsCreatedActual=67.3K, openCountActual=1, lastRowTimeNanosActual=465.9M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=134.7K, rowsDroppedActual=67.3K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.2K, avgNextNanosActual=27) +│ ║ Filter (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=302.7M, nextCallCountActual=134.7K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=30.3K, exprEvalCountActual=134.7K, openCountActual=1, exprTrueCountActual=134.7K, lastRowTimeNanosActual=394.4M, closeCountActual=1, exprEvalTimeNanosActual=16.1M, inputRowsActual=134.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=13, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=134.7K, exprTrueCountActual=134.7K, exprEvalTimeNanosActual=6.3M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optOp) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=276.2M, nextCallCountActual=134.7K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=134.7K, firstRowTimeNanosActual=24.9K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=388.2M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=202.1K, rowsDroppedActual=67.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=11, leftRowsProbedActual=67.3K, rightRowsScannedActual=134.7K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ ║ ├── Filter (resultSizeEstimate=66.3K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=87.6M, nextCallCountActual=67.3K, nextTimeNanosActual=970.7K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, plannedLookupComponents=[P], firstRowTimeNanosActual=20.4K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=388.2M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=71.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=67.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=14, filterRejectRateActual=0) [left] +│ ║ ║ │ ╠══ Exists (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=67.1M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.3M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, plannedIndexName=spoc, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=375, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=450, indexHitRateActual=1.00) +│ ║ ║ │ ║ s: Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=7.5M, nextCallCountActual=67.3K, nextTimeNanosActual=3.8M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=9.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=388.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=58, indexHitRateActual=1.00) +│ ║ ║ │ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=67.5K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=27.0M, nextCallCountActual=67.3K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.4K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=201, avgNextNanosActual=61, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=61.6M, nextCallCountActual=134.7K, nextTimeNanosActual=16.4M, firstRowTimeNanosActual=583, openCountActual=67.3K, lastRowTimeNanosActual=2.5K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=183, avgNextNanosActual=122) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=38.3M, nextCallCountActual=134.7K, nextTimeNanosActual=7.3M, sourceRowsScannedActual=202.1K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=2.3K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=114, avgNextNanosActual=54, indexHitRateActual=0.67) +│ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optOp) (hasNextFalseCountActual=0) +│ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (trackCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (trackCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (section) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optOp) (bindingState=bound) +│ ║ │ Var (name=section) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ╠══ Exists +│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) +│ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ ║ │ s: Var (name=section) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ ║ │ o: Var (name=track) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=section) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=134.8K) +│ ║ │ s: Var (name=section) (bindingState=bound) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) (bindingState=unbound) +│ ║ └── ExtensionElem (optOp) +│ ║ Var (name=op) (bindingState=bound) +│ ║ GroupElem (_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ Count +│ ║ Var (name=track) (bindingState=bound) +│ ║ GroupElem (trackCount) +│ ║ Count (Distinct) +│ ║ Var (name=track) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678) +│ Count +│ Var (name=track) (bindingState=unbound) +└── ExtensionElem (trackCount) +Count (Distinct) +Var (name=track) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { +?section ?track . +FILTER EXISTS { +?track a . +} +?section a . +OPTIONAL { +?section ?op . +BIND(?op AS ?optOp) +} +FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) + + +Theme: TRAIN z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 439 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 233 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=442.6M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=442.6M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=792) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=176.2K, firstRowTimeNanosActual=442.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=442.6M, maxGroupSizeActual=176.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=176.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=176.2K, rowsDroppedActual=176.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=583) +│ ╠══ Difference (resultSizeActual=176.2K, hasNextCallCountActual=176.2K, hasNextTrueCountActual=176.2K, hasNextTimeNanosActual=420.1M, nextCallCountActual=176.2K, nextTimeNanosActual=1.7M, firstRowTimeNanosActual=58.3M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=280.6K, rowsDroppedActual=104.4K, selectivityActual=0.63, expansionFactorActual=0.63, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=10, leftRowsConsumedActual=269.5K, rightRowsConsumedActual=11.1K, overlapRowsActual=93.3K) +│ ║ ├── Filter (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=262.1M, nextCallCountActual=269.5K, nextTimeNanosActual=3.0M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.2K, exprEvalCountActual=269.5K, openCountActual=1, exprTrueCountActual=269.5K, lastRowTimeNanosActual=442.6M, closeCountActual=1, exprEvalTimeNanosActual=29.4M, inputRowsActual=269.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=973, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=269.5K, exprTrueCountActual=269.5K, exprEvalTimeNanosActual=11.5M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optSection) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=212.0M, nextCallCountActual=269.5K, nextTimeNanosActual=3.0M, joinRightIteratorsCreatedActual=59.7K, joinLeftBindingsConsumedActual=59.7K, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=12.6K, leftRowsWithMatchActual=59.7K, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=329.3K, rowsDroppedActual=59.7K, expansionFactorActual=0.82, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=787, avgNextNanosActual=11, leftRowsProbedActual=59.7K, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=4.51, joinMatchRateActual=1.00, joinOutputPerLeftActual=4.51, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Union (resultSizeActual=59.7K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=59.7K, hasNextTimeNanosActual=45.4M, nextCallCountActual=59.7K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=8.3K, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=761, avgNextNanosActual=20, leftRowsConsumedActual=29.8K, rightRowsConsumedActual=29.8K, leftRowsOutputContributionActual=29.8K, rightRowsOutputContributionActual=29.8K) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=29.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=232.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=63, indexHitRateActual=1.00) +│ ║ │ │ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.7M, nextCallCountActual=29.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=232.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=61, indexHitRateActual=1.00) [left] +│ ║ │ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.7M, nextCallCountActual=29.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=5.5K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=247, avgNextNanosActual=64, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=91.4M, nextCallCountActual=269.5K, nextTimeNanosActual=26.3M, firstRowTimeNanosActual=542, openCountActual=59.7K, lastRowTimeNanosActual=4.5K, closeCountActual=59.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=122, avgNextNanosActual=98) [right] +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=59.6M, nextCallCountActual=269.5K, nextTimeNanosActual=12.2M, sourceRowsScannedActual=381.1K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=111.5K, plannedIndexName=ospc, firstRowTimeNanosActual=500, indexLookupCountActual=59.7K, openCountActual=59.7K, lastRowTimeNanosActual=4.2K, closeCountActual=59.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=80, avgNextNanosActual=45, indexHitRateActual=0.71) +│ ║ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optSection) (hasNextFalseCountActual=0) +│ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=11.1K, hasNextCallCountActual=11.1K, hasNextTrueCountActual=11.1K, hasNextTimeNanosActual=43.0M, nextCallCountActual=11.1K, nextTimeNanosActual=143.0K, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=11.1K, sourceRowsFilteredActual=35.8K, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=14.6K, exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, openCountActual=1, exprTrueCountActual=11.1K, lastRowTimeNanosActual=51.8M, closeCountActual=1, exprEvalTimeNanosActual=34.8M, inputRowsActual=46.9K, rowsDroppedActual=35.8K, selectivityActual=0.24, expansionFactorActual=0.24, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=13, filterRejectRateActual=0.76) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, exprTrueCountActual=11.1K, exprEvalTimeNanosActual=31.9M, hasNextFalseCountActual=0) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=26.9M, hasNextFalseCountActual=0) +│ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=23.0M, hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── ValueConstant (value="op 1") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.9M, nextCallCountActual=46.9K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=51.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85, avgNextNanosActual=39, indexHitRateActual=1.00) +│ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optSection) (bindingState=bound) +│ ║ │ ║ Var (name=op) (bindingState=bound) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) +│ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) +│ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ │ s: Var (name=op) (bindingState=unbound) +│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=op) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) +│ ║ │ ║ s: Var (name=section) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) (bindingState=bound) +│ ║ │ ╚══ ExtensionElem (optSection) +│ ║ │ Var (name=section) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name2) (bindingState=bound) +│ ║ ║ └── ValueConstant (value="op 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=op) (bindingState=unbound) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=op) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=op) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ +?op a . +} +UNION +{ +?op a . +?op ?name . +} +OPTIONAL { +?section ?op . +BIND(?section AS ?optSection) +} +FILTER (?optSection != ?op) +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 102 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 49 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=77.9M, openCountActual=1, lastRowTimeNanosActual=78.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=78.0M, openCountActual=1, lastRowTimeNanosActual=78.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=792) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.3K, firstRowTimeNanosActual=78.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=78.0M, maxGroupSizeActual=7.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=7.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.3K, rowsDroppedActual=7.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=542) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=73.1M, nextCallCountActual=7.3K, nextTimeNanosActual=50.5K, joinRightIteratorsCreatedActual=7.3K, joinLeftBindingsConsumedActual=7.3K, joinRightBindingsConsumedActual=7.3K, firstRowTimeNanosActual=46.5K, leftRowsWithMatchActual=7.3K, openCountActual=1, lastRowTimeNanosActual=77.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=14.7K, rowsDroppedActual=7.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.9K, avgNextNanosActual=6.84, leftRowsProbedActual=7.3K, rightRowsScannedActual=7.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Filter (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=64.8M, nextCallCountActual=7.3K, nextTimeNanosActual=114.2K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=1.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=42.9K, exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, openCountActual=1, exprTrueCountActual=7.3K, lastRowTimeNanosActual=77.9M, closeCountActual=1, exprEvalTimeNanosActual=6.7M, inputRowsActual=9.3K, rowsDroppedActual=1.9K, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.8K, avgNextNanosActual=15, filterRejectRateActual=0.21) [left] +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, exprTrueCountActual=7.3K, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optCap) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.8K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=57.3M, nextCallCountActual=9.3K, nextTimeNanosActual=105.9K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, firstRowTimeNanosActual=35.3K, leftRowsWithMatchActual=9.3K, openCountActual=1, lastRowTimeNanosActual=77.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.1K, avgNextNanosActual=11, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=956.2K, nextCallCountActual=9.3K, nextTimeNanosActual=568.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=77.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=61, indexHitRateActual=1.00) [left] +│ ║ │ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=49.8M, nextCallCountActual=9.3K, nextTimeNanosActual=392.2K, firstRowTimeNanosActual=6.1K, openCountActual=9.3K, lastRowTimeNanosActual=7.5K, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.7K, avgNextNanosActual=42) [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=37.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.25, joinOutputPerLeftActual=0.25) +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=8.8M, nextCallCountActual=37.3K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=750, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.4K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=190, avgNextNanosActual=54, indexHitRateActual=0.44) [left] +│ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=18.3M, nextCallCountActual=9.3K, nextTimeNanosActual=488.1K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[S, P], firstRowTimeNanosActual=833, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=1.9K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=393, avgNextNanosActual=52, indexHitRateActual=0.20) [right] +│ ║ │ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optCap) (hasNextFalseCountActual=0) +│ ║ │ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=7.3K, hasNextCallCountActual=14.7K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=3.7M, nextCallCountActual=7.3K, nextTimeNanosActual=402.6K, sourceRowsScannedActual=14.7K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=7.3K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=7.3K, openCountActual=7.3K, lastRowTimeNanosActual=1.2K, closeCountActual=7.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=7.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=255, avgNextNanosActual=54, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optCap) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] +│ ║ │ │ s: Var (name=substation) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=generator) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ o: Var (name=cap) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optCap) +│ ║ │ Var (name=cap) (bindingState=bound) +│ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] +│ ║ s: Var (name=substation) (bindingState=bound) +│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ o: Var (name=name) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=substation) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=substation) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a . +OPTIONAL { +?generator ?substation . +?generator ?cap . +BIND(?cap AS ?optCap) +} +FILTER (?optCap > 600) +OPTIONAL { +?substation ?name . +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 93 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 57 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=87.4M, openCountActual=1, lastRowTimeNanosActual=87.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=87.4M, openCountActual=1, lastRowTimeNanosActual=87.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=1000) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=8, firstRowTimeNanosActual=87.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=87.4M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=500) +│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=87.4M, nextCallCountActual=8, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, firstRowTimeNanosActual=32.1K, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=87.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=8.7M, avgNextNanosActual=26, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) +│ ║ ├── Union (resultSizeActual=8, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left] +│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=21.8M, nextCallCountActual=4, nextTimeNanosActual=208, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=29.9K, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=21.8M, closeCountActual=1, exprEvalTimeNanosActual=8.8M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=4.4M, avgNextNanosActual=52, filterRejectRateActual=1.00) +│ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=7.6M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=775.5K, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=626, nextCallCountActual=2, nextTimeNanosActual=542, firstRowTimeNanosActual=17.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=23.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=271) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] +│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=973.6K, nextCallCountActual=9.3K, nextTimeNanosActual=491.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=431.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=458, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=1.7K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=46, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=8.2M, hasNextFalseCountActual=0) +│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=6.1M, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=791.5K, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=541, nextCallCountActual=2, nextTimeNanosActual=292, firstRowTimeNanosActual=21.8M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=21.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=180, avgNextNanosActual=146) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.3K) [right] +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K, resultSizeActual=37.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=37.3K, inputRowsActual=46.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=3.99, joinOutputPerLeftActual=3.99) [left] +│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=9.3K, nextTimeNanosActual=488.5K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=21.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=52, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=9.3M, nextCallCountActual=37.3K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O], firstRowTimeNanosActual=583, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.1K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=199, avgNextNanosActual=53, indexHitRateActual=0.44) [right] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=16.4M, nextCallCountActual=9.3K, nextTimeNanosActual=453.3K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=958, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.1K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=351, avgNextNanosActual=48, indexHitRateActual=0.20) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=4.3K, nextCallCountActual=4, nextTimeNanosActual=499, sourceRowsScannedActual=12, sourceRowsMatchedActual=4, sourceRowsFilteredActual=8, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=875, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=365, avgNextNanosActual=125, indexHitRateActual=0.33) [right] +│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=substation2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Substation 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=entity) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ │ ║ Var (name=target) (bindingState=bound) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Substation 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) +│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] +│ ║ │ │ s: Var (name=entity) (bindingState=unbound) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ │ o: Var (name=substation) (bindingState=bound) +│ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ s: Var (name=entity) (bindingState=bound) +│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] +│ ║ s: Var (name=entity) (bindingState=bound) +│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ o: Var (name=substation2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Substation 1" "Substation 2" } +{ +{ +?entity ?name . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +UNION +{ +VALUES ?target { "Substation 1" "Substation 2" } +{ +{ +?substation ?name . +?entity ?substation . +?entity a . +} +} +FILTER ((?name = ?target) || (?name = "Substation 3")) +} +OPTIONAL { +?entity ?substation2 . +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 199 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 99 ms + +Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=185.4M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=333) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "transformer" (hasNextFalseCountActual=0) +║ ProjectionElem "meterCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=185.5M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=175) +├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=185.5M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=138) +│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=376, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=185.5M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=185.5M, closeCountActual=1, exprEvalTimeNanosActual=5.5K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=38, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=4.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=5.1K, hasNextFalseCountActual=0) +│ ║ └── Group (transformer) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.4M, nextCallCountActual=10, nextTimeNanosActual=877, aggregateEvalCountActual=76, firstRowTimeNanosActual=185.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=185.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=3.80, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38, rowsDroppedActual=28, selectivityActual=0.26, expansionFactorActual=0.26, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=88) +│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=38, hasNextCallCountActual=40, hasNextTrueCountActual=39, hasNextTimeNanosActual=185.4M, nextCallCountActual=38, nextTimeNanosActual=499, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=38, firstRowTimeNanosActual=30.5K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=185.4M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=48, rowsDroppedActual=10, expansionFactorActual=0.79, sampleCountActual=2, varianceActual=1.7K, stddevActual=41, confidenceScoreActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=4.6M, avgNextNanosActual=13, leftRowsProbedActual=10, rightRowsScannedActual=38, avgRightRowsPerLeftActual=3.80, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.80, leftJoinNullExtendedRowsActual=0) +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=10, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=10, inputRowsActual=28.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=5.0K, stddevActual=71, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=10, rightRowsScannedActual=10, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.8M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=185.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=18.7M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P], firstRowTimeNanosActual=834, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=5.6K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=335, avgNextNanosActual=41, indexHitRateActual=0.50) [right] +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, resultSizeActual=10, hasNextCallCountActual=28.0K, hasNextTrueCountActual=10, hasNextTimeNanosActual=86.6M, nextCallCountActual=10, nextTimeNanosActual=292, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=28.0K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=917, exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, openCountActual=28.0K, exprTrueCountActual=10, lastRowTimeNanosActual=2.7K, closeCountActual=28.0K, exprEvalTimeNanosActual=13.5M, inputRowsActual=28.0K, rowsDroppedActual=28.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.1K, avgNextNanosActual=29, filterRejectRateActual=1.00) [right] +│ ║ │ ├── ListMemberOperator (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=10, exprEvalTimeNanosActual=11.9M, hasNextFalseCountActual=0) +│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 0") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=836.9K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 1") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=919.6K, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="Substation 2") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=12.2M, nextCallCountActual=28.0K, nextTimeNanosActual=994.8K, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=833, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=38, hasNextCallCountActual=104, hasNextTrueCountActual=94, hasNextTimeNanosActual=8.4K, nextCallCountActual=38, nextTimeNanosActual=2.5K, sourceRowsScannedActual=48, sourceRowsMatchedActual=38, sourceRowsFilteredActual=10, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=2.6K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.37, avgHasNextNanosActual=81, avgNextNanosActual=67, indexHitRateActual=0.79) [right] +│ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (meterCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (meterCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "transformer" +║ ProjectionElem "meterCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (transformer) +│ ║ LeftJoin +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ o: Var (name=substation) (bindingState=unbound) +│ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ├── ListMemberOperator +│ ║ │ │ Var (name=name) (bindingState=bound) +│ ║ │ │ ValueConstant (value="Substation 0") +│ ║ │ │ ValueConstant (value="Substation 1") +│ ║ │ │ ValueConstant (value="Substation 2") +│ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=substation) (bindingState=bound) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] +│ ║ s: Var (name=transformer) (bindingState=bound) +│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ o: Var (name=meter) (bindingState=unbound) +│ ║ GroupElem (_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678) +│ ║ Count +│ ║ Var (name=meter) (bindingState=bound) +│ ║ GroupElem (meterCount) +│ ║ Count (Distinct) +│ ║ Var (name=meter) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678) +│ Count +│ Var (name=meter) (bindingState=unbound) +└── ExtensionElem (meterCount) +Count (Distinct) +Var (name=meter) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { +?transformer a . +?transformer ?substation . +?substation ?name . +FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) +OPTIONAL { +?transformer ?meter . +} +} +GROUP BY ?transformer +HAVING (COUNT(?meter) > 0) + + +Theme: ELECTRICAL_GRID z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 608 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 379 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=568.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=7.0K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=568.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=1.0K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=791, aggregateEvalCountActual=59.6K, firstRowTimeNanosActual=568.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=568.7M, maxGroupSizeActual=59.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=59.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=59.6K, rowsDroppedActual=59.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=791) +│ ╠══ Difference (resultSizeActual=59.6K, hasNextCallCountActual=59.6K, hasNextTrueCountActual=59.6K, hasNextTimeNanosActual=557.3M, nextCallCountActual=59.6K, nextTimeNanosActual=701.1K, firstRowTimeNanosActual=153.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=88.2K, rowsDroppedActual=28.6K, selectivityActual=0.68, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.3K, avgNextNanosActual=12, leftRowsConsumedActual=73.9K, rightRowsConsumedActual=14.3K, overlapRowsActual=14.3K) +│ ║ ├── Filter (resultSizeActual=73.9K, hasNextCallCountActual=73.9K, hasNextTrueCountActual=73.9K, hasNextTimeNanosActual=346.1M, nextCallCountActual=73.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=73.9K, sourceRowsFilteredActual=38.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=18.2K, exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, openCountActual=1, exprTrueCountActual=73.9K, lastRowTimeNanosActual=568.6M, closeCountActual=1, exprEvalTimeNanosActual=52.0M, inputRowsActual=112.0K, rowsDroppedActual=38.1K, selectivityActual=0.66, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.7K, avgNextNanosActual=14, filterRejectRateActual=0.34) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, exprTrueCountActual=73.9K, exprEvalTimeNanosActual=44.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="100"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=285.9M, nextCallCountActual=112.0K, nextTimeNanosActual=859.8K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, firstRowTimeNanosActual=16.6K, leftRowsWithMatchActual=112.0K, openCountActual=1, lastRowTimeNanosActual=568.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=7.67, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.54, stddevActual=0.73, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=224.1K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=10.1M, nextCallCountActual=112.0K, nextTimeNanosActual=6.1M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=568.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=55, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=276.7K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=50.7M, nextCallCountActual=112.0K, nextTimeNanosActual=6.6M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.5K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=77.3M, nextCallCountActual=112.0K, nextTimeNanosActual=17.2M, firstRowTimeNanosActual=1.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.6K, closeCountActual=112.0K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=345, avgNextNanosActual=154) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=48.2M, nextCallCountActual=112.0K, nextTimeNanosActual=7.6M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.4K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=68, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) +│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K, resultSizeActual=14.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=14.3K, inputRowsActual=126.3K, rowsDroppedActual=112.0K, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=14.3K, avgRightRowsPerLeftActual=0.13, joinOutputPerLeftActual=0.13) +│ ║ ╠══ StatementPattern [index: psoc] (costEstimate=112.1K, resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.4M, nextCallCountActual=112.0K, nextTimeNanosActual=3.8M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=26.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=35, indexHitRateActual=1.00) [left] +│ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Filter (new scope) (resultSizeActual=14.3K, hasNextCallCountActual=14.3K, hasNextTrueCountActual=14.3K, hasNextTimeNanosActual=62.7M, nextCallCountActual=14.3K, nextTimeNanosActual=228.8K, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=14.3K, sourceRowsFilteredActual=97.7K, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.4K, exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, openCountActual=1, exprTrueCountActual=14.3K, lastRowTimeNanosActual=65.5M, closeCountActual=1, exprEvalTimeNanosActual=42.4M, inputRowsActual=112.0K, rowsDroppedActual=97.7K, selectivityActual=0.13, expansionFactorActual=0.13, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=16, filterRejectRateActual=0.87) [right] +│ ║ ├── Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, exprTrueCountActual=14.3K, exprEvalTimeNanosActual=35.2M, hasNextFalseCountActual=0) +│ ║ │ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="180"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=8.1M, nextCallCountActual=112.0K, nextTimeNanosActual=4.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=19.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=73, avgNextNanosActual=44, indexHitRateActual=1.00) +│ ║ s: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="100"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=meter) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ │ │ o: Var (name=load) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ ║ s: Var (name=load) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ │ ║ o: Var (name=value) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optValue) +│ ║ │ Var (name=value) (bindingState=bound) +│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) +│ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] +│ ║ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ o: Var (name=load2) (bindingState=unbound) +│ ║ ╚══ Filter (new scope) (plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter) [right] +│ ║ ├── Compare (>) +│ ║ │ Var (name=value2) (bindingState=bound) +│ ║ │ ValueConstant (value="180"^^) +│ ║ └── StatementPattern (resultSizeEstimate=112.1K) +│ ║ s: Var (name=load2) (bindingState=unbound) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ o: Var (name=value2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=meter) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=meter) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +?meter a . +?meter ?load . +OPTIONAL { +?load ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 100) +MINUS { +?meter ?load2 . +{ +{ +?load2 ?value2 . +FILTER (?value2 > 180) +} +} +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 278 ms +Warmup execution 1/7 +Warmup execution 2/7 +Warmup execution 3/7 +Warmup execution 4/7 +Warmup execution 5/7 +Warmup execution 6/7 +Warmup execution 7/7 +Fastest execution time: 149 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=267.1M, openCountActual=1, lastRowTimeNanosActual=267.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=1.9K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=959, firstRowTimeNanosActual=267.1M, openCountActual=1, lastRowTimeNanosActual=267.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=959) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=10, firstRowTimeNanosActual=267.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=267.1M, maxGroupSizeActual=10, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=10, rowsDroppedActual=9, selectivityActual=0.10, expansionFactorActual=0.10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=542) +│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=267.0M, nextCallCountActual=10, nextTimeNanosActual=250, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=53.7K, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=267.0M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=26.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=22.3M, avgNextNanosActual=25, filterRejectRateActual=0) +│ ║ ├── Exists (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=25.3K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=0, hasNextCallCountActual=10, hasNextTrueCountActual=10, hasNextTimeNanosActual=3.5K, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, plannedIndexName=spoc, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=458, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) +│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=other) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=267.0M, nextCallCountActual=10, nextTimeNanosActual=418, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=10, firstRowTimeNanosActual=36.0K, leftRowsWithMatchActual=5, openCountActual=1, lastRowTimeNanosActual=267.0M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=15, rowsDroppedActual=5, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.49, stddevActual=0.70, confidenceScoreActual=0.54, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=24.3M, avgNextNanosActual=42, leftRowsProbedActual=5, rightRowsScannedActual=10, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K, resultSizeActual=5, joinRightIteratorsCreatedActual=37.5K, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=37.5K, rowsDroppedActual=37.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=34.7K, stddevActual=186, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K, resultSizeActual=37.5K, joinRightIteratorsCreatedActual=18.7K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=37.5K, inputRowsActual=56.3K, rowsDroppedActual=18.7K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=37.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=18.8K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=18.7K, nextTimeNanosActual=720.6K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=18.7K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=267.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=128, avgNextNanosActual=38, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=37.5K, hasNextCallCountActual=56.3K, hasNextTrueCountActual=37.5K, hasNextTimeNanosActual=16.0M, nextCallCountActual=37.5K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=56.3K, sourceRowsMatchedActual=37.5K, sourceRowsFilteredActual=18.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=12.8K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=285, avgNextNanosActual=43, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=1.9K, resultSizeActual=5, hasNextCallCountActual=37.5K, hasNextTrueCountActual=5, hasNextTimeNanosActual=141.4M, nextCallCountActual=5, nextTimeNanosActual=752, sourceRowsScannedActual=37.5K, sourceRowsMatchedActual=5, sourceRowsFilteredActual=37.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.5K, exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, openCountActual=37.5K, exprTrueCountActual=5, lastRowTimeNanosActual=3.4K, closeCountActual=37.5K, exprEvalTimeNanosActual=26.4M, inputRowsActual=37.5K, rowsDroppedActual=37.5K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=150, filterRejectRateActual=1.00) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=5, shortCircuitCountActual=4, exprEvalTimeNanosActual=23.9M, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=4, exprEvalTimeNanosActual=19.7M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=37.5K, hasNextCallCountActual=75.0K, hasNextTrueCountActual=37.5K, hasNextTimeNanosActual=19.9M, nextCallCountActual=37.5K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=75.0K, sourceRowsMatchedActual=37.5K, sourceRowsFilteredActual=37.5K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=37.5K, openCountActual=37.5K, lastRowTimeNanosActual=1.1K, closeCountActual=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.5K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=266, avgNextNanosActual=40, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=10, hasNextCallCountActual=25, hasNextTrueCountActual=20, hasNextTimeNanosActual=3.2K, nextCallCountActual=10, nextTimeNanosActual=413, sourceRowsScannedActual=15, sourceRowsMatchedActual=10, sourceRowsFilteredActual=5, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=6.6K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=132, avgNextNanosActual=41, indexHitRateActual=0.67) [right] +│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=other2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=37.5K) +│ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ │ o: Var (name=other) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound) +│ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="Substation 0") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="Substation 1") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ s: Var (name=substation) (bindingState=bound) +│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ ║ o: Var (name=name) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] +│ ║ s: Var (name=line) (bindingState=bound) +│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ o: Var (name=other2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?substation . +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +OPTIONAL { +?line ?other2 . +} +FILTER EXISTS { +?line ?other . +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 73 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 39 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=68.2M, openCountActual=1, lastRowTimeNanosActual=68.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=1.5K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=68.3M, openCountActual=1, lastRowTimeNanosActual=68.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=625) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=47, firstRowTimeNanosActual=68.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=68.3M, maxGroupSizeActual=47, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=47, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=47, rowsDroppedActual=46, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=375) +│ ╠══ Filter (resultSizeActual=47, hasNextCallCountActual=49, hasNextTrueCountActual=48, hasNextTimeNanosActual=68.2M, nextCallCountActual=47, nextTimeNanosActual=581, sourceRowsScannedActual=47, sourceRowsMatchedActual=47, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=1.2M, exprEvalCountActual=47, openCountActual=1, exprTrueCountActual=47, lastRowTimeNanosActual=68.2M, closeCountActual=1, exprEvalTimeNanosActual=191.6K, inputRowsActual=47, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=1.4M, avgNextNanosActual=12, filterRejectRateActual=0) +│ ║ ├── Not (exprEvalCountActual=47, exprTrueCountActual=47, exprEvalTimeNanosActual=188.0K, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=183.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=47, hasNextTimeNanosActual=108.1K, sourceRowsScannedActual=47, sourceRowsFilteredActual=47, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, exprEvalCountActual=47, exprFalseCountActual=47, openCountActual=47, lastRowTimeNanosActual=2.0K, closeCountActual=47, exprEvalTimeNanosActual=10.1K, inputRowsActual=47, rowsDroppedActual=47, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.3K, filterRejectRateActual=1.00) +│ ║ │ ╠══ Compare (<) (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=7.0K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=47, hasNextCallCountActual=94, hasNextTrueCountActual=47, hasNextTimeNanosActual=19.8K, nextCallCountActual=47, nextTimeNanosActual=1.7K, sourceRowsScannedActual=94, sourceRowsMatchedActual=47, sourceRowsFilteredActual=47, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=47, openCountActual=47, lastRowTimeNanosActual=750, closeCountActual=47, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=211, avgNextNanosActual=36, indexHitRateActual=0.50) +│ ║ │ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M, resultSizeActual=47, joinRightIteratorsCreatedActual=9.3K, joinRightBindingsConsumedActual=47, inputRowsActual=9.4K, rowsDroppedActual=9.3K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=20, stddevActual=4.50, confidenceScoreActual=0.27, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=47) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=9.3K, joinType=Cartesian product, inputRowsActual=9.3K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.4K, nextCallCountActual=1, nextTimeNanosActual=250, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.5K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=68.2M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=730, avgNextNanosActual=250) [left] +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=978.4K, nextCallCountActual=9.3K, nextTimeNanosActual=748.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=cap2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ Var (name=generator) +│ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ ║ Var (name=cap2) +│ ║ ║ , firstRowTimeNanosActual=5.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=68.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=80, indexHitRateActual=1.00) +│ ║ ║ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeEstimate=470, resultSizeActual=47, hasNextCallCountActual=9.4K, hasNextTrueCountActual=47, hasNextTimeNanosActual=41.2M, nextCallCountActual=47, nextTimeNanosActual=748, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=47, sourceRowsFilteredActual=9.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.4K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=9.3K, exprTrueCountActual=47, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, exprEvalTimeNanosActual=8.6M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=16, filterRejectRateActual=0.99) [right] +│ ║ ├── ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=47, exprEvalTimeNanosActual=8.1M, hasNextFalseCountActual=0) +│ ║ │ Var (name=capacity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=474.2K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="800"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=502.0K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="900"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=499.4K, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=8.4M, nextCallCountActual=9.3K, nextTimeNanosActual=306.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.1K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=452, avgNextNanosActual=33, indexHitRateActual=0.50) +│ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=capacity) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) +│ ║ │ ╠══ Compare (<) +│ ║ │ ║ Var (name=cap2) (bindingState=bound) +│ ║ │ ║ Var (name=threshold) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=generator) (bindingState=bound) +│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ o: Var (name=cap2) (bindingState=unbound) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] +│ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] +│ ║ ║ Exists +│ ║ ║ Filter +│ ║ ║ Compare (<) +│ ║ ║ Var (name=cap2) +│ ║ ║ Var (name=threshold) +│ ║ ║ StatementPattern (resultSizeEstimate=9.4K) +│ ║ ║ Var (name=generator) +│ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ ║ Var (name=cap2) +│ ║ ║ ) +│ ║ ║ s: Var (name=generator) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ ╚══ Filter (resultSizeEstimate=470, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=capacity) (bindingState=bound) +│ ║ │ ValueConstant (value="700"^^) +│ ║ │ ValueConstant (value="800"^^) +│ ║ │ ValueConstant (value="900"^^) +│ ║ └── StatementPattern (resultSizeEstimate=9.4K) +│ ║ s: Var (name=generator) (bindingState=bound) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ o: Var (name=capacity) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=generator) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=generator) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { +VALUES ?threshold { 700 } +?generator a . +?generator ?capacity . +FILTER (?capacity IN (700, 800, 900)) +FILTER NOT EXISTS { +?generator ?cap2 . +FILTER (?cap2 < ?threshold) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 171 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 106 ms + +Projection (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.6M, nextCallCountActual=9.3K, nextTimeNanosActual=1.3M, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=147) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "substation" (hasNextFalseCountActual=0) +║ ProjectionElem "assetCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.4M, nextCallCountActual=9.3K, nextTimeNanosActual=878.7K, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=94) +├── Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.2M, nextCallCountActual=9.3K, nextTimeNanosActual=506.0K, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=54) +│ ╠══ Filter (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=156.9M, nextCallCountActual=9.3K, nextTimeNanosActual=104.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=154.4M, exprEvalCountActual=9.3K, openCountActual=1, exprTrueCountActual=9.3K, lastRowTimeNanosActual=159.8M, closeCountActual=1, exprEvalTimeNanosActual=1.7M, inputRowsActual=9.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=11, filterRejectRateActual=0) +│ ║ ├── Compare (>) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) +│ ║ └── Group (substation) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=154.5M, nextCallCountActual=9.3K, nextTimeNanosActual=236.2K, aggregateEvalCountActual=74.7K, firstRowTimeNanosActual=154.4M, groupsCreatedActual=9.3K, openCountActual=1, lastRowTimeNanosActual=159.8M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=3.99, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=37.3K, rowsDroppedActual=28.0K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.5K, avgNextNanosActual=25) +│ ║ Filter (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=113.3M, nextCallCountActual=37.3K, nextTimeNanosActual=370.4K, sourceRowsScannedActual=37.3K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=33.2K, exprEvalCountActual=37.3K, openCountActual=1, exprTrueCountActual=37.3K, lastRowTimeNanosActual=152.1M, closeCountActual=1, exprEvalTimeNanosActual=4.0M, inputRowsActual=37.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=9.91, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=37.3K, exprTrueCountActual=37.3K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) +│ ║ │ Var (name=optSub) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=106.5M, nextCallCountActual=37.3K, nextTimeNanosActual=301.8K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=37.3K, firstRowTimeNanosActual=25.8K, leftRowsWithMatchActual=37.3K, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=74.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=8.08, leftRowsProbedActual=37.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=53.3M, nextCallCountActual=37.3K, nextTimeNanosActual=813.9K, firstRowTimeNanosActual=23.0K, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4K, avgNextNanosActual=22, leftRowsConsumedActual=28.0K, rightRowsConsumedActual=9.3K, leftRowsOutputContributionActual=28.0K, rightRowsOutputContributionActual=9.3K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.6M, nextCallCountActual=28.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=108.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=56, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=17.4M, nextCallCountActual=28.0K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=2.5K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=311, avgNextNanosActual=62, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=855.0K, nextCallCountActual=9.3K, nextTimeNanosActual=496.0K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=108.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ ║ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=6.5M, nextCallCountActual=9.3K, nextTimeNanosActual=594.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P], firstRowTimeNanosActual=959, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=348, avgNextNanosActual=63, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=27.0M, nextCallCountActual=37.3K, nextTimeNanosActual=5.5M, firstRowTimeNanosActual=666, openCountActual=37.3K, lastRowTimeNanosActual=3.0K, closeCountActual=37.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=362, avgNextNanosActual=149) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=17.1M, nextCallCountActual=37.3K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=74.7K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=37.3K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.8K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=62, indexHitRateActual=0.50) +│ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optSub) (hasNextFalseCountActual=0) +│ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (assetCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (assetCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "assetCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (substation) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optSub) (bindingState=bound) +│ ║ │ Var (name=asset) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=asset) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ ║ │ o: Var (name=substation) (bindingState=unbound) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) +│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] +│ ║ ║ s: Var (name=asset) (bindingState=bound) +│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ ║ o: Var (name=substation) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) +│ ║ │ s: Var (name=asset) (bindingState=bound) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ o: Var (name=substation) (bindingState=bound) +│ ║ └── ExtensionElem (optSub) +│ ║ Var (name=substation) (bindingState=bound) +│ ║ GroupElem (_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345) +│ ║ Count +│ ║ Var (name=asset) (bindingState=bound) +│ ║ GroupElem (assetCount) +│ ║ Count (Distinct) +│ ║ Var (name=asset) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345) +│ Count +│ Var (name=asset) (bindingState=unbound) +└── ExtensionElem (assetCount) +Count (Distinct) +Var (name=asset) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { +{ +?asset a . +?asset ?substation . +} +UNION +{ +?asset a . +?asset ?substation . +} +OPTIONAL { +?asset ?substation . +BIND(?substation AS ?optSub) +} +FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) + + +Theme: ELECTRICAL_GRID z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 253 ms +Warmup execution 1/7 +Warmup execution 2/7 +Warmup execution 3/7 +Warmup execution 4/7 +Warmup execution 5/7 +Warmup execution 6/7 +Warmup execution 7/7 +Fastest execution time: 135 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=244.5M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=1.8K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=244.5M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=1000) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=834, aggregateEvalCountActual=6, firstRowTimeNanosActual=244.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=244.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=834) +│ ╠══ Difference (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=244.5M, nextCallCountActual=6, nextTimeNanosActual=208, firstRowTimeNanosActual=42.8M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=30.6M, avgNextNanosActual=35, leftRowsConsumedActual=6, rightRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=201.7M, nextCallCountActual=6, nextTimeNanosActual=208, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=26.1K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=13.4K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=28.8M, avgNextNanosActual=35, filterRejectRateActual=0) +│ ║ │ ╠══ Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=12.7K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.5K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=375, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=424, indexHitRateActual=1.00) +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=6, joinRightIteratorsCreatedActual=28.0K, joinRightBindingsConsumedActual=6, inputRowsActual=28.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=14.1K, stddevActual=119, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=3.1M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ │ ║ Var (name=transformer) +│ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ │ ║ Var (name=meter) +│ ║ │ │ ║ , firstRowTimeNanosActual=7.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=41, indexHitRateActual=1.00) +│ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=19.4M, nextCallCountActual=28.0K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P], firstRowTimeNanosActual=791, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=6.0K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=347, avgNextNanosActual=43, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=1.4K, resultSizeActual=6, hasNextCallCountActual=28.0K, hasNextTrueCountActual=6, hasNextTimeNanosActual=94.2M, nextCallCountActual=6, nextTimeNanosActual=166, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=6, sourceRowsFilteredActual=28.0K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, openCountActual=28.0K, exprTrueCountActual=6, lastRowTimeNanosActual=3.0K, closeCountActual=28.0K, exprEvalTimeNanosActual=12.3M, inputRowsActual=28.0K, rowsDroppedActual=28.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ Or (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=6, shortCircuitCountActual=2, exprEvalTimeNanosActual=10.5M, hasNextFalseCountActual=0) +│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=7.4M, hasNextFalseCountActual=0) +│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ │ ║ └── Compare (=) (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=4, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=12.3M, nextCallCountActual=28.0K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=834, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=38, indexHitRateActual=0.50) +│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=42.7M, sourceRowsScannedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=112.0K, predicateErrorCountActual=112.0K, openCountActual=1, lastRowTimeNanosActual=42.7M, closeCountActual=1, exprEvalTimeNanosActual=25.0M, inputRowsActual=112.0K, rowsDroppedActual=112.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=42.8M, filterRejectRateActual=1.00) +│ ║ ╠══ Compare (=) (exprEvalCountActual=112.0K, exprErrorCountActual=112.0K, exprEvalTimeNanosActual=11.1M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.3M, nextCallCountActual=112.0K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=42.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=36, indexHitRateActual=1.00) +│ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ ║ s: Var (name=transformer) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ ║ o: Var (name=meter) (bindingState=unbound) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] +│ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ │ ║ Var (name=transformer) +│ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ │ ║ Var (name=meter) +│ ║ │ │ ║ ) +│ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=transformer) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ │ o: Var (name=substation) (bindingState=unbound) +│ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=name) (bindingState=bound) +│ ║ │ ║ │ ValueConstant (value="Substation 0") +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=name) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="Substation 1") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ │ s: Var (name=substation) (bindingState=bound) +│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=load) (bindingState=bound) +│ ║ ║ Var (name=substation) (bindingState=unbound) +│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) +│ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ o: Var (name=load) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=transformer) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=transformer) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { +?transformer a . +?transformer ?substation . +?substation ?name . +FILTER ((?name = "Substation 0") || (?name = "Substation 1")) +FILTER EXISTS { +?transformer ?meter . +} +MINUS { +?meter ?load . +FILTER (?load = ?substation) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 38 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 21 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.2M) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "substation" (hasNextFalseCountActual=0) +║ ProjectionElem "transformerCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) +│ ║ ├── Compare (>) (hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) +│ ║ └── Group (substation) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M, groupsCreatedActual=0) +│ ║ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=9.3K, exprErrorCountActual=9.3K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTransformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=7.7M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=3.4M, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, plannedIndexName=psoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=375, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=368, indexHitRateActual=1.00) +│ ║ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=19.6M, nextCallCountActual=9.3K, nextTimeNanosActual=137.1K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, firstRowTimeNanosActual=14.3K, openCountActual=1, emptyRightProbeCountActual=9.3K, lastRowTimeNanosActual=31.0M, closeCountActual=1, inputRowsActual=9.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=15, leftRowsProbedActual=9.3K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=9.3K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] +│ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=929.2K, nextCallCountActual=9.3K, nextTimeNanosActual=460.0K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=4.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=31.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +│ ║ ║ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=421.7K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.6K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=45, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=4.8M, openCountActual=9.3K, lastRowTimeNanosActual=583, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=518) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=2.8M, sourceRowsScannedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=416, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=307, indexHitRateActual=0) +│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optTransformer) (hasNextFalseCountActual=0) +│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (hasNextFalseCountActual=0) +│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (transformerCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (hasNextFalseCountActual=0) +│ Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (transformerCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "substation" +║ ProjectionElem "transformerCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (substation) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTransformer) (bindingState=bound) +│ ║ │ ║ Var (name=substation) (bindingState=bound) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ s: Var (name=transformer) (bindingState=bound) +│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) +│ ║ │ o: Var (name=meter) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] +│ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ s: Var (name=substation) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ ║ │ o: Var (name=name) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=substation) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) +│ ║ │ s: Var (name=substation) (bindingState=bound) +│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ o: Var (name=transformer) (bindingState=unbound) +│ ║ └── ExtensionElem (optTransformer) +│ ║ Var (name=transformer) (bindingState=bound) +│ ║ GroupElem (_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0) +│ ║ Count +│ ║ Var (name=transformer) (bindingState=bound) +│ ║ GroupElem (transformerCount) +│ ║ Count (Distinct) +│ ║ Var (name=transformer) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0) +│ Count +│ Var (name=transformer) (bindingState=unbound) +└── ExtensionElem (transformerCount) +Count (Distinct) +Var (name=transformer) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { +?substation ?name . +?substation a . +OPTIONAL { +?substation ?transformer . +BIND(?transformer AS ?optTransformer) +} +FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) +} +GROUP BY ?substation +HAVING (COUNT(?transformer) > 0) + + +Theme: ELECTRICAL_GRID z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 11 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 6 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=584) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=292) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=84, firstRowTimeNanosActual=9.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=84, avgGroupSizeActual=0) +│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsConsumedActual=0, overlapRowsActual=0) +│ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsProbedActual=0, rightRowsScannedActual=0) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=0, joinRightIteratorsCreatedActual=58, joinLeftBindingsConsumedActual=58, inputRowsActual=58, rowsDroppedActual=58, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=58, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] +│ ║ │ ║ ├── Filter (resultSizeActual=58, hasNextCallCountActual=59, hasNextTrueCountActual=58, hasNextTimeNanosActual=9.3M, nextCallCountActual=58, nextTimeNanosActual=1.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=58, sourceRowsFilteredActual=9.3K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=56.5K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=58, lastRowTimeNanosActual=9.4M, closeCountActual=1, exprEvalTimeNanosActual=7.8M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=159.1K, avgNextNanosActual=24, filterRejectRateActual=0.99) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=58, exprEvalTimeNanosActual=7.3M, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ValueConstant (value="500"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=443.4K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=457.3K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ║ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=437.9K, hasNextFalseCountActual=0) +│ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=602.2K, nextCallCountActual=9.3K, nextTimeNanosActual=348.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator +│ ║ │ ║ │ Var (name=cap) +│ ║ │ ║ │ ValueConstant (value="500"^^) +│ ║ │ ║ │ ValueConstant (value="600"^^) +│ ║ │ ║ │ ValueConstant (value="700"^^) +│ ║ │ ║ │ , firstRowTimeNanosActual=3.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=37, indexHitRateActual=1.00) +│ ║ │ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=18.8K, resultSizeActual=0, hasNextCallCountActual=58, hasNextTimeNanosActual=37.1K, sourceRowsScannedActual=58, sourceRowsFilteredActual=58, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[S, O, P], indexLookupCountActual=58, openCountActual=58, lastRowTimeNanosActual=625, closeCountActual=58, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58, nextPerHasNextRatioActual=0, avgHasNextNanosActual=641, indexHitRateActual=0) [right] +│ ║ │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] +│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) +│ ║ ╠══ Compare (<) (hasNextFalseCountActual=0) +│ ║ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ValueConstant (value="500"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── LeftJoin +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] +│ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] +│ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) +│ ║ │ ║ │ ║ ValueConstant (value="500"^^) +│ ║ │ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ║ │ ║ ValueConstant (value="700"^^) +│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator +│ ║ │ ║ │ Var (name=cap) +│ ║ │ ║ │ ValueConstant (value="500"^^) +│ ║ │ ║ │ ValueConstant (value="600"^^) +│ ║ │ ║ │ ValueConstant (value="700"^^) +│ ║ │ ║ │ ) +│ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ║ s: Var (name=line) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] +│ ║ │ s: Var (name=line) (bindingState=bound) +│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) +│ ║ │ o: Var (name=substation) (bindingState=unbound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) +│ ║ ╠══ Compare (<) +│ ║ ║ Var (name=cap2) (bindingState=bound) +│ ║ ║ ValueConstant (value="500"^^) +│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) +│ ║ s: Var (name=line) (bindingState=unbound) +│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ o: Var (name=cap2) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line ?cap . +FILTER (?cap IN (500, 600, 700)) +?line a . +OPTIONAL { +?line ?substation . +} +MINUS { +?line ?cap2 . +FILTER (?cap2 < 500) +} +} + + +Theme: ELECTRICAL_GRID z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 737 ms +Warmup execution 1/2 +Warmup execution 2/2 +Fastest execution time: 457 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=4.0K, firstRowTimeNanosActual=720.7M, openCountActual=1, lastRowTimeNanosActual=720.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=4.1K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=2.1K, firstRowTimeNanosActual=720.7M, openCountActual=1, lastRowTimeNanosActual=720.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=2.2K) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=720.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=720.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=875, avgGroupSizeActual=0) +│ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=224.1K, rowsDroppedActual=224.1K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (>) (exprEvalCountActual=224.1K, exprFalseCountActual=224.1K, exprEvalTimeNanosActual=75.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="200"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (hasNextFalseCountActual=0) +│ ║ │ Exists (hasNextFalseCountActual=0) +│ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) +│ ║ │ ├── Compare (<) (hasNextFalseCountActual=0) +│ ║ │ │ Var (name=low) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ValueConstant (value="50"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) +│ ║ │ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=low) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=619.8M, nextCallCountActual=224.1K, nextTimeNanosActual=2.1M, joinRightIteratorsCreatedActual=224.1K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=224.1K, firstRowTimeNanosActual=15.3K, leftRowsWithMatchActual=224.1K, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=448.2K, rowsDroppedActual=224.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=9.52, leftRowsProbedActual=224.1K, rightRowsScannedActual=224.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Union (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=393.2M, nextCallCountActual=224.1K, nextTimeNanosActual=3.7M, firstRowTimeNanosActual=14.2K, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, sampleCountActual=2, varianceActual=0.10, stddevActual=0.32, confidenceScoreActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=17, leftRowsConsumedActual=112.0K, rightRowsConsumedActual=112.0K, leftRowsOutputContributionActual=112.0K, rightRowsOutputContributionActual=112.0K) [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.54, stddevActual=0.73, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=9.6M, nextCallCountActual=112.0K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=294.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=45, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=276.7K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=48.7M, nextCallCountActual=112.0K, nextTimeNanosActual=5.8M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.6K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=52, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.34, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=112.0K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.57, stddevActual=0.75, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=12.2M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=294.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=53, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=280.9K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=56.3M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O], firstRowTimeNanosActual=500, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.1K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=251, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=205.4K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=53.3M, nextCallCountActual=112.0K, nextTimeNanosActual=5.3M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.1K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=238, avgNextNanosActual=48, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=224.1K, hasNextCallCountActual=448.2K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=94.0M, nextCallCountActual=224.1K, nextTimeNanosActual=11.6M, sourceRowsScannedActual=448.2K, sourceRowsMatchedActual=224.1K, sourceRowsFilteredActual=224.1K, plannedIndexName=spoc, firstRowTimeNanosActual=833, indexLookupCountActual=224.1K, openCountActual=224.1K, lastRowTimeNanosActual=1.1K, closeCountActual=224.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=224.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=52, indexHitRateActual=0.50) [right] +│ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=optValue) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optValue) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="200"^^) +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Filter (plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern) +│ ║ │ ├── Compare (<) +│ ║ │ │ Var (name=low) (bindingState=bound) +│ ║ │ │ ValueConstant (value="50"^^) +│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) +│ ║ │ s: Var (name=load) (bindingState=bound) +│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ │ o: Var (name=low) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=meter) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ │ o: Var (name=load) (bindingState=unbound) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] +│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) +│ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) +│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] +│ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) +│ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) +│ ║ ║ ║ o: Var (name=load) (bindingState=bound) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=meter) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) +│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] +│ ║ s: Var (name=load) (bindingState=bound) +│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) +│ ║ o: Var (name=optValue) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=meter) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=meter) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { +{ +?meter a . +?meter ?load . +} +UNION +{ +?load ?value . +?meter ?load . +?meter a . +} +OPTIONAL { +?load ?optValue . +} +FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} + + +Theme: PHARMA z_queryIndex: 0 +=== Explanation Telemetry === +Initial explain execution time: 42 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 25 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=347.3K, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=349.3K, openCountActual=1, lastRowTimeNanosActual=353.6K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=173.7K, avgNextNanosActual=625) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=346.8K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=352.9K, openCountActual=1, lastRowTimeNanosActual=355.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=173.4K, avgNextNanosActual=292) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=345.2K, nextCallCountActual=1, nextTimeNanosActual=167, aggregateEvalCountActual=18, firstRowTimeNanosActual=353.0K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=354.0K, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=172.6K, avgNextNanosActual=167) +│ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=296.7K, nextCallCountActual=18, nextTimeNanosActual=332, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=43.7K, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=314.6K, closeCountActual=1, exprEvalTimeNanosActual=13.3K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=14.8K, avgNextNanosActual=18, filterRejectRateActual=0) +│ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=10.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=14.6K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=275.5K, nextCallCountActual=18, nextTimeNanosActual=628, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=39.5K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=305.6K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=14.5K, avgNextNanosActual=35, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=18, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=18, inputRowsActual=20, rowsDroppedActual=2, expansionFactorActual=0.90, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=18, avgRightRowsPerLeftActual=0.90, joinOutputPerLeftActual=0.90) [left] +│ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=626, nextCallCountActual=2, nextTimeNanosActual=126, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=303.1K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=63) [left] +│ ║ ║ └── Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=18, hasNextTimeNanosActual=214.0K, nextCallCountActual=18, nextTimeNanosActual=543, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=9.7K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=2, exprTrueCountActual=18, lastRowTimeNanosActual=122.0K, closeCountActual=2, exprEvalTimeNanosActual=56.4K, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=10.7K, avgNextNanosActual=30, filterRejectRateActual=0.31) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=52.9K, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=31.9K, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=17.2K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=8.4K, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) +│ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=14, stddevActual=3.79, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=26, inputRowsActual=34, rowsDroppedActual=8, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=18, stddevActual=4.21, confidenceScoreActual=0.28, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=8, inputRowsActual=16, rowsDroppedActual=8, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=8, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=8.7K, nextCallCountActual=8, nextTimeNanosActual=2.2K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O], firstRowTimeNanosActual=3.3K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=120.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=879, avgNextNanosActual=281, indexHitRateActual=0.09) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=8.5K, nextCallCountActual=8, nextTimeNanosActual=625, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.1K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=27.2K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=531, avgNextNanosActual=78, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=5.7K, nextCallCountActual=26, nextTimeNanosActual=1.6K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=417, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=25.5K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=169, avgNextNanosActual=62, indexHitRateActual=0.76) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=12.6K, nextCallCountActual=26, nextTimeNanosActual=1.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=7.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=243, avgNextNanosActual=70, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=6.5K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=70, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.9K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=5.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=74, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.6K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] +│ ║ ║ Compare (<) +│ ║ ║ Var (name=p) +│ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ Compare (>) +│ ║ ║ Var (name=effect) +│ ║ ║ ValueConstant (value="0.7"^^) +│ ║ ║ , firstRowTimeNanosActual=417, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=4.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=64, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=17.2K, nextCallCountActual=18, nextTimeNanosActual=3.2K, firstRowTimeNanosActual=541, openCountActual=18, lastRowTimeNanosActual=2.5K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=480, avgNextNanosActual=178) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=8.4K, nextCallCountActual=18, nextTimeNanosActual=1.4K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=1.7K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=79, indexHitRateActual=0.50) +│ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0) +│ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optMarker) (bindingState=bound) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] +│ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (<) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) +│ ║ ║ ║ └── Compare (>) +│ ║ ║ ║ Var (name=effect) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="0.7"^^) +│ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] +│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] +│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) +│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) +│ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=result) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ ║ │ o: Var (name=p) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] +│ ║ ║ Compare (<) +│ ║ ║ Var (name=p) +│ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ Compare (>) +│ ║ ║ Var (name=effect) +│ ║ ║ ValueConstant (value="0.7"^^) +│ ║ ║ ) +│ ║ ║ s: Var (name=result) (bindingState=bound) +│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ ║ o: Var (name=effect) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=result) (bindingState=bound) +│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ │ o: Var (name=marker) (bindingState=unbound) +│ ║ └── ExtensionElem (optMarker) +│ ║ Var (name=marker) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { } +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?drug . +?arm ?result . +?result ?p . +?result ?effect . +FILTER ((?p < 0.05) || (?effect > 0.7)) +OPTIONAL { +?result ?marker . +BIND(?marker AS ?optMarker) +} +FILTER (?optMarker != ) +} + + +Theme: PHARMA z_queryIndex: 1 +=== Explanation Telemetry === +Initial explain execution time: 16 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 8 ms + +Projection (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=17.1K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.3K, avgNextNanosActual=214) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "combo" (hasNextFalseCountActual=0) +║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=11.9K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.2K, avgNextNanosActual=149) +├── Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.2K, avgNextNanosActual=80) +│ ╠══ Filter (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=1.5K, sourceRowsScannedActual=134, sourceRowsMatchedActual=80, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=2.9M, exprEvalCountActual=134, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=80, lastRowTimeNanosActual=3.0M, closeCountActual=1, exprEvalTimeNanosActual=24.2K, inputRowsActual=134, rowsDroppedActual=54, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.1K, avgNextNanosActual=20, filterRejectRateActual=0.40) +│ ║ ├── Compare (>=) (exprEvalCountActual=134, exprFalseCountActual=54, exprTrueCountActual=80, exprEvalTimeNanosActual=14.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ └── Group (combo) (resultSizeActual=134, hasNextCallCountActual=135, hasNextTrueCountActual=134, hasNextTimeNanosActual=2.9M, nextCallCountActual=134, nextTimeNanosActual=2.6K, aggregateEvalCountActual=776, firstRowTimeNanosActual=2.9M, groupsCreatedActual=134, openCountActual=1, lastRowTimeNanosActual=3.0M, maxGroupSizeActual=7, closeCountActual=1, varsAddedActual=2, varsDroppedActual=11, avgGroupSizeActual=2.90, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=388, rowsDroppedActual=254, selectivityActual=0.35, expansionFactorActual=0.35, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=21.9K, avgNextNanosActual=20) +│ ║ Filter (resultSizeActual=388, hasNextCallCountActual=390, hasNextTrueCountActual=389, hasNextTimeNanosActual=2.6M, nextCallCountActual=388, nextTimeNanosActual=5.0K, sourceRowsScannedActual=593, sourceRowsMatchedActual=388, sourceRowsFilteredActual=205, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=30.3K, exprEvalCountActual=593, exprFalseCountActual=205, openCountActual=1, exprTrueCountActual=388, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=176.5K, inputRowsActual=593, rowsDroppedActual=205, selectivityActual=0.65, expansionFactorActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=6.7K, avgNextNanosActual=13, filterRejectRateActual=0.35) +│ ║ ├── ListMemberOperator (exprEvalCountActual=593, exprFalseCountActual=205, exprTrueCountActual=388, exprEvalTimeNanosActual=123.1K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optSeverity) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Mild") (exprEvalCountActual=593, exprTrueCountActual=593, exprEvalTimeNanosActual=26.7K, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="Moderate") (exprEvalCountActual=385, exprTrueCountActual=385, exprEvalTimeNanosActual=16.5K, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=593, hasNextCallCountActual=594, hasNextTrueCountActual=593, hasNextTimeNanosActual=2.3M, nextCallCountActual=593, nextTimeNanosActual=8.7K, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=593, firstRowTimeNanosActual=24.2K, leftRowsWithMatchActual=285, openCountActual=1, lastRowTimeNanosActual=2.8M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=878, rowsDroppedActual=285, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, leftRowsProbedActual=285, rightRowsScannedActual=593, avgRightRowsPerLeftActual=2.08, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.08, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=285, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=285, inputRowsActual=570, rowsDroppedActual=285, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.33, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=285, rightRowsScannedActual=285, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281, resultSizeActual=285, joinRightIteratorsCreatedActual=141, joinLeftBindingsConsumedActual=141, joinRightBindingsConsumedActual=285, inputRowsActual=426, rowsDroppedActual=141, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=1.36, stddevActual=1.16, confidenceScoreActual=0.48, hasNextFalseCountActual=0, leftRowsProbedActual=141, rightRowsScannedActual=285, avgRightRowsPerLeftActual=2.02, joinOutputPerLeftActual=2.02) [left] +│ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, resultSizeActual=141, hasNextCallCountActual=142, hasNextTrueCountActual=141, hasNextTimeNanosActual=563.4K, nextCallCountActual=141, nextTimeNanosActual=2.1K, sourceRowsScannedActual=477, sourceRowsMatchedActual=141, sourceRowsFilteredActual=336, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, plannedLookupComponents=[P], firstRowTimeNanosActual=12.9K, exprEvalCountActual=477, exprFalseCountActual=336, openCountActual=1, exprTrueCountActual=141, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=453.1K, inputRowsActual=477, rowsDroppedActual=336, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, filterRejectRateActual=0.70) [left] +│ ║ ║ │ ║ ├── Compare (>) (exprEvalCountActual=477, exprFalseCountActual=336, exprTrueCountActual=141, exprEvalTimeNanosActual=421.8K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=score) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=42.9K, nextCallCountActual=477, nextTimeNanosActual=25.6K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=54, indexHitRateActual=1.00) +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=285, hasNextCallCountActual=426, hasNextTrueCountActual=285, hasNextTimeNanosActual=101.1K, nextCallCountActual=285, nextTimeNanosActual=18.7K, sourceRowsScannedActual=426, sourceRowsMatchedActual=285, sourceRowsFilteredActual=141, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=141, openCountActual=141, lastRowTimeNanosActual=19.7K, closeCountActual=141, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=141, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=237, avgNextNanosActual=66, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=477, resultSizeActual=285, hasNextCallCountActual=570, hasNextTrueCountActual=285, hasNextTimeNanosActual=128.4K, nextCallCountActual=285, nextTimeNanosActual=18.2K, sourceRowsScannedActual=570, sourceRowsMatchedActual=285, sourceRowsFilteredActual=285, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=5.0K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=64, indexHitRateActual=0.50) [right] +│ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=593, hasNextCallCountActual=1.4K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=1.0M, nextCallCountActual=593, nextTimeNanosActual=29.5K, firstRowTimeNanosActual=2.1K, openCountActual=285, lastRowTimeNanosActual=4.0K, closeCountActual=285, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=708, avgNextNanosActual=50) [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M, resultSizeActual=593, joinRightIteratorsCreatedActual=593, joinLeftBindingsConsumedActual=593, joinRightBindingsConsumedActual=593, inputRowsActual=1.1K, rowsDroppedActual=593, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=54, stddevActual=7.34, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=593, rightRowsScannedActual=593, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=593, hasNextCallCountActual=878, hasNextTrueCountActual=593, hasNextTimeNanosActual=249.1K, nextCallCountActual=593, nextTimeNanosActual=32.8K, sourceRowsScannedActual=878, sourceRowsMatchedActual=593, sourceRowsFilteredActual=285, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.3K, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=3.8K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=284, avgNextNanosActual=55, indexHitRateActual=0.68) [left] +│ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267, resultSizeActual=593, hasNextCallCountActual=1.1K, hasNextTrueCountActual=593, hasNextTimeNanosActual=291.5K, nextCallCountActual=593, nextTimeNanosActual=33.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=593, sourceRowsFilteredActual=593, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=593, openCountActual=593, lastRowTimeNanosActual=1.8K, closeCountActual=593, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=593, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ s: Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=sev) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optSeverity) (hasNextFalseCountActual=0) +│ ║ Var (name=sev) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (combo) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optSeverity) (bindingState=bound) +│ ║ │ ValueConstant (value="Mild") +│ ║ │ ValueConstant (value="Moderate") +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] +│ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ ├── Compare (>) +│ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) +│ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) +│ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] +│ ║ ║ │ s: Var (name=combo) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=combo) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ ║ s: Var (name=drug) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] +│ ║ │ s: Var (name=sideEffect) (bindingState=bound) +│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) +│ ║ │ o: Var (name=sev) (bindingState=unbound) +│ ║ └── ExtensionElem (optSeverity) +│ ║ Var (name=sev) (bindingState=bound) +│ ║ GroupElem (_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d) +│ Count (Distinct) +│ Var (name=drug) (bindingState=unbound) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?combo ?score . +FILTER (?score > 0.7) +?combo ?drug . +?combo a . +OPTIONAL { +?drug ?sideEffect . +?sideEffect ?sev . +BIND(?sev AS ?optSeverity) +} +FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) + + +Theme: PHARMA z_queryIndex: 2 +=== Explanation Telemetry === +Initial explain execution time: 75 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 41 ms + +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "target" (hasNextFalseCountActual=0) +║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, sourceRowsScannedActual=63, sourceRowsFilteredActual=63, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=63, exprFalseCountActual=63, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, exprEvalTimeNanosActual=12.0K, inputRowsActual=63, rowsDroppedActual=63, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M, filterRejectRateActual=1.00) +│ ║ ├── Compare (>) (exprEvalCountActual=63, exprFalseCountActual=63, exprEvalTimeNanosActual=5.9K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=11.0K, hasNextFalseCountActual=0) +│ ║ └── Group (target) (resultSizeActual=63, hasNextCallCountActual=64, hasNextTrueCountActual=63, hasNextTimeNanosActual=54.2M, nextCallCountActual=63, nextTimeNanosActual=1.8K, aggregateEvalCountActual=126, firstRowTimeNanosActual=54.3M, groupsCreatedActual=63, openCountActual=1, lastRowTimeNanosActual=54.3M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=848.3K, avgNextNanosActual=30) +│ ║ Filter (resultSizeActual=63, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=19.7K, rowsDroppedActual=19.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=19.7K, exprFalseCountActual=19.6K, exprTrueCountActual=134, exprEvalTimeNanosActual=9.6M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=510.5K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=342.7K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=134, exprFalseCountActual=71, exprTrueCountActual=63, exprEvalTimeNanosActual=279.1K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=0, joinRightIteratorsCreatedActual=63, joinLeftBindingsConsumedActual=63, joinRightBindingsConsumedActual=63, inputRowsActual=126, rowsDroppedActual=126, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=63, rightRowsScannedActual=63, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) +│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=134, hasNextTrueCountActual=63, hasNextTimeNanosActual=98.4K, nextCallCountActual=63, nextTimeNanosActual=4.0K, sourceRowsScannedActual=147, sourceRowsMatchedActual=63, sourceRowsFilteredActual=84, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=833, indexLookupCountActual=134, openCountActual=134, lastRowTimeNanosActual=1.9K, closeCountActual=134, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=71, nextPerHasNextRatioActual=0.47, avgHasNextNanosActual=735, avgNextNanosActual=65, indexHitRateActual=0.43) [left] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=63, hasNextTrueCountActual=63, hasNextTimeNanosActual=42.8K, nextCallCountActual=63, nextTimeNanosActual=3.7K, sourceRowsScannedActual=63, sourceRowsMatchedActual=63, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O], firstRowTimeNanosActual=750, indexLookupCountActual=63, openCountActual=63, lastRowTimeNanosActual=1.2K, closeCountActual=63, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=680, avgNextNanosActual=59, indexHitRateActual=1.00) [right] +│ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=19.7K, hasNextCallCountActual=19.7K, hasNextTrueCountActual=19.7K, hasNextTimeNanosActual=41.8M, nextCallCountActual=19.7K, nextTimeNanosActual=243.5K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.7K, firstRowTimeNanosActual=28.9K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=54.2M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.7K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=12, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.7K, avgRightRowsPerLeftActual=1.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.99, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=20.0K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=29.9K, rowsDroppedActual=20.0K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K, resultSizeActual=20.0K, joinRightIteratorsCreatedActual=666, joinRightBindingsConsumedActual=20.0K, inputRowsActual=20.6K, rowsDroppedActual=666, expansionFactorActual=0.97, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20.0K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666, resultSizeActual=666, joinRightIteratorsCreatedActual=666, joinLeftBindingsConsumedActual=666, joinRightBindingsConsumedActual=666, inputRowsActual=1.3K, rowsDroppedActual=666, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=666, rightRowsScannedActual=666, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=667, hasNextTrueCountActual=666, hasNextTimeNanosActual=83.3K, nextCallCountActual=666, nextTimeNanosActual=43.0K, sourceRowsScannedActual=667, sourceRowsMatchedActual=666, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=5.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=54.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=125, avgNextNanosActual=65, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=1.3K, hasNextTrueCountActual=666, hasNextTimeNanosActual=407.0K, nextCallCountActual=666, nextTimeNanosActual=40.8K, sourceRowsScannedActual=1.3K, sourceRowsMatchedActual=666, sourceRowsFilteredActual=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=708, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=71.5K, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=306, avgNextNanosActual=61, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=20.3K, resultSizeActual=20.0K, hasNextCallCountActual=20.6K, hasNextTrueCountActual=20.0K, hasNextTimeNanosActual=2.0M, nextCallCountActual=20.0K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=20.6K, sourceRowsMatchedActual=20.0K, sourceRowsFilteredActual=666, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O], firstRowTimeNanosActual=625, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=70.1K, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=99, avgNextNanosActual=52, indexHitRateActual=0.97) [right] +│ ║ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.1K, resultSizeActual=9.9K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=9.3M, nextCallCountActual=9.9K, nextTimeNanosActual=572.5K, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=20.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=20.0K, openCountActual=20.0K, lastRowTimeNanosActual=3.2K, closeCountActual=20.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.0K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=311, avgNextNanosActual=58, indexHitRateActual=0.33) [right] +│ ║ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=9.1M, nextCallCountActual=19.7K, nextTimeNanosActual=2.3M, firstRowTimeNanosActual=500, openCountActual=9.9K, lastRowTimeNanosActual=2.2K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=185, avgNextNanosActual=121) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=5.7M, nextCallCountActual=19.7K, nextTimeNanosActual=936.6K, sourceRowsScannedActual=29.7K, sourceRowsMatchedActual=19.7K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=1.8K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=116, avgNextNanosActual=47, indexHitRateActual=0.67) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) +│ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "target" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (target) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optDisease) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ │ ║ o: Var (name=drug) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] +│ ║ │ s: Var (name=trial) (bindingState=unbound) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ │ o: Var (name=arm) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] +│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) +│ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] +│ ║ ║ │ s: Var (name=drug) (bindingState=unbound) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ o: Var (name=target) (bindingState=bound) +│ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ s: Var (name=drug) (bindingState=bound) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +│ ║ │ o: Var (name=disease) (bindingState=unbound) +│ ║ └── ExtensionElem (optDisease) +│ ║ Var (name=disease) (bindingState=bound) +│ ║ GroupElem (_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123) +│ Count (Distinct) +│ Var (name=drug) (bindingState=unbound) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target ?pathway . +?target a . +?drug ?target . +?drug a . +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) + + +Theme: PHARMA z_queryIndex: 3 +=== Explanation Telemetry === +Initial explain execution time: 53 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 34 ms + +Projection (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=28.6M, nextCallCountActual=2.2K, nextTimeNanosActual=165.1K, firstRowTimeNanosActual=48.0K, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, varsDroppedActual=14, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=75) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "drug" (hasNextFalseCountActual=0) +║ ProjectionElem "disease" (hasNextFalseCountActual=0) +╚══ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=28.6M, nextCallCountActual=2.2K, nextTimeNanosActual=35.8K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.0K, exprEvalCountActual=2.2K, exprFalseCountActual=2, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=30.0M, closeCountActual=1, exprEvalTimeNanosActual=1.4M, inputRowsActual=2.2K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=16, filterRejectRateActual=0.00) +├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=2, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) +│ Var (name=optTarget) (bindingState=bound, hasNextFalseCountActual=0) +│ ValueConstant (value=http://example.com/theme/pharma/target/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=250, hasNextFalseCountActual=0) +└── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=26.9M, nextCallCountActual=2.2K, nextTimeNanosActual=37.0K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=47.9K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.2K, avgNextNanosActual=17, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) +╠══ Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.8M, nextCallCountActual=1.1K, nextTimeNanosActual=15.2K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=46.0K, exprEvalCountActual=1.1K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=30.0M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=1.1K, rowsDroppedActual=6, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.1K, avgNextNanosActual=14, filterRejectRateActual=0.01) [left] +║ ├── Not (exprEvalCountActual=1.1K, exprFalseCountActual=6, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) +║ │ Exists (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=6, exprEvalTimeNanosActual=1.4M, inputRowsActual=0, hasNextFalseCountActual=0) +║ │ StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=0, hasNextCallCountActual=1.1K, hasNextTrueCountActual=6, hasNextTimeNanosActual=827.7K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=6, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1000, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=733, indexHitRateActual=0.01) +║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) +║ │ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +║ └── Join (JoinIterator) (resultSizeEstimate=1.1K, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=1.1K, inputRowsActual=4.0K, rowsDroppedActual=2.8K, expansionFactorActual=0.28, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) +║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=955, joinRightBindingsConsumedActual=2.8K, inputRowsActual=3.8K, rowsDroppedActual=955, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=955, joinRightIteratorsCreatedActual=955, joinLeftBindingsConsumedActual=955, joinRightBindingsConsumedActual=955, inputRowsActual=1.9K, rowsDroppedActual=955, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=955, rightRowsScannedActual=955, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=956, hasNextTrueCountActual=955, hasNextTimeNanosActual=127.2K, nextCallCountActual=955, nextTimeNanosActual=46.4K, sourceRowsScannedActual=956, sourceRowsMatchedActual=955, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=133, avgNextNanosActual=49, indexHitRateActual=1.00) [left] +║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=1.9K, hasNextTrueCountActual=955, hasNextTimeNanosActual=546.6K, nextCallCountActual=955, nextTimeNanosActual=49.8K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=955, sourceRowsFilteredActual=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=21.7K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=286, avgNextNanosActual=52, indexHitRateActual=0.50) [right] +║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=633.7K, nextCallCountActual=2.8K, nextTimeNanosActual=143.4K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=955, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=20.7K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=165, avgNextNanosActual=50, indexHitRateActual=0.75) [right] +║ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=151.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], unlockedFilters=Not [right] +║ ║ │ Exists +║ ║ │ StatementPattern (resultSizeEstimate=9.9K) +║ ║ │ Var (name=drug) +║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ ║ │ Var (name=disease) +║ ║ │ , firstRowTimeNanosActual=666, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=6.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=239, avgNextNanosActual=52, indexHitRateActual=0.50) +║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=144.9K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.0K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207, avgNextNanosActual=50, indexHitRateActual=0.50) [right] +║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +║ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +║ ╚══ Filter (resultSizeEstimate=1.1K, resultSizeActual=1.1K, hasNextCallCountActual=4.0K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=9.4M, nextCallCountActual=1.1K, nextTimeNanosActual=15.3K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.7K, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.4K, exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, openCountActual=2.8K, exprTrueCountActual=1.1K, lastRowTimeNanosActual=3.0K, closeCountActual=2.8K, exprEvalTimeNanosActual=3.0M, inputRowsActual=2.8K, rowsDroppedActual=1.7K, selectivityActual=0.39, expansionFactorActual=0.39, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.28, avgHasNextNanosActual=2.4K, avgNextNanosActual=14, filterRejectRateActual=0.61) [right] +║ ├── Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) +║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) +║ │ ValueConstant (value="0.6"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=127.3K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=1.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=44, indexHitRateActual=0.50) +║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) +║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=248.8K, firstRowTimeNanosActual=583, openCountActual=1.1K, lastRowTimeNanosActual=3.7K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=193, avgNextNanosActual=112) [right] +├── StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=635.1K, nextCallCountActual=2.2K, nextTimeNanosActual=108.7K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=3.5K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=115, avgNextNanosActual=49, indexHitRateActual=0.66) +│ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (optTarget) (hasNextFalseCountActual=0) +Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "disease" +╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +├── Compare (!=) +│ Var (name=optTarget) (bindingState=bound) +│ ValueConstant (value=http://example.com/theme/pharma/target/0) +└── LeftJoin (LeftJoinIterator) +╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +║ ├── Not +║ │ Exists +║ │ StatementPattern (resultSizeEstimate=9.9K) +║ │ s: Var (name=drug) (bindingState=bound) +║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ │ o: Var (name=disease) (bindingState=bound) +║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) +║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] +║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] +║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) +║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) +║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P]) [right] +║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) +║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] +║ ║ │ ║ s: Var (name=trial) (bindingState=bound) +║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) +║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], unlockedFilters=Not [right] +║ ║ │ Exists +║ ║ │ StatementPattern (resultSizeEstimate=9.9K) +║ ║ │ Var (name=drug) +║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +║ ║ │ Var (name=disease) +║ ║ │ ) +║ ║ │ s: Var (name=arm) (bindingState=bound) +║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +║ ║ │ o: Var (name=drug) (bindingState=unbound) +║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] +║ ║ s: Var (name=arm) (bindingState=bound) +║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +║ ║ o: Var (name=result) (bindingState=unbound) +║ ╚══ Filter (resultSizeEstimate=1.1K, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P]) [right] +║ ├── Compare (>) +║ │ Var (name=rate) (bindingState=bound) +║ │ ValueConstant (value="0.6"^^) +║ └── StatementPattern (resultSizeEstimate=2.9K) +║ s: Var (name=result) (bindingState=bound) +║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) +║ o: Var (name=rate) (bindingState=unbound) +╚══ Extension [right] +├── StatementPattern (resultSizeEstimate=20.0K) +│ s: Var (name=drug) (bindingState=bound) +│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ o: Var (name=target) (bindingState=unbound) +└── ExtensionElem (optTarget) +Var (name=target) (bindingState=bound) + + +=== Rendered Optimized TupleExpr === +SELECT ?drug ?disease WHERE { +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?drug . +?arm ?result . +?result ?rate . +FILTER (?rate > 0.6) +FILTER NOT EXISTS { +?drug ?disease . +} +OPTIONAL { +?drug ?target . +BIND(?target AS ?optTarget) +} +FILTER (?optTarget != ) +} + + +Theme: PHARMA z_queryIndex: 4 +=== Explanation Telemetry === +Initial explain execution time: 83 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 52 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=64.1M, openCountActual=1, lastRowTimeNanosActual=64.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=1.3K) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=64.1M, openCountActual=1, lastRowTimeNanosActual=64.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=708) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=11.8K, firstRowTimeNanosActual=64.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=64.1M, maxGroupSizeActual=11.8K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=13, avgGroupSizeActual=11.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.8K, rowsDroppedActual=11.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=416) +│ ╠══ Difference (resultSizeActual=11.8K, hasNextCallCountActual=11.8K, hasNextTrueCountActual=11.8K, hasNextTimeNanosActual=62.4M, nextCallCountActual=11.8K, nextTimeNanosActual=151.5K, firstRowTimeNanosActual=3.4M, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.9K, rowsDroppedActual=106, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3K, avgNextNanosActual=13, leftRowsConsumedActual=11.9K, rightRowsConsumedActual=34, overlapRowsActual=72) +│ ║ ├── Filter (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=53.0M, nextCallCountActual=11.9K, nextTimeNanosActual=176.2K, sourceRowsScannedActual=11.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=44.3K, exprEvalCountActual=11.9K, openCountActual=1, exprTrueCountActual=11.9K, lastRowTimeNanosActual=64.0M, closeCountActual=1, exprEvalTimeNanosActual=6.0M, inputRowsActual=11.9K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=15, filterRejectRateActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=11.9K, exprTrueCountActual=11.9K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optClassName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=46.0M, nextCallCountActual=11.9K, nextTimeNanosActual=109.7K, joinRightIteratorsCreatedActual=11.9K, joinLeftBindingsConsumedActual=11.9K, joinRightBindingsConsumedActual=11.9K, firstRowTimeNanosActual=33.5K, leftRowsWithMatchActual=11.9K, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=23.9K, rowsDroppedActual=11.9K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=9.18, leftRowsProbedActual=11.9K, rightRowsScannedActual=11.9K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Union (resultSizeActual=11.9K, sampleCountActual=2, varianceActual=0.41, stddevActual=0.64, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsConsumedActual=10.0K, rightRowsConsumedActual=1.9K, leftRowsOutputContributionActual=10.0K, rightRowsOutputContributionActual=1.9K) [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.0K) +│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinLeftBindingsConsumedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.0K, rightRowsScannedActual=10.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.0K, resultSizeActual=10.0K, hasNextCallCountActual=10.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.0K, nextTimeNanosActual=546.7K, sourceRowsScannedActual=10.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=18.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=53.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=54, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.1K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.1M, nextCallCountActual=10.0K, nextTimeNanosActual=559.1K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=458, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=3.5K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=56, indexHitRateActual=0.50) [right] +│ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.3M, nextCallCountActual=10.0K, nextTimeNanosActual=618.0K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=2.5K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=62, indexHitRateActual=0.50) [right] +│ ║ │ │ ║ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=1.9K, joinRightBindingsConsumedActual=1.9K, inputRowsActual=3.8K, rowsDroppedActual=1.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.65, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) +│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=1.9K, inputRowsActual=2.8K, rowsDroppedActual=949, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=4.48, stddevActual=2.12, confidenceScoreActual=0.39, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) [left] +│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=949, joinLeftBindingsConsumedActual=949, joinRightBindingsConsumedActual=949, inputRowsActual=1.8K, rowsDroppedActual=949, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=949, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ │ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=950, hasNextTrueCountActual=949, hasNextTimeNanosActual=93.9K, nextCallCountActual=949, nextTimeNanosActual=58.6K, sourceRowsScannedActual=949, sourceRowsMatchedActual=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=53.9M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=62, indexHitRateActual=1.00) [left] +│ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.8K, hasNextTrueCountActual=949, hasNextTimeNanosActual=514.6K, nextCallCountActual=949, nextTimeNanosActual=57.1K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=583, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=6.2K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=60, indexHitRateActual=0.50) [right] +│ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=1.9K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=693.7K, nextCallCountActual=1.9K, nextTimeNanosActual=115.5K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, P], firstRowTimeNanosActual=750, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=5.0K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=242, avgNextNanosActual=60, indexHitRateActual=0.67) [right] +│ ║ │ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ │ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=1.9K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=1.0M, nextCallCountActual=1.9K, nextTimeNanosActual=116.1K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=1.9K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.9K, openCountActual=1.9K, lastRowTimeNanosActual=3.7K, closeCountActual=1.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=261, avgNextNanosActual=61, indexHitRateActual=0.50) [right] +│ ║ │ │ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=8.6M, nextCallCountActual=11.9K, nextTimeNanosActual=1.8M, firstRowTimeNanosActual=584, openCountActual=11.9K, lastRowTimeNanosActual=2.6K, closeCountActual=11.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=363, avgNextNanosActual=154) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=11.9K, nextTimeNanosActual=787.1K, sourceRowsScannedActual=23.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=11.9K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=11.9K, openCountActual=11.9K, lastRowTimeNanosActual=2.5K, closeCountActual=11.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=229, avgNextNanosActual=66, indexHitRateActual=0.50) +│ ║ │ ║ s: Var (name=class) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optClassName) (hasNextFalseCountActual=0) +│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Filter (new scope) (resultSizeActual=34, hasNextCallCountActual=35, hasNextTrueCountActual=34, hasNextTimeNanosActual=3.2M, nextCallCountActual=34, nextTimeNanosActual=628, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=34, sourceRowsFilteredActual=4.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=261.5K, exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, openCountActual=1, exprTrueCountActual=34, lastRowTimeNanosActual=3.3M, closeCountActual=1, exprEvalTimeNanosActual=2.4M, inputRowsActual=5.0K, rowsDroppedActual=4.9K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=93.7K, avgNextNanosActual=18, filterRejectRateActual=0.99) +│ ║ ╠══ ListMemberOperator (exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, exprTrueCountActual=34, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0) +│ ║ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) (exprEvalCountActual=5.0K, exprEvalTimeNanosActual=131.9K, hasNextFalseCountActual=0) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) (exprEvalCountActual=4.9K, exprEvalTimeNanosActual=83.2K, hasNextFalseCountActual=0) +│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=403.4K, nextCallCountActual=5.0K, nextTimeNanosActual=198.7K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81, avgNextNanosActual=40, indexHitRateActual=1.00) +│ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optClassName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Union [left] +│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) +│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) +│ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] +│ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) +│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) +│ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) +│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) +│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] +│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] +│ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) +│ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, O, P]) [right] +│ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) +│ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) +│ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] +│ ║ │ │ s: Var (name=mol) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) +│ ║ │ │ o: Var (name=class) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) +│ ║ │ ║ s: Var (name=class) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) +│ ║ │ ║ o: Var (name=optName) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optClassName) +│ ║ │ Var (name=optName) (bindingState=bound) +│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) +│ ║ ╠══ ListMemberOperator +│ ║ ║ Var (name=disease) (bindingState=bound) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) +│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) +│ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) +│ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ o: Var (name=disease) (bindingState=unbound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +{ +{ +?drug ?mol . +?drug a . +} +} +?mol ?class . +} +UNION +{ +{ +{ +?combo ?drug . +?combo a . +?drug ?mol . +} +} +?mol ?class . +} +OPTIONAL { +?class ?optName . +BIND(?optName AS ?optClassName) +} +FILTER (?optClassName != "") +MINUS { +?drug ?disease . +FILTER (?disease IN (, )) +} +} + + +Theme: PHARMA z_queryIndex: 5 +=== Explanation Telemetry === +Initial explain execution time: 12 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 9 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=458, firstRowTimeNanosActual=1.1M, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=570.0K, avgNextNanosActual=458) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=1.1M, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=569.7K, avgNextNanosActual=250) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=167, aggregateEvalCountActual=32, firstRowTimeNanosActual=1.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1.1M, maxGroupSizeActual=32, closeCountActual=1, varsAddedActual=1, varsDroppedActual=14, avgGroupSizeActual=32, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=32, rowsDroppedActual=31, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=568.9K, avgNextNanosActual=167) +│ ╠══ Filter (resultSizeActual=32, hasNextCallCountActual=34, hasNextTrueCountActual=33, hasNextTimeNanosActual=1.1M, nextCallCountActual=32, nextTimeNanosActual=712, sourceRowsScannedActual=44, sourceRowsMatchedActual=32, sourceRowsFilteredActual=12, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=67.8K, exprEvalCountActual=44, exprFalseCountActual=12, openCountActual=1, exprTrueCountActual=32, lastRowTimeNanosActual=1.1M, closeCountActual=1, exprEvalTimeNanosActual=38.5K, inputRowsActual=44, rowsDroppedActual=12, selectivityActual=0.73, expansionFactorActual=0.73, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=32.5K, avgNextNanosActual=22, filterRejectRateActual=0.27) +│ ║ ├── Compare (>) (exprEvalCountActual=44, exprFalseCountActual=12, exprTrueCountActual=32, exprEvalTimeNanosActual=32.6K, hasNextFalseCountActual=0) +│ ║ │ Var (name=optEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="0.3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=44, hasNextCallCountActual=45, hasNextTrueCountActual=44, hasNextTimeNanosActual=1.0M, nextCallCountActual=44, nextTimeNanosActual=1.0K, joinRightIteratorsCreatedActual=44, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, firstRowTimeNanosActual=65.1K, leftRowsWithMatchActual=44, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=88, rowsDroppedActual=44, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=23.5K, avgNextNanosActual=24, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=44, joinRightIteratorsCreatedActual=79, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, inputRowsActual=123, rowsDroppedActual=79, expansionFactorActual=0.36, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=312, stddevActual=18, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66, resultSizeActual=79, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=79, inputRowsActual=82, rowsDroppedActual=3, expansionFactorActual=0.96, sampleCountActual=2, varianceActual=315, stddevActual=18, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=79, avgRightRowsPerLeftActual=26, joinOutputPerLeftActual=26) [left] +│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=1.0K, nextCallCountActual=3, nextTimeNanosActual=333, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=2.3K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=1.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=271, avgNextNanosActual=111) [left] +│ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=82, hasNextTrueCountActual=79, hasNextTimeNanosActual=16.2K, nextCallCountActual=79, nextTimeNanosActual=9.6K, sourceRowsScannedActual=82, sourceRowsMatchedActual=79, sourceRowsFilteredActual=3, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O], firstRowTimeNanosActual=917, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=261.4K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=199, avgNextNanosActual=122, indexHitRateActual=0.96) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=70.1K, nextCallCountActual=79, nextTimeNanosActual=3.4K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O], firstRowTimeNanosActual=1.2K, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=13.8K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=444, avgNextNanosActual=44, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=34.0K, nextCallCountActual=79, nextTimeNanosActual=3.1K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O], firstRowTimeNanosActual=417, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=12.0K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=40, indexHitRateActual=0.50) [right] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=67.5K, nextCallCountActual=79, nextTimeNanosActual=2.8K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=667, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=11.1K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=428, avgNextNanosActual=36, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Filter (resultSizeEstimate=1.6K, resultSizeActual=44, hasNextCallCountActual=123, hasNextTrueCountActual=44, hasNextTimeNanosActual=401.4K, nextCallCountActual=44, nextTimeNanosActual=1.1K, sourceRowsScannedActual=79, sourceRowsMatchedActual=44, sourceRowsFilteredActual=35, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=79, exprFalseCountActual=35, openCountActual=79, exprTrueCountActual=44, lastRowTimeNanosActual=7.8K, closeCountActual=79, exprEvalTimeNanosActual=107.7K, inputRowsActual=79, rowsDroppedActual=35, selectivityActual=0.56, expansionFactorActual=0.56, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=3.3K, avgNextNanosActual=27, filterRejectRateActual=0.44) [right] +│ ║ ║ ╠══ Or (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, shortCircuitCountActual=44, exprEvalTimeNanosActual=100.2K, hasNextFalseCountActual=0) +│ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, exprEvalTimeNanosActual=86.5K, hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) +│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=35, exprFalseCountActual=35, exprEvalTimeNanosActual=7.8K, hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=42.6K, nextCallCountActual=79, nextTimeNanosActual=4.0K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=4.9K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=270, avgNextNanosActual=52, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=34.9K, nextCallCountActual=44, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=542, openCountActual=44, lastRowTimeNanosActual=2.4K, closeCountActual=44, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=397, avgNextNanosActual=161) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=19.8K, nextCallCountActual=44, nextTimeNanosActual=2.7K, sourceRowsScannedActual=88, sourceRowsMatchedActual=44, sourceRowsFilteredActual=44, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=44, openCountActual=44, lastRowTimeNanosActual=2.0K, closeCountActual=44, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=62, indexHitRateActual=0.50) +│ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optEffect) (hasNextFalseCountActual=0) +│ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=optEffect) (bindingState=bound) +│ ║ │ ValueConstant (value="0.3"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] +│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] +│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) +│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P]) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (<) +│ ║ ║ ║ │ Var (name=p) (bindingState=bound) +│ ║ ║ ║ │ ValueConstant (value="0.05"^^) +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=p) (bindingState=bound) +│ ║ ║ ║ ValueConstant (value="0.05"^^) +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ ║ s: Var (name=result) (bindingState=bound) +│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ ║ o: Var (name=p) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=result) (bindingState=bound) +│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ │ o: Var (name=effect) (bindingState=unbound) +│ ║ └── ExtensionElem (optEffect) +│ ║ Var (name=effect) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=trial) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=trial) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +VALUES ?marker { } +?result ?marker . +?arm ?result . +?trial ?arm . +?trial a . +?result ?p . +FILTER ((?p < 0.05) || (?p = 0.05)) +OPTIONAL { +?result ?effect . +BIND(?effect AS ?optEffect) +} +FILTER (?optEffect > 0.3) +} + + +Theme: PHARMA z_queryIndex: 6 +=== Explanation Telemetry === +Initial explain execution time: 22 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 18 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=666) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "combo" (hasNextFalseCountActual=0) +║ ProjectionElem "sharedTargets" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=333, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=333) +├── Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=250) +│ ╠══ Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=166, sourceRowsScannedActual=5, sourceRowsMatchedActual=1, sourceRowsFilteredActual=4, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.9M, exprEvalCountActual=5, exprFalseCountActual=4, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=2.9K, inputRowsActual=5, rowsDroppedActual=4, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=166, filterRejectRateActual=0.80) +│ ║ ├── Compare (>) (exprEvalCountActual=5, exprFalseCountActual=4, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) +│ ║ └── Group (combo) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=5.9M, nextCallCountActual=5, nextTimeNanosActual=250, aggregateEvalCountActual=44, firstRowTimeNanosActual=5.9M, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=5.9M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=4.40, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=22, rowsDroppedActual=17, selectivityActual=0.23, expansionFactorActual=0.23, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=991.1K, avgNextNanosActual=50) +│ ║ Filter (resultSizeActual=22, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=22, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=12.4K, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optSideEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=416, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=21.3K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=22, hasNextTrueCountActual=22, hasNextTimeNanosActual=8.2K, sourceRowsScannedActual=22, sourceRowsMatchedActual=22, plannedIndexName=spoc, indexLookupCountActual=22, openCountActual=22, lastRowTimeNanosActual=334, closeCountActual=22, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=373, indexHitRateActual=1.00) +│ ║ │ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=sideEffect2) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22, hasNextCallCountActual=23, hasNextTrueCountActual=22, hasNextTimeNanosActual=5.8M, nextCallCountActual=22, nextTimeNanosActual=504, joinRightIteratorsCreatedActual=12, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=22, firstRowTimeNanosActual=1.8M, leftRowsWithMatchActual=12, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=34, rowsDroppedActual=12, expansionFactorActual=0.65, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=255.4K, avgNextNanosActual=23, leftRowsProbedActual=12, rightRowsScannedActual=22, avgRightRowsPerLeftActual=1.83, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.83, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M, resultSizeActual=12, joinRightIteratorsCreatedActual=2.5K, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=12, inputRowsActual=2.5K, rowsDroppedActual=2.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=44.7M, stddevActual=6.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=12, rightRowsScannedActual=12, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M, resultSizeActual=2.5K, joinRightIteratorsCreatedActual=1.2K, joinLeftBindingsConsumedActual=1.2K, joinRightBindingsConsumedActual=2.5K, inputRowsActual=3.7K, rowsDroppedActual=1.2K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=1.2K, rightRowsScannedActual=2.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] +│ ║ ║ │ ╠══ Filter (resultSizeActual=1.2K, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.2K, nextTimeNanosActual=15.4K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=1.2K, sourceRowsFilteredActual=949, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=20.6K, exprEvalCountActual=2.2K, exprFalseCountActual=949, openCountActual=1, exprTrueCountActual=1.2K, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=239.3K, inputRowsActual=2.2K, rowsDroppedActual=949, selectivityActual=0.57, expansionFactorActual=0.57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=12, filterRejectRateActual=0.43) [left] +│ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=949, exprTrueCountActual=1.2K, exprEvalTimeNanosActual=94.7K, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=2.2K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=2.2K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=3.1K, rowsDroppedActual=949, expansionFactorActual=0.70, sampleCountActual=2, varianceActual=0.44, stddevActual=0.66, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.2K) +│ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=477, joinLeftBindingsConsumedActual=477, joinRightBindingsConsumedActual=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4K, rowsDroppedActual=477, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=477, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] +│ ║ ║ │ ║ ║ ├── StatementPattern [index: ospc] (costEstimate=161, resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=55.6K, nextCallCountActual=477, nextTimeNanosActual=22.7K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=6.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.9M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=116, avgNextNanosActual=48, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.4K, hasNextTrueCountActual=949, hasNextTimeNanosActual=269.2K, nextCallCountActual=949, nextTimeNanosActual=47.8K, sourceRowsScannedActual=1.4K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=476, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=477, openCountActual=477, lastRowTimeNanosActual=1.7K, closeCountActual=477, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=477, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=189, avgNextNanosActual=50, indexHitRateActual=0.67) [right] +│ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=2.2K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=486.0K, nextCallCountActual=2.2K, nextTimeNanosActual=109.6K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=948, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=833, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.70, avgHasNextNanosActual=154, avgNextNanosActual=50, indexHitRateActual=0.70) [right] +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=2.5K, hasNextCallCountActual=3.7K, hasNextTrueCountActual=2.5K, hasNextTimeNanosActual=720.8K, nextCallCountActual=2.5K, nextTimeNanosActual=113.3K, sourceRowsScannedActual=3.7K, sourceRowsMatchedActual=2.5K, sourceRowsFilteredActual=1.2K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=1.2K, openCountActual=1.2K, lastRowTimeNanosActual=1.2K, closeCountActual=1.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=192, avgNextNanosActual=45, indexHitRateActual=0.67) [right] +│ ║ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=20.0K, resultSizeActual=12, hasNextCallCountActual=2.5K, hasNextTrueCountActual=12, hasNextTimeNanosActual=1.0M, nextCallCountActual=12, nextTimeNanosActual=583, sourceRowsScannedActual=2.5K, sourceRowsMatchedActual=12, sourceRowsFilteredActual=2.5K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=2.5K, openCountActual=2.5K, lastRowTimeNanosActual=416, closeCountActual=2.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=413, avgNextNanosActual=49, indexHitRateActual=0.00) [right] +│ ║ ║ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=11.9K, nextCallCountActual=22, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=541, openCountActual=12, lastRowTimeNanosActual=2.5K, closeCountActual=12, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=221, avgNextNanosActual=154) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=6.5K, nextCallCountActual=22, nextTimeNanosActual=1.1K, sourceRowsScannedActual=34, sourceRowsMatchedActual=22, sourceRowsFilteredActual=12, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=12, openCountActual=12, lastRowTimeNanosActual=2.3K, closeCountActual=12, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=121, avgNextNanosActual=53, indexHitRateActual=0.65) +│ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optSideEffect) (hasNextFalseCountActual=0) +│ ║ Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (sharedTargets) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (sharedTargets) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "combo" +║ ProjectionElem "sharedTargets" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (combo) +│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drugB) (bindingState=bound) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] +│ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] +│ ║ ║ │ ║ ├── Compare (!=) +│ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) +│ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) +│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) +│ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) +│ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) +│ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] +│ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) +│ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) +│ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] +│ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) +│ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ s: Var (name=drugA) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ o: Var (name=target) (bindingState=unbound) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] +│ ║ ║ s: Var (name=drugB) (bindingState=bound) +│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ o: Var (name=target) (bindingState=bound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drugA) (bindingState=bound) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=sideEffect) (bindingState=unbound) +│ ║ └── ExtensionElem (optSideEffect) +│ ║ Var (name=sideEffect) (bindingState=bound) +│ ║ GroupElem (_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ║ GroupElem (sharedTargets) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123) +│ Count (Distinct) +│ Var (name=target) (bindingState=unbound) +└── ExtensionElem (sharedTargets) +Count (Distinct) +Var (name=target) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { +?combo a . +?combo ?drugA . +?combo ?drugB . +FILTER (?drugA != ?drugB) +?drugA ?target . +?drugB ?target . +OPTIONAL { +?drugA ?sideEffect . +BIND(?sideEffect AS ?optSideEffect) +} +FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) + + +Theme: PHARMA z_queryIndex: 7 +=== Explanation Telemetry === +Initial explain execution time: 91 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 47 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=833) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=416, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=416) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=292, aggregateEvalCountActual=5.7K, firstRowTimeNanosActual=65.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, maxGroupSizeActual=5.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=5.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=292) +│ ╠══ Filter (resultSizeActual=5.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=5.7K, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optCompName) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, hasNextFalseCountActual=0) +│ ║ │ ╚══ Not (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=41.1M, hasNextFalseCountActual=0) +│ ║ │ Exists (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=40.8M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=144, resultSizeActual=0, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=5.7K, rowsDroppedActual=5.7K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) +│ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.5M, nextCallCountActual=5.7K, nextTimeNanosActual=355.5K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=6.1K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=62, indexHitRateActual=0.50) [left] +│ ║ │ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=r) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Filter (resultSizeEstimate=1.00, resultSizeActual=0, hasNextCallCountActual=5.7K, hasNextTimeNanosActual=21.8M, sourceRowsScannedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_pattern, plannedLookupComponents=[S, O, P], exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=3.4K, closeCountActual=5.7K, exprEvalTimeNanosActual=6.1M, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.8K, filterRejectRateActual=1.00) [right] +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="0.08"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=518.7K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value="0.09"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=575.7K, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=5.7K, nextTimeNanosActual=282.1K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=1.2K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212, avgNextNanosActual=49, indexHitRateActual=0.50) +│ ║ │ s: Var (name=r) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=5.7K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=18.7M, nextCallCountActual=5.7K, nextTimeNanosActual=34.9K, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, joinRightBindingsConsumedActual=5.7K, firstRowTimeNanosActual=37.6K, leftRowsWithMatchActual=5.7K, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=11.5K, rowsDroppedActual=5.7K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=6.06, leftRowsProbedActual=5.7K, rightRowsScannedActual=5.7K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Join (JoinIterator) (resultSizeActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=8.6K, rowsDroppedActual=2.8K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=352.2K, nextCallCountActual=2.8K, nextTimeNanosActual=115.6K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=122, avgNextNanosActual=40, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.5M, nextCallCountActual=2.8K, nextTimeNanosActual=92.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=584, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=21.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=32, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ └── Union (resultSizeActual=5.7K, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsConsumedActual=2.8K, rightRowsConsumedActual=2.8K, leftRowsOutputContributionActual=2.8K, rightRowsOutputContributionActual=2.8K) [right] +│ ║ ║ ╠══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=128.8K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=10.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=45, indexHitRateActual=0.50) +│ ║ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=98.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=10.5K, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=19.7K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=238, avgNextNanosActual=34, indexHitRateActual=0.50) +│ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=4.6M, nextCallCountActual=5.7K, nextTimeNanosActual=808.4K, firstRowTimeNanosActual=792, openCountActual=5.7K, lastRowTimeNanosActual=8.6K, closeCountActual=5.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=405, avgNextNanosActual=140) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=3.3M, nextCallCountActual=5.7K, nextTimeNanosActual=328.9K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=8.4K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=57, indexHitRateActual=0.50) +│ ║ │ s: Var (name=comp) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optCompName) (hasNextFalseCountActual=0) +│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optCompName) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=144) +│ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] +│ ║ │ │ s: Var (name=arm) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ │ │ o: Var (name=r) (bindingState=unbound) +│ ║ │ └── Filter (resultSizeEstimate=1.00, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_pattern, plannedLookupComponents=[S, O, P]) [right] +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=p) (bindingState=bound) +│ ║ │ ║ ValueConstant (value="0.08"^^) +│ ║ │ ║ ValueConstant (value="0.09"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ │ s: Var (name=r) (bindingState=bound) +│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) +│ ║ │ o: Var (name=p) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ └── Union [right] +│ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) +│ ║ ║ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) +│ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) +│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) +│ ║ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ o: Var (name=comp) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=13.2K) +│ ║ │ s: Var (name=comp) (bindingState=bound) +│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) +│ ║ │ o: Var (name=optName) (bindingState=unbound) +│ ║ └── ExtensionElem (optCompName) +│ ║ Var (name=optName) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=arm) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=arm) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { +?trial ?arm . +?trial a . +?arm (|) ?comp . +OPTIONAL { +?comp ?optName . +BIND(?optName AS ?optCompName) +} +FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) +} + + +Theme: PHARMA z_queryIndex: 8 +=== Explanation Telemetry === +Initial explain execution time: 61 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 37 ms + +Projection (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.3M, nextCallCountActual=1.6K, nextTimeNanosActual=249.4K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=32.0K, avgNextNanosActual=153) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "drug" (hasNextFalseCountActual=0) +║ ProjectionElem "targetCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=163.3K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=32.0K, avgNextNanosActual=100) +├── Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=89.8K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.9K, avgNextNanosActual=55) +│ ╠══ Filter (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=20.0K, sourceRowsScannedActual=4.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=3.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.0M, exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, openCountActual=1, exprTrueCountActual=1.6K, lastRowTimeNanosActual=52.7M, closeCountActual=1, exprEvalTimeNanosActual=753.2K, inputRowsActual=4.9K, rowsDroppedActual=3.3K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.9K, avgNextNanosActual=12, filterRejectRateActual=0.67) +│ ║ ├── Compare (>=) (exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=418.4K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) +│ ║ └── Group (drug) (resultSizeActual=4.9K, hasNextCallCountActual=4.9K, hasNextTrueCountActual=4.9K, hasNextTimeNanosActual=51.0M, nextCallCountActual=4.9K, nextTimeNanosActual=86.9K, aggregateEvalCountActual=39.6K, firstRowTimeNanosActual=51.0M, groupsCreatedActual=4.9K, openCountActual=1, lastRowTimeNanosActual=52.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.98, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.8K, rowsDroppedActual=14.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.3K, avgNextNanosActual=17) +│ ║ Difference (resultSizeActual=19.8K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=41.1M, nextCallCountActual=19.8K, nextTimeNanosActual=215.2K, firstRowTimeNanosActual=87.9K, openCountActual=1, lastRowTimeNanosActual=49.3M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.9K, rowsDroppedActual=166, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=11, leftRowsConsumedActual=19.9K, rightRowsConsumedActual=30, overlapRowsActual=136) +│ ║ ├── Filter (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=33.8M, nextCallCountActual=19.9K, nextTimeNanosActual=264.9K, sourceRowsScannedActual=19.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=17.0K, exprEvalCountActual=19.9K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=19.9K, lastRowTimeNanosActual=49.0M, closeCountActual=1, exprEvalTimeNanosActual=7.7M, inputRowsActual=19.9K, rowsDroppedActual=6, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.00) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=19.9K, exprFalseCountActual=6, exprTrueCountActual=19.9K, exprEvalTimeNanosActual=6.2M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optMol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) +│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=24.5M, nextCallCountActual=19.9K, nextTimeNanosActual=193.9K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.9K, firstRowTimeNanosActual=14.0K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=49.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.9K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=9.72, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.9K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=14.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=14.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) [left] +│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=446.4K, nextCallCountActual=5.0K, nextTimeNanosActual=297.4K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=49.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89, avgNextNanosActual=59, indexHitRateActual=1.00) [left] +│ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=2.8M, nextCallCountActual=9.9K, nextTimeNanosActual=566.6K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P], firstRowTimeNanosActual=583, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=6.9K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=188, avgNextNanosActual=57, indexHitRateActual=0.67) [right] +│ ║ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ │ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ └── Extension (resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=8.8M, nextCallCountActual=19.9K, nextTimeNanosActual=2.4M, firstRowTimeNanosActual=542, openCountActual=9.9K, lastRowTimeNanosActual=5.8K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=177, avgNextNanosActual=122) [right] +│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=19.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=5.5K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=110, avgNextNanosActual=55, indexHitRateActual=0.67) +│ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ╚══ ExtensionElem (optMol) (hasNextFalseCountActual=0) +│ ║ │ Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── Union (resultSizeActual=30, hasNextFalseCountActual=0, leftRowsConsumedActual=16, rightRowsConsumedActual=14, leftRowsOutputContributionActual=16, rightRowsOutputContributionActual=14) +│ ║ ╠══ Filter (resultSizeActual=16, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=16, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ ║ ├── SameTerm (hasNextFalseCountActual=0) +│ ║ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) (exprEvalCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) +│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=16, resultSizeActual=16, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=4.5K, nextCallCountActual=16, nextTimeNanosActual=1.1K, sourceRowsScannedActual=48, sourceRowsMatchedActual=16, sourceRowsFilteredActual=32, plannedIndexName=ospc, firstRowTimeNanosActual=2.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=26.0K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=267, avgNextNanosActual=73, indexHitRateActual=0.33) +│ ║ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Filter (resultSizeActual=14, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=14, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) +│ ║ ├── SameTerm (hasNextFalseCountActual=0) +│ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) (exprEvalCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) +│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=14, resultSizeActual=14, hasNextCallCountActual=15, hasNextTrueCountActual=14, hasNextTimeNanosActual=3.5K, nextCallCountActual=14, nextTimeNanosActual=540, sourceRowsScannedActual=54, sourceRowsMatchedActual=14, sourceRowsFilteredActual=40, plannedIndexName=ospc, firstRowTimeNanosActual=31.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=47.1K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=236, avgNextNanosActual=39, indexHitRateActual=0.26) +│ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (targetCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (targetCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "drug" +║ ProjectionElem "targetCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="3"^^) +│ ║ └── Group (drug) +│ ║ Difference +│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optMol) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] +│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] +│ ║ │ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ │ │ o: Var (name=target) (bindingState=unbound) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ ║ s: Var (name=drug) (bindingState=bound) +│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) +│ ║ │ ║ o: Var (name=mol) (bindingState=unbound) +│ ║ │ ╚══ ExtensionElem (optMol) +│ ║ │ Var (name=mol) (bindingState=bound) +│ ║ └── Union +│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ║ ├── SameTerm +│ ║ ║ │ Var (name=disease) (bindingState=bound) +│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) +│ ║ ║ └── StatementPattern (resultSizeEstimate=16) +│ ║ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) +│ ║ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) +│ ║ ├── SameTerm +│ ║ │ Var (name=disease) (bindingState=bound) +│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) +│ ║ └── StatementPattern (resultSizeEstimate=14) +│ ║ s: Var (name=drug) (bindingState=unbound) +│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) +│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) +│ ║ GroupElem (_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ║ GroupElem (targetCount) +│ ║ Count (Distinct) +│ ║ Var (name=target) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d) +│ Count (Distinct) +│ Var (name=target) (bindingState=unbound) +└── ExtensionElem (targetCount) +Count (Distinct) +Var (name=target) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { +?drug a . +?drug ?target . +OPTIONAL { +?drug ?mol . +BIND(?mol AS ?optMol) +} +FILTER (?optMol != ) +MINUS { +{ +?drug . +FILTER (sameTerm(?disease, )) +} +UNION +{ +?drug . +FILTER (sameTerm(?disease, )) +} +} +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) + + +Theme: PHARMA z_queryIndex: 9 +=== Explanation Telemetry === +Initial explain execution time: 61 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 37 ms + +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=28.6M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=625) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "count" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=167, firstRowTimeNanosActual=28.7M, openCountActual=1, lastRowTimeNanosActual=28.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=167) +├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=84, aggregateEvalCountActual=13, firstRowTimeNanosActual=28.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=28.7M, maxGroupSizeActual=13, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=13, rowsDroppedActual=12, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=84) +│ ╠══ Filter (resultSizeActual=13, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=2.2K, rowsDroppedActual=2.2K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=2.2K, exprFalseCountActual=2.2K, exprTrueCountActual=13, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=54.8K, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=40.1K, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=13, exprTrueCountActual=13, exprEvalTimeNanosActual=15.5K, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=13, hasNextTrueCountActual=13, hasNextTimeNanosActual=5.8K, sourceRowsScannedActual=13, sourceRowsMatchedActual=13, plannedIndexName=spoc, indexLookupCountActual=13, openCountActual=13, lastRowTimeNanosActual=417, closeCountActual=13, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=452, indexHitRateActual=1.00) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=se) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=27.2M, nextCallCountActual=2.2K, nextTimeNanosActual=24.4K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=24.1M, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.3K, avgNextNanosActual=11, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) +│ ║ ╠══ Projection (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=207.4K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.3K, avgNextNanosActual=188) [left] +│ ║ ║ ├── ProjectionElemList (hasNextFalseCountActual=0) +│ ║ ║ │ ProjectionElem "drug" (hasNextFalseCountActual=0) +│ ║ ║ │ ProjectionElem "avgEffect" (hasNextFalseCountActual=0) +│ ║ ║ └── Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=125.4K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.3K, avgNextNanosActual=113) +│ ║ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=72.7K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.2K, avgNextNanosActual=66) +│ ║ ║ ║ ├── Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.5M, nextCallCountActual=1.1K, nextTimeNanosActual=18.5K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=723, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.1M, exprEvalCountActual=1.8K, exprFalseCountActual=723, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=28.6M, closeCountActual=1, exprEvalTimeNanosActual=303.5K, inputRowsActual=1.8K, rowsDroppedActual=723, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.2K, avgNextNanosActual=17, filterRejectRateActual=0.40) +│ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=1.8K, exprFalseCountActual=723, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=159.5K, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ Var (name=_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=625, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ Group (drug) (resultSizeActual=1.8K, hasNextCallCountActual=1.8K, hasNextTrueCountActual=1.8K, hasNextTimeNanosActual=24.1M, nextCallCountActual=1.8K, nextTimeNanosActual=39.9K, aggregateEvalCountActual=4.5K, firstRowTimeNanosActual=24.1M, groupsCreatedActual=1.8K, openCountActual=1, lastRowTimeNanosActual=28.6M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=13, avgGroupSizeActual=1.25, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.2K, rowsDroppedActual=453, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.2K, avgNextNanosActual=22) +│ ║ ║ ║ │ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=19.5M, nextCallCountActual=2.2K, nextTimeNanosActual=31.6K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=603, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=93.0K, exprEvalCountActual=2.8K, exprFalseCountActual=603, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=23.3M, closeCountActual=1, exprEvalTimeNanosActual=3.1M, inputRowsActual=2.8K, rowsDroppedActual=603, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.6K, avgNextNanosActual=14, filterRejectRateActual=0.21) +│ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=603, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=333, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=16.1M, nextCallCountActual=2.8K, nextTimeNanosActual=27.0K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, firstRowTimeNanosActual=29.0K, leftRowsWithMatchActual=2.8K, openCountActual=1, lastRowTimeNanosActual=23.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=9.37, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) +│ ║ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.03, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +│ ║ ║ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] +│ ║ ║ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=329.5K, nextCallCountActual=2.8K, nextTimeNanosActual=169.4K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=11.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=23.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=59, indexHitRateActual=1.00) [left] +│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=169.6K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=541, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=7.4K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=169.9K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=6.3K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=59, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=158.4K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.3K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=55, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=144.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=4.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207, avgNextNanosActual=50, indexHitRateActual=0.50) [right] +│ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ └── Extension (resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.9M, nextCallCountActual=2.8K, nextTimeNanosActual=370.9K, firstRowTimeNanosActual=792, openCountActual=2.8K, lastRowTimeNanosActual=3.4K, closeCountActual=2.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=344, avgNextNanosActual=129) [right] +│ ║ ║ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=131.7K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=3.2K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=46, indexHitRateActual=0.50) +│ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ GroupElem (_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ │ GroupElem (avgEffect) (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ ║ └── ExtensionElem (_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) +│ ║ ║ ║ Avg (hasNextFalseCountActual=0) +│ ║ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ ╚══ ExtensionElem (avgEffect) (hasNextFalseCountActual=0) +│ ║ ║ Avg (hasNextFalseCountActual=0) +│ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.2K, nextTimeNanosActual=285.2K, firstRowTimeNanosActual=959, openCountActual=1.1K, lastRowTimeNanosActual=2.6K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=251, avgNextNanosActual=129) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=127.0K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=917, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=2.4K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=183, avgNextNanosActual=57, indexHitRateActual=0.67) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) +│ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +└── ExtensionElem (count) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optDisease) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=10.0K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) +│ ║ │ o: Var (name=se) (bindingState=unbound) +│ ║ └── LeftJoin +│ ║ ╠══ Projection (new scope) [left] +│ ║ ║ ├── ProjectionElemList +│ ║ ║ │ ProjectionElem "drug" +│ ║ ║ │ ProjectionElem "avgEffect" +│ ║ ║ └── Extension +│ ║ ║ ╠══ Extension +│ ║ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ║ ║ │ ╠══ Compare (>) +│ ║ ║ ║ │ ║ Var (name=_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) +│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) +│ ║ ║ ║ │ ╚══ Group (drug) +│ ║ ║ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ║ ║ │ ╠══ Compare (>) +│ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) +│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) +│ ║ ║ ║ │ ╚══ LeftJoin +│ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] +│ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] +│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] +│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) +│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) +│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] +│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) +│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) +│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) +│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) +│ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) +│ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) +│ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) +│ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] +│ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) +│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) +│ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) +│ ║ ║ ║ │ └── Extension [right] +│ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) +│ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) +│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) +│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) +│ ║ ║ ║ │ Var (name=rate) (bindingState=bound) +│ ║ ║ ║ │ GroupElem (_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ ║ ║ │ Avg +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound) +│ ║ ║ ║ │ GroupElem (avgEffect) +│ ║ ║ ║ │ Avg +│ ║ ║ ║ │ Var (name=effect) (bindingState=bound) +│ ║ ║ ║ └── ExtensionElem (_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234) +│ ║ ║ ║ Avg +│ ║ ║ ║ Var (name=effect) (bindingState=unbound) +│ ║ ║ ╚══ ExtensionElem (avgEffect) +│ ║ ║ Avg +│ ║ ║ Var (name=effect) (bindingState=unbound) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) +│ ║ │ o: Var (name=disease) (bindingState=unbound) +│ ║ └── ExtensionElem (optDisease) +│ ║ Var (name=disease) (bindingState=bound) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=drug) (bindingState=bound) +└── ExtensionElem (count) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +{ +SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { +?trial ?arm . +?trial a . +?arm ?drug . +?arm ?result . +?result ?effect . +OPTIONAL { +?result ?rate . +BIND(?rate AS ?optRate) +} +FILTER (?optRate > 0.2) +} +GROUP BY ?drug +HAVING (AVG(?effect) > 0.4) +} +OPTIONAL { +?drug ?disease . +BIND(?disease AS ?optDisease) +} +FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} + + +Theme: PHARMA z_queryIndex: 10 +=== Explanation Telemetry === +Initial explain execution time: 479 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 294 ms + +Projection (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=11.6K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=228) +╠══ ProjectionElemList (hasNextFalseCountActual=0) +║ ProjectionElem "pathway" (hasNextFalseCountActual=0) +║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=139) +├── Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=3.9K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=78) +│ ╠══ Filter (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.5M, nextCallCountActual=51, nextTimeNanosActual=1.0K, sourceRowsScannedActual=105, sourceRowsMatchedActual=51, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=470.5M, exprEvalCountActual=105, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=51, lastRowTimeNanosActual=470.6M, closeCountActual=1, exprEvalTimeNanosActual=33.3K, inputRowsActual=105, rowsDroppedActual=54, selectivityActual=0.49, expansionFactorActual=0.49, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.0M, avgNextNanosActual=20, filterRejectRateActual=0.51) +│ ║ ├── Compare (>) (exprEvalCountActual=105, exprFalseCountActual=54, exprTrueCountActual=51, exprEvalTimeNanosActual=24.5K, hasNextFalseCountActual=0) +│ ║ │ Var (name=_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.5K, hasNextFalseCountActual=0) +│ ║ └── Group (pathway) (resultSizeActual=105, hasNextCallCountActual=106, hasNextTrueCountActual=105, hasNextTimeNanosActual=470.5M, nextCallCountActual=105, nextTimeNanosActual=2.7K, aggregateEvalCountActual=412, firstRowTimeNanosActual=470.5M, groupsCreatedActual=105, openCountActual=1, lastRowTimeNanosActual=470.6M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.96, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=206, rowsDroppedActual=101, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=4.4M, avgNextNanosActual=26) +│ ║ Filter (resultSizeActual=206, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, inputRowsActual=22.6K, rowsDroppedActual=22.4K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) +│ ║ ├── And (hasNextFalseCountActual=0) +│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22.6K, exprFalseCountActual=6, exprTrueCountActual=11.3K, exprErrorCountActual=11.2K, exprEvalTimeNanosActual=4.7M, hasNextFalseCountActual=0) +│ ║ │ ║ Var (name=optTrial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) +│ ║ │ ╚══ Exists (exprEvalCountActual=22.6K, exprFalseCountActual=11.1K, exprTrueCountActual=11.4K, exprEvalTimeNanosActual=404.5M, inputRowsActual=0, hasNextFalseCountActual=0) +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=0, joinRightIteratorsCreatedActual=191.5K, joinRightBindingsConsumedActual=11.4K, inputRowsActual=203.0K, rowsDroppedActual=203.0K, expansionFactorActual=0, sampleCountActual=2, varianceActual=974, stddevActual=31, confidenceScoreActual=0.06, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=11.4K) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=191.5K, joinRightIteratorsCreatedActual=191.5K, joinLeftBindingsConsumedActual=191.5K, joinRightBindingsConsumedActual=191.5K, inputRowsActual=383.1K, rowsDroppedActual=191.5K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=191.5K, rightRowsScannedActual=191.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=191.5K, hasNextCallCountActual=202.7K, hasNextTrueCountActual=191.5K, hasNextTimeNanosActual=23.1M, nextCallCountActual=191.5K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=202.7K, sourceRowsMatchedActual=191.5K, sourceRowsFilteredActual=11.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=542, indexLookupCountActual=22.6K, openCountActual=22.6K, lastRowTimeNanosActual=2.2K, closeCountActual=22.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.1K, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=114, avgNextNanosActual=51, indexHitRateActual=0.94) [left] +│ ║ │ ║ │ s: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ │ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=191.5K, hasNextCallCountActual=371.7K, hasNextTrueCountActual=191.5K, hasNextTimeNanosActual=91.6M, nextCallCountActual=191.5K, nextTimeNanosActual=9.9M, sourceRowsScannedActual=371.7K, sourceRowsMatchedActual=191.5K, sourceRowsFilteredActual=180.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O], firstRowTimeNanosActual=542, indexLookupCountActual=191.5K, openCountActual=191.5K, lastRowTimeNanosActual=1.7K, closeCountActual=191.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=180.1K, nextPerHasNextRatioActual=0.52, avgHasNextNanosActual=247, avgNextNanosActual=52, indexHitRateActual=0.52) [right] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) +│ ║ │ ║ o: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=11.4K, hasNextCallCountActual=191.5K, hasNextTrueCountActual=11.4K, hasNextTimeNanosActual=62.6M, nextCallCountActual=11.4K, nextTimeNanosActual=611.2K, sourceRowsScannedActual=191.5K, sourceRowsMatchedActual=11.4K, sourceRowsFilteredActual=180.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O], firstRowTimeNanosActual=500, indexLookupCountActual=191.5K, openCountActual=191.5K, lastRowTimeNanosActual=1000, closeCountActual=191.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=180.1K, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=327, avgNextNanosActual=53, indexHitRateActual=0.06) [right] +│ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22.6K, hasNextCallCountActual=22.6K, hasNextTrueCountActual=22.6K, hasNextTimeNanosActual=54.9M, nextCallCountActual=22.6K, nextTimeNanosActual=229.1K, joinRightIteratorsCreatedActual=19.8K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=11.3K, firstRowTimeNanosActual=20.9K, leftRowsWithMatchActual=8.6K, openCountActual=1, emptyRightProbeCountActual=11.2K, lastRowTimeNanosActual=470.4M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=31.2K, rowsDroppedActual=8.6K, expansionFactorActual=0.72, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=10, leftRowsProbedActual=19.8K, rightRowsScannedActual=11.3K, avgRightRowsPerLeftActual=0.57, joinMatchRateActual=0.43, joinOutputPerLeftActual=1.14, leftJoinNullExtendedRowsActual=11.2K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=19.8K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=19.8K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=29.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=98.9M, stddevActual=9.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=19.8K, rightRowsScannedActual=19.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=9.9K, joinRightBindingsConsumedActual=9.9K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=19.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=48, stddevActual=6.96, confidenceScoreActual=0.20, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.9K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=9.9K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] +│ ║ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=1.00, resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=697.7K, nextCallCountActual=5.0K, nextTimeNanosActual=254.0K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=7.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=470.4M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=139, avgNextNanosActual=51, indexHitRateActual=1.00) [left] +│ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=3.3M, nextCallCountActual=9.9K, nextTimeNanosActual=544.6K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=12.6K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=226, avgNextNanosActual=55, indexHitRateActual=0.67) [right] +│ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=2.0K, resultSizeEstimate=666, resultSizeActual=9.9K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=9.9K, nextTimeNanosActual=527.3K, sourceRowsScannedActual=19.8K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=792, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=11.6K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=281, avgNextNanosActual=53, indexHitRateActual=0.50) [right] +│ ║ ║ │ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) +│ ║ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=19.8K, hasNextCallCountActual=29.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=19.8K, nextTimeNanosActual=244.4K, firstRowTimeNanosActual=125, openCountActual=9.9K, bindingsProvidedActual=19.8K, lastRowTimeNanosActual=10.2K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=96, avgNextNanosActual=12) [right] +│ ║ ╚══ Extension (resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=14.0M, nextCallCountActual=11.3K, nextTimeNanosActual=1.6M, firstRowTimeNanosActual=667, openCountActual=19.8K, lastRowTimeNanosActual=667, closeCountActual=19.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=383, avgNextNanosActual=148) [right] +│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=3.4K, resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=9.0M, nextCallCountActual=11.3K, nextTimeNanosActual=680.9K, sourceRowsScannedActual=31.2K, sourceRowsMatchedActual=11.3K, sourceRowsFilteredActual=19.8K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=19.8K, openCountActual=19.8K, lastRowTimeNanosActual=375, closeCountActual=19.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=247, avgNextNanosActual=60, indexHitRateActual=0.36) +│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) (hasNextFalseCountActual=0) +│ ║ │ o: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +│ ║ └── ExtensionElem (optTrial) (hasNextFalseCountActual=0) +│ ║ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) +│ ║ Count (Distinct) (hasNextFalseCountActual=0) +│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) +│ ╚══ ExtensionElem (_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) +│ Count (Distinct) (hasNextFalseCountActual=0) +│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) +Count (Distinct) (hasNextFalseCountActual=0) +Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + + +=== Explanation Optimized === +Projection +╠══ ProjectionElemList +║ ProjectionElem "pathway" +║ ProjectionElem "drugCount" +╚══ Extension +├── Extension +│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound) +│ ║ │ ValueConstant (value="1"^^) +│ ║ └── Group (pathway) +│ ║ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrial) (bindingState=bound) +│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] +│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] +│ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) +│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) +│ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) +│ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] +│ ║ │ ║ s: Var (name=arm) (bindingState=unbound) +│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) +│ ║ │ ║ o: Var (name=result) (bindingState=bound) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] +│ ║ │ s: Var (name=trial) (bindingState=bound) +│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) +│ ║ │ o: Var (name=arm) (bindingState=bound) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] +│ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) +│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] +│ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) +│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) +│ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] +│ ║ ║ │ s: Var (name=target) (bindingState=bound) +│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) +│ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) +│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=3.4K) +│ ║ │ s: Var (name=drug) (bindingState=bound) +│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) +│ ║ │ o: Var (name=trial) (bindingState=unbound) +│ ║ └── ExtensionElem (optTrial) +│ ║ Var (name=trial) (bindingState=bound) +│ ║ GroupElem (_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ║ GroupElem (drugCount) +│ ║ Count (Distinct) +│ ║ Var (name=drug) (bindingState=bound) +│ ╚══ ExtensionElem (_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012) +│ Count (Distinct) +│ Var (name=drug) (bindingState=unbound) +└── ExtensionElem (drugCount) +Count (Distinct) +Var (name=drug) (bindingState=unbound) + + +=== Rendered Optimized TupleExpr === +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?drug a . +?drug ?target . +?target ?pathway . +VALUES ?marker { } +OPTIONAL { +?drug ?trial . +BIND(?trial AS ?optTrial) +} +FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) From 0de0f79f7c5a3e5da983af7fdff6e19639794ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Mon, 20 Apr 2026 20:51:55 +0200 Subject: [PATCH 27/43] slower and faster --- .../lmdb/benchmark/explain-2026-04-20-3.md | 19934 ++++++++-------- 1 file changed, 10156 insertions(+), 9778 deletions(-) diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md index b02579c4087..9cec3db800e 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/explain-2026-04-20-3.md @@ -1,6 +1,6 @@ Theme: MEDICAL_RECORDS z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 178 ms +Initial explain execution time: 198 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -11,45 +11,45 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 54 ms +Fastest execution time: 59 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=5.9K, firstRowTimeNanosActual=107.7M, openCountActual=1, lastRowTimeNanosActual=107.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=5.9K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=112.3M, nextCallCountActual=1, nextTimeNanosActual=90.1K, firstRowTimeNanosActual=112.4M, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=56.2M, avgNextNanosActual=90.1K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=3.5K, firstRowTimeNanosActual=107.7M, openCountActual=1, lastRowTimeNanosActual=107.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=3.6K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=107.7M, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=29.1K, firstRowTimeNanosActual=107.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=107.7M, maxGroupSizeActual=29.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=29.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=29.1K, rowsDroppedActual=29.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=53.9M, avgNextNanosActual=250) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K, hasNextCallCountActual=29.1K, hasNextTrueCountActual=29.1K, hasNextTimeNanosActual=97.6M, nextCallCountActual=29.1K, nextTimeNanosActual=338.3K, joinRightIteratorsCreatedActual=14.5K, joinLeftBindingsConsumedActual=14.5K, joinRightBindingsConsumedActual=29.1K, firstRowTimeNanosActual=107.9K, leftRowsWithMatchActual=14.5K, openCountActual=1, lastRowTimeNanosActual=107.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=43.6K, rowsDroppedActual=14.5K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=12, leftRowsProbedActual=14.5K, rightRowsScannedActual=29.1K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Filter (resultSizeActual=14.5K, hasNextCallCountActual=14.5K, hasNextTrueCountActual=14.5K, hasNextTimeNanosActual=75.9M, nextCallCountActual=14.5K, nextTimeNanosActual=208.0K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=14.5K, sourceRowsFilteredActual=10.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=87.0K, exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, openCountActual=1, exprTrueCountActual=14.5K, lastRowTimeNanosActual=107.3M, closeCountActual=1, exprEvalTimeNanosActual=18.1M, inputRowsActual=24.9K, rowsDroppedActual=10.4K, selectivityActual=0.58, expansionFactorActual=0.58, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.2K, avgNextNanosActual=14, filterRejectRateActual=0.42) [left] -│ ║ │ ╠══ Compare (>=) (exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, exprTrueCountActual=14.5K, exprEvalTimeNanosActual=15.2M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optDate) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="2024-06-01"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=12.8K, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=55.6M, nextCallCountActual=24.9K, nextTimeNanosActual=321.3K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=65.0K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=107.2M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=13, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=923.2K, nextCallCountActual=8.3K, nextTimeNanosActual=569.9K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=22.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=107.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=68, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=44.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=2.1K, openCountActual=8.3K, lastRowTimeNanosActual=8.3K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=668, avgNextNanosActual=46) [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=958, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=8.2K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=183, avgNextNanosActual=50, indexHitRateActual=0.75) [left] -│ ║ │ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.6M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=792, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.4K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=253, avgNextNanosActual=48, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optDate) (hasNextFalseCountActual=0) -│ ║ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=29.1K, hasNextCallCountActual=72.9K, hasNextTrueCountActual=58.3K, hasNextTimeNanosActual=7.6M, nextCallCountActual=29.1K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=43.6K, sourceRowsMatchedActual=29.1K, sourceRowsFilteredActual=14.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=14.5K, openCountActual=14.5K, lastRowTimeNanosActual=2.0K, closeCountActual=14.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=14.5K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=104, avgNextNanosActual=40, indexHitRateActual=0.67) [right] -│ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=112.3M, nextCallCountActual=1, nextTimeNanosActual=4.5K, firstRowTimeNanosActual=112.3M, openCountActual=1, lastRowTimeNanosActual=112.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=56.2M, avgNextNanosActual=4.5K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=112.3M, nextCallCountActual=1, nextTimeNanosActual=709, aggregateEvalCountActual=29.1K, firstRowTimeNanosActual=112.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=112.4M, maxGroupSizeActual=29.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=29.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=29.1K, rowsDroppedActual=29.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=56.2M, avgNextNanosActual=709) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=29.1K, hasNextCallCountActual=29.1K, hasNextTrueCountActual=29.1K, hasNextTimeNanosActual=102.0M, nextCallCountActual=29.1K, nextTimeNanosActual=394.0K, joinRightIteratorsCreatedActual=14.5K, joinLeftBindingsConsumedActual=14.5K, joinRightBindingsConsumedActual=29.1K, firstRowTimeNanosActual=88.1K, leftRowsWithMatchActual=14.5K, openCountActual=1, lastRowTimeNanosActual=112.2M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=43.6K, rowsDroppedActual=14.5K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.5K, avgNextNanosActual=14, leftRowsProbedActual=14.5K, rightRowsScannedActual=29.1K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Filter (resultSizeActual=14.5K, hasNextCallCountActual=14.5K, hasNextTrueCountActual=14.5K, hasNextTimeNanosActual=79.5M, nextCallCountActual=14.5K, nextTimeNanosActual=257.7K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=14.5K, sourceRowsFilteredActual=10.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=67.6K, exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, openCountActual=1, exprTrueCountActual=14.5K, lastRowTimeNanosActual=111.9M, closeCountActual=1, exprEvalTimeNanosActual=18.0M, inputRowsActual=24.9K, rowsDroppedActual=10.4K, selectivityActual=0.58, expansionFactorActual=0.58, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.5K, avgNextNanosActual=18, filterRejectRateActual=0.42) [left] + │ ║ │ ╠══ Compare (>=) (exprEvalCountActual=24.9K, exprFalseCountActual=10.4K, exprTrueCountActual=14.5K, exprEvalTimeNanosActual=16.0M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optDate) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=10.5K, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=58.9M, nextCallCountActual=24.9K, nextTimeNanosActual=367.2K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=52.7K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=111.8M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=15, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=905.8K, nextCallCountActual=8.3K, nextTimeNanosActual=593.0K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=20.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=111.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=71, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=47.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=1.8K, openCountActual=8.3K, lastRowTimeNanosActual=11.4K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=706, avgNextNanosActual=48) [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.00, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.3M, nextCallCountActual=24.9K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient], firstRowTimeNanosActual=833, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=11.2K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=190, avgNextNanosActual=53, indexHitRateActual=0.75) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=14.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], sharedJoinVars=[enc], firstRowTimeNanosActual=583, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.2K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284, avgNextNanosActual=53, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optDate) (hasNextFalseCountActual=0) + │ ║ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=29.1K, hasNextCallCountActual=72.9K, hasNextTrueCountActual=58.3K, hasNextTimeNanosActual=8.0M, nextCallCountActual=29.1K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=43.6K, sourceRowsMatchedActual=29.1K, sourceRowsFilteredActual=14.5K, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=14.5K, openCountActual=14.5K, lastRowTimeNanosActual=5.5K, closeCountActual=14.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=14.5K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=110, avgNextNanosActual=49, indexHitRateActual=0.67) [right] + │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -57,122 +57,122 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] -│ ║ │ ╠══ Compare (>=) -│ ║ │ ║ Var (name=optDate) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="2024-06-01"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] -│ ║ │ │ s: Var (name=patient) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.3K) -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) -│ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) -│ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=enc) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) -│ ║ │ ║ o: Var (name=date) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optDate) -│ ║ │ Var (name=date) (bindingState=bound) -│ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] -│ ║ s: Var (name=patient) (bindingState=bound) -│ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ o: Var (name=med) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=patient) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=patient) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ │ ╠══ Compare (>=) + │ ║ │ ║ Var (name=optDate) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-06-01"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.00) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] + │ ║ │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], sharedJoinVars=[enc]) [right] + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDate) + │ ║ │ Var (name=date) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ o: Var (name=med) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { -?patient a . -OPTIONAL { -?patient ?enc . -?enc ?date . -BIND(?date AS ?optDate) -} -FILTER (?optDate >= "2024-06-01"^^) -OPTIONAL { -?patient ?med . -} + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } } Theme: MEDICAL_RECORDS z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 307 ms +Initial explain execution time: 328 ms Warmup execution 1/6 Warmup execution 2/6 Warmup execution 3/6 Warmup execution 4/6 Warmup execution 5/6 Warmup execution 6/6 -Fastest execution time: 125 ms +Fastest execution time: 137 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=3.7K, firstRowTimeNanosActual=232.8M, openCountActual=1, lastRowTimeNanosActual=232.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=3.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=252.4M, nextCallCountActual=1, nextTimeNanosActual=4.4K, firstRowTimeNanosActual=252.4M, openCountActual=1, lastRowTimeNanosActual=252.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=126.2M, avgNextNanosActual=4.4K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=232.8M, openCountActual=1, lastRowTimeNanosActual=232.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=232.8M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=58.0K, firstRowTimeNanosActual=232.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=232.8M, maxGroupSizeActual=58.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=58.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=58.0K, rowsDroppedActual=58.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=116.4M, avgNextNanosActual=542) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=190.7M, nextCallCountActual=58.0K, nextTimeNanosActual=669.0K, joinRightIteratorsCreatedActual=58.0K, joinLeftBindingsConsumedActual=58.0K, joinRightBindingsConsumedActual=58.0K, firstRowTimeNanosActual=120.2K, leftRowsWithMatchActual=58.0K, openCountActual=1, lastRowTimeNanosActual=232.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=116.1K, rowsDroppedActual=58.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=12, leftRowsProbedActual=58.0K, rightRowsScannedActual=58.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Union (resultSizeActual=58.0K, hasNextFalseCountActual=0, leftRowsConsumedActual=58.0K, rightRowsConsumedActual=0, leftRowsOutputContributionActual=58.0K, rightRowsOutputContributionActual=0) [left] -│ ║ │ ╠══ Filter (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=102.4M, nextCallCountActual=58.0K, nextTimeNanosActual=598.4K, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=41.6K, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=108.9K, exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, openCountActual=1, exprTrueCountActual=58.0K, lastRowTimeNanosActual=232.6M, closeCountActual=1, exprEvalTimeNanosActual=19.3M, inputRowsActual=99.6K, rowsDroppedActual=41.6K, selectivityActual=0.58, expansionFactorActual=0.58, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=10, filterRejectRateActual=0.42) -│ ║ │ ║ ├── Or (exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, exprTrueCountActual=58.0K, shortCircuitCountActual=41.6K, exprEvalTimeNanosActual=12.4M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=99.6K, exprFalseCountActual=58.0K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=4.9M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=58.0K, exprFalseCountActual=41.6K, exprTrueCountActual=16.4K, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, resultSizeActual=99.6K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=49.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=49.8K) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.2K, nextCallCountActual=2, nextTimeNanosActual=667, firstRowTimeNanosActual=94.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=107.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=403, avgNextNanosActual=334) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=66.5K, joinLeftBindingsConsumedActual=66.5K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=116.3K, rowsDroppedActual=66.5K, expansionFactorActual=0.43, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=66.5K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=0.75, joinOutputPerLeftActual=0.75) [right] -│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=67.2K, resultSizeActual=66.5K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=66.5K, hasNextTimeNanosActual=7.5M, nextCallCountActual=66.5K, nextTimeNanosActual=3.0M, sourceRowsScannedActual=66.5K, sourceRowsMatchedActual=66.5K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=39.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=205.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=46, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.6K, resultSizeActual=49.8K, hasNextCallCountActual=116.3K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=27.8M, nextCallCountActual=49.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=116.3K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=66.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=66.5K, openCountActual=66.5K, lastRowTimeNanosActual=3.8K, closeCountActual=66.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.5K, nextPerHasNextRatioActual=0.43, avgHasNextNanosActual=239, avgNextNanosActual=40, indexHitRateActual=0.43) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=33.3K, rowsDroppedActual=33.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ │ ├── Or (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=4.3M, hasNextFalseCountActual=0) -│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=500, hasNextFalseCountActual=0) -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, resultSizeActual=33.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=16.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=16.7K) -│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.8K, nextCallCountActual=2, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=206.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=206.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=611, avgNextNanosActual=646) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=33.3K, rowsDroppedActual=16.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=16.6K, nextTimeNanosActual=661.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=206.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=232.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=40, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.1M, nextCallCountActual=16.6K, nextTimeNanosActual=530.4K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=417, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=1.2K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=243, avgNextNanosActual=32, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=58.0K, hasNextCallCountActual=116.1K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=22.8M, nextCallCountActual=58.0K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=116.1K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=58.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=58.0K, openCountActual=58.0K, lastRowTimeNanosActual=667, closeCountActual=58.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=197, avgNextNanosActual=40, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=alt) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=252.4M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=252.4M, openCountActual=1, lastRowTimeNanosActual=252.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=126.2M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=252.4M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=58.0K, firstRowTimeNanosActual=252.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=252.4M, maxGroupSizeActual=58.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=58.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=58.0K, rowsDroppedActual=58.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=126.2M, avgNextNanosActual=416) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=215.7M, nextCallCountActual=58.0K, nextTimeNanosActual=419.0K, joinRightIteratorsCreatedActual=58.0K, joinLeftBindingsConsumedActual=58.0K, joinRightBindingsConsumedActual=58.0K, firstRowTimeNanosActual=130.0K, leftRowsWithMatchActual=58.0K, openCountActual=1, lastRowTimeNanosActual=252.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=116.1K, rowsDroppedActual=58.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=7.22, leftRowsProbedActual=58.0K, rightRowsScannedActual=58.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Union (resultSizeActual=58.0K, hasNextFalseCountActual=0, leftRowsConsumedActual=58.0K, rightRowsConsumedActual=0, leftRowsOutputContributionActual=58.0K, rightRowsOutputContributionActual=0) [left] + │ ║ │ ╠══ Filter (resultSizeActual=58.0K, hasNextCallCountActual=58.0K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=115.3M, nextCallCountActual=58.0K, nextTimeNanosActual=769.1K, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=41.6K, plannedFilterEvidenceCount=15.1M, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=117.9K, exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, openCountActual=1, exprTrueCountActual=58.0K, lastRowTimeNanosActual=252.1M, closeCountActual=1, exprEvalTimeNanosActual=22.9M, inputRowsActual=99.6K, rowsDroppedActual=41.6K, selectivityActual=0.58, expansionFactorActual=0.58, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, filterRejectRateActual=0.42) + │ ║ │ ║ ├── Or (exprEvalCountActual=99.6K, exprFalseCountActual=41.6K, exprTrueCountActual=58.0K, shortCircuitCountActual=41.6K, exprEvalTimeNanosActual=14.8M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=99.6K, exprFalseCountActual=58.0K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=58.0K, exprFalseCountActual=41.6K, exprTrueCountActual=16.4K, exprEvalTimeNanosActual=2.7M, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=12.6K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.7K, resultSizeActual=99.6K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=49.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=49.8K) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.7K, nextCallCountActual=2, nextTimeNanosActual=792, firstRowTimeNanosActual=92.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=105.7K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=597, avgNextNanosActual=396) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.7K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=66.5K, joinLeftBindingsConsumedActual=66.5K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=116.3K, rowsDroppedActual=66.5K, expansionFactorActual=0.43, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=66.5K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=0.75, joinOutputPerLeftActual=0.75) [right] + │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=67.2K, resultSizeActual=66.5K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=66.5K, hasNextTimeNanosActual=6.5M, nextCallCountActual=66.5K, nextTimeNanosActual=3.5M, sourceRowsScannedActual=66.5K, sourceRowsMatchedActual=66.5K, sourceRowsFilteredActual=1, plannedAccessRows=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=35.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=222.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=98, avgNextNanosActual=54, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.7K, resultSizeActual=49.8K, hasNextCallCountActual=116.3K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=31.8M, nextCallCountActual=49.8K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=116.3K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=66.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[code, entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=417, indexLookupCountActual=66.5K, openCountActual=66.5K, lastRowTimeNanosActual=3.6K, closeCountActual=66.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.5K, nextPerHasNextRatioActual=0.43, avgHasNextNanosActual=273, avgNextNanosActual=47, indexHitRateActual=0.43) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=15.1M, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=33.3K, rowsDroppedActual=33.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ │ ├── Or (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=4.9M, hasNextFalseCountActual=0) + │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=33.3K, exprFalseCountActual=33.3K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="DX-202") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=459, hasNextFalseCountActual=0) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, resultSizeActual=33.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=16.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=16.7K) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.0K, nextCallCountActual=2, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=222.7M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=222.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=694, avgNextNanosActual=709) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=33.3K, rowsDroppedActual=16.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.2M, nextCallCountActual=16.6K, nextTimeNanosActual=793.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedAccessRows=24.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=222.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=252.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=76, avgNextNanosActual=48, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.8M, nextCallCountActual=16.6K, nextTimeNanosActual=695.2K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=375, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=1.0K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=266, avgNextNanosActual=42, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=58.0K, hasNextCallCountActual=116.1K, hasNextTrueCountActual=58.0K, hasNextTimeNanosActual=28.1M, nextCallCountActual=58.0K, nextTimeNanosActual=2.8M, sourceRowsScannedActual=116.1K, sourceRowsMatchedActual=58.0K, sourceRowsFilteredActual=58.0K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=58.0K, openCountActual=58.0K, lastRowTimeNanosActual=667, closeCountActual=58.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242, avgNextNanosActual=49, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=alt) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -180,91 +180,91 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Union [left] -│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ║ ├── Or -│ ║ │ ║ │ ╠══ Compare (=) -│ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ ║ │ ╚══ Compare (=) -│ ║ │ ║ │ Var (name=code) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="DX-202") -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.6K, joinType=Cartesian product) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.6K) [right] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.6K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[code, entity, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ├── Or -│ ║ │ │ ╠══ Compare (=) -│ ║ │ │ ║ Var (name=code) (bindingState=bound) -│ ║ │ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ │ ╚══ Compare (=) -│ ║ │ │ Var (name=code) (bindingState=bound) -│ ║ │ │ ValueConstant (value="DX-202") -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) -│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] -│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) -│ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound) -│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ │ o: Var (name=code) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] -│ ║ s: Var (name=entity) (bindingState=bound) -│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ o: Var (name=alt) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=entity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=entity) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=15.3M, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="DX-202") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=67.2K, plannedAccessRows=67.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[code, entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=15.3M, plannedFilterPassRatio=0.44, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=code) (bindingState=bound) + │ ║ │ │ ValueConstant (value="DX-202") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.4K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.4K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedAccessRows=24.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── StatementPattern (resultSizeEstimate=66.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=alt) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { -{ -VALUES ?target { "DX-200" "DX-201" } -{ -{ -?entity ?code . -?entity a . -} -} -FILTER ((?code = ?target) || (?code = "DX-202")) -} -UNION -{ -VALUES ?target { "DX-200" "DX-201" } -{ -{ -?entity a . -?entity ?code . -} -} -FILTER ((?code = ?target) || (?code = "DX-202")) -} -OPTIONAL { -?entity ?alt . -} + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity ?code . + ?entity a . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + UNION + { + VALUES ?target { "DX-200" "DX-201" } + { + { + ?entity a . + ?entity ?code . + } + } + FILTER ((?code = ?target) || (?code = "DX-202")) + } + OPTIONAL { + ?entity ?alt . + } } Theme: MEDICAL_RECORDS z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 222 ms +Initial explain execution time: 201 ms Warmup execution 1/9 Warmup execution 2/9 Warmup execution 3/9 @@ -274,55 +274,55 @@ Warmup execution 6/9 Warmup execution 7/9 Warmup execution 8/9 Warmup execution 9/9 -Fastest execution time: 100 ms +Fastest execution time: 85 ms -Projection (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=36.3K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=269) +Projection (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=150.1M, nextCallCountActual=135, nextTimeNanosActual=34.8K, firstRowTimeNanosActual=149.9M, openCountActual=1, lastRowTimeNanosActual=150.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.1M, avgNextNanosActual=258) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "practitioner" (hasNextFalseCountActual=0) ║ ProjectionElem "encCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=19.6K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=146) -├── Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=11.1K, firstRowTimeNanosActual=173.0M, openCountActual=1, lastRowTimeNanosActual=173.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=83) -│ ╠══ Filter (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.1M, nextCallCountActual=135, nextTimeNanosActual=2.3K, sourceRowsScannedActual=135, sourceRowsMatchedActual=135, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=173.0M, exprEvalCountActual=135, openCountActual=1, exprTrueCountActual=135, lastRowTimeNanosActual=173.2M, closeCountActual=1, exprEvalTimeNanosActual=88.1K, inputRowsActual=135, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=17, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=135, exprTrueCountActual=135, exprEvalTimeNanosActual=76.8K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=16.2K, hasNextFalseCountActual=0) -│ ║ └── Group (practitioner) (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=173.0M, nextCallCountActual=135, nextTimeNanosActual=3.5K, aggregateEvalCountActual=532, firstRowTimeNanosActual=173.0M, groupsCreatedActual=135, openCountActual=1, lastRowTimeNanosActual=173.2M, maxGroupSizeActual=3, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.97, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=266, rowsDroppedActual=131, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.3M, avgNextNanosActual=26) -│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=266, hasNextCallCountActual=268, hasNextTrueCountActual=267, hasNextTimeNanosActual=172.2M, nextCallCountActual=266, nextTimeNanosActual=3.5K, joinRightIteratorsCreatedActual=135, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=266, firstRowTimeNanosActual=169.2K, leftRowsWithMatchActual=135, openCountActual=1, lastRowTimeNanosActual=172.8M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=401, rowsDroppedActual=135, expansionFactorActual=0.66, sampleCountActual=2, varianceActual=0.98, stddevActual=0.99, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=642.9K, avgNextNanosActual=13, leftRowsProbedActual=135, rightRowsScannedActual=266, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K, resultSizeActual=135, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=135, inputRowsActual=25.1K, rowsDroppedActual=24.9K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=19, stddevActual=4.38, confidenceScoreActual=0.27, hasNextFalseCountActual=0, leftRowsProbedActual=135, rightRowsScannedActual=135, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.7M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=16.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=172.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=148, avgNextNanosActual=41, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=17.6M, nextCallCountActual=24.9K, nextTimeNanosActual=688.5K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=6.7K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=353, avgNextNanosActual=28, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, resultSizeActual=135, hasNextCallCountActual=25.1K, hasNextTrueCountActual=135, hasNextTimeNanosActual=83.9M, nextCallCountActual=135, nextTimeNanosActual=1.9K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=135, sourceRowsFilteredActual=24.8K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=666, exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, openCountActual=24.9K, exprTrueCountActual=135, lastRowTimeNanosActual=4.2K, closeCountActual=24.9K, exprEvalTimeNanosActual=20.5M, inputRowsActual=24.9K, rowsDroppedActual=24.8K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=3.3K, avgNextNanosActual=14, filterRejectRateActual=0.99) [right] -│ ║ │ ├── ListMemberOperator (exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, exprTrueCountActual=135, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=731.8K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="2024-02-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=643.8K, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=10.0M, nextCallCountActual=24.9K, nextTimeNanosActual=671.2K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=202, avgNextNanosActual=27, indexHitRateActual=0.50) -│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=266, hasNextCallCountActual=663, hasNextTrueCountActual=528, hasNextTimeNanosActual=83.1K, nextCallCountActual=266, nextTimeNanosActual=9.2K, sourceRowsScannedActual=401, sourceRowsMatchedActual=266, sourceRowsFilteredActual=135, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=135, openCountActual=135, lastRowTimeNanosActual=2.5K, closeCountActual=135, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=135, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=125, avgNextNanosActual=35, indexHitRateActual=0.66) [right] -│ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (encCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_2913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (encCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=150.0M, nextCallCountActual=135, nextTimeNanosActual=19.2K, firstRowTimeNanosActual=150.0M, openCountActual=1, lastRowTimeNanosActual=150.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.1M, avgNextNanosActual=143) + ├── Extension (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=150.0M, nextCallCountActual=135, nextTimeNanosActual=11.8K, firstRowTimeNanosActual=150.0M, openCountActual=1, lastRowTimeNanosActual=150.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.1M, avgNextNanosActual=88) + │ ╠══ Filter (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=150.0M, nextCallCountActual=135, nextTimeNanosActual=1.6K, sourceRowsScannedActual=135, sourceRowsMatchedActual=135, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=150.0M, exprEvalCountActual=135, openCountActual=1, exprTrueCountActual=135, lastRowTimeNanosActual=150.2M, closeCountActual=1, exprEvalTimeNanosActual=64.3K, inputRowsActual=135, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.1M, avgNextNanosActual=12, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=135, exprTrueCountActual=135, exprEvalTimeNanosActual=50.8K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_291e226babdcc344c88a5a61806b6a8e7f301, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=17.7K, hasNextFalseCountActual=0) + │ ║ └── Group (practitioner) (resultSizeActual=135, hasNextCallCountActual=136, hasNextTrueCountActual=135, hasNextTimeNanosActual=149.9M, nextCallCountActual=135, nextTimeNanosActual=3.9K, aggregateEvalCountActual=532, firstRowTimeNanosActual=149.9M, groupsCreatedActual=135, openCountActual=1, lastRowTimeNanosActual=150.1M, maxGroupSizeActual=3, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.97, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=266, rowsDroppedActual=131, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.1M, avgNextNanosActual=29) + │ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=266, hasNextCallCountActual=268, hasNextTrueCountActual=267, hasNextTimeNanosActual=149.0M, nextCallCountActual=266, nextTimeNanosActual=7.2K, joinRightIteratorsCreatedActual=135, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=266, firstRowTimeNanosActual=160.5K, leftRowsWithMatchActual=135, openCountActual=1, lastRowTimeNanosActual=149.7M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=401, rowsDroppedActual=135, expansionFactorActual=0.66, sampleCountActual=2, varianceActual=0.00, stddevActual=0.03, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=556.2K, avgNextNanosActual=27, leftRowsProbedActual=135, rightRowsScannedActual=266, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.3K, resultSizeActual=135, joinRightIteratorsCreatedActual=135, joinLeftBindingsConsumedActual=135, joinRightBindingsConsumedActual=135, inputRowsActual=270, rowsDroppedActual=135, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=8.7K, stddevActual=93, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=135, rightRowsScannedActual=135, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=136, resultSizeActual=135, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=135, inputRowsActual=25.1K, rowsDroppedActual=24.9K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=135, avgRightRowsPerLeftActual=0.01, joinOutputPerLeftActual=0.01) [left] + │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=2.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedAccessRows=24.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=20.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=149.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=42, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── Filter (resultSizeEstimate=136, resultSizeActual=135, hasNextCallCountActual=25.1K, hasNextTrueCountActual=135, hasNextTimeNanosActual=90.4M, nextCallCountActual=135, nextTimeNanosActual=2.7K, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=135, sourceRowsFilteredActual=24.8K, plannedFilterEvidenceCount=4.1M, plannedAccessRows=1.00, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=2.00, plannedWorkRows=136, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, sharedJoinVars=[enc], firstRowTimeNanosActual=958, exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, openCountActual=24.9K, exprTrueCountActual=135, lastRowTimeNanosActual=3.2K, closeCountActual=24.9K, exprEvalTimeNanosActual=22.2M, inputRowsActual=24.9K, rowsDroppedActual=24.8K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=3.6K, avgNextNanosActual=21, filterRejectRateActual=0.99) [right] + │ ║ │ ║ ╠══ ListMemberOperator (exprEvalCountActual=24.9K, exprFalseCountActual=24.8K, exprTrueCountActual=135, exprEvalTimeNanosActual=20.7M, hasNextFalseCountActual=0) + │ ║ │ ║ ║ Var (name=date) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ║ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=652.8K, hasNextFalseCountActual=0) + │ ║ │ ║ ║ ValueConstant (value="2024-02-01"^^) (exprEvalCountActual=24.9K, exprEvalTimeNanosActual=614.1K, hasNextFalseCountActual=0) + │ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=15.2M, nextCallCountActual=24.9K, nextTimeNanosActual=763.3K, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=1.2K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=305, avgNextNanosActual=31, indexHitRateActual=0.50) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.3K, resultSizeActual=135, hasNextCallCountActual=270, hasNextTrueCountActual=135, hasNextTimeNanosActual=69.0K, nextCallCountActual=135, nextTimeNanosActual=5.9K, sourceRowsScannedActual=270, sourceRowsMatchedActual=135, sourceRowsFilteredActual=135, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[date, enc, practitioner], sharedJoinVars=[enc], firstRowTimeNanosActual=500, indexLookupCountActual=135, openCountActual=135, lastRowTimeNanosActual=3.9K, closeCountActual=135, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=135, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=44, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=266, hasNextCallCountActual=663, hasNextTrueCountActual=528, hasNextTimeNanosActual=82.1K, nextCallCountActual=266, nextTimeNanosActual=11.1K, sourceRowsScannedActual=401, sourceRowsMatchedActual=266, sourceRowsFilteredActual=135, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=135, openCountActual=135, lastRowTimeNanosActual=2.7K, closeCountActual=135, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=135, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=124, avgNextNanosActual=42, indexHitRateActual=0.66) [right] + │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_291e226babdcc344c88a5a61806b6a8e7f301) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (encCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_291e226babdcc344c88a5a61806b6a8e7f301) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (encCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -331,59 +331,59 @@ Projection ║ ProjectionElem "practitioner" ║ ProjectionElem "encCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (practitioner) -│ ║ LeftJoin -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.6K) [left] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.8K) [left] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) -│ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ║ s: Var (name=enc) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) -│ ║ │ ╚══ Filter (resultSizeEstimate=1.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ├── ListMemberOperator -│ ║ │ │ Var (name=date) (bindingState=bound) -│ ║ │ │ ValueConstant (value="2024-01-01"^^) -│ ║ │ │ ValueConstant (value="2024-02-01"^^) -│ ║ │ └── StatementPattern (resultSizeEstimate=25.0K) -│ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) -│ ║ │ o: Var (name=date) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] -│ ║ s: Var (name=enc) (bindingState=bound) -│ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) -│ ║ o: Var (name=cond) (bindingState=unbound) -│ ║ GroupElem (_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456) -│ ║ Count -│ ║ Var (name=enc) (bindingState=bound) -│ ║ GroupElem (encCount) -│ ║ Count (Distinct) -│ ║ Var (name=enc) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_7913f2fe36952f541b08a42a7b8ce15e70d0123456) -│ Count -│ Var (name=enc) (bindingState=unbound) -└── ExtensionElem (encCount) -Count (Distinct) -Var (name=enc) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_791e226babdcc344c88a5a61806b6a8e7f30123456, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (practitioner) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.3K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=136) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=24.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.7K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ │ ║ └── Filter (resultSizeEstimate=136, plannedFilterEvidenceCount=4.1M, plannedAccessRows=1.00, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=2.00, plannedWorkRows=136, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[enc, practitioner], filterSelectivitySource=learned_filter, sharedJoinVars=[enc]) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=date) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="2024-01-01"^^) + │ ║ │ ║ ║ ValueConstant (value="2024-02-01"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ │ ║ o: Var (name=date) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[date, enc, practitioner], sharedJoinVars=[enc]) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=49.8K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ GroupElem (_anon_having_791e226babdcc344c88a5a61806b6a8e7f30123456) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_791e226babdcc344c88a5a61806b6a8e7f30123456) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { -?enc ?practitioner . -?enc a . -?enc ?date . -FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) -OPTIONAL { -?enc ?cond . -} + ?enc ?practitioner . + ?enc ?date . + FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) + ?enc a . + OPTIONAL { + ?enc ?cond . + } } GROUP BY ?practitioner HAVING (COUNT(?enc) > 0) @@ -391,67 +391,66 @@ HAVING (COUNT(?enc) > 0) Theme: MEDICAL_RECORDS z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 194 ms -Warmup execution 1/10 -Warmup execution 2/10 -Warmup execution 3/10 -Warmup execution 4/10 -Warmup execution 5/10 -Warmup execution 6/10 -Warmup execution 7/10 -Warmup execution 8/10 -Warmup execution 9/10 -Warmup execution 10/10 -Fastest execution time: 93 ms +Initial explain execution time: 217 ms +Warmup execution 1/9 +Warmup execution 2/9 +Warmup execution 3/9 +Warmup execution 4/9 +Warmup execution 5/9 +Warmup execution 6/9 +Warmup execution 7/9 +Warmup execution 8/9 +Warmup execution 9/9 +Fastest execution time: 95 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=152.9M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=2.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=164.7M, nextCallCountActual=1, nextTimeNanosActual=2.4K, firstRowTimeNanosActual=164.7M, openCountActual=1, lastRowTimeNanosActual=164.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=82.4M, avgNextNanosActual=2.5K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=152.9M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=708) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=152.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=38.7K, firstRowTimeNanosActual=152.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=152.9M, maxGroupSizeActual=38.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=38.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38.7K, rowsDroppedActual=38.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=76.5M, avgNextNanosActual=542) -│ ╠══ Difference (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=141.6M, nextCallCountActual=38.7K, nextTimeNanosActual=366.9K, firstRowTimeNanosActual=18.8M, openCountActual=1, lastRowTimeNanosActual=152.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=9.47, leftRowsConsumedActual=38.7K, rightRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── Filter (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=117.7M, nextCallCountActual=38.7K, nextTimeNanosActual=459.8K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=38.7K, sourceRowsFilteredActual=10.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=37.2K, exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, openCountActual=1, exprTrueCountActual=38.7K, lastRowTimeNanosActual=152.8M, closeCountActual=1, exprEvalTimeNanosActual=15.8M, inputRowsActual=49.6K, rowsDroppedActual=10.8K, selectivityActual=0.78, expansionFactorActual=0.78, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=12, filterRejectRateActual=0.22) -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, exprTrueCountActual=38.7K, exprEvalTimeNanosActual=12.2M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=17.9K, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=98.6M, nextCallCountActual=49.6K, nextTimeNanosActual=549.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=49.6K, firstRowTimeNanosActual=35.9K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=152.8M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=57.9K, rowsDroppedActual=8.3K, expansionFactorActual=0.86, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=11, leftRowsProbedActual=8.3K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=5.96, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.96, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=933.4K, nextCallCountActual=8.3K, nextTimeNanosActual=500.8K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=152.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=60, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=49.6K, hasNextCallCountActual=140.6K, hasNextTrueCountActual=132.3K, hasNextTimeNanosActual=87.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, firstRowTimeNanosActual=2.2K, openCountActual=8.3K, lastRowTimeNanosActual=11.8K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=620, avgNextNanosActual=41) [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=49.6K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=99.3K, rowsDroppedActual=49.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) -│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] -│ ║ │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.4M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=11.6K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=193, avgNextNanosActual=42, indexHitRateActual=0.75) [left] -│ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ o: Var (name=_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=12.6M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=958, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.6K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=170, avgNextNanosActual=41, indexHitRateActual=0.67) [right] -│ ║ │ ║ │ s: Var (name=_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.2K, resultSizeActual=49.6K, hasNextCallCountActual=99.3K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=20.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=99.3K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=49.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_4523f2fe36952f541b08a42a7b8ce15e70d0123, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=49.6K, openCountActual=49.6K, lastRowTimeNanosActual=1.1K, closeCountActual=49.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=203, avgNextNanosActual=43, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) -│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=18.7M, sourceRowsScannedActual=21.4K, sourceRowsFilteredActual=21.4K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, openCountActual=1, lastRowTimeNanosActual=18.7M, closeCountActual=1, exprEvalTimeNanosActual=15.7M, inputRowsActual=21.4K, rowsDroppedActual=21.4K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=18.7M, filterRejectRateActual=1.00) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, exprEvalTimeNanosActual=14.6M, hasNextFalseCountActual=0) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=12.2M, hasNextFalseCountActual=0) -│ ║ ║ │ Str (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=10.6M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="test") (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=679.8K, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=21.4K, resultSizeActual=21.4K, hasNextCallCountActual=21.4K, hasNextTrueCountActual=21.4K, hasNextTimeNanosActual=1.2M, nextCallCountActual=21.4K, nextTimeNanosActual=664.5K, sourceRowsScannedActual=21.4K, sourceRowsMatchedActual=21.4K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=18.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=60, avgNextNanosActual=31, indexHitRateActual=1.00) -│ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=164.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=164.8M, openCountActual=1, lastRowTimeNanosActual=164.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=82.4M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=164.7M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=38.7K, firstRowTimeNanosActual=164.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=164.8M, maxGroupSizeActual=38.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=38.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38.7K, rowsDroppedActual=38.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=82.4M, avgNextNanosActual=542) + │ ╠══ Difference (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=153.2M, nextCallCountActual=38.7K, nextTimeNanosActual=485.8K, firstRowTimeNanosActual=20.4M, openCountActual=1, lastRowTimeNanosActual=164.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=13, leftRowsConsumedActual=38.7K, rightRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── Filter (resultSizeActual=38.7K, hasNextCallCountActual=38.7K, hasNextTrueCountActual=38.7K, hasNextTimeNanosActual=126.9M, nextCallCountActual=38.7K, nextTimeNanosActual=618.8K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=38.7K, sourceRowsFilteredActual=10.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=43.1K, exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, openCountActual=1, exprTrueCountActual=38.7K, lastRowTimeNanosActual=164.6M, closeCountActual=1, exprEvalTimeNanosActual=17.0M, inputRowsActual=49.6K, rowsDroppedActual=10.8K, selectivityActual=0.78, expansionFactorActual=0.78, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=16, filterRejectRateActual=0.22) + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=49.6K, exprFalseCountActual=10.8K, exprTrueCountActual=38.7K, exprEvalTimeNanosActual=13.2M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=18.8K, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=106.0M, nextCallCountActual=49.6K, nextTimeNanosActual=867.2K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=49.6K, firstRowTimeNanosActual=40.2K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=164.6M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=57.9K, rowsDroppedActual=8.3K, expansionFactorActual=0.86, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=17, leftRowsProbedActual=8.3K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=5.96, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.96, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=961.9K, nextCallCountActual=8.3K, nextTimeNanosActual=611.2K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=14.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=164.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=115, avgNextNanosActual=73, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=49.6K, hasNextCallCountActual=140.6K, hasNextTrueCountActual=132.3K, hasNextTimeNanosActual=93.4M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, firstRowTimeNanosActual=2.0K, openCountActual=8.3K, lastRowTimeNanosActual=11.5K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=665, avgNextNanosActual=42) [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=49.6K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=99.3K, rowsDroppedActual=49.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=17.1M, stddevActual=4.1K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=5.3M, nextCallCountActual=24.9K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient], firstRowTimeNanosActual=542, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=11.3K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=160, avgNextNanosActual=56, indexHitRateActual=0.75) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_942e226babdcc344c88a5a61806b6a8e7f3012345678, anonymous) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=13.8M, nextCallCountActual=49.6K, nextTimeNanosActual=2.2M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_anon_path_942e226babdcc344c88a5a61806b6a8e7f3012345678, _const_24be87bd_uri, _const_f5e5585a_uri, patient], sharedJoinVars=[_anon_path_942e226babdcc344c88a5a61806b6a8e7f3012345678], firstRowTimeNanosActual=1.1K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.8K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=186, avgNextNanosActual=46, indexHitRateActual=0.67) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_942e226babdcc344c88a5a61806b6a8e7f3012345678, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.2K, resultSizeActual=49.6K, hasNextCallCountActual=99.3K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=21.8M, nextCallCountActual=49.6K, nextTimeNanosActual=2.4M, sourceRowsScannedActual=99.3K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=49.6K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_anon_path_942e226babdcc344c88a5a61806b6a8e7f3012345678, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], sharedJoinVars=[obs], firstRowTimeNanosActual=541, indexLookupCountActual=49.6K, openCountActual=49.6K, lastRowTimeNanosActual=1.3K, closeCountActual=49.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=50, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) + │ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=20.3M, sourceRowsScannedActual=21.4K, sourceRowsFilteredActual=21.4K, plannedFilterEvidenceCount=2.9M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, openCountActual=1, lastRowTimeNanosActual=20.3M, closeCountActual=1, exprEvalTimeNanosActual=17.0M, inputRowsActual=21.4K, rowsDroppedActual=21.4K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=20.4M, filterRejectRateActual=1.00) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=21.4K, exprFalseCountActual=21.4K, exprEvalTimeNanosActual=15.7M, hasNextFalseCountActual=0) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=13.2M, hasNextFalseCountActual=0) + │ ║ ║ │ Str (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="test") (exprEvalCountActual=21.4K, exprTrueCountActual=21.4K, exprEvalTimeNanosActual=764.8K, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=21.4K, resultSizeActual=21.4K, hasNextCallCountActual=21.4K, hasNextTrueCountActual=21.4K, hasNextTimeNanosActual=1.3M, nextCallCountActual=21.4K, nextTimeNanosActual=721.6K, sourceRowsScannedActual=21.4K, sourceRowsMatchedActual=21.4K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=20.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=34, indexHitRateActual=1.00) + │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -459,121 +458,121 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optValue) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="60"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] -│ ║ │ │ s: Var (name=patient) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=52.6K) -│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=52.1K) [left] -│ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) -│ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) -│ ║ │ ║ │ ║ o: Var (name=_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=unbound) -│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, _const_24be87bd_uri, _const_f5e5585a_uri, patient], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ │ s: Var (name=_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) -│ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) -│ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_anon_path_9523f2fe36952f541b08a42a7b8ce15e70d012345678, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=obs) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) -│ ║ │ ║ o: Var (name=value) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optValue) -│ ║ │ Var (name=value) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) -│ ║ ║ │ Str -│ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="test") -│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) -│ ║ s: Var (name=patient) (bindingState=unbound) -│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) -│ ║ o: Var (name=name) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=patient) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=patient) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.2K) + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] + │ ║ │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_anon_path_452e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_anon_path_452e226babdcc344c88a5a61806b6a8e7f30123, _const_24be87bd_uri, _const_f5e5585a_uri, patient], sharedJoinVars=[_anon_path_452e226babdcc344c88a5a61806b6a8e7f30123]) [right] + │ ║ │ ║ │ s: Var (name=_anon_path_452e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_anon_path_452e226babdcc344c88a5a61806b6a8e7f30123, _const_24be87bd_uri, _const_f5e5585a_uri, obs, patient], sharedJoinVars=[obs]) [right] + │ ║ │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.9M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="test") + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) + │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { -?patient a . -OPTIONAL { -?patient / ?obs . -?obs ?value . -BIND(?value AS ?optValue) -} -FILTER (?optValue > 60) -MINUS { -?patient ?name . -FILTER (CONTAINS(LCASE(STR(?name)), "test")) -} + ?patient a . + OPTIONAL { + ?patient / ?obs . + ?obs ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 60) + MINUS { + ?patient ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "test")) + } } Theme: MEDICAL_RECORDS z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 429 ms +Initial explain execution time: 454 ms Warmup execution 1/4 Warmup execution 2/4 Warmup execution 3/4 Warmup execution 4/4 -Fastest execution time: 221 ms +Fastest execution time: 230 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=3.0K, firstRowTimeNanosActual=413.3M, openCountActual=1, lastRowTimeNanosActual=413.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=3.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=449.0M, nextCallCountActual=1, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=449.0M, openCountActual=1, lastRowTimeNanosActual=449.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224.5M, avgNextNanosActual=2.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=413.3M, openCountActual=1, lastRowTimeNanosActual=413.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=1.4K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=413.2M, nextCallCountActual=1, nextTimeNanosActual=709, aggregateEvalCountActual=41.6K, firstRowTimeNanosActual=413.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=413.3M, maxGroupSizeActual=41.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=41.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=41.6K, rowsDroppedActual=41.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206.6M, avgNextNanosActual=709) -│ ╠══ Filter (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=389.4M, nextCallCountActual=41.6K, nextTimeNanosActual=542.3K, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.1K, exprEvalCountActual=41.6K, openCountActual=1, exprTrueCountActual=41.6K, lastRowTimeNanosActual=413.1M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=37.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=41.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.4K, avgNextNanosActual=13, filterRejectRateActual=0) -│ ║ ├── Exists (exprEvalCountActual=41.6K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=34.7M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=0, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=14.5M, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, plannedIndexName=spoc, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=291, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=351, indexHitRateActual=1.00) -│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=347.6M, nextCallCountActual=41.6K, nextTimeNanosActual=546.9K, joinRightIteratorsCreatedActual=41.6K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, firstRowTimeNanosActual=31.1K, leftRowsWithMatchActual=41.6K, openCountActual=1, lastRowTimeNanosActual=413.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=83.2K, rowsDroppedActual=41.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.09, stddevActual=0.30, confidenceScoreActual=0.61, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.4K, avgNextNanosActual=13, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K, resultSizeActual=41.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, inputRowsActual=91.4K, rowsDroppedActual=49.8K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=74.8K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] -│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=25.3K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=10.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=413.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=125, avgNextNanosActual=49, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.7K, resultSizeActual=49.8K, hasNextCallCountActual=74.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=17.1M, nextCallCountActual=49.8K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.0K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=21.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=229, avgNextNanosActual=44, indexHitRateActual=0.67) [right] -│ ║ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=44.1K, resultSizeActual=41.6K, hasNextCallCountActual=91.4K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=151.7M, nextCallCountActual=41.6K, nextTimeNanosActual=521.5K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=8.2K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=792, exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, openCountActual=49.8K, exprTrueCountActual=41.6K, lastRowTimeNanosActual=3.3K, closeCountActual=49.8K, exprEvalTimeNanosActual=11.3M, inputRowsActual=49.8K, rowsDroppedActual=8.2K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.17) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, exprTrueCountActual=41.6K, shortCircuitCountActual=24.9K, exprEvalTimeNanosActual=7.8M, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=49.8K, exprFalseCountActual=24.8K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=3.5M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="DX-200") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=24.8K, exprFalseCountActual=8.2K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=22.0M, nextCallCountActual=49.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=666, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=1.0K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=222, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=41.6K, hasNextCallCountActual=83.2K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=16.3M, nextCallCountActual=41.6K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=83.2K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=41.6K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=1.4K, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=41.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=196, avgNextNanosActual=38, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=449.0M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=449.0M, openCountActual=1, lastRowTimeNanosActual=449.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224.5M, avgNextNanosActual=1.3K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=449.0M, nextCallCountActual=1, nextTimeNanosActual=792, aggregateEvalCountActual=41.6K, firstRowTimeNanosActual=449.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=449.0M, maxGroupSizeActual=41.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=41.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=41.6K, rowsDroppedActual=41.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224.5M, avgNextNanosActual=792) + │ ╠══ Filter (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=422.0M, nextCallCountActual=41.6K, nextTimeNanosActual=669.9K, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=68.8K, exprEvalCountActual=41.6K, openCountActual=1, exprTrueCountActual=41.6K, lastRowTimeNanosActual=448.8M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=39.4M, metricOrigin.varsAddedActual=derived, inputRowsActual=41.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.1K, avgNextNanosActual=16, filterRejectRateActual=0) + │ ║ ├── Exists (exprEvalCountActual=41.6K, exprTrueCountActual=41.6K, exprEvalTimeNanosActual=36.1M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=0, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=14.6M, sourceRowsScannedActual=41.6K, sourceRowsMatchedActual=41.6K, plannedIndexName=spoc, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=375, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=351, indexHitRateActual=1.00) + │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=41.6K, hasNextCallCountActual=41.6K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=378.2M, nextCallCountActual=41.6K, nextTimeNanosActual=474.5K, joinRightIteratorsCreatedActual=41.6K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, firstRowTimeNanosActual=38.0K, leftRowsWithMatchActual=41.6K, openCountActual=1, lastRowTimeNanosActual=448.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=83.2K, rowsDroppedActual=41.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.10, stddevActual=0.31, confidenceScoreActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.1K, avgNextNanosActual=11, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=43.3K, resultSizeActual=41.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=41.6K, joinRightBindingsConsumedActual=41.6K, inputRowsActual=91.4K, rowsDroppedActual=49.8K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=41.6K, rightRowsScannedActual=41.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=50.6K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=49.8K, inputRowsActual=74.8K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] + │ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=25.3K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=3.4M, nextCallCountActual=24.9K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedAccessRows=34.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=15.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=448.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=139, avgNextNanosActual=53, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=50.6K, resultSizeActual=49.8K, hasNextCallCountActual=74.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=17.4M, nextCallCountActual=49.8K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=74.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=24.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc], sharedJoinVars=[enc], firstRowTimeNanosActual=1.1K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=23.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=233, avgNextNanosActual=41, indexHitRateActual=0.67) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── Filter (resultSizeEstimate=43.3K, resultSizeActual=41.6K, hasNextCallCountActual=91.4K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=168.1M, nextCallCountActual=41.6K, nextTimeNanosActual=672.7K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=8.2K, plannedFilterEvidenceCount=3.1M, plannedAccessRows=1.00, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=2.00, plannedWorkRows=43.3K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, sharedJoinVars=[cond], firstRowTimeNanosActual=834, exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, openCountActual=49.8K, exprTrueCountActual=41.6K, lastRowTimeNanosActual=3.2K, closeCountActual=49.8K, exprEvalTimeNanosActual=12.6M, inputRowsActual=49.8K, rowsDroppedActual=8.2K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.8K, avgNextNanosActual=16, filterRejectRateActual=0.17) [right] + │ ║ ║ ╠══ Or (exprEvalCountActual=49.8K, exprFalseCountActual=8.2K, exprTrueCountActual=41.6K, shortCircuitCountActual=24.9K, exprEvalTimeNanosActual=8.8M, hasNextFalseCountActual=0) + │ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=49.8K, exprFalseCountActual=24.8K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=3.5M, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ValueConstant (value="DX-200") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Compare (=) (exprEvalCountActual=24.8K, exprFalseCountActual=8.2K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=22.7M, nextCallCountActual=49.8K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=958, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=228, avgNextNanosActual=42, indexHitRateActual=0.50) + │ ║ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=41.6K, hasNextCallCountActual=83.2K, hasNextTrueCountActual=41.6K, hasNextTimeNanosActual=17.8M, nextCallCountActual=41.6K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=83.2K, sourceRowsMatchedActual=41.6K, sourceRowsFilteredActual=41.6K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=41.6K, openCountActual=41.6K, lastRowTimeNanosActual=1.8K, closeCountActual=41.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=41.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=43, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -581,123 +580,177 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) -│ ║ ├── Exists -│ ║ │ StatementPattern (resultSizeEstimate=49.7K) -│ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) -│ ║ │ o: Var (name=obs) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.1K) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.7K) [left] -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) -│ ║ ║ │ o: Var (name=cond) (bindingState=unbound) -│ ║ ║ └── Filter (resultSizeEstimate=44.1K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (=) -│ ║ ║ ║ │ Var (name=code) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="DX-200") -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=code) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="DX-201") -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) -│ ║ ║ s: Var (name=cond) (bindingState=bound) -│ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ ║ o: Var (name=code) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] -│ ║ s: Var (name=enc) (bindingState=bound) -│ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) -│ ║ o: Var (name=practitioner) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=enc) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=enc) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=43.3K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=50.6K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.3K, plannedAccessRows=34.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=34.7K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=enc) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=50.6K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc], sharedJoinVars=[enc]) [right] + │ ║ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ ║ └── Filter (resultSizeEstimate=43.3K, plannedFilterEvidenceCount=3.1M, plannedAccessRows=1.00, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=2.00, plannedWorkRows=43.3K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[cond, enc], filterSelectivitySource=learned_filter, sharedJoinVars=[cond]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=code) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="DX-200") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=code) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="DX-201") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ ║ s: Var (name=cond) (bindingState=bound) + │ ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ ║ o: Var (name=code) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ o: Var (name=practitioner) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { -?enc a . -?enc ?cond . -?cond ?code . -FILTER ((?code = "DX-200") || (?code = "DX-201")) -OPTIONAL { -?enc ?practitioner . -} -FILTER EXISTS { -?enc ?obs . -} + ?enc a . + ?enc ?cond . + ?cond ?code . + FILTER ((?code = "DX-200") || (?code = "DX-201")) + OPTIONAL { + ?enc ?practitioner . + } + FILTER EXISTS { + ?enc ?obs . + } } Theme: MEDICAL_RECORDS z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 92 ms -Warmup execution 1/10 -Warmup execution 2/10 -Warmup execution 3/10 -Warmup execution 4/10 -Warmup execution 5/10 -Warmup execution 6/10 -Warmup execution 7/10 -Warmup execution 8/10 -Warmup execution 9/10 -Warmup execution 10/10 -Fastest execution time: 51 ms +Initial explain execution time: 426 ms +Warmup execution 1/4 +Warmup execution 2/4 +Warmup execution 3/4 +Warmup execution 4/4 +Fastest execution time: 217 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=50.0M, openCountActual=1, lastRowTimeNanosActual=50.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=2.5K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=368.5M, nextCallCountActual=1, nextTimeNanosActual=2.8K, firstRowTimeNanosActual=368.5M, openCountActual=1, lastRowTimeNanosActual=368.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=184.3M, avgNextNanosActual=2.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=50.0M, openCountActual=1, lastRowTimeNanosActual=50.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=50.0M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=50.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=50.0M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.0M, avgNextNanosActual=667, avgGroupSizeActual=0) -│ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, resultSizeActual=0, joinType=Cartesian product, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) -│ ║ ├── Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=49.9M, sourceRowsScannedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, openCountActual=1, lastRowTimeNanosActual=49.9M, closeCountActual=1, exprEvalTimeNanosActual=3.5M, inputRowsActual=3.0K, rowsDroppedActual=3.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=49.9M, filterRejectRateActual=1.00) [left] -│ ║ │ ╠══ Not (exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, exprEvalTimeNanosActual=3.2M, hasNextFalseCountActual=0) -│ ║ │ ║ Exists (exprEvalCountActual=3.0K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=3.1M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.6M, sourceRowsScannedActual=3.0K, sourceRowsMatchedActual=3.0K, plannedIndexName=spoc, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=625, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=527, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=8.05, stddevActual=2.84, confidenceScoreActual=0.34, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=13, stddevActual=3.58, confidenceScoreActual=0.30, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) [left] -│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=3.0K, joinLeftBindingsConsumedActual=3.0K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=6.1K, rowsDroppedActual=3.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=58, stddevActual=7.63, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=3.0K, rightRowsScannedActual=3.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, resultSizeActual=3.0K, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=34.7M, nextCallCountActual=3.0K, nextTimeNanosActual=36.7K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=46.6K, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=48.5K, exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, openCountActual=1, exprTrueCountActual=3.0K, lastRowTimeNanosActual=49.9M, optimizer.candidateCount=16, closeCountActual=1, optimizer.score=25.4K, exprEvalTimeNanosActual=26.5M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=49.6K, rowsDroppedActual=46.6K, selectivityActual=0.06, expansionFactorActual=0.06, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.4K, avgNextNanosActual=12, filterRejectRateActual=0.94) [left] -│ ║ │ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) (exprEvalCountActual=49.6K, exprTrueCountActual=49.6K, exprEvalTimeNanosActual=2.4M, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=48.6K, exprTrueCountActual=48.6K, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) (exprEvalCountActual=47.5K, exprTrueCountActual=47.5K, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.2M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=17.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=49.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=63, avgNextNanosActual=45, indexHitRateActual=1.00) -│ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ └── StatementPattern [index: ospc] (costEstimate=111, resultSizeEstimate=49.7K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=2.4M, nextCallCountActual=3.0K, nextTimeNanosActual=128.0K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=ospc, firstRowTimeNanosActual=459, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=3.5K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=397, avgNextNanosActual=42, indexHitRateActual=0.50) [right] -│ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: ospc] (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.2M, nextCallCountActual=3.0K, nextTimeNanosActual=119.3K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=ospc, firstRowTimeNanosActual=417, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=2.6K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=39, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=8.3K, resultSizeActual=3.0K, hasNextCallCountActual=6.1K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=2.5M, nextCallCountActual=3.0K, nextTimeNanosActual=106.9K, sourceRowsScannedActual=6.1K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=1.7K, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=411, avgNextNanosActual=35, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=368.5M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=368.5M, openCountActual=1, lastRowTimeNanosActual=368.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=184.3M, avgNextNanosActual=1.5K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=368.4M, nextCallCountActual=1, nextTimeNanosActual=709, firstRowTimeNanosActual=368.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=368.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=184.2M, avgNextNanosActual=709, avgGroupSizeActual=0) + │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.2K, resultSizeActual=0, joinType=Cartesian product, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ├── Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=368.3M, sourceRowsScannedActual=3.0K, sourceRowsFilteredActual=3.0K, plannedFilterPassRatio=0.12, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, openCountActual=1, lastRowTimeNanosActual=368.3M, closeCountActual=1, exprEvalTimeNanosActual=3.0M, inputRowsActual=3.0K, rowsDroppedActual=3.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=368.4M, filterRejectRateActual=1.00) [left] + │ ║ │ ╠══ Not (exprEvalCountActual=3.0K, exprFalseCountActual=3.0K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) + │ ║ │ ║ Exists (exprEvalCountActual=3.0K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=2.6M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=3.0K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=1.0M, sourceRowsScannedActual=3.0K, sourceRowsMatchedActual=3.0K, plannedIndexName=spoc, indexLookupCountActual=3.0K, openCountActual=3.0K, lastRowTimeNanosActual=334, closeCountActual=3.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=351, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.6K, resultSizeActual=3.0K, joinRightIteratorsCreatedActual=49.6K, joinRightBindingsConsumedActual=3.0K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=52.7K, rowsDroppedActual=49.6K, expansionFactorActual=0.06, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=3.0K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=51.5K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinRightBindingsConsumedActual=49.6K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) + │ ║ │ │ ║ ├── StatementPattern [index: ospc] (costEstimate=1.00, resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.2M, nextCallCountActual=8.3K, nextTimeNanosActual=365.6K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=10.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=368.3M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=147, avgNextNanosActual=44, indexHitRateActual=1.00) + │ ║ │ │ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ └── StatementPattern [index: spoc] (costEstimate=79, resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.2M, nextCallCountActual=24.9K, nextTimeNanosActual=760.7K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=32.5K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=187, avgNextNanosActual=30, indexHitRateActual=0.75) [right] + │ ║ │ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (costEstimate=111, resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=15.6M, nextCallCountActual=49.6K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexName=spoc, firstRowTimeNanosActual=1.5K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=9.6K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=30, indexHitRateActual=0.67) [right] + │ ║ │ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, resultSizeActual=3.0K, hasNextCallCountActual=52.7K, hasNextTrueCountActual=3.0K, hasNextTimeNanosActual=187.8M, nextCallCountActual=3.0K, nextTimeNanosActual=47.5K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=3.0K, sourceRowsFilteredActual=46.6K, plannedFilterEvidenceCount=3.3M, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=916, exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, openCountActual=49.6K, exprTrueCountActual=3.0K, lastRowTimeNanosActual=4.7K, closeCountActual=49.6K, exprEvalTimeNanosActual=29.7M, inputRowsActual=49.6K, rowsDroppedActual=46.6K, selectivityActual=0.06, expansionFactorActual=0.06, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=3.6K, avgNextNanosActual=16, filterRejectRateActual=0.94) [right] + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=49.6K, exprFalseCountActual=46.6K, exprTrueCountActual=3.0K, exprEvalTimeNanosActual=26.8M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="50"^^) (exprEvalCountActual=49.6K, exprTrueCountActual=49.6K, exprEvalTimeNanosActual=2.7M, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="60"^^) (exprEvalCountActual=48.6K, exprTrueCountActual=48.6K, exprEvalTimeNanosActual=2.6M, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="70"^^) (exprEvalCountActual=47.5K, exprTrueCountActual=47.5K, exprEvalTimeNanosActual=2.7M, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=99.3K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=21.7M, nextCallCountActual=49.6K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=99.3K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=49.6K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=49.6K, openCountActual=49.6K, lastRowTimeNanosActual=1.5K, closeCountActual=49.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=219, avgNextNanosActual=28, indexHitRateActual=0.50) + │ ║ │ s: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -705,66 +758,126 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K, joinType=Cartesian product) -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] -│ ║ │ ╠══ Not -│ ║ │ ║ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) -│ ║ │ ║ s: Var (name=enc) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) -│ ║ │ ║ o: Var (name=cond) (bindingState=unbound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.4K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ │ ║ ├── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter, optimizer.candidateCount=16, optimizer.score=25.4K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=30690.0 rawRows=3069.0 effectiveRows=3069.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=451463.63636363635 rawRows=49661.0 effectiveRows=49661.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=227009.09090909088 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=83350.0 rawRows=8335.0 effectiveRows=8335.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=1650.2673796791441 rawRows=3086.0 effectiveRows=3086.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=6.966909E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=27886.63101604278 rawRows=52148.0 effectiveRows=52148.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=3.762949409090909E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=13456.684491978609 rawRows=25164.0 effectiveRows=25164.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=30860.0 rawRows=3086.0 effectiveRows=3086.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient hasEncounter ?enc) score=15098.235294117647 rawRows=25667.0 effectiveRows=25667.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?patient type Patient) score=2.572181E8 rawRows=2.572181E7 effectiveRows=2.572181E7 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=256670.0 rawRows=25667.0 effectiveRows=25667.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?patient type Patient) score=14954.705882352942 rawRows=25423.0 effectiveRows=25423.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25423.0 rawRows=25423.0 effectiveRows=25423.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient), BindingSetAssignment ([[limit="55"^^]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=25423.0, effectiveRows=25423.0, adjustedCost=25423.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ │ ║ │ ╠══ ListMemberOperator -│ ║ │ │ ║ │ ║ Var (name=value) (bindingState=bound) -│ ║ │ │ ║ │ ║ ValueConstant (value="50"^^) -│ ║ │ │ ║ │ ║ ValueConstant (value="60"^^) -│ ║ │ │ ║ │ ║ ValueConstant (value="70"^^) -│ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) -│ ║ │ │ ║ │ s: Var (name=obs) (bindingState=unbound) -│ ║ │ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) -│ ║ │ │ ║ │ o: Var (name=value) (bindingState=unbound) -│ ║ │ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] -│ ║ │ │ ║ s: Var (name=enc) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) -│ ║ │ │ ║ o: Var (name=obs) (bindingState=bound) -│ ║ │ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] -│ ║ │ │ s: Var (name=patient) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) -│ ║ │ │ o: Var (name=enc) (bindingState=bound) -│ ║ │ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] -│ ║ │ s: Var (name=patient) (bindingState=bound) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=patient) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=patient) (bindingState=unbound) + ├── Group () + │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.2K, joinType=Cartesian product) + │ ║ ├── Filter (plannedFilterPassRatio=0.12, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ ║ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=25.6K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ Var (name=value) + │ ║ │ ValueConstant (value="50"^^) + │ ║ │ ValueConstant (value="60"^^) + │ ║ │ ValueConstant (value="70"^^) + │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=51.5K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ Var (name=value) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ │ ValueConstant (value="60"^^) + │ ║ │ │ ValueConstant (value="70"^^) + │ ║ │ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ Var (name=value) + │ ║ │ │ ║ ValueConstant (value="50"^^) + │ ║ │ │ ║ ValueConstant (value="60"^^) + │ ║ │ │ ║ ValueConstant (value="70"^^) + │ ║ │ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K, optimizer.candidateCount=16, optimizer.score=25.6K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator [left] + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[limit], rows=1), SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), SP(?patient http://example.com/theme/medical/hasEncounter ?enc), SP(?enc http://example.com/theme/medical/hasObservation ?obs), Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[limit], rows=1), 1:SP(?patient http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Patient), 2:SP(?patient http://example.com/theme/medical/hasEncounter ?enc), 3:SP(?enc http://example.com/theme/medical/hasObservation ?obs), 4:Filter(SP(?obs http://example.com/theme/medical/value ?value); ListMemberOperator + │ ║ │ │ ║ │ Var (name=value) + │ ║ │ │ ║ │ ValueConstant (value="50"^^) + │ ║ │ │ ║ │ ValueConstant (value="60"^^) + │ ║ │ │ ║ │ ValueConstant (value="70"^^) + │ ║ │ │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=Filter score=498850.0 rawRows=3069.0 effectiveRows=3069.0 baseCostRows=49885.0 factorWorkRows=49885.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?enc hasObservation ?obs) score=497390.0 rawRows=49661.0 effectiveRows=49661.0 baseCostRows=49739.0 factorWorkRows=49739.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient hasEncounter ?enc) score=254070.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=25407.0 factorWorkRows=25407.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[limit="55"^^]]) right=SP(?patient type Patient) score=139540.0 rawRows=8335.0 effectiveRows=8335.0 baseCostRows=13954.0 factorWorkRows=13954.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?enc hasObservation ?obs) score=58601.17647058824 rawRows=3086.0 effectiveRows=3086.0 baseCostRows=99622.0 factorWorkRows=99622.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient hasEncounter ?enc) score=7.6635999E8 rawRows=7.6635999E7 effectiveRows=7.6635999E7 baseCostRows=7.6635999E7 factorWorkRows=75290.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?patient type Patient) score=2.5580115E8 rawRows=2.5580115E7 effectiveRows=2.5580115E7 baseCostRows=2.5580115E7 factorWorkRows=63837.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient hasEncounter ?enc) score=44202.35294117647 rawRows=51094.0 effectiveRows=51094.0 baseCostRows=75144.0 factorWorkRows=75144.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasObservation ?obs) right=SP(?patient type Patient) score=4.13924435E9 rawRows=4.13924435E8 effectiveRows=4.13924435E8 baseCostRows=4.13924435E8 factorWorkRows=63691.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?patient hasEncounter ?enc) right=SP(?patient type Patient) score=23152.352941176472 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=39359.0 factorWorkRows=39359.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=255950.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=7.8551055E8 rawRows=7.8551055E7 effectiveRows=7.8551055E7 baseCostRows=7.8551055E7 factorWorkRows=49884.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc hasObservation ?obs) score=30278.823529411766 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=514740.0 rawRows=51474.0 effectiveRows=51474.0 baseCostRows=51474.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=15055.882352941177 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=3069.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[limit="55"^^]]) score=25595.0 rawRows=25595.0 effectiveRows=25595.0 baseCostRows=25595.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[limit="55"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[limit="55"^^]]), Filter, SP(?enc hasObservation ?obs), SP(?patient hasEncounter ?enc), SP(?patient type Patient)], optimizer.chosenOrder=[SP(?patient type Patient), SP(?patient hasEncounter ?enc), SP(?enc hasObservation ?obs), Filter, BindingSetAssignment ([[limit="55"^^]])], optimizer.scoreComponents=rawRows=25595.0, effectiveRows=25595.0, baseCostRows=25595.0, factorWorkRows=1.0, adjustedCost=25595.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ │ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ │ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] + │ ║ │ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] + │ ║ │ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ │ o: Var (name=obs) (bindingState=unbound) + │ ║ │ └── Filter (costEstimate=9.2K, resultSizeEstimate=3.1K, plannedFilterEvidenceCount=3.3M, plannedFilterPassRatio=0.06, filterSelectivitySource=learned_filter) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="50"^^) + │ ║ │ ║ ValueConstant (value="60"^^) + │ ║ │ ║ ValueConstant (value="70"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) + │ ║ │ s: Var (name=obs) (bindingState=bound) + │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ └── BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { -?obs ?value . -FILTER (?value IN (50, 60, 70)) -?enc ?obs . -?patient ?enc . -?patient a . -FILTER NOT EXISTS { -?enc ?cond . -} -VALUES ?limit { 55 } + ?patient a . + ?patient ?enc . + ?enc ?obs . + ?obs ?value . + FILTER (?value IN (50, 60, 70)) + FILTER NOT EXISTS { + ?enc ?cond . + } + VALUES ?limit { 55 } } Theme: MEDICAL_RECORDS z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 150 ms +Initial explain execution time: 157 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -775,52 +888,52 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 69 ms +Fastest execution time: 78 ms -Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.5M, nextCallCountActual=8.3K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=140) +Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=126.8M, nextCallCountActual=8.3K, nextTimeNanosActual=1.3M, firstRowTimeNanosActual=123.7M, openCountActual=1, lastRowTimeNanosActual=129.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=15.2K, avgNextNanosActual=163) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "patient" (hasNextFalseCountActual=0) ║ ProjectionElem "medCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.3M, nextCallCountActual=8.3K, nextTimeNanosActual=886.7K, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=106) -├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=118.1M, nextCallCountActual=8.3K, nextTimeNanosActual=451.3K, firstRowTimeNanosActual=115.7M, openCountActual=1, lastRowTimeNanosActual=120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.2K, avgNextNanosActual=54) -│ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=117.9M, nextCallCountActual=8.3K, nextTimeNanosActual=87.5K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=115.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=120.7M, closeCountActual=1, exprEvalTimeNanosActual=1.5M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.1K, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=904.0K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=36.0K, hasNextFalseCountActual=0) -│ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=115.7M, nextCallCountActual=8.3K, nextTimeNanosActual=122.4K, aggregateEvalCountActual=133.6K, firstRowTimeNanosActual=115.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=120.7M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=8.02, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.8K, rowsDroppedActual=58.4K, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.9K, avgNextNanosActual=15) -│ ║ Filter (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=78.6M, nextCallCountActual=66.8K, nextTimeNanosActual=959.0K, sourceRowsScannedActual=66.8K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.3K, exprEvalCountActual=66.8K, openCountActual=1, exprTrueCountActual=66.8K, lastRowTimeNanosActual=113.1M, closeCountActual=1, exprEvalTimeNanosActual=7.4M, inputRowsActual=66.8K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=66.8K, exprTrueCountActual=66.8K, exprEvalTimeNanosActual=2.6M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optMed) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=66.5M, nextCallCountActual=66.8K, nextTimeNanosActual=866.5K, joinRightIteratorsCreatedActual=33.3K, joinLeftBindingsConsumedActual=33.3K, joinRightBindingsConsumedActual=66.8K, firstRowTimeNanosActual=38.0K, leftRowsWithMatchActual=33.3K, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=100.1K, rowsDroppedActual=33.3K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=996, avgNextNanosActual=13, leftRowsProbedActual=33.3K, rightRowsScannedActual=66.8K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=33.3K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=33.3K, hasNextTimeNanosActual=6.7M, nextCallCountActual=33.3K, nextTimeNanosActual=608.3K, firstRowTimeNanosActual=21.7K, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=201, avgNextNanosActual=18, leftRowsConsumedActual=8.3K, rightRowsConsumedActual=24.9K, leftRowsOutputContributionActual=8.3K, rightRowsOutputContributionActual=24.9K) [left] -│ ║ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=772.8K, nextCallCountActual=8.3K, nextTimeNanosActual=401.5K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=19.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=33.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=48, indexHitRateActual=1.00) -│ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=2.1M, nextCallCountActual=24.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=33.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=112.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=87, avgNextNanosActual=56, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=33.3M, nextCallCountActual=66.8K, nextTimeNanosActual=7.6M, firstRowTimeNanosActual=709, openCountActual=33.3K, lastRowTimeNanosActual=1.9K, closeCountActual=33.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=199, avgNextNanosActual=115) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=22.2M, nextCallCountActual=66.8K, nextTimeNanosActual=4.1M, sourceRowsScannedActual=100.1K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=33.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=33.3K, openCountActual=33.3K, lastRowTimeNanosActual=1.7K, closeCountActual=33.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=133, avgNextNanosActual=62, indexHitRateActual=0.67) -│ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optMed) (hasNextFalseCountActual=0) -│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (medCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_0143f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (medCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=126.6M, nextCallCountActual=8.3K, nextTimeNanosActual=923.2K, firstRowTimeNanosActual=123.7M, openCountActual=1, lastRowTimeNanosActual=129.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=15.2K, avgNextNanosActual=111) + ├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=126.4M, nextCallCountActual=8.3K, nextTimeNanosActual=527.8K, firstRowTimeNanosActual=123.7M, openCountActual=1, lastRowTimeNanosActual=129.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=15.2K, avgNextNanosActual=63) + │ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=126.1M, nextCallCountActual=8.3K, nextTimeNanosActual=91.8K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=123.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=129.1M, closeCountActual=1, exprEvalTimeNanosActual=1.7M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=15.1K, avgNextNanosActual=11, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_573e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=30.2K, hasNextFalseCountActual=0) + │ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=123.8M, nextCallCountActual=8.3K, nextTimeNanosActual=134.0K, aggregateEvalCountActual=133.6K, firstRowTimeNanosActual=123.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=129.1M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=8.02, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.8K, rowsDroppedActual=58.4K, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.9K, avgNextNanosActual=16) + │ ║ Filter (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=83.1M, nextCallCountActual=66.8K, nextTimeNanosActual=994.0K, sourceRowsScannedActual=66.8K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=57.5K, exprEvalCountActual=66.8K, openCountActual=1, exprTrueCountActual=66.8K, lastRowTimeNanosActual=120.8M, closeCountActual=1, exprEvalTimeNanosActual=7.9M, inputRowsActual=66.8K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=66.8K, exprTrueCountActual=66.8K, exprEvalTimeNanosActual=2.6M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optMed) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.8K, hasNextCallCountActual=66.8K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=70.3M, nextCallCountActual=66.8K, nextTimeNanosActual=980.9K, joinRightIteratorsCreatedActual=33.3K, joinLeftBindingsConsumedActual=33.3K, joinRightBindingsConsumedActual=66.8K, firstRowTimeNanosActual=42.7K, leftRowsWithMatchActual=33.3K, openCountActual=1, lastRowTimeNanosActual=120.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=100.1K, rowsDroppedActual=33.3K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.1K, avgNextNanosActual=15, leftRowsProbedActual=33.3K, rightRowsScannedActual=66.8K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=33.3K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=33.3K, hasNextTimeNanosActual=6.8M, nextCallCountActual=33.3K, nextTimeNanosActual=699.1K, firstRowTimeNanosActual=21.4K, openCountActual=1, lastRowTimeNanosActual=120.0M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=206, avgNextNanosActual=21, leftRowsConsumedActual=8.3K, rightRowsConsumedActual=24.9K, leftRowsOutputContributionActual=8.3K, rightRowsOutputContributionActual=24.9K) [left] + │ ║ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=785.6K, nextCallCountActual=8.3K, nextTimeNanosActual=408.2K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=22.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=36.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=49, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=2.2M, nextCallCountActual=24.9K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=36.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=120.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=56, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=35.3M, nextCallCountActual=66.8K, nextTimeNanosActual=7.6M, firstRowTimeNanosActual=667, openCountActual=33.3K, lastRowTimeNanosActual=2.0K, closeCountActual=33.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=211, avgNextNanosActual=114) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=66.8K, hasNextCallCountActual=167.1K, hasNextTrueCountActual=133.8K, hasNextTimeNanosActual=23.8M, nextCallCountActual=66.8K, nextTimeNanosActual=3.2M, sourceRowsScannedActual=100.1K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=33.3K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=33.3K, openCountActual=33.3K, lastRowTimeNanosActual=1.8K, closeCountActual=33.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=143, avgNextNanosActual=48, indexHitRateActual=0.67) + │ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optMed) (hasNextFalseCountActual=0) + │ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_573e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (medCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_573e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (medCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -829,61 +942,61 @@ Projection ║ ProjectionElem "patient" ║ ProjectionElem "medCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (patient) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optMed) (bindingState=bound) -│ ║ │ Var (name=patient) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) -│ ║ ║ │ s: Var (name=patient) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) -│ ║ ║ s: Var (name=patient) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) -│ ║ ║ o: Var (name=enc) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=16.7K) -│ ║ │ s: Var (name=patient) (bindingState=bound) -│ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ │ o: Var (name=med) (bindingState=unbound) -│ ║ └── ExtensionElem (optMed) -│ ║ Var (name=med) (bindingState=bound) -│ ║ GroupElem (_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123) -│ ║ Count -│ ║ Var (name=med) (bindingState=bound) -│ ║ GroupElem (medCount) -│ ║ Count (Distinct) -│ ║ Var (name=med) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_4143f2fe36952f541b08a42a7b8ce15e70d0123) -│ Count -│ Var (name=med) (bindingState=unbound) -└── ExtensionElem (medCount) -Count (Distinct) -Var (name=med) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_973e226babdcc344c88a5a61806b6a8e7f3012345678, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) (bindingState=bound) + │ ║ │ Var (name=patient) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (_anon_having_973e226babdcc344c88a5a61806b6a8e7f3012345678) + │ ║ Count + │ ║ Var (name=med) (bindingState=bound) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_973e226babdcc344c88a5a61806b6a8e7f3012345678) + │ Count + │ Var (name=med) (bindingState=unbound) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { -{ -?patient a . -} -UNION -{ -?patient ?enc . -} -OPTIONAL { -?patient ?med . -BIND(?med AS ?optMed) -} -FILTER (?optMed != ?patient) + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) } GROUP BY ?patient HAVING (COUNT(?med) > 0) @@ -891,7 +1004,7 @@ HAVING (COUNT(?med) > 0) Theme: MEDICAL_RECORDS z_queryIndex: 7 === Explanation Telemetry === -Initial explain execution time: 185 ms +Initial explain execution time: 199 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -902,58 +1015,58 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 89 ms +Fastest execution time: 95 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=147.8M, openCountActual=1, lastRowTimeNanosActual=147.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=2.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=170.1M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=170.1M, openCountActual=1, lastRowTimeNanosActual=170.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=85.1M, avgNextNanosActual=2.1K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=147.8M, openCountActual=1, lastRowTimeNanosActual=147.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=875) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=147.8M, nextCallCountActual=1, nextTimeNanosActual=500, firstRowTimeNanosActual=147.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=147.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=73.9M, avgNextNanosActual=500, avgGroupSizeActual=0) -│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=147.7M, openCountActual=1, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=30.5K, rowsDroppedActual=30.5K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=147.8M, leftRowsConsumedActual=13.8K, rightRowsConsumedActual=16.6K, overlapRowsActual=13.8K) -│ ║ ├── Filter (resultSizeActual=13.8K, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=113.4M, nextCallCountActual=13.8K, nextTimeNanosActual=169.9K, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=21.8K, exprEvalCountActual=13.8K, openCountActual=1, exprTrueCountActual=13.8K, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=15.0M, metricOrigin.varsAddedActual=derived, inputRowsActual=13.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.2K, avgNextNanosActual=12, filterRejectRateActual=0) -│ ║ │ ╠══ Exists (exprEvalCountActual=13.8K, exprTrueCountActual=13.8K, exprEvalTimeNanosActual=14.2M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=0, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=7.5M, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, plannedIndexName=ospc, indexLookupCountActual=13.8K, openCountActual=13.8K, lastRowTimeNanosActual=459, closeCountActual=13.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=544, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K, resultSizeActual=13.8K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=13.8K, inputRowsActual=30.5K, rowsDroppedActual=16.6K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=13.8K, avgRightRowsPerLeftActual=0.83, joinOutputPerLeftActual=0.83) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.7M, nextCallCountActual=16.6K, nextTimeNanosActual=698.2K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) -│ ║ │ │ Var (name=patient) -│ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ │ │ Var (name=med) -│ ║ │ │ , firstRowTimeNanosActual=7.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=147.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=42, indexHitRateActual=1.00) -│ ║ │ │ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=13.7K, resultSizeActual=13.8K, hasNextCallCountActual=30.5K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=54.9M, nextCallCountActual=13.8K, nextTimeNanosActual=165.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=2.7K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, openCountActual=16.6K, exprTrueCountActual=13.8K, lastRowTimeNanosActual=5.4K, closeCountActual=16.6K, exprEvalTimeNanosActual=3.7M, inputRowsActual=16.6K, rowsDroppedActual=2.7K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=1.8K, avgNextNanosActual=12, filterRejectRateActual=0.17) [right] -│ ║ │ ╠══ Or (exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, exprTrueCountActual=13.8K, shortCircuitCountActual=8.3K, exprEvalTimeNanosActual=2.5M, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=16.6K, exprFalseCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="MED-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.1K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=8.3K, exprFalseCountActual=2.7K, exprTrueCountActual=5.5K, exprEvalTimeNanosActual=429.1K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="MED-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=10.6M, nextCallCountActual=16.6K, nextTimeNanosActual=559.9K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=3.1K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=318, avgNextNanosActual=34, indexHitRateActual=0.50) -│ ║ │ s: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=7.4M, nextCallCountActual=16.6K, nextTimeNanosActual=161.8K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.8K, exprEvalCountActual=16.6K, openCountActual=1, exprTrueCountActual=16.6K, lastRowTimeNanosActual=15.2M, closeCountActual=1, exprEvalTimeNanosActual=4.6M, inputRowsActual=16.6K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=449, avgNextNanosActual=9.70, filterRejectRateActual=0) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=3.8M, hasNextFalseCountActual=0) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0) -│ ║ ║ │ Str (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=841.7K, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=dose) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="x") (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=443.1K, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=16.6K, nextTimeNanosActual=593.5K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=15.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=36, indexHitRateActual=1.00) -│ ║ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=dose) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=170.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=170.1M, openCountActual=1, lastRowTimeNanosActual=170.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=85.1M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=170.1M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=170.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=170.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=85.1M, avgNextNanosActual=542, avgGroupSizeActual=0) + │ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=170.0M, openCountActual=1, lastRowTimeNanosActual=170.1M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=30.5K, rowsDroppedActual=30.5K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=170.1M, leftRowsConsumedActual=13.8K, rightRowsConsumedActual=16.6K, overlapRowsActual=13.8K) + │ ║ ├── Filter (resultSizeActual=13.8K, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=125.0M, nextCallCountActual=13.8K, nextTimeNanosActual=205.3K, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=27.0K, exprEvalCountActual=13.8K, openCountActual=1, exprTrueCountActual=13.8K, lastRowTimeNanosActual=170.0M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=16.3M, metricOrigin.varsAddedActual=derived, inputRowsActual=13.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.0K, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ │ ╠══ Exists (exprEvalCountActual=13.8K, exprTrueCountActual=13.8K, exprEvalTimeNanosActual=15.5M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=0, hasNextCallCountActual=13.8K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=8.1M, sourceRowsScannedActual=13.8K, sourceRowsMatchedActual=13.8K, plannedIndexName=ospc, indexLookupCountActual=13.8K, openCountActual=13.8K, lastRowTimeNanosActual=500, closeCountActual=13.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=590, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K, resultSizeActual=13.8K, joinRightIteratorsCreatedActual=16.6K, joinLeftBindingsConsumedActual=16.6K, joinRightBindingsConsumedActual=13.8K, inputRowsActual=30.5K, rowsDroppedActual=16.6K, expansionFactorActual=0.45, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=16.6K, rightRowsScannedActual=13.8K, avgRightRowsPerLeftActual=0.83, joinOutputPerLeftActual=0.83) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.7M, nextCallCountActual=16.6K, nextTimeNanosActual=787.2K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedAccessRows=24.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ │ Var (name=patient) + │ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ Var (name=med) + │ ║ │ │ source=unknown, firstRowTimeNanosActual=10.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=170.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=47, indexHitRateActual=1.00) + │ ║ │ │ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Filter (resultSizeEstimate=13.7K, resultSizeActual=13.8K, hasNextCallCountActual=30.5K, hasNextTrueCountActual=13.8K, hasNextTimeNanosActual=61.0M, nextCallCountActual=13.8K, nextTimeNanosActual=211.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=13.8K, sourceRowsFilteredActual=2.7K, plannedFilterEvidenceCount=2.5M, plannedAccessRows=1.00, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=2.00, plannedWorkRows=13.7K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[med], filterSelectivitySource=learned_filter, sharedJoinVars=[med], firstRowTimeNanosActual=834, exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, openCountActual=16.6K, exprTrueCountActual=13.8K, lastRowTimeNanosActual=6.8K, closeCountActual=16.6K, exprEvalTimeNanosActual=4.1M, inputRowsActual=16.6K, rowsDroppedActual=2.7K, selectivityActual=0.83, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.45, avgHasNextNanosActual=2.0K, avgNextNanosActual=15, filterRejectRateActual=0.17) [right] + │ ║ │ ╠══ Or (exprEvalCountActual=16.6K, exprFalseCountActual=2.7K, exprTrueCountActual=13.8K, shortCircuitCountActual=8.3K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) + │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=16.6K, exprFalseCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="MED-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) + │ ║ │ ║ └── Compare (=) (exprEvalCountActual=8.3K, exprFalseCountActual=2.7K, exprTrueCountActual=5.5K, exprEvalTimeNanosActual=451.8K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=code) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="MED-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=16.6K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=11.4M, nextCallCountActual=16.6K, nextTimeNanosActual=685.7K, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=16.6K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=16.6K, openCountActual=16.6K, lastRowTimeNanosActual=2.8K, closeCountActual=16.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=342, avgNextNanosActual=41, indexHitRateActual=0.50) + │ ║ │ s: Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=code) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=7.9M, nextCallCountActual=16.6K, nextTimeNanosActual=165.6K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=2.5M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=21.8K, exprEvalCountActual=16.6K, openCountActual=1, exprTrueCountActual=16.6K, lastRowTimeNanosActual=17.1M, closeCountActual=1, exprEvalTimeNanosActual=4.9M, inputRowsActual=16.6K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=476, avgNextNanosActual=9.93, filterRejectRateActual=0) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=3.9M, hasNextFalseCountActual=0) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0) + │ ║ ║ │ Str (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=898.7K, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=dose) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="x") (exprEvalCountActual=16.6K, exprTrueCountActual=16.6K, exprEvalTimeNanosActual=483.6K, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=16.6K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=1.2M, nextCallCountActual=16.6K, nextTimeNanosActual=625.7K, sourceRowsScannedActual=16.6K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=12.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=17.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=78, avgNextNanosActual=37, indexHitRateActual=1.00) + │ ║ s: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=dose) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=med) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -961,72 +1074,72 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) -│ ║ │ ╠══ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) -│ ║ │ ║ s: Var (name=patient) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ │ ║ o: Var (name=med) (bindingState=bound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) -│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) -│ ║ │ │ Var (name=patient) -│ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ │ │ Var (name=med) -│ ║ │ │ ) -│ ║ │ │ s: Var (name=med) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) -│ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=3.00, plannedWorkRows=0.83, plannedIndexName=spoc, plannedBoundVars=[med], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=code) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="MED-1000") -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=code) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="MED-1001") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) -│ ║ │ s: Var (name=med) (bindingState=bound) -│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ │ o: Var (name=code) (bindingState=unbound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) -│ ║ ║ │ Str -│ ║ ║ │ Var (name=dose) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="x") -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) -│ ║ s: Var (name=med) (bindingState=unbound) -│ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) -│ ║ o: Var (name=dose) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=med) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=med) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=13.7K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedAccessRows=24.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=24.8K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ │ Var (name=patient) + │ ║ │ │ Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ Var (name=med) + │ ║ │ │ source=unknown) + │ ║ │ │ s: Var (name=med) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=13.7K, plannedFilterEvidenceCount=2.5M, plannedAccessRows=1.00, plannedFilterPassRatio=0.83, plannedIndexPrefixLength=2.00, plannedWorkRows=13.7K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[med], filterSelectivitySource=learned_filter, sharedJoinVars=[med]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) (bindingState=unbound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.5M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) (bindingState=unbound) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { -?med a . -?med ?code . -FILTER ((?code = "MED-1000") || (?code = "MED-1001")) -FILTER EXISTS { -?patient ?med . -} -MINUS { -?med ?dose . -FILTER (CONTAINS(LCASE(STR(?dose)), "x")) -} + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } } Theme: MEDICAL_RECORDS z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 106 ms +Initial explain execution time: 115 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -1037,58 +1150,58 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 64 ms +Fastest execution time: 68 ms -Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=94.2M, nextCallCountActual=8.3K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=144) +Projection (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=97.8M, nextCallCountActual=8.3K, nextTimeNanosActual=1.3M, firstRowTimeNanosActual=93.8M, openCountActual=1, lastRowTimeNanosActual=100.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.7K, avgNextNanosActual=164) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "patient" (hasNextFalseCountActual=0) ║ ProjectionElem "encCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=94.0M, nextCallCountActual=8.3K, nextTimeNanosActual=907.0K, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=109) -├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.8M, nextCallCountActual=8.3K, nextTimeNanosActual=412.0K, firstRowTimeNanosActual=91.7M, openCountActual=1, lastRowTimeNanosActual=96.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=49) -│ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.6M, nextCallCountActual=8.3K, nextTimeNanosActual=60.2K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=91.7M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=96.5M, closeCountActual=1, exprEvalTimeNanosActual=1.2M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.2K, avgNextNanosActual=7.23, filterRejectRateActual=0) -│ ║ ├── Compare (>=) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=611.5K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.7K, hasNextFalseCountActual=0) -│ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=91.7M, nextCallCountActual=8.3K, nextTimeNanosActual=137.4K, aggregateEvalCountActual=49.9K, firstRowTimeNanosActual=91.7M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=96.5M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24.9K, rowsDroppedActual=16.6K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.0K, avgNextNanosActual=16) -│ ║ Filter (resultSizeActual=24.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=24.9K, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=887.1K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optPractitioner) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=19.3M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=8.1M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, plannedIndexName=spoc, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=416, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=326, indexHitRateActual=1.00) -│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=44.6M, nextCallCountActual=24.9K, nextTimeNanosActual=323.3K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=18.7K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=87.9M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=13, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=837.2K, nextCallCountActual=8.3K, nextTimeNanosActual=476.6K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=100, avgNextNanosActual=57, indexHitRateActual=1.00) [left] -│ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=36.3M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=1.0K, openCountActual=8.3K, lastRowTimeNanosActual=8.1K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=545, avgNextNanosActual=42) [right] -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=7.9K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=166, avgNextNanosActual=45, indexHitRateActual=0.75) [left] -│ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.0M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.0K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=2.8K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242, avgNextNanosActual=43, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optPractitioner) (hasNextFalseCountActual=0) -│ ║ Var (name=practitioner) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (encCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_6253f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (encCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=97.6M, nextCallCountActual=8.3K, nextTimeNanosActual=964.4K, firstRowTimeNanosActual=93.8M, openCountActual=1, lastRowTimeNanosActual=100.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.7K, avgNextNanosActual=116) + ├── Extension (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=97.4M, nextCallCountActual=8.3K, nextTimeNanosActual=519.0K, firstRowTimeNanosActual=93.8M, openCountActual=1, lastRowTimeNanosActual=100.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.7K, avgNextNanosActual=62) + │ ╠══ Filter (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=97.2M, nextCallCountActual=8.3K, nextTimeNanosActual=80.1K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=93.8M, exprEvalCountActual=8.3K, openCountActual=1, exprTrueCountActual=8.3K, lastRowTimeNanosActual=100.2M, closeCountActual=1, exprEvalTimeNanosActual=2.6M, inputRowsActual=8.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.7K, avgNextNanosActual=9.61, filterRejectRateActual=0) + │ ║ ├── Compare (>=) (exprEvalCountActual=8.3K, exprTrueCountActual=8.3K, exprEvalTimeNanosActual=664.1K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_194e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.4K, hasNextFalseCountActual=0) + │ ║ └── Group (patient) (resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=93.8M, nextCallCountActual=8.3K, nextTimeNanosActual=166.5K, aggregateEvalCountActual=49.9K, firstRowTimeNanosActual=93.8M, groupsCreatedActual=8.3K, openCountActual=1, lastRowTimeNanosActual=100.1M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24.9K, rowsDroppedActual=16.6K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=11.3K, avgNextNanosActual=20) + │ ║ Filter (resultSizeActual=24.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=24.9K, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=875.2K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=24.9K, exprTrueCountActual=24.9K, exprEvalTimeNanosActual=20.4M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=49.8K, resultSizeActual=0, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=8.6M, sourceRowsScannedActual=24.9K, sourceRowsMatchedActual=24.9K, plannedIndexName=spoc, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=500, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=346, indexHitRateActual=1.00) + │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=24.9K, hasNextCallCountActual=24.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=45.7M, nextCallCountActual=24.9K, nextTimeNanosActual=476.7K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, firstRowTimeNanosActual=27.9K, leftRowsWithMatchActual=8.3K, openCountActual=1, lastRowTimeNanosActual=90.1M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=19, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.3K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=849.9K, nextCallCountActual=8.3K, nextTimeNanosActual=493.8K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=10.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=90.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=24.9K, hasNextCallCountActual=66.5K, hasNextTrueCountActual=58.2K, hasNextTimeNanosActual=37.3M, nextCallCountActual=24.9K, nextTimeNanosActual=979.6K, firstRowTimeNanosActual=1.4K, openCountActual=8.3K, lastRowTimeNanosActual=9.7K, closeCountActual=8.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=561, avgNextNanosActual=39) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.00, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=24.9K, joinLeftBindingsConsumedActual=24.9K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=49.9K, rowsDroppedActual=24.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=24.9K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=5.7M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=9.4K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=173, avgNextNanosActual=47, indexHitRateActual=0.75) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=24.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=12.4M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=49.9K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=24.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], sharedJoinVars=[enc], firstRowTimeNanosActual=1.2K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=3.6K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=47, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optPractitioner) (hasNextFalseCountActual=0) + │ ║ Var (name=practitioner) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_194e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (encCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_194e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (encCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1097,62 +1210,62 @@ Projection ║ ProjectionElem "patient" ║ ProjectionElem "encCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>=) -│ ║ │ Var (name=_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="2"^^) -│ ║ └── Group (patient) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) -│ ║ │ ║ Var (name=patient) (bindingState=bound) -│ ║ │ ╚══ Exists -│ ║ │ StatementPattern (resultSizeEstimate=49.8K) -│ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) -│ ║ │ o: Var (name=cond) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] -│ ║ ║ s: Var (name=patient) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K) -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ s: Var (name=patient) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) -│ ║ │ ║ o: Var (name=enc) (bindingState=unbound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], plannedLookupComponents=[S, P]) [right] -│ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) -│ ║ │ o: Var (name=practitioner) (bindingState=unbound) -│ ║ └── ExtensionElem (optPractitioner) -│ ║ Var (name=practitioner) (bindingState=bound) -│ ║ GroupElem (_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0) -│ ║ Count -│ ║ Var (name=enc) (bindingState=bound) -│ ║ GroupElem (encCount) -│ ║ Count (Distinct) -│ ║ Var (name=enc) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_1353f2fe36952f541b08a42a7b8ce15e70d0) -│ Count -│ Var (name=enc) (bindingState=unbound) -└── ExtensionElem (encCount) -Count (Distinct) -Var (name=enc) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_694e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (patient) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optPractitioner) (bindingState=bound) + │ ║ │ ║ Var (name=patient) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=49.8K) + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] + │ ║ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] + │ ║ │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, enc, patient], sharedJoinVars=[enc]) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── ExtensionElem (optPractitioner) + │ ║ Var (name=practitioner) (bindingState=bound) + │ ║ GroupElem (_anon_having_694e226babdcc344c88a5a61806b6a8e7f3012345) + │ ║ Count + │ ║ Var (name=enc) (bindingState=bound) + │ ║ GroupElem (encCount) + │ ║ Count (Distinct) + │ ║ Var (name=enc) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_694e226babdcc344c88a5a61806b6a8e7f3012345) + │ Count + │ Var (name=enc) (bindingState=unbound) + └── ExtensionElem (encCount) + Count (Distinct) + Var (name=enc) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { -?patient a . -OPTIONAL { -?patient ?enc . -?enc ?practitioner . -BIND(?practitioner AS ?optPractitioner) -} -FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?practitioner . + BIND(?practitioner AS ?optPractitioner) + } + FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) } GROUP BY ?patient HAVING (COUNT(?enc) >= 2) @@ -1160,64 +1273,64 @@ HAVING (COUNT(?enc) >= 2) Theme: MEDICAL_RECORDS z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 600 ms +Initial explain execution time: 657 ms Warmup execution 1/3 Warmup execution 2/3 Warmup execution 3/3 -Fastest execution time: 322 ms +Fastest execution time: 337 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=575.3M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=2.2K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=647.4M, nextCallCountActual=1, nextTimeNanosActual=2.4K, firstRowTimeNanosActual=647.4M, openCountActual=1, lastRowTimeNanosActual=647.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=323.7M, avgNextNanosActual=2.4K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=575.3M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=1.0K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=575.3M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=65.3K, firstRowTimeNanosActual=575.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=575.3M, maxGroupSizeActual=65.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=65.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=65.3K, rowsDroppedActual=65.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=287.7M, avgNextNanosActual=708) -│ ╠══ Difference (resultSizeActual=65.3K, hasNextCallCountActual=65.3K, hasNextTrueCountActual=65.3K, hasNextTimeNanosActual=563.8M, nextCallCountActual=65.3K, nextTimeNanosActual=940.4K, firstRowTimeNanosActual=63.5M, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, varsDroppedActual=4, metricOrigin.varsDroppedActual=derived, inputRowsActual=109.5K, rowsDroppedActual=44.1K, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.6K, avgNextNanosActual=14, leftRowsConsumedActual=99.6K, rightRowsConsumedActual=9.8K, overlapRowsActual=34.3K) -│ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=99.6K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=454.8M, nextCallCountActual=99.6K, nextTimeNanosActual=1.3M, joinRightIteratorsCreatedActual=99.6K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, firstRowTimeNanosActual=41.6K, leftRowsWithMatchActual=99.6K, openCountActual=1, lastRowTimeNanosActual=575.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=199.3K, rowsDroppedActual=99.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.04, stddevActual=1.02, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.6K, avgNextNanosActual=14, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.1K, resultSizeActual=99.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, optimizer.candidateCount=9, optimizer.score=51.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=149.5K, rowsDroppedActual=49.8K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=2483.5M, stddevActual=49.8K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.1K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.8K) [left] -│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=49.0K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.15, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=49.8K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=112, resultSizeEstimate=49.8K, resultSizeActual=49.8K, hasNextCallCountActual=49.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=5.6M, nextCallCountActual=49.8K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=575.3M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=51.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=649960.0 rawRows=64996.0 effectiveRows=64996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.623015116E10 rawRows=1.623015116E9 effectiveRows=1.623015116E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28814.70588235294 rawRows=48985.0 effectiveRows=48985.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=489850.0 rawRows=48985.0 effectiveRows=48985.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30085.88235294118 rawRows=51146.0 effectiveRows=51146.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51146.0 rawRows=51146.0 effectiveRows=51146.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51146.0, effectiveRows=51146.0, adjustedCost=51146.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=47, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ └── Filter (costEstimate=255, resultSizeEstimate=65.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=148.5M, nextCallCountActual=49.8K, nextTimeNanosActual=648.7K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.97, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=1.5K, exprEvalCountActual=49.8K, openCountActual=49.8K, exprTrueCountActual=49.8K, lastRowTimeNanosActual=10.3K, closeCountActual=49.8K, exprEvalTimeNanosActual=11.8M, inputRowsActual=49.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.5K, avgNextNanosActual=13, filterRejectRateActual=0) [right] -│ ║ │ ║ │ ║ ╠══ ListMemberOperator (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=8.2M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=1.9M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=24.8K, exprTrueCountActual=24.8K, exprEvalTimeNanosActual=790.5K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") (exprEvalCountActual=8.2K, exprTrueCountActual=8.2K, exprEvalTimeNanosActual=358.8K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=26.2M, nextCallCountActual=49.8K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=7.7K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=36, indexHitRateActual=0.50) -│ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=74.9K, resultSizeEstimate=25.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=20.2M, nextCallCountActual=49.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=5.5K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=204, avgNextNanosActual=37, indexHitRateActual=0.50) [right] -│ ║ │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=99.6K, hasNextCallCountActual=149.5K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=10.6M, nextCallCountActual=99.6K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=208, openCountActual=49.8K, bindingsProvidedActual=99.6K, lastRowTimeNanosActual=4.2K, closeCountActual=49.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=71, avgNextNanosActual=11) [right] -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=99.6K, hasNextCallCountActual=199.3K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=40.8M, nextCallCountActual=99.6K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=199.3K, sourceRowsMatchedActual=99.6K, sourceRowsFilteredActual=99.6K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=99.6K, openCountActual=99.6K, lastRowTimeNanosActual=1.4K, closeCountActual=99.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=99.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=40, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K, resultSizeActual=9.8K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=49.6K, joinRightBindingsConsumedActual=9.8K, inputRowsActual=59.5K, rowsDroppedActual=49.6K, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=49.6K, rightRowsScannedActual=9.8K, avgRightRowsPerLeftActual=0.20, joinOutputPerLeftActual=0.20) -│ ║ ╠══ StatementPattern [index: psoc] (costEstimate=3721.4M, resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.1M, nextCallCountActual=49.6K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=21.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=57.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=32, indexHitRateActual=1.00) [left] -│ ║ ║ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Filter (new scope) (resultSizeActual=9.8K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.8K, hasNextTimeNanosActual=19.8M, nextCallCountActual=9.8K, nextTimeNanosActual=124.9K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=9.8K, sourceRowsFilteredActual=39.7K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.5K, exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, openCountActual=1, exprTrueCountActual=9.8K, lastRowTimeNanosActual=21.6M, closeCountActual=1, exprEvalTimeNanosActual=11.5M, inputRowsActual=49.6K, rowsDroppedActual=39.7K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, filterRejectRateActual=0.80) [right] -│ ║ ├── Compare (<) (exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, exprTrueCountActual=9.8K, exprEvalTimeNanosActual=8.9M, hasNextFalseCountActual=0) -│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=6.6K, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=3.2M, nextCallCountActual=49.6K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=9.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=41, indexHitRateActual=1.00) -│ ║ s: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=647.4M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=647.4M, openCountActual=1, lastRowTimeNanosActual=647.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=323.7M, avgNextNanosActual=1.4K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=647.4M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=65.3K, firstRowTimeNanosActual=647.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=647.4M, maxGroupSizeActual=65.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=65.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=65.3K, rowsDroppedActual=65.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=323.7M, avgNextNanosActual=625) + │ ╠══ Difference (resultSizeActual=65.3K, hasNextCallCountActual=65.3K, hasNextTrueCountActual=65.3K, hasNextTimeNanosActual=636.1M, nextCallCountActual=65.3K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=102.0M, openCountActual=1, lastRowTimeNanosActual=647.3M, closeCountActual=1, varsDroppedActual=4, metricOrigin.varsDroppedActual=derived, inputRowsActual=109.5K, rowsDroppedActual=44.1K, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.7K, avgNextNanosActual=16, leftRowsConsumedActual=99.6K, rightRowsConsumedActual=9.8K, overlapRowsActual=34.3K) + │ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=99.6K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=489.6M, nextCallCountActual=99.6K, nextTimeNanosActual=1.2M, joinRightIteratorsCreatedActual=99.6K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, firstRowTimeNanosActual=68.6K, leftRowsWithMatchActual=99.6K, openCountActual=1, lastRowTimeNanosActual=647.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=199.3K, rowsDroppedActual=99.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.06, stddevActual=1.03, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.9K, avgNextNanosActual=12, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.5K, resultSizeActual=99.6K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=99.6K, joinRightBindingsConsumedActual=99.6K, optimizer.candidateCount=9, optimizer.score=51.9K, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416598.6853536794 rawRows=66527.0 effectiveRows=66012.79819105139 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0222904340445097E10 rawRows=1.661245717E9 effectiveRows=1.6484055836287441E9 baseCostRows=1.6484055836287441E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42565.8628304058 rawRows=50725.0 effectiveRows=50333.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=149.5K, rowsDroppedActual=49.8K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=2483.5M, stddevActual=49.8K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=99.6K, rightRowsScannedActual=99.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.5K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416598.6853536794 rawRows=66527.0 effectiveRows=66012.79819105139 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0222904340445097E10 rawRows=1.661245717E9 effectiveRows=1.6484055836287441E9 baseCostRows=1.6484055836287441E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42565.8628304058 rawRows=50725.0 effectiveRows=50333.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.8K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.3K, resultSizeActual=49.8K, joinRightIteratorsCreatedActual=49.8K, joinLeftBindingsConsumedActual=49.8K, joinRightBindingsConsumedActual=49.8K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416598.6853536794 rawRows=66527.0 effectiveRows=66012.79819105139 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0222904340445097E10 rawRows=1.661245717E9 effectiveRows=1.6484055836287441E9 baseCostRows=1.6484055836287441E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42565.8628304058 rawRows=50725.0 effectiveRows=50333.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=99.6K, rowsDroppedActual=49.8K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=49.8K, rightRowsScannedActual=49.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=112, resultSizeEstimate=49.8K, resultSizeActual=49.8K, hasNextCallCountActual=49.8K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=5.6M, nextCallCountActual=49.8K, nextTimeNanosActual=2.6M, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=23.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=647.3M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416598.6853536794 rawRows=66527.0 effectiveRows=66012.79819105139 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0222904340445097E10 rawRows=1.661245717E9 effectiveRows=1.6484055836287441E9 baseCostRows=1.6484055836287441E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42565.8628304058 rawRows=50725.0 effectiveRows=50333.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9922707801501854 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=53, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ └── Filter (resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=166.6M, nextCallCountActual=49.8K, nextTimeNanosActual=736.6K, sourceRowsScannedActual=49.8K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=2.1M, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=833, exprEvalCountActual=49.8K, openCountActual=49.8K, exprTrueCountActual=49.8K, lastRowTimeNanosActual=8.1K, closeCountActual=49.8K, exprEvalTimeNanosActual=13.2M, inputRowsActual=49.8K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.7K, avgNextNanosActual=15, filterRejectRateActual=0) [right] + │ ║ │ ║ │ ║ ╠══ ListMemberOperator (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=9.2M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") (exprEvalCountActual=49.8K, exprTrueCountActual=49.8K, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") (exprEvalCountActual=24.8K, exprTrueCountActual=24.8K, exprEvalTimeNanosActual=853.2K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") (exprEvalCountActual=8.2K, exprTrueCountActual=8.2K, exprEvalTimeNanosActual=419.9K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=257, resultSizeEstimate=66.5K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=28.9M, nextCallCountActual=49.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=6.0K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=290, avgNextNanosActual=39, indexHitRateActual=0.50) + │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=74.9K, resultSizeEstimate=25.0K, resultSizeActual=49.8K, hasNextCallCountActual=99.6K, hasNextTrueCountActual=49.8K, hasNextTimeNanosActual=22.8M, nextCallCountActual=49.8K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=99.6K, sourceRowsMatchedActual=49.8K, sourceRowsFilteredActual=49.8K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=49.8K, openCountActual=49.8K, lastRowTimeNanosActual=4.4K, closeCountActual=49.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=229, avgNextNanosActual=42, indexHitRateActual=0.50) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=99.6K, hasNextCallCountActual=149.5K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=8.3M, nextCallCountActual=99.6K, nextTimeNanosActual=1.5M, firstRowTimeNanosActual=125, openCountActual=49.8K, bindingsProvidedActual=99.6K, lastRowTimeNanosActual=3.2K, closeCountActual=49.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.8K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=56, avgNextNanosActual=15) [right] + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.0K, resultSizeActual=99.6K, hasNextCallCountActual=199.3K, hasNextTrueCountActual=99.6K, hasNextTimeNanosActual=43.2M, nextCallCountActual=99.6K, nextTimeNanosActual=4.4M, sourceRowsScannedActual=199.3K, sourceRowsMatchedActual=99.6K, sourceRowsFilteredActual=99.6K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=99.6K, openCountActual=99.6K, lastRowTimeNanosActual=917, closeCountActual=99.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=99.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=217, avgNextNanosActual=45, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=9.8K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.8K, hasNextTimeNanosActual=76.0M, nextCallCountActual=9.8K, nextTimeNanosActual=151.4K, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=9.8K, sourceRowsFilteredActual=39.7K, plannedFilterEvidenceCount=2.1M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.8K, exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, openCountActual=1, exprTrueCountActual=9.8K, lastRowTimeNanosActual=87.6M, closeCountActual=1, exprEvalTimeNanosActual=14.3M, inputRowsActual=49.6K, rowsDroppedActual=39.7K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.7K, avgNextNanosActual=15, filterRejectRateActual=0.80) + │ ║ ╠══ Compare (<) (exprEvalCountActual=49.6K, exprFalseCountActual=39.7K, exprTrueCountActual=9.8K, exprEvalTimeNanosActual=10.7M, hasNextFalseCountActual=0) + │ ║ ║ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ValueConstant (value="60"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.7K, hasNextFalseCountActual=0) + │ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=50.2K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=49.6K, joinLeftBindingsConsumedActual=49.6K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=99.3K, rowsDroppedActual=49.6K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=49.6K, rightRowsScannedActual=49.6K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=49.7K, resultSizeActual=49.6K, hasNextCallCountActual=49.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=4.0M, nextCallCountActual=49.6K, nextTimeNanosActual=2.5M, sourceRowsScannedActual=49.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=1, plannedAccessRows=49.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.7K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81, avgNextNanosActual=52, indexHitRateActual=1.00) [left] + │ ║ │ s: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=50.2K, resultSizeActual=49.6K, hasNextCallCountActual=99.3K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=24.2M, nextCallCountActual=49.6K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=99.3K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=49.6K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc, obs], sharedJoinVars=[obs], firstRowTimeNanosActual=1.0K, indexLookupCountActual=49.6K, openCountActual=49.6K, lastRowTimeNanosActual=1.3K, closeCountActual=49.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=49.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=244, avgNextNanosActual=47, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=obs) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1225,148 +1338,144 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── LeftJoin -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.3K, optimizer.candidateCount=9, optimizer.score=51.3K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.3K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=49.1K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=51.3K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=249710.0 rawRows=24971.0 effectiveRows=24971.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=Filter score=651880.0 rawRows=65188.0 effectiveRows=65188.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=30407.058823529413 rawRows=51692.0 effectiveRows=51692.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=Filter score=1.627809548E10 rawRows=1.627809548E9 effectiveRows=1.627809548E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=Filter score=28900.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=491300.0 rawRows=49130.0 effectiveRows=49130.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30174.70588235294 rawRows=51297.0 effectiveRows=51297.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51297.0 rawRows=51297.0 effectiveRows=51297.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), Filter], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?enc hasCondition ?cond), Filter, SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=51297.0, effectiveRows=51297.0, adjustedCost=51297.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) -│ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) -│ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) -│ ║ │ ║ │ ║ └── Filter (costEstimate=255, resultSizeEstimate=65.2K, plannedFilterPassRatio=0.97, filterSelectivitySource=learned_filter) [right] -│ ║ │ ║ │ ║ ╠══ ListMemberOperator -│ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) -│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") -│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") -│ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") -│ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=66.5K) -│ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) -│ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) -│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] -│ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) -│ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] -│ ║ │ s: Var (name=enc) (bindingState=bound) -│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) -│ ║ │ o: Var (name=practitioner) (bindingState=unbound) -│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=10.0K) -│ ║ ╠══ StatementPattern (costEstimate=3721.4M, resultSizeEstimate=49.7K) [left] -│ ║ ║ s: Var (name=enc) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) -│ ║ ║ o: Var (name=obs) (bindingState=unbound) -│ ║ ╚══ Filter (new scope) (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) [right] -│ ║ ├── Compare (<) -│ ║ │ Var (name=value) (bindingState=bound) -│ ║ │ ValueConstant (value="60"^^) -│ ║ └── StatementPattern (resultSizeEstimate=49.7K) -│ ║ s: Var (name=obs) (bindingState=unbound) -│ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) -│ ║ o: Var (name=value) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=enc) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=enc) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=51.5K, optimizer.candidateCount=9, optimizer.score=51.9K, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416671.8796392014 rawRows=66527.0 effectiveRows=66024.39630638101 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0226496881363058E10 rawRows=1.661245717E9 effectiveRows=1.6486952001666403E9 baseCostRows=1.6486952001666403E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42573.34143758108 rawRows=50725.0 effectiveRows=50342.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=51.5K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416671.8796392014 rawRows=66527.0 effectiveRows=66024.39630638101 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0226496881363058E10 rawRows=1.661245717E9 effectiveRows=1.6486952001666403E9 baseCostRows=1.6486952001666403E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42573.34143758108 rawRows=50725.0 effectiveRows=50342.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=50.3K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416671.8796392014 rawRows=66527.0 effectiveRows=66024.39630638101 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0226496881363058E10 rawRows=1.661245717E9 effectiveRows=1.6486952001666403E9 baseCostRows=1.6486952001666403E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42573.34143758108 rawRows=50725.0 effectiveRows=50342.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=112, resultSizeEstimate=49.8K, optimizer.candidateCount=9, optimizer.score=51.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] promotedPrefixes=[] plannedOrder=[BSA(names=[code], rows=2), SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), SP(?enc http://example.com/theme/medical/hasCondition ?cond), SP(?cond http://example.com/theme/medical/code ?condCode)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[code], rows=2), 1:SP(?enc http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/medical/Encounter), 2:SP(?enc http://example.com/theme/medical/hasCondition ?cond), 3:SP(?cond http://example.com/theme/medical/code ?condCode)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc type Encounter) score=347260.0 rawRows=24971.0 effectiveRows=24971.0 baseCostRows=34726.0 factorWorkRows=34726.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?enc hasCondition ?cond) score=498350.0 rawRows=49835.0 effectiveRows=49835.0 baseCostRows=49835.0 factorWorkRows=49510.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) right=SP(?cond code ?condCode) score=416671.8796392014 rawRows=66527.0 effectiveRows=66024.39630638101 baseCostRows=67175.0 factorWorkRows=67175.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?enc hasCondition ?cond) score=49548.23529411765 rawRows=50648.0 effectiveRows=50648.0 baseCostRows=84232.0 factorWorkRows=84232.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc type Encounter) right=SP(?cond code ?condCode) score=1.0226496881363058E10 rawRows=1.661245717E9 effectiveRows=1.6486952001666403E9 baseCostRows=1.6486952001666403E9 factorWorkRows=101897.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?enc hasCondition ?cond) right=SP(?cond code ?condCode) score=42573.34143758108 rawRows=50725.0 effectiveRows=50342.0 baseCostRows=116681.0 factorWorkRows=116681.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=0.9924451171160733 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=507250.0 rawRows=50725.0 effectiveRows=50725.0 baseCostRows=50725.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?enc type Encounter) score=30525.29411764706 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) score=51893.0 rawRows=51893.0 effectiveRows=51893.0 baseCostRows=51893.0 factorWorkRows=2.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]), SP(?enc type Encounter), SP(?enc hasCondition ?cond), SP(?cond code ?condCode)], optimizer.chosenOrder=[SP(?enc hasCondition ?cond), SP(?cond code ?condCode), SP(?enc type Encounter), BindingSetAssignment ([[code="DX-200"], [code="DX-201"]])], optimizer.scoreComponents=rawRows=51893.0, effectiveRows=51893.0, baseCostRows=51893.0, factorWorkRows=2.0, adjustedCost=51893.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ │ ║ │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=cond) (bindingState=unbound) + │ ║ │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=2.2M, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ ║ Var (name=condCode) (bindingState=bound) + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-200") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-201") + │ ║ │ ║ │ ║ ║ ValueConstant (value="DX-202") + │ ║ │ ║ │ ║ ╚══ StatementPattern (costEstimate=257, resultSizeEstimate=66.5K) + │ ║ │ ║ │ ║ s: Var (name=cond) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ ║ │ ║ o: Var (name=condCode) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=74.9K, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── BindingSetAssignment ([[code="DX-200"], [code="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + │ ║ │ s: Var (name=enc) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.1M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=value) (bindingState=bound) + │ ║ ║ ValueConstant (value="60"^^) + │ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=50.2K) + │ ║ ├── StatementPattern (resultSizeEstimate=49.7K, plannedAccessRows=49.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.7K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ s: Var (name=enc) (bindingState=unbound) + │ ║ │ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ o: Var (name=obs) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=50.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc, obs], sharedJoinVars=[obs]) [right] + │ ║ s: Var (name=obs) (bindingState=bound) + │ ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + │ ║ o: Var (name=value) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=enc) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=enc) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?enc) AS ?count) WHERE { -?enc ?cond . -?cond ?condCode . -FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) -?enc a . -VALUES ?code { "DX-200" "DX-201" } -OPTIONAL { -?enc ?practitioner . -} -MINUS { -?enc ?obs . -{ -{ -?obs ?value . -FILTER (?value < 60) -} -} -} + ?enc ?cond . + ?cond ?condCode . + FILTER (?condCode IN ("DX-200", "DX-201", "DX-202")) + ?enc a . + VALUES ?code { "DX-200" "DX-201" } + OPTIONAL { + ?enc ?practitioner . + } + MINUS { + ?enc ?obs . + ?obs ?value . + FILTER (?value < 60) + } } Theme: MEDICAL_RECORDS z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 754 ms +Initial explain execution time: 802 ms Warmup execution 1/2 Warmup execution 2/2 -Fastest execution time: 384 ms +Fastest execution time: 401 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=739.5M, openCountActual=1, lastRowTimeNanosActual=739.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=2.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=771.4M, nextCallCountActual=1, nextTimeNanosActual=2.3K, firstRowTimeNanosActual=771.4M, openCountActual=1, lastRowTimeNanosActual=771.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=385.7M, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=739.5M, openCountActual=1, lastRowTimeNanosActual=739.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=1.2K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=739.4M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=66.3K, firstRowTimeNanosActual=739.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=739.5M, maxGroupSizeActual=66.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=66.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.3K, rowsDroppedActual=66.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369.7M, avgNextNanosActual=583) -│ ╠══ Filter (resultSizeActual=66.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=66.3K, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=15.8K, hasNextFalseCountActual=0) -│ ║ │ ╚══ Not (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=559.8M, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=66.3K, exprFalseCountActual=66.3K, exprEvalTimeNanosActual=556.5M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Join (JoinIterator) (resultSizeEstimate=8.2K, resultSizeActual=0, joinRightIteratorsCreatedActual=138.8K, joinLeftBindingsConsumedActual=138.8K, inputRowsActual=138.8K, rowsDroppedActual=138.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=138.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) -│ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=138.8K, hasNextCallCountActual=205.1K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=33.1M, nextCallCountActual=138.8K, nextTimeNanosActual=5.7M, sourceRowsScannedActual=205.1K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=66.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=708, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=7.4K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=162, avgNextNanosActual=41, indexHitRateActual=0.68) [left] -│ ║ │ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=m2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeActual=0, hasNextCallCountActual=138.8K, hasNextTimeNanosActual=273.8M, sourceRowsScannedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedFilterPassRatio=0.50, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern, exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=1.8K, closeCountActual=138.8K, exprEvalTimeNanosActual=16.0M, inputRowsActual=138.8K, rowsDroppedActual=138.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.0K, filterRejectRateActual=1.00) [right] -│ ║ │ ╠══ Compare (=) (exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, exprEvalTimeNanosActual=9.5M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="MED-1005") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=138.8K, hasNextCallCountActual=277.6K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=54.1M, nextCallCountActual=138.8K, nextTimeNanosActual=5.4M, sourceRowsScannedActual=277.6K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) -│ ║ │ Var (name=c) -│ ║ │ ValueConstant (value="MED-1005") -│ ║ │ , plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=708, closeCountActual=138.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=195, avgNextNanosActual=39, indexHitRateActual=0.50) -│ ║ │ s: Var (name=m2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=131.4M, nextCallCountActual=66.3K, nextTimeNanosActual=883.4K, joinRightIteratorsCreatedActual=66.3K, joinLeftBindingsConsumedActual=66.3K, joinRightBindingsConsumedActual=66.3K, firstRowTimeNanosActual=27.7K, leftRowsWithMatchActual=66.3K, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=132.7K, rowsDroppedActual=66.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=13, leftRowsProbedActual=66.3K, rightRowsScannedActual=66.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=66.3M, nextCallCountActual=66.3K, nextTimeNanosActual=809.2K, firstRowTimeNanosActual=26.0K, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1000, avgNextNanosActual=12, leftRowsConsumedActual=16.6K, rightRowsConsumedActual=49.6K, leftRowsOutputContributionActual=16.6K, rightRowsOutputContributionActual=49.6K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=25.0K, rowsDroppedActual=8.3K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) -│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.3K, nextTimeNanosActual=404.9K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=17.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=203.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=127, avgNextNanosActual=49, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=16.6K, hasNextCallCountActual=25.0K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.4M, nextCallCountActual=16.6K, nextTimeNanosActual=700.3K, sourceRowsScannedActual=25.0K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=21.1K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=336, avgNextNanosActual=42, indexHitRateActual=0.67) [right] -│ ║ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] -│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.3K, nextTimeNanosActual=451.0K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=203.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=739.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=123, avgNextNanosActual=54, indexHitRateActual=1.00) [left] -│ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.2K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.9M, nextCallCountActual=24.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=709, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=43.0K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=209, avgNextNanosActual=43, indexHitRateActual=0.75) [right] -│ ║ ║ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.7K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=17.1M, nextCallCountActual=49.6K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.7K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=11.0K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=230, avgNextNanosActual=44, indexHitRateActual=0.67) [right] -│ ║ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=21.4K, resultSizeActual=66.3K, hasNextCallCountActual=132.7K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=27.6M, nextCallCountActual=66.3K, nextTimeNanosActual=3.2M, sourceRowsScannedActual=132.7K, sourceRowsMatchedActual=66.3K, sourceRowsFilteredActual=66.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=8.7K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=49, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=771.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=771.4M, openCountActual=1, lastRowTimeNanosActual=771.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=385.7M, avgNextNanosActual=1.3K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=771.4M, nextCallCountActual=1, nextTimeNanosActual=584, aggregateEvalCountActual=66.3K, firstRowTimeNanosActual=771.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=771.4M, maxGroupSizeActual=66.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=66.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=66.3K, rowsDroppedActual=66.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=385.7M, avgNextNanosActual=584) + │ ╠══ Filter (resultSizeActual=66.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=66.3K, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=18.8M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=9.5K, hasNextFalseCountActual=0) + │ ║ │ ╚══ Not (exprEvalCountActual=66.3K, exprTrueCountActual=66.3K, exprEvalTimeNanosActual=583.4M, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=66.3K, exprFalseCountActual=66.3K, exprEvalTimeNanosActual=580.1M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Join (JoinIterator) (resultSizeEstimate=16.5K, resultSizeActual=0, joinRightIteratorsCreatedActual=138.8K, joinLeftBindingsConsumedActual=138.8K, inputRowsActual=138.8K, rowsDroppedActual=138.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=138.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) + │ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.7K, resultSizeActual=138.8K, hasNextCallCountActual=205.1K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=34.8M, nextCallCountActual=138.8K, nextTimeNanosActual=6.3M, sourceRowsScannedActual=205.1K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=66.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient], firstRowTimeNanosActual=417, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=7.5K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=170, avgNextNanosActual=46, indexHitRateActual=0.68) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=m2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Filter (resultSizeActual=0, hasNextCallCountActual=138.8K, hasNextTimeNanosActual=287.0M, sourceRowsScannedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedFilterEvidenceCount=5.1M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=1.8K, closeCountActual=138.8K, exprEvalTimeNanosActual=16.2M, inputRowsActual=138.8K, rowsDroppedActual=138.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, filterRejectRateActual=1.00) [right] + │ ║ │ ╠══ Compare (=) (exprEvalCountActual=138.8K, exprFalseCountActual=138.8K, exprEvalTimeNanosActual=9.9M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="MED-1005") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=66.5K, resultSizeActual=138.8K, hasNextCallCountActual=277.6K, hasNextTrueCountActual=138.8K, hasNextTimeNanosActual=55.5M, nextCallCountActual=138.8K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=277.6K, sourceRowsMatchedActual=138.8K, sourceRowsFilteredActual=138.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) + │ ║ │ Var (name=c) + │ ║ │ ValueConstant (value="MED-1005") + │ ║ │ passRatio=0.0 source=learned_filter evidence=5135711, sharedJoinVars=[m2], firstRowTimeNanosActual=459, indexLookupCountActual=138.8K, openCountActual=138.8K, lastRowTimeNanosActual=667, closeCountActual=138.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=138.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=200, avgNextNanosActual=41, indexHitRateActual=0.50) + │ ║ │ s: Var (name=m2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=136.5M, nextCallCountActual=66.3K, nextTimeNanosActual=807.6K, joinRightIteratorsCreatedActual=66.3K, joinLeftBindingsConsumedActual=66.3K, joinRightBindingsConsumedActual=66.3K, firstRowTimeNanosActual=28.5K, leftRowsWithMatchActual=66.3K, openCountActual=1, lastRowTimeNanosActual=771.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=132.7K, rowsDroppedActual=66.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=12, leftRowsProbedActual=66.3K, rightRowsScannedActual=66.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=66.3K, hasNextCallCountActual=66.3K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=67.9M, nextCallCountActual=66.3K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=26.8K, openCountActual=1, lastRowTimeNanosActual=771.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.0K, avgNextNanosActual=15, leftRowsConsumedActual=16.6K, rightRowsConsumedActual=49.6K, leftRowsOutputContributionActual=16.6K, rightRowsOutputContributionActual=49.6K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.9K, resultSizeActual=16.6K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=16.6K, inputRowsActual=25.0K, rowsDroppedActual=8.3K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=16.6K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) + │ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.2M, nextCallCountActual=8.3K, nextTimeNanosActual=442.0K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedAccessRows=14.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=18.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=224.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=151, avgNextNanosActual=53, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.9K, resultSizeActual=16.6K, hasNextCallCountActual=25.0K, hasNextTrueCountActual=16.6K, hasNextTimeNanosActual=8.1M, nextCallCountActual=16.6K, nextTimeNanosActual=829.9K, sourceRowsScannedActual=25.0K, sourceRowsMatchedActual=16.6K, sourceRowsFilteredActual=8.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[patient], sharedJoinVars=[patient], firstRowTimeNanosActual=458, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=21.0K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=325, avgNextNanosActual=50, indexHitRateActual=0.67) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.5K, resultSizeActual=49.6K, joinRightIteratorsCreatedActual=24.9K, joinRightBindingsConsumedActual=49.6K, inputRowsActual=74.6K, rowsDroppedActual=24.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=49.6K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K, resultSizeActual=24.9K, joinRightIteratorsCreatedActual=8.3K, joinLeftBindingsConsumedActual=8.3K, joinRightBindingsConsumedActual=24.9K, inputRowsActual=33.3K, rowsDroppedActual=8.3K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=8.3K, rightRowsScannedActual=24.9K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] + │ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.4K, resultSizeActual=8.3K, hasNextCallCountActual=8.3K, hasNextTrueCountActual=8.3K, hasNextTimeNanosActual=1.2M, nextCallCountActual=8.3K, nextTimeNanosActual=445.8K, sourceRowsScannedActual=8.3K, sourceRowsMatchedActual=8.3K, sourceRowsFilteredActual=1, plannedAccessRows=14.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=224.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=771.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=148, avgNextNanosActual=53, indexHitRateActual=1.00) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.6K, resultSizeActual=24.9K, hasNextCallCountActual=33.3K, hasNextTrueCountActual=24.9K, hasNextTimeNanosActual=6.8M, nextCallCountActual=24.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=33.3K, sourceRowsMatchedActual=24.9K, sourceRowsFilteredActual=8.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[patient], sharedJoinVars=[patient], firstRowTimeNanosActual=584, indexLookupCountActual=8.3K, openCountActual=8.3K, lastRowTimeNanosActual=44.9K, closeCountActual=8.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.3K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=206, avgNextNanosActual=46, indexHitRateActual=0.75) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=51.5K, resultSizeActual=49.6K, hasNextCallCountActual=74.6K, hasNextTrueCountActual=49.6K, hasNextTimeNanosActual=16.9M, nextCallCountActual=49.6K, nextTimeNanosActual=2.2M, sourceRowsScannedActual=74.6K, sourceRowsMatchedActual=49.6K, sourceRowsFilteredActual=24.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc, patient], sharedJoinVars=[enc], firstRowTimeNanosActual=1.8K, indexLookupCountActual=24.9K, openCountActual=24.9K, lastRowTimeNanosActual=11.4K, closeCountActual=24.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=227, avgNextNanosActual=46, indexHitRateActual=0.67) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=obs) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=21.4K, resultSizeActual=66.3K, hasNextCallCountActual=132.7K, hasNextTrueCountActual=66.3K, hasNextTimeNanosActual=28.5M, nextCallCountActual=66.3K, nextTimeNanosActual=3.6M, sourceRowsScannedActual=132.7K, sourceRowsMatchedActual=66.3K, sourceRowsFilteredActual=66.3K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=66.3K, openCountActual=66.3K, lastRowTimeNanosActual=9.0K, closeCountActual=66.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=55, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=patient) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=patient) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1374,89 +1483,89 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="") -│ ║ │ ╚══ Not -│ ║ │ Exists -│ ║ │ Join (JoinIterator) (resultSizeEstimate=7.9K) -│ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ │ s: Var (name=patient) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ │ │ o: Var (name=m2) (bindingState=unbound) -│ ║ │ └── Filter (plannedFilterPassRatio=0.48, filterSelectivitySource=learned_pattern, deferredFilterScope=localPattern) [right] -│ ║ │ ╠══ Compare (=) -│ ║ │ ║ Var (name=c) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="MED-1005") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) -│ ║ │ Var (name=c) -│ ║ │ ValueConstant (value="MED-1005") -│ ║ │ , plannedLookupComponents=[S, P]) -│ ║ │ s: Var (name=m2) (bindingState=bound) -│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) -│ ║ │ o: Var (name=c) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=patient) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) -│ ║ ║ │ o: Var (name=med) (bindingState=unbound) -│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] -│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) -│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) -│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[patient], plannedLookupComponents=[S, P]) [right] -│ ║ ║ ║ s: Var (name=patient) (bindingState=bound) -│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) -│ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[enc, patient], plannedLookupComponents=[S, P]) [right] -│ ║ ║ s: Var (name=enc) (bindingState=bound) -│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) -│ ║ ║ o: Var (name=obs) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] -│ ║ s: Var (name=patient) (bindingState=bound) -│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=patient) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=patient) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=16.5K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=16.7K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, patient], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[patient]) [left] + │ ║ │ │ s: Var (name=patient) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ │ o: Var (name=m2) (bindingState=unbound) + │ ║ │ └── Filter (plannedFilterEvidenceCount=5.2M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=c) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="MED-1005") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_24be87bd_uri, _const_f5e5585a_uri, m2, patient], unlockedFilters=Compare (=) + │ ║ │ Var (name=c) + │ ║ │ ValueConstant (value="MED-1005") + │ ║ │ passRatio=0.0 source=learned_filter evidence=5274514, sharedJoinVars=[m2]) + │ ║ │ s: Var (name=m2) (bindingState=bound) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=c) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.9K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.4K, plannedAccessRows=14.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[patient], sharedJoinVars=[patient]) [right] + │ ║ ║ │ s: Var (name=patient) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ ║ │ o: Var (name=med) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.5K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.6K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=8.4K, plannedAccessRows=14.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=14.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ │ s: Var (name=patient) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=25.6K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[patient], sharedJoinVars=[patient]) [right] + │ ║ ║ ║ s: Var (name=patient) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ ║ o: Var (name=enc) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=51.5K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[enc, patient], sharedJoinVars=[enc]) [right] + │ ║ ║ s: Var (name=enc) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ ║ o: Var (name=obs) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=patient) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=patient) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=patient) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { -{ -?patient a . -?patient ?med . -} -UNION -{ -?patient a . -?patient ?enc . -?enc ?obs . -} -OPTIONAL { -?patient ?optName . -} -FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) + { + ?patient a . + ?patient ?med . + } + UNION + { + ?patient a . + ?patient ?enc . + ?enc ?obs . + } + OPTIONAL { + ?patient ?optName . + } + FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) } Theme: SOCIAL_MEDIA z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 11 ms +Initial explain execution time: 8 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -1467,52 +1576,49 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 3 ms +Fastest execution time: 1 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=717.3K, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=730.1K, openCountActual=1, lastRowTimeNanosActual=734.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358.7K, avgNextNanosActual=1.7K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=361.7K, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=370.9K, openCountActual=1, lastRowTimeNanosActual=375.0K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=180.9K, avgNextNanosActual=1.1K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=716.6K, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=745.4K, openCountActual=1, lastRowTimeNanosActual=749.0K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358.3K, avgNextNanosActual=1000) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=714.8K, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=6, firstRowTimeNanosActual=744.9K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=747.7K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=357.4K, avgNextNanosActual=250) -│ ╠══ Extension (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=638.5K, nextCallCountActual=6, nextTimeNanosActual=41.2K, firstRowTimeNanosActual=129.4K, openCountActual=1, lastRowTimeNanosActual=697.2K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=79.8K, avgNextNanosActual=6.9K) -│ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=632.5K, nextCallCountActual=6, nextTimeNanosActual=249, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=119.7K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=679.7K, closeCountActual=1, exprEvalTimeNanosActual=34.3K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=79.1K, avgNextNanosActual=42, filterRejectRateActual=0) -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=33.4K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user0") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=29.0K, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user1") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=957, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user2") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=458, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=585.8K, nextCallCountActual=6, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=96.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=673.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=83.7K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=517.9K, nextCallCountActual=6, nextTimeNanosActual=418, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=86.5K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=665.1K, closeCountActual=1, exprEvalTimeNanosActual=25.2K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=74.0K, avgNextNanosActual=70, filterRejectRateActual=0) [left] -│ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=23.9K, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=6, joinRightIteratorsCreatedActual=33, joinRightBindingsConsumedActual=6, inputRowsActual=39, rowsDroppedActual=33, expansionFactorActual=0.15, sampleCountActual=2, varianceActual=0.05, stddevActual=0.22, confidenceScoreActual=0.62, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) -│ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=33, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=33, inputRowsActual=36, rowsDroppedActual=3, expansionFactorActual=0.92, sampleCountActual=2, varianceActual=4.7M, stddevActual=2.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=33, avgRightRowsPerLeftActual=11, joinOutputPerLeftActual=11) [left] -│ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=2.4K, nextCallCountActual=3, nextTimeNanosActual=1.0K, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.5K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=657.1K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=604, avgNextNanosActual=347) [left] -│ ║ │ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=36, hasNextTrueCountActual=33, hasNextTimeNanosActual=298.9K, nextCallCountActual=33, nextTimeNanosActual=10.4K, sourceRowsScannedActual=513, sourceRowsMatchedActual=33, sourceRowsFilteredActual=480, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] -│ ║ │ │ │ Var (name=u) -│ ║ │ │ │ Var (name=v) -│ ║ │ │ │ , firstRowTimeNanosActual=3.0K, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=154.9K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=8.3K, avgNextNanosActual=316, indexHitRateActual=0.06) -│ ║ │ │ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, resultSizeActual=6, hasNextCallCountActual=39, hasNextTrueCountActual=6, hasNextTimeNanosActual=30.2K, nextCallCountActual=6, nextTimeNanosActual=165, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=292, openCountActual=33, bindingsProvidedActual=6, lastRowTimeNanosActual=1.4K, closeCountActual=33, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.15, avgHasNextNanosActual=776, avgNextNanosActual=28) [right] -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=22.8K, nextCallCountActual=6, nextTimeNanosActual=1.5K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=2.7K, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=11.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.9K, avgNextNanosActual=264, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (pair) (hasNextFalseCountActual=0) -│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=30.1K, hasNextFalseCountActual=0) -│ ║ ├── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=14.9K, hasNextFalseCountActual=0) -│ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) -│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=pair) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=pair) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=361.0K, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=384.2K, openCountActual=1, lastRowTimeNanosActual=387.2K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=180.5K, avgNextNanosActual=833) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=359.3K, nextCallCountActual=1, nextTimeNanosActual=292, aggregateEvalCountActual=6, firstRowTimeNanosActual=383.8K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=385.7K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=179.7K, avgNextNanosActual=292) + │ ╠══ Extension (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=311.0K, nextCallCountActual=6, nextTimeNanosActual=26.3K, firstRowTimeNanosActual=178.7K, openCountActual=1, lastRowTimeNanosActual=349.7K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=38.9K, avgNextNanosActual=4.4K) + │ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=302.2K, nextCallCountActual=6, nextTimeNanosActual=42, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=87.8K, plannedFilterPassRatio=0.82, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=163.9K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=334.5K, closeCountActual=1, exprEvalTimeNanosActual=13.4K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=37.8K, avgNextNanosActual=7.00, filterRejectRateActual=0) + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=12.5K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user0") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user1") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user2") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=278.4K, nextCallCountActual=6, nextTimeNanosActual=207, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=153.2K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=324.8K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.8M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=39.8K, avgNextNanosActual=35, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=6, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=15, rowsDroppedActual=9, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=9, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=9, inputRowsActual=12, rowsDroppedActual=3, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=1.00, stddevActual=1.00, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=9, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=1.2K, nextCallCountActual=3, nextTimeNanosActual=5.1K, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=7.2K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=322.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=313, avgNextNanosActual=1.7K) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, resultSizeActual=9, hasNextCallCountActual=12, hasNextTrueCountActual=9, hasNextTimeNanosActual=66.0K, nextCallCountActual=9, nextTimeNanosActual=8.3K, plannedWorkRows=3.00, plannedBoundVars=[u], firstRowTimeNanosActual=1.3K, openCountActual=3, bindingsProvidedActual=9, lastRowTimeNanosActual=46.0K, closeCountActual=3, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=5.5K, avgNextNanosActual=931) + │ ║ │ │ ╚══ Filter (resultSizeActual=6, hasNextCallCountActual=15, hasNextTrueCountActual=6, hasNextTimeNanosActual=72.8K, nextCallCountActual=6, nextTimeNanosActual=208, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=268.7K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=16.0K, exprEvalCountActual=6, openCountActual=9, exprTrueCountActual=6, lastRowTimeNanosActual=875, closeCountActual=9, exprEvalTimeNanosActual=9.3K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=4.9K, avgNextNanosActual=35, filterRejectRateActual=0) [right] + │ ║ │ │ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=7.8K, hasNextFalseCountActual=0) + │ ║ │ │ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=15, hasNextTrueCountActual=6, hasNextTimeNanosActual=30.7K, nextCallCountActual=6, nextTimeNanosActual=12.7K, sourceRowsScannedActual=15, sourceRowsMatchedActual=6, sourceRowsFilteredActual=9, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v], firstRowTimeNanosActual=15.1K, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=709, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=2.0K, avgNextNanosActual=2.1K, indexHitRateActual=0.40) + │ ║ │ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.7K, nextCallCountActual=6, nextTimeNanosActual=1.9K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=4.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=396, avgNextNanosActual=326, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (pair) (hasNextFalseCountActual=0) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=21.1K, hasNextFalseCountActual=0) + │ ║ ├── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) + │ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Str (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) + │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=pair) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=pair) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1520,65 +1626,71 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Extension -│ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=optName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="user0") -│ ║ │ ║ ValueConstant (value="user1") -│ ║ │ ║ ValueConstant (value="user2") -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] -│ ║ │ │ ╠══ Compare (!=) -│ ║ │ │ ║ Var (name=u) (bindingState=bound) -│ ║ │ │ ║ Var (name=v) (bindingState=bound) -│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) -│ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] -│ ║ │ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] -│ ║ │ │ │ Var (name=u) -│ ║ │ │ │ Var (name=v) -│ ║ │ │ │ ) -│ ║ │ │ │ s: Var (name=u) (bindingState=unbound) -│ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ │ │ o: Var (name=v) (bindingState=bound) -│ ║ │ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] -│ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ │ s: Var (name=u) (bindingState=bound) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ │ o: Var (name=optName) (bindingState=unbound) -│ ║ └── ExtensionElem (pair) -│ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) -│ ║ ├── Str -│ ║ │ Var (name=u) (bindingState=bound) -│ ║ └── Str -│ ║ Var (name=v) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=pair) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=pair) (bindingState=unbound) + ├── Group () + │ ╠══ Extension + │ ║ ├── Filter (plannedFilterEvidenceCount=87.8K, plannedFilterPassRatio=0.82, filterSelectivitySource=learned_filter) + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user0") + │ ║ │ ║ ValueConstant (value="user1") + │ ║ │ ║ ValueConstant (value="user2") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ │ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/0], [u=http://example.com/theme/social/user/1], [u=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ │ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/0], [v=http://example.com/theme/social/user/1], [v=http://example.com/theme/social/user/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannedBoundVars=[u]) + │ ║ │ │ ╚══ Filter (plannedFilterEvidenceCount=268.7K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ├── Compare (!=) + │ ║ │ │ │ Var (name=u) (bindingState=bound) + │ ║ │ │ │ Var (name=v) (bindingState=bound) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) + │ ║ │ │ s: Var (name=u) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ │ o: Var (name=v) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (pair) + │ ║ FunctionCall (http://www.w3.org/2005/xpath-functions#concat) + │ ║ ├── Str + │ ║ │ Var (name=u) (bindingState=bound) + │ ║ └── Str + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=pair) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=pair) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?pair) AS ?count) WHERE { -VALUES ?v { } -?u ?v . -VALUES ?u { } -FILTER (?u != ?v) -OPTIONAL { -?u ?optName . -} -FILTER (?optName IN ("user0", "user1", "user2")) -BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) + BIND(CONCAT(STR(?u), STR(?v)) AS ?pair) } Theme: SOCIAL_MEDIA z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 173 ms +Initial explain execution time: 114 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -1589,88 +1701,88 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 139 ms +Fastest execution time: 100 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=8.7M, openCountActual=1, lastRowTimeNanosActual=8.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=1.6K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.1M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=8.1M, openCountActual=1, lastRowTimeNanosActual=8.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.1M, avgNextNanosActual=1.7K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=958, firstRowTimeNanosActual=8.7M, openCountActual=1, lastRowTimeNanosActual=8.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=958) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.6M, nextCallCountActual=1, nextTimeNanosActual=459, aggregateEvalCountActual=4, firstRowTimeNanosActual=8.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.7M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=459) -│ ╠══ Difference (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=8.6M, nextCallCountActual=4, nextTimeNanosActual=166, firstRowTimeNanosActual=8.4M, openCountActual=1, lastRowTimeNanosActual=8.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.4M, avgNextNanosActual=42, leftRowsConsumedActual=4, rightRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, resultSizeActual=4, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=4, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=10, rowsDroppedActual=6, expansionFactorActual=0.40, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) -│ ║ │ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=28.5K, nextCallCountActual=6, nextTimeNanosActual=375, sourceRowsScannedActual=9, sourceRowsMatchedActual=6, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=17.9K, exprEvalCountActual=9, exprFalseCountActual=3, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=8.6M, closeCountActual=1, exprEvalTimeNanosActual=4.5K, inputRowsActual=9, rowsDroppedActual=3, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=4.1K, avgNextNanosActual=63, filterRejectRateActual=0.33) [left] -│ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=9, exprFalseCountActual=3, exprTrueCountActual=6, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=9, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=9, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=12, rowsDroppedActual=3, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=9.00, stddevActual=3.00, confidenceScoreActual=0.33, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=9, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) -│ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=2.2K, nextCallCountActual=3, nextTimeNanosActual=958, firstRowTimeNanosActual=4.4K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=8.6M, optimizer.candidateCount=64, closeCountActual=1, varsAddedActual=1, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271336.2717245989 rawRows=1305853.0 effectiveRows=1298941.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267737.50835561496 rawRows=1288534.0 effectiveRows=1281713.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264102.3980614973 rawRows=1271039.0 effectiveRows=1264311.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=553, avgNextNanosActual=319) -│ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=9, hasNextCallCountActual=12, hasNextTrueCountActual=9, hasNextTimeNanosActual=12.8K, nextCallCountActual=9, nextTimeNanosActual=541, firstRowTimeNanosActual=375, openCountActual=3, bindingsProvidedActual=9, lastRowTimeNanosActual=64.8K, closeCountActual=3, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.1K, avgNextNanosActual=60) -│ ║ │ ╚══ Filter (resultSizeActual=4, hasNextCallCountActual=10, hasNextTrueCountActual=4, hasNextTimeNanosActual=175.5K, nextCallCountActual=4, nextTimeNanosActual=125, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=13.1K, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, exprTrueCountActual=4, lastRowTimeNanosActual=19.5K, closeCountActual=6, varsAddedActual=2, exprEvalTimeNanosActual=63.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, rowsDroppedActual=2, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=17.6K, avgNextNanosActual=31, filterRejectRateActual=0.33) [right] -│ ║ │ ├── Exists (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, exprEvalTimeNanosActual=62.6K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ │ Filter (resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=4, hasNextTimeNanosActual=18.3K, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, lastRowTimeNanosActual=4.1K, exprTrueCountActual=4, closeCountActual=6, exprEvalTimeNanosActual=6.3K, inputRowsActual=6, rowsDroppedActual=6, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.1K, filterRejectRateActual=0.33) -│ ║ │ │ ├── Or (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) -│ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=6, exprFalseCountActual=4, exprTrueCountActual=2, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ ValueConstant (value="user0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) -│ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=4, exprFalseCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=417, hasNextFalseCountActual=0) -│ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ │ ValueConstant (value="user1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) -│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.0K, nextCallCountActual=6, nextTimeNanosActual=1.1K, sourceRowsScannedActual=8, sourceRowsMatchedActual=6, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=505, avgNextNanosActual=194, indexHitRateActual=0.75) -│ ║ │ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3.54554037480904E13M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=2.466497186E8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] -│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.9440932578245E12M, stddevActual=1715.8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] -│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.8K, stddevActual=43, confidenceScoreActual=0.04, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] -│ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.2K, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] -│ ║ │ ║ │ ║ │ ╠══ Filter (resultSizeActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, inputRowsActual=18, rowsDroppedActual=12, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] -│ ║ │ ║ │ ║ │ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ │ ╚══ Compare (!=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=916, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=18, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=18, inputRowsActual=24, rowsDroppedActual=6, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=143.3M, stddevActual=12.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=18, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) -│ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=12.7K, nextCallCountActual=6, nextTimeNanosActual=2.5K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=16.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1K, avgNextNanosActual=417, indexHitRateActual=0.50) [left] -│ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=5.0K, nextCallCountActual=18, nextTimeNanosActual=292, firstRowTimeNanosActual=208, openCountActual=6, bindingsProvidedActual=18, lastRowTimeNanosActual=14.6K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=212, avgNextNanosActual=16) [right] -│ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.2K, nextCallCountActual=6, nextTimeNanosActual=458, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=12.0K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=76, indexHitRateActual=0.50) [right] -│ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.8K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=10.9K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=42, indexHitRateActual=0.50) [right] -│ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.1K, nextCallCountActual=6, nextTimeNanosActual=458, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=9.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=431, avgNextNanosActual=76, indexHitRateActual=0.50) [right] -│ ║ │ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, nextCallCountActual=6, nextTimeNanosActual=376, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=8.6K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=63, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.2K, nextCallCountActual=6, nextTimeNanosActual=293, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=7.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=274, avgNextNanosActual=49, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.3M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.3M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.3M, indexHitRateActual=0) -│ ║ ║ s: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ ExtensionElem (_anon_path_1473f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) -│ ║ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.1M, nextCallCountActual=1, nextTimeNanosActual=916, firstRowTimeNanosActual=8.1M, openCountActual=1, lastRowTimeNanosActual=8.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.1M, avgNextNanosActual=916) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.1M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=4, firstRowTimeNanosActual=8.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.1M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=4, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.1M, avgNextNanosActual=416) + │ ╠══ Difference (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=8.1M, nextCallCountActual=4, nextTimeNanosActual=209, firstRowTimeNanosActual=7.9M, openCountActual=1, lastRowTimeNanosActual=8.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.4M, avgNextNanosActual=52, leftRowsConsumedActual=4, rightRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=23796.1M, resultSizeActual=4, joinLeftBindingsConsumedActual=6, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=748987.6470588235 rawRows=1273525.0 effectiveRows=1273279.0 baseCostRows=1273279.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=748987.6470588235 rawRows=1273525.0 effectiveRows=1273279.0 baseCostRows=1273279.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=10, rowsDroppedActual=6, expansionFactorActual=0.40, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.67) + │ ║ │ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=20.8K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=9, sourceRowsMatchedActual=6, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=10.1K, exprEvalCountActual=9, exprFalseCountActual=3, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=8.1M, closeCountActual=1, exprEvalTimeNanosActual=3.9K, inputRowsActual=9, rowsDroppedActual=3, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=3.0K, avgNextNanosActual=42, filterRejectRateActual=0.33) [left] + │ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=9, exprFalseCountActual=3, exprTrueCountActual=6, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=9, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=9, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=748987.6470588235 rawRows=1273525.0 effectiveRows=1273279.0 baseCostRows=1273279.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=748987.6470588235 rawRows=1273525.0 effectiveRows=1273279.0 baseCostRows=1273279.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=12, rowsDroppedActual=3, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=9.00, stddevActual=3.00, confidenceScoreActual=0.33, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=9, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) + │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=1.7K, nextCallCountActual=3, nextTimeNanosActual=792, firstRowTimeNanosActual=4.2K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=8.1M, optimizer.candidateCount=64, closeCountActual=1, varsAddedActual=1, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=748987.6470588235 rawRows=1273525.0 effectiveRows=1273279.0 baseCostRows=1273279.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=749226.4705882353 rawRows=1273931.0 effectiveRows=1273685.0 baseCostRows=1273685.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=748987.6470588235 rawRows=1273525.0 effectiveRows=1273279.0 baseCostRows=1273279.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=448, avgNextNanosActual=264) + │ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=9, hasNextCallCountActual=12, hasNextTrueCountActual=9, hasNextTimeNanosActual=4.7K, nextCallCountActual=9, nextTimeNanosActual=543, firstRowTimeNanosActual=292, openCountActual=3, bindingsProvidedActual=9, lastRowTimeNanosActual=42.0K, closeCountActual=3, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=392, avgNextNanosActual=60) + │ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=6, rowsDroppedActual=2, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] + │ ║ │ ├── And (hasNextFalseCountActual=0) + │ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=248, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Exists (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, exprEvalTimeNanosActual=56.0K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ │ Filter (resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=4, hasNextTimeNanosActual=15.3K, sourceRowsScannedActual=6, sourceRowsMatchedActual=4, sourceRowsFilteredActual=2, plannedFilterEvidenceCount=678, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=6, exprFalseCountActual=2, openCountActual=6, lastRowTimeNanosActual=4.3K, exprTrueCountActual=4, closeCountActual=6, exprEvalTimeNanosActual=4.8K, inputRowsActual=6, rowsDroppedActual=6, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.6K, filterRejectRateActual=0.33) + │ ║ │ │ ╠══ Or (exprEvalCountActual=6, exprFalseCountActual=2, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=3.8K, hasNextFalseCountActual=0) + │ ║ │ │ ║ ├── Compare (=) (exprEvalCountActual=6, exprFalseCountActual=4, exprTrueCountActual=2, exprEvalTimeNanosActual=2.7K, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ValueConstant (value="user0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) + │ ║ │ │ ║ └── Compare (=) (exprEvalCountActual=4, exprFalseCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=374, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ ValueConstant (value="user1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=209, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.9K, nextCallCountActual=6, nextTimeNanosActual=916, sourceRowsScannedActual=8, sourceRowsMatchedActual=6, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.1K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=375, avgNextNanosActual=153, indexHitRateActual=0.75) + │ ║ │ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3.54900576564438E13M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.258806918773259E14M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=2.468907926E8M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9626895113E9M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.9498511902762E12M, stddevActual=1717.5M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20610.3M, resultSizeActual=6, joinRightIteratorsCreatedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=951, stddevActual=31, confidenceScoreActual=0.06, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] + │ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K, resultSizeActual=6, joinRightIteratorsCreatedActual=12, joinRightBindingsConsumedActual=6, inputRowsActual=18, rowsDroppedActual=12, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) [left] + │ ║ │ ║ │ ║ │ ╠══ Filter (resultSizeActual=12, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=2.0K, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=18, rowsDroppedActual=6, selectivityActual=0.67, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] + │ ║ │ ║ │ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=18, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=18, inputRowsActual=24, rowsDroppedActual=6, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=143.3M, stddevActual=12.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=18, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) + │ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=8.6K, nextCallCountActual=6, nextTimeNanosActual=2.0K, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=959, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=17.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=719, avgNextNanosActual=347, indexHitRateActual=0.50) [left] + │ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=3.2K, nextCallCountActual=18, nextTimeNanosActual=419, firstRowTimeNanosActual=167, openCountActual=6, bindingsProvidedActual=18, lastRowTimeNanosActual=15.4K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=137, avgNextNanosActual=23) [right] + │ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=18, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.2K, nextCallCountActual=6, nextTimeNanosActual=417, sourceRowsScannedActual=18, sourceRowsMatchedActual=6, sourceRowsFilteredActual=12, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=12, openCountActual=12, lastRowTimeNanosActual=459, closeCountActual=12, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=294, avgNextNanosActual=70, indexHitRateActual=0.33) [right] + │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.6K, nextCallCountActual=6, nextTimeNanosActual=709, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=11.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=222, avgNextNanosActual=118, indexHitRateActual=0.50) [right] + │ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, nextCallCountActual=6, nextTimeNanosActual=416, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=10.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=69, indexHitRateActual=0.50) [right] + │ ║ │ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, nextCallCountActual=6, nextTimeNanosActual=500, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=9.3K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=229, avgNextNanosActual=83, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.8K, nextCallCountActual=6, nextTimeNanosActual=251, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=8.3K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=240, avgNextNanosActual=42, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=u2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=7.8M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=7.9M, indexHitRateActual=0) + │ ║ ║ s: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ ExtensionElem (_anon_path_607e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=u1) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=u1) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1678,120 +1790,117 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=24273.5M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] -│ ║ │ ║ ├── Compare (!=) -│ ║ │ ║ │ Var (name=u1) (bindingState=bound) -│ ║ │ ║ │ Var (name=u2) (bindingState=bound) -│ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=5.681818181818182 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=510468.74999999994 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=11.697860962566844 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=12.867647058823529 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=265507.8125 rawRows=1271039.0 effectiveRows=1271039.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=269162.3495989305 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=272780.1219919786 rawRows=1305853.0 effectiveRows=1305853.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=305050.66287878784 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=271310.1604278075 rawRows=1305853.0 effectiveRows=1298816.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=267711.8148395722 rawRows=1288534.0 effectiveRows=1281590.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=264077.1223262032 rawRows=1271039.0 effectiveRows=1264190.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=1 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=335555.7291666667 rawRows=2.0663487504E10 effectiveRows=1288534.0 sharedVars=2 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=27.540106951871657 rawRows=143748.0 effectiveRows=103.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=18.18181818181818 rawRows=4.0 effectiveRows=4.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=9.358288770053475 rawRows=35.0 effectiveRows=35.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=9.62566844919786 rawRows=36.0 effectiveRows=36.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2096325.0 rawRows=5031180.0 effectiveRows=5031180.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] -│ ║ │ ├── Exists -│ ║ │ │ Filter (plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) -│ ║ │ │ ├── Or -│ ║ │ │ │ ╠══ Compare (=) -│ ║ │ │ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ │ │ ║ ValueConstant (value="user0") -│ ║ │ │ │ ╚══ Compare (=) -│ ║ │ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ │ ValueConstant (value="user1") -│ ║ │ │ └── StatementPattern (resultSizeEstimate=16.0K) -│ ║ │ │ s: Var (name=u1) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ │ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.254648449770845E14M) [left] -│ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9597966231E9M) [left] -│ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20590.2M) [left] -│ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.2K) [left] -│ ║ │ ║ │ ║ │ ╠══ Filter (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) [left] -│ ║ │ ║ │ ║ │ ║ ├── And -│ ║ │ ║ │ ║ │ ║ │ ╠══ Compare (!=) -│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u2) (bindingState=bound) -│ ║ │ ║ │ ║ │ ║ │ ║ Var (name=u3) (bindingState=bound) -│ ║ │ ║ │ ║ │ ║ │ ╚══ Compare (!=) -│ ║ │ ║ │ ║ │ ║ │ Var (name=u1) (bindingState=bound) -│ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) -│ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K) -│ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] -│ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound) -│ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound) -│ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] -│ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) -│ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) -│ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) -│ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) -│ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) -│ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) -│ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ │ ║ s: Var (name=u2) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ ║ o: Var (name=u3) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ │ s: Var (name=u3) (bindingState=bound) -│ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ │ o: Var (name=u2) (bindingState=bound) -│ ║ └── Extension -│ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ s: Var (name=u1) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ o: Var (name=u1) (bindingState=unbound) -│ ║ ╚══ ExtensionElem (_anon_path_0573f2fe36952f541b08a42a7b8ce15e70d) -│ ║ Var (name=u1) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=u1) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=u1) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=23796.1M, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=748986.4705882353 rawRows=1273525.0 effectiveRows=1273277.0 baseCostRows=1273277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=748986.4705882353 rawRows=1273525.0 effectiveRows=1273277.0 baseCostRows=1273277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] + │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=748986.4705882353 rawRows=1273525.0 effectiveRows=1273277.0 baseCostRows=1273277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=748986.4705882353 rawRows=1273525.0 effectiveRows=1273277.0 baseCostRows=1273277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=64, optimizer.score=7.116328597132738E14M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] promotedPrefixes=[] plannedOrder=[BSA(names=[u1], rows=3), BSA(names=[u2], rows=3), BSA(names=[u3], rows=3), SP(?u1 http://example.com/theme/social/follows ?u2), SP(?u2 http://example.com/theme/social/follows ?u1), SP(?u1 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u1), SP(?u2 http://example.com/theme/social/follows ?u3), SP(?u3 http://example.com/theme/social/follows ?u2)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:BSA(names=[u1], rows=3), 1:BSA(names=[u2], rows=3), 2:BSA(names=[u3], rows=3), 3:SP(?u1 http://example.com/theme/social/follows ?u2), 4:SP(?u2 http://example.com/theme/social/follows ?u1), 5:SP(?u1 http://example.com/theme/social/follows ?u3), 6:SP(?u3 http://example.com/theme/social/follows ?u1), 7:SP(?u2 http://example.com/theme/social/follows ?u3), 8:SP(?u3 http://example.com/theme/social/follows ?u2)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=60.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=6.0 factorWorkRows=6.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u2) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u1) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143381.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u1 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u1) score=84341.76470588235 rawRows=35.0 effectiveRows=35.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u2 follows ?u3) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) right=SP(?u3 follows ?u2) score=84341.76470588235 rawRows=35.0 effectiveRows=23.0 baseCostRows=143381.0 factorWorkRows=143381.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u1 follows ?u3) score=749132.3529411765 rawRows=1273525.0 effectiveRows=1273525.0 baseCostRows=1273525.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u2) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u1 follows ?u3) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u1) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u2 follows ?u3) score=748986.4705882353 rawRows=1273525.0 effectiveRows=1273277.0 baseCostRows=1273277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u1) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u1) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u1 follows ?u3) right=SP(?u3 follows ?u2) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u2 follows ?u3) score=749225.2941176471 rawRows=1273931.0 effectiveRows=1273683.0 baseCostRows=1273683.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u3 follows ?u1) right=SP(?u3 follows ?u2) score=748986.4705882353 rawRows=1273525.0 effectiveRows=1273277.0 baseCostRows=1273277.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?u2 follows ?u3) right=SP(?u3 follows ?u2) score=530804.5833333334 rawRows=2.0663487504E10 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=30.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=3.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u2) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=1.6666666666666667 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u1 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=41.1764705882353 rawRows=143748.0 effectiveRows=70.0 baseCostRows=70.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=143748.0 effectiveRows=69.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=40.0 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u1 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=21.176470588235293 rawRows=36.0 effectiveRows=36.0 baseCostRows=36.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=84557.64705882354 rawRows=36.0 effectiveRows=36.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) score=2.3529411764705883 rawRows=4.0 effectiveRows=4.0 baseCostRows=4.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u1) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u3) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u3 follows ?u2) score=2156220.0 rawRows=5174928.0 effectiveRows=5174928.0 baseCostRows=5174928.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?u2 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u1) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=239580.0 rawRows=574992.0 effectiveRows=574992.0 baseCostRows=574992.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u1) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u2 follows ?u3) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=3.443914584E10 rawRows=8.2653950016E10 effectiveRows=8.2653950016E10 baseCostRows=8.2653950016E10 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u2 follows ?u3) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?u3 follows ?u2) score=4.95055833620832E15 rawRows=1.1881340006899968E16 effectiveRows=1.1881340006899968E16 baseCostRows=1.1881340006899968E16 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?u3 follows ?u2) score=7.116328597132737E20 rawRows=1.7079188633118567E21 effectiveRows=1.7079188633118567E21 baseCostRows=1.7079188633118567E21 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?u3 follows ?u2), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u2 follows ?u1), SP(?u1 follows ?u3), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.chosenOrder=[BindingSetAssignment ([[u1=http://example.com/theme/social/user/0], [u1=http://example.com/theme/social/user/1], [u1=http://example.com/theme/social/user/2]]), BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]), SP(?u1 follows ?u2), SP(?u1 follows ?u3), BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]), SP(?u2 follows ?u1), SP(?u3 follows ?u1), SP(?u2 follows ?u3), SP(?u3 follows ?u2)], optimizer.scoreComponents=rawRows=1.7079188633118567E21, effectiveRows=1.7079188633118567E21, baseCostRows=1.7079188633118567E21, factorWorkRows=0.0, adjustedCost=7.116328597132737E20, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=8, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ │ ║ BindingSetAssignment ([[u2=http://example.com/theme/social/user/0], [u2=http://example.com/theme/social/user/1], [u2=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ │ ╚══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) [right] + │ ║ │ ├── And + │ ║ │ │ ╠══ Compare (!=) + │ ║ │ │ ║ Var (name=u1) (bindingState=bound) + │ ║ │ │ ║ Var (name=u3) (bindingState=bound) + │ ║ │ │ ╚══ Exists + │ ║ │ │ Filter (plannedFilterEvidenceCount=684, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="user0") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="user1") + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.258806918773259E14M) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9626895113E9M) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20610.3M) [left] + │ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ │ ║ │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=2.0K, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] + │ ║ │ ║ │ ║ │ ║ ├── Compare (!=) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ │ Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=143.7K) + │ ║ │ ║ │ ║ │ ║ ╠══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ │ ║ │ ║ │ ║ ║ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ ║ ║ o: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ │ ║ ╚══ BindingSetAssignment ([[u3=http://example.com/theme/social/user/0], [u3=http://example.com/theme/social/user/1], [u3=http://example.com/theme/social/user/2]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ │ s: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ ║ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ │ o: Var (name=u1) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ ║ s: Var (name=u2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ ║ o: Var (name=u3) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ │ s: Var (name=u3) (bindingState=bound) + │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ │ o: Var (name=u2) (bindingState=bound) + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ s: Var (name=u1) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=u1) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_517e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ Var (name=u1) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u1) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u1) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?u1) AS ?count) WHERE { -VALUES (?u1 ?u2) { -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -} -FILTER (?u1 != ?u2) -?u1 ?u2 . -VALUES ?u3 { } -FILTER ((?u2 != ?u3) && (?u1 != ?u3)) -?u1 ?u3 . -?u2 ?u1 . -?u3 ?u1 . -?u2 ?u3 . -?u3 ?u2 . -FILTER EXISTS { -?u1 ?name . -FILTER ((?name = "user0") || (?name = "user1")) -} -MINUS { -?u1 ?u1 . -BIND(?u1 AS ?_anon_path_0573f2fe36952f541b08a42a7b8ce15e70d) -} + VALUES (?u1 ?u2) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?u1 != ?u2) + ?u1 ?u2 . + VALUES ?u3 { } + FILTER (?u2 != ?u3) + ?u1 ?u3 . + ?u2 ?u1 . + ?u3 ?u1 . + ?u2 ?u3 . + ?u3 ?u2 . + FILTER ((?u1 != ?u3) && EXISTS { ?u1 ?name . FILTER ((?name = "user0") || (?name = "user1")) }) + MINUS { + ?u1 ?u1 . + BIND(?u1 AS ?_anon_path_517e226babdcc344c88a5a61806b6a8e7f301234) + } } Theme: SOCIAL_MEDIA z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 6 ms +Initial explain execution time: 2 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -1802,54 +1911,46 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 3 ms +Fastest execution time: 1 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=299.1K, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=304.6K, openCountActual=1, lastRowTimeNanosActual=310.3K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.6K, avgNextNanosActual=1.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=142.0K, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=144.6K, openCountActual=1, lastRowTimeNanosActual=148.5K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=71.0K, avgNextNanosActual=708) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.0K, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=314.0K, openCountActual=1, lastRowTimeNanosActual=318.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.0K, avgNextNanosActual=584) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=295.7K, nextCallCountActual=1, nextTimeNanosActual=83, aggregateEvalCountActual=6, firstRowTimeNanosActual=314.2K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=316.1K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=147.9K, avgNextNanosActual=83) -│ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=261.8K, nextCallCountActual=6, nextTimeNanosActual=168, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=85.5K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=278.1K, closeCountActual=1, exprEvalTimeNanosActual=3.0K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=32.7K, avgNextNanosActual=28, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=251.3K, nextCallCountActual=6, nextTimeNanosActual=84, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=82.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=258.9K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=35.9K, avgNextNanosActual=14, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=234.5K, nextCallCountActual=6, nextTimeNanosActual=209, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root, firstRowTimeNanosActual=80.6K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=253.6K, closeCountActual=1, exprEvalTimeNanosActual=13.8K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=33.5K, avgNextNanosActual=35, filterRejectRateActual=0) [left] -│ ║ ║ ├── Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=13.1K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.7K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=458, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=959, indexHitRateActual=1.00) -│ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=57, joinRightBindingsConsumedActual=6, inputRowsActual=63, rowsDroppedActual=57, expansionFactorActual=0.10, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105, resultSizeActual=57, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=57, inputRowsActual=61, rowsDroppedActual=4, expansionFactorActual=0.93, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=57, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) [left] -│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.2K, nextCallCountActual=4, nextTimeNanosActual=583, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.6K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=245.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=442, avgNextNanosActual=146) [left] -│ ║ ║ ║ └── Filter (resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=120.7K, nextCallCountActual=57, nextTimeNanosActual=1.0K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=1.3K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=40.0K, closeCountActual=4, exprEvalTimeNanosActual=53.4K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=2.0K, avgNextNanosActual=19, filterRejectRateActual=0) [right] -│ ║ ║ ║ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=47.3K, hasNextFalseCountActual=0) -│ ║ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=34.4K, nextCallCountActual=57, nextTimeNanosActual=18.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists -│ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ , Compare (!=) -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ , firstRowTimeNanosActual=1000, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=38.5K, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=566, avgNextNanosActual=325, indexHitRateActual=0.08) -│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, resultSizeActual=6, hasNextCallCountActual=63, hasNextTrueCountActual=6, hasNextTimeNanosActual=18.0K, nextCallCountActual=6, nextTimeNanosActual=210, plannedWorkRows=12, plannedBoundVars=[u, v], firstRowTimeNanosActual=250, openCountActual=57, bindingsProvidedActual=6, lastRowTimeNanosActual=375, closeCountActual=57, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.10, avgHasNextNanosActual=287, avgNextNanosActual=35) [right] -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.7K, nextCallCountActual=6, nextTimeNanosActual=583, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=875, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=313, avgNextNanosActual=97, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=141.3K, nextCallCountActual=1, nextTimeNanosActual=375, firstRowTimeNanosActual=154.5K, openCountActual=1, lastRowTimeNanosActual=157.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=70.7K, avgNextNanosActual=375) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=139.7K, nextCallCountActual=1, nextTimeNanosActual=125, aggregateEvalCountActual=6, firstRowTimeNanosActual=154.7K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=156.0K, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=69.9K, avgNextNanosActual=125) + │ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=117.1K, nextCallCountActual=6, nextTimeNanosActual=167, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=231.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=35.0K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=125.2K, closeCountActual=1, exprEvalTimeNanosActual=2.2K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=14.6K, avgNextNanosActual=28, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=102.7K, nextCallCountActual=6, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=32.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=108.6K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.8M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=14.7K, avgNextNanosActual=35, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinLeftBindingsConsumedActual=6, inputRowsActual=22, rowsDroppedActual=16, expansionFactorActual=0.27, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=16, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=16, inputRowsActual=20, rowsDroppedActual=4, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=2.25, stddevActual=1.50, confidenceScoreActual=0.44, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=16, avgRightRowsPerLeftActual=4.00, joinOutputPerLeftActual=4.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.5K, nextCallCountActual=4, nextTimeNanosActual=666, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=2.1K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=107.2K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=300, avgNextNanosActual=167) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=16, hasNextCallCountActual=20, hasNextTrueCountActual=16, hasNextTimeNanosActual=4.6K, nextCallCountActual=16, nextTimeNanosActual=498, plannedWorkRows=4.00, plannedBoundVars=[u], firstRowTimeNanosActual=250, openCountActual=4, bindingsProvidedActual=16, lastRowTimeNanosActual=22.1K, closeCountActual=4, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=233, avgNextNanosActual=31) + │ ║ ║ └── Filter (resultSizeActual=6, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=3.5M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_pattern, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] + │ ║ ║ ╠══ And (hasNextFalseCountActual=0) + │ ║ ║ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=10.3K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ ║ ║ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=458, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=465, indexHitRateActual=1.00) + │ ║ ║ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=22, hasNextTrueCountActual=6, hasNextTimeNanosActual=9.1K, nextCallCountActual=6, nextTimeNanosActual=1.0K, sourceRowsScannedActual=22, sourceRowsMatchedActual=6, sourceRowsFilteredActual=16, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v], firstRowTimeNanosActual=708, indexLookupCountActual=16, openCountActual=16, lastRowTimeNanosActual=500, closeCountActual=16, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16, nextPerHasNextRatioActual=0.27, avgHasNextNanosActual=417, avgNextNanosActual=174, indexHitRateActual=0.27) + │ ║ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.6K, nextCallCountActual=6, nextTimeNanosActual=791, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=709, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.2K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=305, avgNextNanosActual=132, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1857,69 +1958,74 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="") -│ ║ └── LeftJoin -│ ║ ╠══ Filter (plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root) [left] -│ ║ ║ ├── Exists -│ ║ ║ │ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ │ s: Var (name=v) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ o: Var (name=u) (bindingState=bound) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] -│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [right] -│ ║ ║ ║ ╠══ Compare (!=) -│ ║ ║ ║ ║ Var (name=u) (bindingState=bound) -│ ║ ║ ║ ║ Var (name=v) (bindingState=bound) -│ ║ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists -│ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ , Compare (!=) -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ ) -│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ o: Var (name=v) (bindingState=bound) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=v) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=u) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=u) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=231.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u]) + │ ║ ║ └── Filter (plannedFilterEvidenceCount=3.5M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_pattern) [right] + │ ║ ║ ╠══ And + │ ║ ║ ║ ├── Compare (!=) + │ ║ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ ║ └── Exists + │ ║ ║ ║ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=u) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { -VALUES ?v { } -?u ?v . -FILTER (?u != ?v) -VALUES ?u { } -FILTER EXISTS { -?v ?u . -} -OPTIONAL { -?v ?optName . -} -FILTER (?optName != "") + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") } Theme: SOCIAL_MEDIA z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 5 ms +Initial explain execution time: 4 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -1930,61 +2036,58 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 4 ms +Fastest execution time: 2 ms -Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.9K, openCountActual=1, lastRowTimeNanosActual=187.8K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.9K) +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.3K, openCountActual=1, lastRowTimeNanosActual=191.2K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.4K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "u" (hasNextFalseCountActual=0) ║ ProjectionElem "degree" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.4K, openCountActual=1, lastRowTimeNanosActual=192.7K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.5K) -├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=182.1K, openCountActual=1, lastRowTimeNanosActual=192.5K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=182.2K) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=176.8K, sourceRowsScannedActual=3, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=3, exprFalseCountActual=3, openCountActual=1, lastRowTimeNanosActual=187.5K, closeCountActual=1, exprEvalTimeNanosActual=1.3K, inputRowsActual=3, rowsDroppedActual=3, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=176.9K, filterRejectRateActual=1.00) -│ ║ ├── Compare (>=) (exprEvalCountActual=3, exprFalseCountActual=3, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) -│ ║ └── Group (u) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=172.4K, nextCallCountActual=3, nextTimeNanosActual=126, aggregateEvalCountActual=12, firstRowTimeNanosActual=182.9K, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=185.0K, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=3, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=43.1K, avgNextNanosActual=42) -│ ║ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=149.6K, nextCallCountActual=6, nextTimeNanosActual=249, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=48.4K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=158.2K, closeCountActual=1, exprEvalTimeNanosActual=3.5K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=18.7K, avgNextNanosActual=42, filterRejectRateActual=0) -│ ║ ├── ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=2.7K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user3") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=667, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user4") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=294, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user5") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user6") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=142.4K, nextCallCountActual=6, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=44.6K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=151.3K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=20.3K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=122.6K, nextCallCountActual=6, nextTimeNanosActual=84, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=41.8K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=148.2K, closeCountActual=1, exprEvalTimeNanosActual=1.7K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=17.5K, avgNextNanosActual=14, filterRejectRateActual=0) [left] -│ ║ ║ ├── Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=57, joinRightBindingsConsumedActual=6, inputRowsActual=63, rowsDroppedActual=57, expansionFactorActual=0.10, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105, resultSizeActual=57, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=57, inputRowsActual=61, rowsDroppedActual=4, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.6M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=57, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) [left] -│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.8K, nextCallCountActual=4, nextTimeNanosActual=626, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.0K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=143.5K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=567, avgNextNanosActual=157) [left] -│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=28.3K, nextCallCountActual=57, nextTimeNanosActual=5.3K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ , firstRowTimeNanosActual=750, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=30.8K, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=464, avgNextNanosActual=94, indexHitRateActual=0.08) -│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, resultSizeActual=6, hasNextCallCountActual=63, hasNextTrueCountActual=6, hasNextTimeNanosActual=33.4K, nextCallCountActual=6, nextTimeNanosActual=125, plannedWorkRows=12, plannedBoundVars=[u, v], firstRowTimeNanosActual=334, openCountActual=57, bindingsProvidedActual=6, lastRowTimeNanosActual=750, closeCountActual=57, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.10, avgHasNextNanosActual=530, avgNextNanosActual=21) [right] -│ ║ ╚══ Extension (resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=6.6K, nextCallCountActual=6, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=625, openCountActual=6, lastRowTimeNanosActual=1.7K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=552, avgNextNanosActual=167) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=4.2K, nextCallCountActual=6, nextTimeNanosActual=250, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.4K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358, avgNextNanosActual=42, indexHitRateActual=0.50) -│ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) -│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (degree) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_5283f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (degree) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=181.9K, openCountActual=1, lastRowTimeNanosActual=197.4K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=181.9K) + ├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=181.6K, openCountActual=1, lastRowTimeNanosActual=197.2K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=181.6K) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=176.5K, sourceRowsScannedActual=3, sourceRowsFilteredActual=3, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=3, exprFalseCountActual=3, openCountActual=1, lastRowTimeNanosActual=192.4K, closeCountActual=1, exprEvalTimeNanosActual=2.0K, inputRowsActual=3, rowsDroppedActual=3, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=176.6K, filterRejectRateActual=1.00) + │ ║ ├── Compare (>=) (exprEvalCountActual=3, exprFalseCountActual=3, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_097e226babdcc344c88a5a61806b6a8e7f3, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.0K, hasNextFalseCountActual=0) + │ ║ └── Group (u) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=170.7K, nextCallCountActual=3, nextTimeNanosActual=292, aggregateEvalCountActual=12, firstRowTimeNanosActual=186.5K, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=189.4K, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=3, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=42.7K, avgNextNanosActual=97) + │ ║ Filter (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=141.6K, nextCallCountActual=6, nextTimeNanosActual=165, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=78.3K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=152.1K, closeCountActual=1, exprEvalTimeNanosActual=17.0K, inputRowsActual=6, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=17.7K, avgNextNanosActual=28, filterRejectRateActual=0) + │ ║ ├── ListMemberOperator (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=16.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user3") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=13.2K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user4") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=377, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user5") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=333, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user6") (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=118.8K, nextCallCountActual=6, nextTimeNanosActual=126, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, firstRowTimeNanosActual=61.0K, leftRowsWithMatchActual=6, openCountActual=1, lastRowTimeNanosActual=142.1K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=6, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=17.0K, avgNextNanosActual=21, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12, resultSizeActual=6, joinRightIteratorsCreatedActual=16, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=6, inputRowsActual=22, rowsDroppedActual=16, expansionFactorActual=0.27, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=6, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=16, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=16, inputRowsActual=20, rowsDroppedActual=4, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=2.25, stddevActual=1.50, confidenceScoreActual=0.44, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=16, avgRightRowsPerLeftActual=4.00, joinOutputPerLeftActual=4.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=3.0K, nextCallCountActual=4, nextTimeNanosActual=1.0K, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.1K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=141.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=600, avgNextNanosActual=261) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, resultSizeActual=16, hasNextCallCountActual=20, hasNextTrueCountActual=16, hasNextTimeNanosActual=5.2K, nextCallCountActual=16, nextTimeNanosActual=497, plannedWorkRows=4.00, plannedBoundVars=[u], firstRowTimeNanosActual=250, openCountActual=4, bindingsProvidedActual=16, lastRowTimeNanosActual=19.4K, closeCountActual=4, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=261, avgNextNanosActual=31) + │ ║ ║ └── Filter (resultSizeActual=6, hasNextCallCountActual=22, hasNextTrueCountActual=6, hasNextTimeNanosActual=31.1K, nextCallCountActual=6, nextTimeNanosActual=208, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=268.7K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=917, exprEvalCountActual=6, openCountActual=16, exprTrueCountActual=6, lastRowTimeNanosActual=708, closeCountActual=16, exprEvalTimeNanosActual=2.3K, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=16, nextPerHasNextRatioActual=0.27, avgHasNextNanosActual=1.4K, avgNextNanosActual=35, filterRejectRateActual=0) [right] + │ ║ ║ ╠══ Compare (!=) (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=6, hasNextCallCountActual=22, hasNextTrueCountActual=6, hasNextTimeNanosActual=10.2K, nextCallCountActual=6, nextTimeNanosActual=750, sourceRowsScannedActual=22, sourceRowsMatchedActual=6, sourceRowsFilteredActual=16, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v], firstRowTimeNanosActual=625, indexLookupCountActual=16, openCountActual=16, lastRowTimeNanosActual=500, closeCountActual=16, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=16, nextPerHasNextRatioActual=0.27, avgHasNextNanosActual=468, avgNextNanosActual=125, indexHitRateActual=0.27) + │ ║ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=5.9K, nextCallCountActual=6, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=750, openCountActual=6, lastRowTimeNanosActual=1.9K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=497, avgNextNanosActual=271) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=6, hasNextCallCountActual=12, hasNextTrueCountActual=6, hasNextTimeNanosActual=3.7K, nextCallCountActual=6, nextTimeNanosActual=707, sourceRowsScannedActual=12, sourceRowsMatchedActual=6, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=1.7K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=309, avgNextNanosActual=118, indexHitRateActual=0.50) + │ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) + │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_097e226babdcc344c88a5a61806b6a8e7f3) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (degree) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_097e226babdcc344c88a5a61806b6a8e7f3) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (degree) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -1993,67 +2096,80 @@ Projection ║ ProjectionElem "u" ║ ProjectionElem "degree" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>=) -│ ║ │ Var (name=_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="3"^^) -│ ║ └── Group (u) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optAlias) (bindingState=bound) -│ ║ │ ValueConstant (value="user3") -│ ║ │ ValueConstant (value="user4") -│ ║ │ ValueConstant (value="user5") -│ ║ │ ValueConstant (value="user6") -│ ║ └── LeftJoin -│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] -│ ║ ║ ├── Compare (!=) -│ ║ ║ │ Var (name=u) (bindingState=bound) -│ ║ ║ │ Var (name=v) (bindingState=bound) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=12) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=105) [left] -│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ ) -│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ o: Var (name=v) (bindingState=bound) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=12, plannedWorkRows=12, plannedBoundVars=[u, v]) [right] -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) -│ ║ │ s: Var (name=u) (bindingState=bound) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ │ o: Var (name=optName) (bindingState=unbound) -│ ║ └── ExtensionElem (optAlias) -│ ║ Var (name=optName) (bindingState=bound) -│ ║ GroupElem (_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567) -│ ║ Count (Distinct) -│ ║ Var (name=v) (bindingState=bound) -│ ║ GroupElem (degree) -│ ║ Count (Distinct) -│ ║ Var (name=v) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_8283f2fe36952f541b08a42a7b8ce15e70d01234567) -│ Count (Distinct) -│ Var (name=v) (bindingState=unbound) -└── ExtensionElem (degree) -Count (Distinct) -Var (name=v) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_397e226babdcc344c88a5a61806b6a8e7f3012, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (u) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="user3") + │ ║ │ ValueConstant (value="user4") + │ ║ │ ValueConstant (value="user5") + │ ║ │ ValueConstant (value="user6") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=12) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/3], [u=http://example.com/theme/social/user/4], [u=http://example.com/theme/social/user/5], [u=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/3], [v=http://example.com/theme/social/user/4], [v=http://example.com/theme/social/user/5], [v=http://example.com/theme/social/user/6]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u]) + │ ║ ║ └── Filter (plannedFilterEvidenceCount=268.7K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ║ GroupElem (_anon_having_397e226babdcc344c88a5a61806b6a8e7f3012) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_397e226babdcc344c88a5a61806b6a8e7f3012) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=v) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?u (COUNT(DISTINCT ?v) AS ?degree) WHERE { -VALUES ?v { } -?u ?v . -VALUES ?u { } -FILTER (?u != ?v) -OPTIONAL { -?u ?optName . -BIND(?optName AS ?optAlias) -} -FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias IN ("user3", "user4", "user5", "user6")) } GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 3) @@ -2061,7 +2177,7 @@ HAVING (COUNT(DISTINCT ?v) >= 3) Theme: SOCIAL_MEDIA z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 7 ms +Initial explain execution time: 4 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -2072,50 +2188,50 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 6 ms +Fastest execution time: 2 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=607.1K, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=604.9K, openCountActual=1, lastRowTimeNanosActual=614.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=303.6K, avgNextNanosActual=666) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=202.3K, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=215.0K, openCountActual=1, lastRowTimeNanosActual=220.6K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=101.2K, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=601.3K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=610.6K, openCountActual=1, lastRowTimeNanosActual=613.2K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=300.7K, avgNextNanosActual=292) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=599.5K, nextCallCountActual=1, nextTimeNanosActual=125, aggregateEvalCountActual=9, firstRowTimeNanosActual=610.7K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=611.8K, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=299.8K, avgNextNanosActual=125) -│ ╠══ Filter (resultSizeActual=9, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=575.8K, nextCallCountActual=9, nextTimeNanosActual=251, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=64.7K, exprEvalCountActual=9, openCountActual=1, exprTrueCountActual=9, lastRowTimeNanosActual=585.8K, closeCountActual=1, exprEvalTimeNanosActual=2.5K, inputRowsActual=9, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.82, avgHasNextNanosActual=52.4K, avgNextNanosActual=28, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.8K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=563.5K, nextCallCountActual=9, nextTimeNanosActual=209, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, firstRowTimeNanosActual=62.9K, leftRowsWithMatchActual=9, openCountActual=1, lastRowTimeNanosActual=570.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18, rowsDroppedActual=9, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=754.2K, stddevActual=868, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=56.4K, avgNextNanosActual=23, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, resultSizeActual=9, joinRightIteratorsCreatedActual=70, joinLeftBindingsConsumedActual=79, joinRightBindingsConsumedActual=9, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=79, rowsDroppedActual=70, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=79, rightRowsScannedActual=9, avgRightRowsPerLeftActual=0.11, joinOutputPerLeftActual=0.11) [left] -│ ║ ║ ├── Filter (resultSizeActual=70, hasNextCallCountActual=71, hasNextTrueCountActual=70, hasNextTimeNanosActual=126.0K, nextCallCountActual=70, nextTimeNanosActual=1.2K, sourceRowsScannedActual=70, sourceRowsMatchedActual=70, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=18.2K, exprEvalCountActual=70, openCountActual=1, exprTrueCountActual=70, lastRowTimeNanosActual=567.2K, closeCountActual=1, exprEvalTimeNanosActual=47.5K, inputRowsActual=70, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=1.8K, avgNextNanosActual=18, filterRejectRateActual=0) [left] -│ ║ ║ │ ╠══ Compare (!=) (exprEvalCountActual=70, exprTrueCountActual=70, exprEvalTimeNanosActual=42.3K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, resultSizeActual=70, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=75, rowsDroppedActual=5, expansionFactorActual=0.93, sampleCountActual=2, varianceActual=1.0M, stddevActual=1.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=70, avgRightRowsPerLeftActual=14, joinOutputPerLeftActual=14) -│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.2K, nextCallCountActual=5, nextTimeNanosActual=10.7K, firstRowTimeNanosActual=9.9K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=564.1K, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=1, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=201, avgNextNanosActual=2.2K) [left] -│ ║ ║ │ └── StatementPattern [index: ospc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=70, hasNextCallCountActual=75, hasNextTrueCountActual=70, hasNextTimeNanosActual=37.0K, nextCallCountActual=70, nextTimeNanosActual=7.5K, sourceRowsScannedActual=897, sourceRowsMatchedActual=70, sourceRowsFilteredActual=827, plannedIndexName=ospc, firstRowTimeNanosActual=750, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=125.0K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=493, avgNextNanosActual=108, indexHitRateActual=0.08) [right] -│ ║ ║ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=88.9K, nextCallCountActual=9, nextTimeNanosActual=250, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=1.7K, exprEvalCountActual=9, openCountActual=70, exprTrueCountActual=9, lastRowTimeNanosActual=875, closeCountActual=70, exprEvalTimeNanosActual=16.5K, inputRowsActual=9, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=1.1K, avgNextNanosActual=28, filterRejectRateActual=0) [right] -│ ║ ║ ╠══ Not (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=15.7K, hasNextFalseCountActual=0) -│ ║ ║ ║ Exists (exprEvalCountActual=9, exprFalseCountActual=9, exprEvalTimeNanosActual=14.7K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ ║ ║ Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=9, hasNextTimeNanosActual=4.5K, sourceRowsScannedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=583, closeCountActual=9, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0, avgHasNextNanosActual=505, indexHitRateActual=0) -│ ║ ║ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ └── ExtensionElem (_anon_path_5783f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=9, hasNextCallCountActual=79, hasNextTrueCountActual=9, hasNextTimeNanosActual=26.3K, nextCallCountActual=9, nextTimeNanosActual=250, firstRowTimeNanosActual=375, openCountActual=70, bindingsProvidedActual=9, lastRowTimeNanosActual=375, closeCountActual=70, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=70, nextPerHasNextRatioActual=0.11, avgHasNextNanosActual=334, avgNextNanosActual=28) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9, hasNextCallCountActual=18, hasNextTrueCountActual=9, hasNextTimeNanosActual=4.9K, nextCallCountActual=9, nextTimeNanosActual=459, sourceRowsScannedActual=18, sourceRowsMatchedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.0K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=276, avgNextNanosActual=51, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=201.3K, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=223.1K, openCountActual=1, lastRowTimeNanosActual=226.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=100.7K, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=199.0K, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=9, firstRowTimeNanosActual=222.7K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=225.0K, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=99.5K, avgNextNanosActual=416) + │ ╠══ Filter (resultSizeActual=9, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=170.6K, nextCallCountActual=9, nextTimeNanosActual=667, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=231.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=41.1K, exprEvalCountActual=9, openCountActual=1, exprTrueCountActual=9, lastRowTimeNanosActual=181.0K, closeCountActual=1, exprEvalTimeNanosActual=3.1K, inputRowsActual=9, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.82, avgHasNextNanosActual=15.5K, avgNextNanosActual=74, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=152.4K, nextCallCountActual=9, nextTimeNanosActual=832, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, firstRowTimeNanosActual=38.0K, leftRowsWithMatchActual=9, openCountActual=1, lastRowTimeNanosActual=165.0K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18, rowsDroppedActual=9, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=15.2K, avgNextNanosActual=92, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Filter (resultSizeActual=9, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=123.2K, nextCallCountActual=9, nextTimeNanosActual=167, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=268.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=35.5K, exprEvalCountActual=9, openCountActual=1, exprTrueCountActual=9, lastRowTimeNanosActual=153.3K, closeCountActual=1, exprEvalTimeNanosActual=2.4K, inputRowsActual=9, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=12.3K, avgNextNanosActual=19, filterRejectRateActual=0) [left] + │ ║ ║ ├── Compare (!=) (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.00, resultSizeActual=9, joinRightIteratorsCreatedActual=25, joinRightBindingsConsumedActual=9, inputRowsActual=34, rowsDroppedActual=25, expansionFactorActual=0.26, sampleCountActual=2, varianceActual=63.7M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.00, resultSizeActual=25, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=25, inputRowsActual=30, rowsDroppedActual=5, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=4.00, stddevActual=2.00, confidenceScoreActual=0.40, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=25, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) [left] + │ ║ ║ ║ ├── Filter (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=34.4K, nextCallCountActual=5, nextTimeNanosActual=292, sourceRowsScannedActual=5, sourceRowsMatchedActual=5, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, plannedWorkRows=5.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.0K, exprEvalCountActual=5, openCountActual=1, exprTrueCountActual=5, lastRowTimeNanosActual=136.9K, closeCountActual=1, exprEvalTimeNanosActual=17.3K, inputRowsActual=5, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=5.7K, avgNextNanosActual=58, filterRejectRateActual=0) [left] + │ ║ ║ ║ │ ╠══ Not (exprEvalCountActual=5, exprTrueCountActual=5, exprEvalTimeNanosActual=15.1K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Exists (exprEvalCountActual=5, exprFalseCountActual=5, exprEvalTimeNanosActual=14.1K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=5, hasNextTimeNanosActual=3.1K, sourceRowsScannedActual=5, sourceRowsFilteredActual=5, plannedIndexName=spoc, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=583, closeCountActual=5, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0, avgHasNextNanosActual=633, indexHitRateActual=0) + │ ║ ║ ║ │ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ └── ExtensionElem (_anon_path_048e226babdcc344c88a5a61806b6a8e7f3) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=791, nextCallCountActual=5, nextTimeNanosActual=9.9K, firstRowTimeNanosActual=13.2K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=132.6K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=132, avgNextNanosActual=2.0K) + │ ║ ║ ║ └── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (resultSizeEstimate=5.00, resultSizeActual=25, hasNextCallCountActual=30, hasNextTrueCountActual=25, hasNextTimeNanosActual=6.5K, nextCallCountActual=25, nextTimeNanosActual=709, plannedWorkRows=5.00, plannedBoundVars=[u], firstRowTimeNanosActual=292, openCountActual=5, bindingsProvidedActual=25, lastRowTimeNanosActual=10.2K, closeCountActual=5, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=218, avgNextNanosActual=28) [right] + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=34, hasNextTrueCountActual=9, hasNextTimeNanosActual=11.6K, nextCallCountActual=9, nextTimeNanosActual=1.1K, sourceRowsScannedActual=34, sourceRowsMatchedActual=9, sourceRowsFilteredActual=25, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v], firstRowTimeNanosActual=667, indexLookupCountActual=25, openCountActual=25, lastRowTimeNanosActual=417, closeCountActual=25, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25, nextPerHasNextRatioActual=0.26, avgHasNextNanosActual=342, avgNextNanosActual=130, indexHitRateActual=0.26) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=9, hasNextCallCountActual=18, hasNextTrueCountActual=9, hasNextTimeNanosActual=5.7K, nextCallCountActual=9, nextTimeNanosActual=1.1K, sourceRowsScannedActual=18, sourceRowsMatchedActual=9, sourceRowsFilteredActual=9, plannedIndexName=spoc, firstRowTimeNanosActual=708, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.8K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=322, avgNextNanosActual=125, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2123,115 +2239,115 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="") -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=350, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] -│ ║ ║ │ ╠══ Compare (!=) -│ ║ ║ │ ║ Var (name=u) (bindingState=bound) -│ ║ ║ │ ║ Var (name=v) (bindingState=bound) -│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=70, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ ║ │ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=4, optimizer.score=206, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=Filter score=31.25 rawRows=5.0 effectiveRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v... right=SP(?u follows ?v) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?u follows ?v) score=25.735294117647058 rawRows=718740.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=Filter score=205.88235294117646 rawRows=350.0 effectiveRows=350.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen Filter, optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., Filter, SP(?u follows ?v)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v..., SP(?u follows ?v), Filter], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=350.0, effectiveRows=350.0, adjustedCost=205.88235294117646, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=1, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ │ s: Var (name=u) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ o: Var (name=v) (bindingState=bound) -│ ║ ║ └── Filter (costEstimate=5.00, resultSizeEstimate=5.00, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [right] -│ ║ ║ ╠══ Not -│ ║ ║ ║ Exists -│ ║ ║ ║ Extension -│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ ║ │ s: Var (name=u) (bindingState=bound) -│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) -│ ║ ║ ║ └── ExtensionElem (_anon_path_9783f2fe36952f541b08a42a7b8ce15e70d012345678) -│ ║ ║ ║ Var (name=u) (bindingState=bound) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=v) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=u) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=u) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=231.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Filter (plannedFilterEvidenceCount=268.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] + │ ║ ║ ├── Compare (!=) + │ ║ ║ │ Var (name=u) (bindingState=bound) + │ ║ ║ │ Var (name=v) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=8.00) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.00) [left] + │ ║ ║ ║ ├── Filter (resultSizeEstimate=5.00, plannedFilterPassRatio=1.00, plannedWorkRows=5.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=cardinality) [left] + │ ║ ║ ║ │ ╠══ Not + │ ║ ║ ║ │ ║ Exists + │ ║ ║ ║ │ ║ Extension + │ ║ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ │ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ ║ └── ExtensionElem (_anon_path_448e226babdcc344c88a5a61806b6a8e7f30123) + │ ║ ║ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ │ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) + │ ║ ║ ║ └── BindingSetAssignment ([[v=http://example.com/theme/social/user/7], [v=http://example.com/theme/social/user/8], [v=http://example.com/theme/social/user/9], [v=http://example.com/theme/social/user/10], [v=http://example.com/theme/social/user/11]]) (resultSizeEstimate=5.00, plannedWorkRows=5.00, plannedBoundVars=[u]) [right] + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) [right] + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { -VALUES ?v { } -?u ?v . -FILTER (?u != ?v) -VALUES ?u { } -FILTER NOT EXISTS { -?u ?u . -BIND(?u AS ?_anon_path_9783f2fe36952f541b08a42a7b8ce15e70d012345678) -} -OPTIONAL { -?v ?optName . -} -FILTER (?optName != "") + VALUES ?u { } + FILTER NOT EXISTS { + ?u ?u . + BIND(?u AS ?_anon_path_448e226babdcc344c88a5a61806b6a8e7f30123) + } + VALUES ?v { } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?v ?optName . + } + FILTER (?optName != "") } Theme: SOCIAL_MEDIA z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 1091 ms +Initial explain execution time: 1139 ms Warmup execution 1/1 -Fastest execution time: 769 ms +Fastest execution time: 823 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=1036.0M, openCountActual=1, lastRowTimeNanosActual=1036.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=1.9K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1100.0M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=1100.0M, openCountActual=1, lastRowTimeNanosActual=1100.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=550.0M, avgNextNanosActual=1.5K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=1036.0M, openCountActual=1, lastRowTimeNanosActual=1036.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1036.0M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=494, firstRowTimeNanosActual=1036.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1036.0M, maxGroupSizeActual=494, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=494, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=494, rowsDroppedActual=493, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=518.0M, avgNextNanosActual=625) -│ ╠══ Filter (resultSizeActual=494, hasNextCallCountActual=496, hasNextTrueCountActual=495, hasNextTimeNanosActual=1035.2M, nextCallCountActual=494, nextTimeNanosActual=10.9K, sourceRowsScannedActual=494, sourceRowsMatchedActual=494, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=231.2K, exprEvalCountActual=494, openCountActual=1, exprTrueCountActual=494, lastRowTimeNanosActual=1036.0M, closeCountActual=1, exprEvalTimeNanosActual=312.4K, inputRowsActual=494, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1M, avgNextNanosActual=22, filterRejectRateActual=0) -│ ║ ├── ListMemberOperator (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=242.5K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user7") (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=47.7K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user8") (exprEvalCountActual=415, exprTrueCountActual=415, exprEvalTimeNanosActual=30.8K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user9") (exprEvalCountActual=313, exprTrueCountActual=313, exprEvalTimeNanosActual=27.7K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user10") (exprEvalCountActual=216, exprTrueCountActual=216, exprEvalTimeNanosActual=18.1K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user11") (exprEvalCountActual=106, exprTrueCountActual=106, exprEvalTimeNanosActual=17.9K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=494, hasNextCallCountActual=495, hasNextTrueCountActual=494, hasNextTimeNanosActual=1034.7M, nextCallCountActual=494, nextTimeNanosActual=7.0K, joinRightIteratorsCreatedActual=494, joinLeftBindingsConsumedActual=494, joinRightBindingsConsumedActual=494, firstRowTimeNanosActual=226.7K, leftRowsWithMatchActual=494, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=988, rowsDroppedActual=494, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1M, avgNextNanosActual=14, leftRowsProbedActual=494, rightRowsScannedActual=494, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (HashJoinIteration) (resultSizeActual=494, joinLeftBindingsConsumedActual=499, inputRowsActual=1.4M, rowsDroppedActual=1.4M, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=499, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.99) [left] -│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.4K, nextCallCountActual=5, nextTimeNanosActual=834, firstRowTimeNanosActual=53.6K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=77.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=243, avgNextNanosActual=167) [left] -│ ║ ║ └── Union (new scope) (resultSizeActual=1.4M, hasNextFalseCountActual=0, leftRowsConsumedActual=192, rightRowsConsumedActual=1.4M, leftRowsOutputContributionActual=192, rightRowsOutputContributionActual=1.4M) [right] -│ ║ ║ ╠══ Extension (new scope) (resultSizeActual=192, hasNextCallCountActual=193, hasNextTrueCountActual=192, hasNextTimeNanosActual=152.8M, nextCallCountActual=192, nextTimeNanosActual=11.0K, firstRowTimeNanosActual=37.2K, openCountActual=1, lastRowTimeNanosActual=153.3M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=792.0K, avgNextNanosActual=57) -│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M, resultSizeActual=192, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=192, inputRowsActual=143.9K, rowsDroppedActual=143.7K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=139.8K, stddevActual=374, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=192, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) -│ ║ ║ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=13.3M, nextCallCountActual=143.7K, nextTimeNanosActual=6.2M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=25.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=153.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=44, indexHitRateActual=1.00) [left] -│ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=192, hasNextCallCountActual=143.9K, hasNextTrueCountActual=192, hasNextTimeNanosActual=67.6M, nextCallCountActual=192, nextTimeNanosActual=13.7K, sourceRowsScannedActual=143.9K, sourceRowsMatchedActual=192, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=417, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=470, avgNextNanosActual=72, indexHitRateActual=0.00) [right] -│ ║ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ Extension (new scope) (resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=149.6M, nextCallCountActual=1.4M, nextTimeNanosActual=107.8M, firstRowTimeNanosActual=153.3M, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=75) -│ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=1.4M, resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=119.9M, nextCallCountActual=1.4M, nextTimeNanosActual=52.0M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.4M, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=153.3M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1035.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=36, indexHitRateActual=1.00) -│ ║ ║ │ s: Var (name=post) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) -│ ║ ║ Var (name=post) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=494, hasNextCallCountActual=988, hasNextTrueCountActual=494, hasNextTimeNanosActual=301.8K, nextCallCountActual=494, nextTimeNanosActual=32.4K, sourceRowsScannedActual=988, sourceRowsMatchedActual=494, sourceRowsFilteredActual=494, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=494, openCountActual=494, lastRowTimeNanosActual=2.7K, closeCountActual=494, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=494, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=306, avgNextNanosActual=66, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=activity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=activity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1100.0M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=1100.0M, openCountActual=1, lastRowTimeNanosActual=1100.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=550.0M, avgNextNanosActual=833) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1100.0M, nextCallCountActual=1, nextTimeNanosActual=584, aggregateEvalCountActual=494, firstRowTimeNanosActual=1100.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1100.0M, maxGroupSizeActual=494, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=494, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=494, rowsDroppedActual=493, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=550.0M, avgNextNanosActual=584) + │ ╠══ Filter (resultSizeActual=494, hasNextCallCountActual=496, hasNextTrueCountActual=495, hasNextTimeNanosActual=1099.0M, nextCallCountActual=494, nextTimeNanosActual=15.5K, sourceRowsScannedActual=494, sourceRowsMatchedActual=494, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=8.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=286.7K, exprEvalCountActual=494, openCountActual=1, exprTrueCountActual=494, lastRowTimeNanosActual=1099.9M, closeCountActual=1, exprEvalTimeNanosActual=465.2K, inputRowsActual=494, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2M, avgNextNanosActual=32, filterRejectRateActual=0) + │ ║ ├── ListMemberOperator (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=358.2K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user7") (exprEvalCountActual=494, exprTrueCountActual=494, exprEvalTimeNanosActual=73.4K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user8") (exprEvalCountActual=415, exprTrueCountActual=415, exprEvalTimeNanosActual=32.3K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user9") (exprEvalCountActual=313, exprTrueCountActual=313, exprEvalTimeNanosActual=31.1K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user10") (exprEvalCountActual=216, exprTrueCountActual=216, exprEvalTimeNanosActual=27.2K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user11") (exprEvalCountActual=106, exprTrueCountActual=106, exprEvalTimeNanosActual=21.2K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=494, hasNextCallCountActual=495, hasNextTrueCountActual=494, hasNextTimeNanosActual=1098.4M, nextCallCountActual=494, nextTimeNanosActual=10.2K, joinRightIteratorsCreatedActual=494, joinLeftBindingsConsumedActual=494, joinRightBindingsConsumedActual=494, firstRowTimeNanosActual=280.7K, leftRowsWithMatchActual=494, openCountActual=1, lastRowTimeNanosActual=1099.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=988, rowsDroppedActual=494, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2M, avgNextNanosActual=21, leftRowsProbedActual=494, rightRowsScannedActual=494, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (HashJoinIteration) (resultSizeActual=494, joinLeftBindingsConsumedActual=499, inputRowsActual=1.4M, rowsDroppedActual=1.4M, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=499, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.99) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.0K, nextCallCountActual=5, nextTimeNanosActual=751, firstRowTimeNanosActual=47.4K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=76.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=181, avgNextNanosActual=150) [left] + │ ║ ║ └── Union (new scope) (resultSizeActual=1.4M, hasNextFalseCountActual=0, leftRowsConsumedActual=192, rightRowsConsumedActual=1.4M, leftRowsOutputContributionActual=192, rightRowsOutputContributionActual=1.4M) [right] + │ ║ ║ ╠══ Extension (new scope) (resultSizeActual=192, hasNextCallCountActual=193, hasNextTrueCountActual=192, hasNextTimeNanosActual=153.3M, nextCallCountActual=192, nextTimeNanosActual=18.5K, firstRowTimeNanosActual=32.3K, openCountActual=1, lastRowTimeNanosActual=153.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=794.4K, avgNextNanosActual=97) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M, resultSizeActual=192, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=192, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[u] originalOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] promotedPrefixes=[] plannedOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] plannedBoundVars=[u]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:SP(?u http://example.com/theme/social/follows ?v), 1:SP(?v http://example.com/theme/social/follows ?u)], inputRowsActual=143.9K, rowsDroppedActual=143.7K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=139.8K, stddevActual=374, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=192, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) + │ ║ ║ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=10.9M, nextCallCountActual=143.7K, nextTimeNanosActual=6.7M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=25.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=153.8M, closeCountActual=1, varsAddedActual=3, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[u] originalOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] promotedPrefixes=[] plannedOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] plannedBoundVars=[u]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:SP(?u http://example.com/theme/social/follows ?v), 1:SP(?v http://example.com/theme/social/follows ?u)], metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=76, avgNextNanosActual=47, indexHitRateActual=1.00) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=192, hasNextCallCountActual=143.9K, hasNextTrueCountActual=192, hasNextTimeNanosActual=71.2M, nextCallCountActual=192, nextTimeNanosActual=31.7K, sourceRowsScannedActual=143.9K, sourceRowsMatchedActual=192, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=417, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=495, avgNextNanosActual=166, indexHitRateActual=0.00) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ Extension (new scope) (resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=156.5M, nextCallCountActual=1.4M, nextTimeNanosActual=118.4M, firstRowTimeNanosActual=153.8M, openCountActual=1, lastRowTimeNanosActual=1099.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=82) + │ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=1.4M, resultSizeActual=1.4M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.4M, hasNextTimeNanosActual=124.1M, nextCallCountActual=1.4M, nextTimeNanosActual=56.4M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.4M, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=153.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1099.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=39, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── ExtensionElem (activity) (hasNextFalseCountActual=0) + │ ║ ║ Var (name=post) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=494, hasNextCallCountActual=988, hasNextTrueCountActual=494, hasNextTimeNanosActual=414.0K, nextCallCountActual=494, nextTimeNanosActual=109.2K, sourceRowsScannedActual=988, sourceRowsMatchedActual=494, sourceRowsFilteredActual=494, plannedIndexName=spoc, firstRowTimeNanosActual=666, indexLookupCountActual=494, openCountActual=494, lastRowTimeNanosActual=3.5K, closeCountActual=494, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=494, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=419, avgNextNanosActual=221, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=activity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=activity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2239,73 +2355,73 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="user7") -│ ║ │ ValueConstant (value="user8") -│ ║ │ ValueConstant (value="user9") -│ ║ │ ValueConstant (value="user10") -│ ║ │ ValueConstant (value="user11") -│ ║ └── LeftJoin -│ ║ ╠══ Join (HashJoinIteration) [left] -│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ ║ └── Union (new scope) [right] -│ ║ ║ ╠══ Extension (new scope) -│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) -│ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] -│ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) -│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) -│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) -│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) -│ ║ ║ ║ └── ExtensionElem (activity) -│ ║ ║ ║ Var (name=v) (bindingState=bound) -│ ║ ║ ╚══ Extension (new scope) -│ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) -│ ║ ║ │ s: Var (name=post) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) -│ ║ ║ │ o: Var (name=u) (bindingState=unbound) -│ ║ ║ └── ExtensionElem (activity) -│ ║ ║ Var (name=post) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=u) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=activity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=activity) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=9.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user7") + │ ║ │ ValueConstant (value="user8") + │ ║ │ ValueConstant (value="user9") + │ ║ │ ValueConstant (value="user10") + │ ║ │ ValueConstant (value="user11") + │ ║ └── LeftJoin + │ ║ ╠══ Join (HashJoinIteration) [left] + │ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union (new scope) [right] + │ ║ ║ ╠══ Extension (new scope) + │ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[u] originalOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] promotedPrefixes=[] plannedOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] plannedBoundVars=[u]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:SP(?u http://example.com/theme/social/follows ?v), 1:SP(?v http://example.com/theme/social/follows ?u)]) + │ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_MULTI_SHARED_VAR, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[u] originalOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] promotedPrefixes=[] plannedOrder=[SP(?u http://example.com/theme/social/follows ?v), SP(?v http://example.com/theme/social/follows ?u)] plannedBoundVars=[u]; rejected: path=UNSUPPORTED_MULTI_SHARED_VAR factors=[0:SP(?u http://example.com/theme/social/follows ?v), 1:SP(?v http://example.com/theme/social/follows ?u)]) [left] + │ ║ ║ ║ │ ║ s: Var (name=u) (bindingState=unbound) + │ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (activity) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ Extension (new scope) + │ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) + │ ║ ║ │ s: Var (name=post) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) + │ ║ ║ │ o: Var (name=u) (bindingState=unbound) + │ ║ ║ └── ExtensionElem (activity) + │ ║ ║ Var (name=post) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=activity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=activity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { -VALUES ?u { } -{ -?u ?v . -?v ?u . -BIND(?v AS ?activity) -} -UNION -{ -?post ?u . -BIND(?post AS ?activity) -} -OPTIONAL { -?u ?optName . -} -FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) + VALUES ?u { } + { + ?u ?v . + ?v ?u . + BIND(?v AS ?activity) + } + UNION + { + ?post ?u . + BIND(?post AS ?activity) + } + OPTIONAL { + ?u ?optName . + } + FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) } Theme: SOCIAL_MEDIA z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 5 ms +Initial explain execution time: 3 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -2316,55 +2432,52 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 3 ms +Fastest execution time: 1 ms -Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.5K, openCountActual=1, lastRowTimeNanosActual=274.7K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.5K) +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=247.0K, openCountActual=1, lastRowTimeNanosActual=263.0K, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=247.0K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "u" (hasNextFalseCountActual=0) ║ ProjectionElem "connections" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.3K, openCountActual=1, lastRowTimeNanosActual=278.9K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.4K) -├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=266.0K, openCountActual=1, lastRowTimeNanosActual=278.7K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=266.0K) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=260.2K, sourceRowsScannedActual=5, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=5, exprFalseCountActual=5, openCountActual=1, lastRowTimeNanosActual=273.5K, closeCountActual=1, exprEvalTimeNanosActual=1.3K, inputRowsActual=5, rowsDroppedActual=5, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=260.3K, filterRejectRateActual=1.00) -│ ║ ├── Compare (>=) (exprEvalCountActual=5, exprFalseCountActual=5, exprEvalTimeNanosActual=748, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) -│ ║ └── Group (u) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=255.9K, nextCallCountActual=5, nextTimeNanosActual=124, aggregateEvalCountActual=40, firstRowTimeNanosActual=268.9K, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=271.1K, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=4, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=15, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=42.7K, avgNextNanosActual=25) -│ ║ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=234.4K, nextCallCountActual=20, nextTimeNanosActual=334, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=20.7K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=244.1K, closeCountActual=1, exprEvalTimeNanosActual=3.7K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=10.7K, avgNextNanosActual=17, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=224.2K, nextCallCountActual=20, nextTimeNanosActual=249, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=17.5K, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=236.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=10.7K, avgNextNanosActual=12, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=193.5K, nextCallCountActual=20, nextTimeNanosActual=542, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=15.7K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=232.6K, closeCountActual=1, exprEvalTimeNanosActual=3.3K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=9.2K, avgNextNanosActual=27, filterRejectRateActual=0) [left] -│ ║ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=87, joinRightBindingsConsumedActual=20, inputRowsActual=107, rowsDroppedActual=87, expansionFactorActual=0.19, sampleCountActual=2, varianceActual=1.58, stddevActual=1.26, confidenceScoreActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=87, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=87, inputRowsActual=93, rowsDroppedActual=6, expansionFactorActual=0.94, sampleCountActual=2, varianceActual=681.7K, stddevActual=826, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=87, avgRightRowsPerLeftActual=15, joinOutputPerLeftActual=15) [left] -│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=834, nextCallCountActual=6, nextTimeNanosActual=374, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.7K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=227.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=119, avgNextNanosActual=62) [left] -│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=43.2K, nextCallCountActual=87, nextTimeNanosActual=7.3K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=87, sourceRowsFilteredActual=1.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ , firstRowTimeNanosActual=667, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=18.6K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=465, avgNextNanosActual=84, indexHitRateActual=0.07) -│ ║ ║ ║ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, resultSizeActual=20, hasNextCallCountActual=107, hasNextTrueCountActual=20, hasNextTimeNanosActual=57.1K, nextCallCountActual=20, nextTimeNanosActual=415, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=292, openCountActual=87, bindingsProvidedActual=20, lastRowTimeNanosActual=375, closeCountActual=87, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=87, nextPerHasNextRatioActual=0.19, avgHasNextNanosActual=534, avgNextNanosActual=21) [right] -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=10.6K, nextCallCountActual=20, nextTimeNanosActual=917, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1000, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=46, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (connections) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_2393f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (connections) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=246.7K, openCountActual=1, lastRowTimeNanosActual=261.2K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=246.8K) + ├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=245.8K, openCountActual=1, lastRowTimeNanosActual=260.5K, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=245.9K) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=240.0K, sourceRowsScannedActual=5, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=5, exprFalseCountActual=5, openCountActual=1, lastRowTimeNanosActual=255.2K, closeCountActual=1, exprEvalTimeNanosActual=1.1K, inputRowsActual=5, rowsDroppedActual=5, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=240.1K, filterRejectRateActual=1.00) + │ ║ ├── Compare (>=) (exprEvalCountActual=5, exprFalseCountActual=5, exprEvalTimeNanosActual=669, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_798e226babdcc344c88a5a61806b6a8e7f30123456, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=6.3K, hasNextFalseCountActual=0) + │ ║ └── Group (u) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=235.5K, nextCallCountActual=5, nextTimeNanosActual=126, aggregateEvalCountActual=40, firstRowTimeNanosActual=250.5K, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=252.5K, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=4, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=15, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=39.3K, avgNextNanosActual=25) + │ ║ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=212.3K, nextCallCountActual=20, nextTimeNanosActual=336, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=231.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.2K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=222.7K, closeCountActual=1, exprEvalTimeNanosActual=3.9K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=9.7K, avgNextNanosActual=17, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=200.1K, nextCallCountActual=20, nextTimeNanosActual=460, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=23.8K, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=212.9K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=157.6K, stddevActual=397, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=9.5K, avgNextNanosActual=23, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=36, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, inputRowsActual=56, rowsDroppedActual=36, expansionFactorActual=0.36, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=36, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=36, inputRowsActual=42, rowsDroppedActual=6, expansionFactorActual=0.86, sampleCountActual=2, varianceActual=6.25, stddevActual=2.50, confidenceScoreActual=0.36, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=36, avgRightRowsPerLeftActual=6.00, joinOutputPerLeftActual=6.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=582, nextCallCountActual=6, nextTimeNanosActual=375, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.8K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=211.3K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=83, avgNextNanosActual=63) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=36, hasNextCallCountActual=42, hasNextTrueCountActual=36, hasNextTimeNanosActual=5.8K, nextCallCountActual=36, nextTimeNanosActual=875, plannedWorkRows=6.00, plannedBoundVars=[u], firstRowTimeNanosActual=208, openCountActual=6, bindingsProvidedActual=36, lastRowTimeNanosActual=13.5K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=139, avgNextNanosActual=24) + │ ║ ║ └── Filter (resultSizeActual=20, hasNextCallCountActual=56, hasNextTrueCountActual=20, hasNextTimeNanosActual=64.7K, nextCallCountActual=20, nextTimeNanosActual=336, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=269.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=750, exprEvalCountActual=20, openCountActual=36, exprTrueCountActual=20, lastRowTimeNanosActual=583, closeCountActual=36, exprEvalTimeNanosActual=4.1K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=36, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=1.2K, avgNextNanosActual=17, filterRejectRateActual=0) [right] + │ ║ ║ ╠══ Compare (!=) (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=20, hasNextCallCountActual=56, hasNextTrueCountActual=20, hasNextTimeNanosActual=15.3K, nextCallCountActual=20, nextTimeNanosActual=1.5K, sourceRowsScannedActual=56, sourceRowsMatchedActual=20, sourceRowsFilteredActual=36, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v], firstRowTimeNanosActual=583, indexLookupCountActual=36, openCountActual=36, lastRowTimeNanosActual=375, closeCountActual=36, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=36, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=274, avgNextNanosActual=77, indexHitRateActual=0.36) + │ ║ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=9.2K, nextCallCountActual=20, nextTimeNanosActual=2.4K, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=916, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=232, avgNextNanosActual=121, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_798e226babdcc344c88a5a61806b6a8e7f30123456) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (connections) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_798e226babdcc344c88a5a61806b6a8e7f30123456) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (connections) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2373,60 +2486,93 @@ Projection ║ ProjectionElem "u" ║ ProjectionElem "connections" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>=) -│ ║ │ Var (name=_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="5"^^) -│ ║ └── Group (u) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="") -│ ║ └── LeftJoin -│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [left] -│ ║ ║ ├── Compare (!=) -│ ║ ║ │ Var (name=u) (bindingState=bound) -│ ║ ║ │ Var (name=v) (bindingState=bound) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=4.00) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=35) [left] -│ ║ ║ ║ ├── BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Compare (!=) [right] -│ ║ ║ ║ Var (name=u) -│ ║ ║ ║ Var (name=v) -│ ║ ║ ║ ) -│ ║ ║ ║ s: Var (name=u) (bindingState=unbound) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ o: Var (name=v) (bindingState=bound) -│ ║ ║ ╚══ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=u) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ║ GroupElem (_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234) -│ ║ Count (Distinct) -│ ║ Var (name=v) (bindingState=bound) -│ ║ GroupElem (connections) -│ ║ Count (Distinct) -│ ║ Var (name=v) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_5393f2fe36952f541b08a42a7b8ce15e70d01234) -│ Count (Distinct) -│ Var (name=v) (bindingState=unbound) -└── ExtensionElem (connections) -Count (Distinct) -Var (name=v) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_009e226babdcc344c88a5a61806b6a8e7f3, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="5"^^) + │ ║ └── Group (u) + │ ║ Filter (plannedFilterEvidenceCount=231.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) [left] + │ ║ ║ │ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannedBoundVars=[u]) + │ ║ ║ └── Filter (plannedFilterEvidenceCount=269.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ ║ ╠══ Compare (!=) + │ ║ ║ ║ Var (name=u) (bindingState=bound) + │ ║ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) + │ ║ ║ s: Var (name=u) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=u) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_009e226babdcc344c88a5a61806b6a8e7f3) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ║ GroupElem (connections) + │ ║ Count (Distinct) + │ ║ Var (name=v) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_009e226babdcc344c88a5a61806b6a8e7f3) + │ Count (Distinct) + │ Var (name=v) (bindingState=unbound) + └── ExtensionElem (connections) + Count (Distinct) + Var (name=v) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { -VALUES ?v { } -?u ?v . -VALUES ?u { } -FILTER (?u != ?v) -OPTIONAL { -?u ?optName . -} -FILTER (?optName != "") + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + ?u ?v . + FILTER (?u != ?v) + OPTIONAL { + ?u ?optName . + } + FILTER (?optName != "") } GROUP BY ?u HAVING (COUNT(DISTINCT ?v) >= 5) @@ -2445,67 +2591,59 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 11 ms +Fastest execution time: 10 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=1.7K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.0M, nextCallCountActual=1, nextTimeNanosActual=583, firstRowTimeNanosActual=8.0M, openCountActual=1, lastRowTimeNanosActual=8.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.0M, avgNextNanosActual=583) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=833) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.0M, nextCallCountActual=1, nextTimeNanosActual=459, aggregateEvalCountActual=20, firstRowTimeNanosActual=9.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.0M, maxGroupSizeActual=20, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=20, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=19, selectivityActual=0.05, expansionFactorActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.5M, avgNextNanosActual=459) -│ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=581, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=8.6M, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.9M, closeCountActual=1, exprEvalTimeNanosActual=14.3K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=408.0K, avgNextNanosActual=29, filterRejectRateActual=0) -│ ║ ├── ListMemberOperator (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=11.6K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user12") (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user13") (exprEvalCountActual=16, exprTrueCountActual=16, exprEvalTimeNanosActual=960, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user14") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=665, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user15") (exprEvalCountActual=8, exprTrueCountActual=8, exprEvalTimeNanosActual=627, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user16") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=374, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user17") (hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=666, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=8.5M, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=8.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=426.1K, avgNextNanosActual=33, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Difference (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.9M, nextCallCountActual=20, nextTimeNanosActual=583, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=424.3K, avgNextNanosActual=29, leftRowsConsumedActual=20, rightRowsConsumedActual=0, overlapRowsActual=0) [left] -│ ║ ║ ├── Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=339.4K, nextCallCountActual=20, nextTimeNanosActual=414, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root, firstRowTimeNanosActual=30.1K, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.9M, closeCountActual=1, exprEvalTimeNanosActual=45.4K, inputRowsActual=20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=16.2K, avgNextNanosActual=21, filterRejectRateActual=0) -│ ║ ║ │ ╠══ Exists (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=43.7K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=20, hasNextTrueCountActual=20, hasNextTimeNanosActual=11.7K, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, plannedIndexName=spoc, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=500, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=586, indexHitRateActual=1.00) -│ ║ ║ │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=87, joinRightBindingsConsumedActual=20, inputRowsActual=107, rowsDroppedActual=87, expansionFactorActual=0.19, sampleCountActual=2, varianceActual=1.58, stddevActual=1.26, confidenceScoreActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) -│ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35, resultSizeActual=87, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=87, inputRowsActual=93, rowsDroppedActual=6, expansionFactorActual=0.94, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=87, avgRightRowsPerLeftActual=15, joinOutputPerLeftActual=15) [left] -│ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=1.6K, nextCallCountActual=6, nextTimeNanosActual=460, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=4.0K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=8.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=238, avgNextNanosActual=77) [left] -│ ║ ║ │ │ ╚══ Filter (resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=143.7K, nextCallCountActual=87, nextTimeNanosActual=1.4K, sourceRowsScannedActual=87, sourceRowsMatchedActual=87, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=1.0K, exprEvalCountActual=87, openCountActual=6, exprTrueCountActual=87, lastRowTimeNanosActual=24.2K, closeCountActual=6, exprEvalTimeNanosActual=61.6K, inputRowsActual=87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=1.5K, avgNextNanosActual=17, filterRejectRateActual=0) [right] -│ ║ ║ │ │ ├── Compare (!=) (exprEvalCountActual=87, exprTrueCountActual=87, exprEvalTimeNanosActual=55.1K, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ └── StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=87, hasNextCallCountActual=93, hasNextTrueCountActual=87, hasNextTimeNanosActual=49.6K, nextCallCountActual=87, nextTimeNanosActual=8.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=87, sourceRowsFilteredActual=1.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists -│ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ │ │ Var (name=v) -│ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ │ Var (name=u) -│ ║ ║ │ │ , Compare (!=) -│ ║ ║ │ │ Var (name=u) -│ ║ ║ │ │ Var (name=v) -│ ║ ║ │ │ , firstRowTimeNanosActual=833, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=22.5K, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=534, avgNextNanosActual=99, indexHitRateActual=0.07) -│ ║ ║ │ │ s: Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, resultSizeActual=20, hasNextCallCountActual=107, hasNextTrueCountActual=20, hasNextTimeNanosActual=30.0K, nextCallCountActual=20, nextTimeNanosActual=541, plannedWorkRows=4.00, plannedBoundVars=[u, v], firstRowTimeNanosActual=250, openCountActual=87, bindingsProvidedActual=20, lastRowTimeNanosActual=375, closeCountActual=87, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=87, nextPerHasNextRatioActual=0.19, avgHasNextNanosActual=280, avgNextNanosActual=27) [right] -│ ║ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.5M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.5M, indexHitRateActual=0) -│ ║ ║ ║ s: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ ExtensionElem (_anon_path_4993f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=12.7K, nextCallCountActual=20, nextTimeNanosActual=2.1K, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1.5K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=318, avgNextNanosActual=108, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.0M, nextCallCountActual=1, nextTimeNanosActual=291, firstRowTimeNanosActual=8.0M, openCountActual=1, lastRowTimeNanosActual=8.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.0M, avgNextNanosActual=291) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.0M, nextCallCountActual=1, nextTimeNanosActual=166, aggregateEvalCountActual=20, firstRowTimeNanosActual=8.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.0M, maxGroupSizeActual=20, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=20, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=20, rowsDroppedActual=19, selectivityActual=0.05, expansionFactorActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.0M, avgNextNanosActual=166) + │ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=22, hasNextTrueCountActual=21, hasNextTimeNanosActual=8.0M, nextCallCountActual=20, nextTimeNanosActual=457, sourceRowsScannedActual=20, sourceRowsMatchedActual=20, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=22.5K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=7.8M, exprEvalCountActual=20, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=8.0M, closeCountActual=1, exprEvalTimeNanosActual=11.6K, inputRowsActual=20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=365.2K, avgNextNanosActual=23, filterRejectRateActual=0) + │ ║ ├── ListMemberOperator (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=9.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user12") (exprEvalCountActual=20, exprTrueCountActual=20, exprEvalTimeNanosActual=3.5K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user13") (exprEvalCountActual=16, exprTrueCountActual=16, exprEvalTimeNanosActual=915, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user14") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=754, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user15") (exprEvalCountActual=8, exprTrueCountActual=8, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user16") (exprEvalCountActual=4, exprTrueCountActual=4, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user17") (hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.0M, nextCallCountActual=20, nextTimeNanosActual=375, joinRightIteratorsCreatedActual=20, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=20, firstRowTimeNanosActual=7.8M, leftRowsWithMatchActual=20, openCountActual=1, lastRowTimeNanosActual=8.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=381.5K, avgNextNanosActual=19, leftRowsProbedActual=20, rightRowsScannedActual=20, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Difference (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=7.9M, nextCallCountActual=20, nextTimeNanosActual=334, firstRowTimeNanosActual=7.8M, openCountActual=1, lastRowTimeNanosActual=8.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=380.2K, avgNextNanosActual=17, leftRowsConsumedActual=20, rightRowsConsumedActual=0, overlapRowsActual=0) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=20, joinRightIteratorsCreatedActual=20, joinRightBindingsConsumedActual=20, inputRowsActual=40, rowsDroppedActual=20, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20) + │ ║ ║ │ ╠══ Filter (resultSizeActual=20, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=36, rowsDroppedActual=16, selectivityActual=0.56, expansionFactorActual=0.56, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] + │ ║ ║ │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=36, exprFalseCountActual=6, exprTrueCountActual=30, exprEvalTimeNanosActual=6.3K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ Exists (exprEvalCountActual=30, exprFalseCountActual=10, exprTrueCountActual=20, exprEvalTimeNanosActual=36.9K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=30, hasNextTrueCountActual=20, hasNextTimeNanosActual=11.7K, sourceRowsScannedActual=30, sourceRowsMatchedActual=20, sourceRowsFilteredActual=10, plannedIndexName=spoc, indexLookupCountActual=30, openCountActual=30, lastRowTimeNanosActual=333, closeCountActual=30, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0, avgHasNextNanosActual=393, indexHitRateActual=0.67) + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=36, joinRightIteratorsCreatedActual=6, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=36, inputRowsActual=42, rowsDroppedActual=6, expansionFactorActual=0.86, sampleCountActual=2, varianceActual=6.25, stddevActual=2.50, confidenceScoreActual=0.36, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=36, avgRightRowsPerLeftActual=6.00, joinOutputPerLeftActual=6.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=666, nextCallCountActual=6, nextTimeNanosActual=292, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=2.1K, openCountActual=1, bindingsProvidedActual=6, lastRowTimeNanosActual=8.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=95, avgNextNanosActual=49) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, resultSizeActual=36, hasNextCallCountActual=42, hasNextTrueCountActual=36, hasNextTimeNanosActual=6.1K, nextCallCountActual=36, nextTimeNanosActual=748, plannedWorkRows=6.00, plannedBoundVars=[u], firstRowTimeNanosActual=167, openCountActual=6, bindingsProvidedActual=36, lastRowTimeNanosActual=6.2K, closeCountActual=6, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=146, avgNextNanosActual=21) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=8.2K, nextCallCountActual=20, nextTimeNanosActual=1.7K, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v], firstRowTimeNanosActual=542, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=2.6K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=88, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=143.7K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=7.8M, sourceRowsScannedActual=143.7K, sourceRowsFilteredActual=143.7K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=7.9M, indexHitRateActual=0) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ ExtensionElem (_anon_path_959e226babdcc344c88a5a61806b6a8e7f3012345678) (hasNextFalseCountActual=0) + │ ║ ║ Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=20, hasNextCallCountActual=40, hasNextTrueCountActual=20, hasNextTimeNanosActual=9.0K, nextCallCountActual=20, nextTimeNanosActual=2.1K, sourceRowsScannedActual=40, sourceRowsMatchedActual=20, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=1.4K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=106, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=v) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=u) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=u) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2513,128 +2651,153 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="user12") -│ ║ │ ValueConstant (value="user13") -│ ║ │ ValueConstant (value="user14") -│ ║ │ ValueConstant (value="user15") -│ ║ │ ValueConstant (value="user16") -│ ║ │ ValueConstant (value="user17") -│ ║ └── LeftJoin -│ ║ ╠══ Difference [left] -│ ║ ║ ├── Filter (plannedFilterPassRatio=0.99, filterSelectivitySource=learned_pattern, deferredFilterScope=root) -│ ║ ║ │ ╠══ Exists -│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ │ ║ s: Var (name=v) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ ║ o: Var (name=u) (bindingState=bound) -│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.00) -│ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=35) [left] -│ ║ ║ │ │ ╠══ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ │ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) [right] -│ ║ ║ │ │ ├── Compare (!=) -│ ║ ║ │ │ │ Var (name=u) (bindingState=bound) -│ ║ ║ │ │ │ Var (name=v) (bindingState=bound) -│ ║ ║ │ │ └── StatementPattern (resultSizeEstimate=143.7K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[v], plannedLookupComponents=[O], unlockedFilters=Exists -│ ║ ║ │ │ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ │ │ Var (name=v) -│ ║ ║ │ │ Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ │ Var (name=u) -│ ║ ║ │ │ , Compare (!=) -│ ║ ║ │ │ Var (name=u) -│ ║ ║ │ │ Var (name=v) -│ ║ ║ │ │ ) -│ ║ ║ │ │ s: Var (name=u) (bindingState=unbound) -│ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ │ o: Var (name=v) (bindingState=bound) -│ ║ ║ │ └── BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=4.00, plannedWorkRows=4.00, plannedBoundVars=[u, v]) [right] -│ ║ ║ └── Extension -│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) -│ ║ ║ ║ s: Var (name=v) (bindingState=unbound) -│ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ ║ o: Var (name=v) (bindingState=unbound) -│ ║ ║ ╚══ ExtensionElem (_anon_path_9993f2fe36952f541b08a42a7b8ce15e70d012345678) -│ ║ ║ Var (name=v) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=v) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=u) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=u) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=22.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user12") + │ ║ │ ValueConstant (value="user13") + │ ║ │ ValueConstant (value="user14") + │ ║ │ ValueConstant (value="user15") + │ ║ │ ValueConstant (value="user16") + │ ║ │ ValueConstant (value="user17") + │ ║ └── LeftJoin + │ ║ ╠══ Difference [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ ║ │ ║ ├── And + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ Exists + │ ║ ║ │ ║ │ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=v) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=u) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ ║ │ ║ BindingSetAssignment ([[u=http://example.com/theme/social/user/12], [u=http://example.com/theme/social/user/13], [u=http://example.com/theme/social/user/14], [u=http://example.com/theme/social/user/15], [u=http://example.com/theme/social/user/16], [u=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ ║ BindingSetAssignment ([[v=http://example.com/theme/social/user/12], [v=http://example.com/theme/social/user/13], [v=http://example.com/theme/social/user/14], [v=http://example.com/theme/social/user/15], [v=http://example.com/theme/social/user/16], [v=http://example.com/theme/social/user/17]]) (resultSizeEstimate=6.00, plannedWorkRows=6.00, plannedBoundVars=[u]) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=143.7K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[u, v]) [right] + │ ║ ║ │ s: Var (name=u) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=v) (bindingState=bound) + │ ║ ║ └── Extension + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ ║ s: Var (name=v) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ ║ o: Var (name=v) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (_anon_path_469e226babdcc344c88a5a61806b6a8e7f30123) + │ ║ ║ Var (name=v) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=v) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=u) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=u) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?u) AS ?count) WHERE { -VALUES ?v { } -?u ?v . -FILTER (?u != ?v) -VALUES ?u { } -FILTER EXISTS { -?v ?u . -} -MINUS { -?v ?v . -BIND(?v AS ?_anon_path_9993f2fe36952f541b08a42a7b8ce15e70d012345678) -} -OPTIONAL { -?v ?optName . -} -FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) + VALUES (?u ?v) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER ((?u != ?v) && EXISTS { ?v ?u . }) + ?u ?v . + MINUS { + ?v ?v . + BIND(?v AS ?_anon_path_469e226babdcc344c88a5a61806b6a8e7f30123) + } + OPTIONAL { + ?v ?optName . + } + FILTER (?optName IN ("user12", "user13", "user14", "user15", "user16", "user17")) } Theme: SOCIAL_MEDIA z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 1523 ms +Initial explain execution time: 1585 ms Warmup execution 1/1 -Fastest execution time: 963 ms +Fastest execution time: 1005 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=1472.6M, openCountActual=1, lastRowTimeNanosActual=1472.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=1.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1535.8M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=1535.8M, openCountActual=1, lastRowTimeNanosActual=1535.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=767.9M, avgNextNanosActual=1.9K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=750, firstRowTimeNanosActual=1472.6M, openCountActual=1, lastRowTimeNanosActual=1472.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=750) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1472.6M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=18, firstRowTimeNanosActual=1472.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1472.6M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=736.3M, avgNextNanosActual=541) -│ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=1472.5M, nextCallCountActual=18, nextTimeNanosActual=542, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=18, sourceRowsFilteredActual=1.1K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=37.7K, exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=1472.5M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=1.1K, rowsDroppedActual=1.1K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=73.6M, avgNextNanosActual=30, filterRejectRateActual=0.98) -│ ║ ├── ListMemberOperator (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=18, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user0") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=75.0K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user1") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=50.3K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="user2") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=56.1K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1470.8M, nextCallCountActual=1.1K, nextTimeNanosActual=20.9K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=1.1K, firstRowTimeNanosActual=26.4K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=1472.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=2.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2M, avgNextNanosActual=18, leftRowsProbedActual=1.1K, rightRowsScannedActual=1.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1469.3M, nextCallCountActual=1.1K, nextTimeNanosActual=81.8K, firstRowTimeNanosActual=25.7K, openCountActual=1, lastRowTimeNanosActual=1472.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2M, avgNextNanosActual=70) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=1.2M, joinRightBindingsConsumedActual=1.1K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.2M, rowsDroppedActual=1.2M, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=3.7K, stddevActual=61, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=1.2M, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=1.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4M, rowsDroppedActual=143.7K, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=16, stddevActual=4.01, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=1.2M, avgRightRowsPerLeftActual=9.02, joinOutputPerLeftActual=9.02) [left] -│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=47.9K, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=14.7M, nextCallCountActual=143.7K, nextTimeNanosActual=7.2M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1472.5M, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=3, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=50, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=1.2M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.2M, hasNextTimeNanosActual=160.9M, nextCallCountActual=1.2M, nextTimeNanosActual=57.6M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.2M, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=7.4K, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=112, avgNextNanosActual=44, indexHitRateActual=0.90) [right] -│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=1.1K, hasNextCallCountActual=1.2M, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=548.3M, nextCallCountActual=1.1K, nextTimeNanosActual=51.2K, sourceRowsScannedActual=1.2M, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.2M, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=1.2M, openCountActual=1.2M, lastRowTimeNanosActual=500, closeCountActual=1.2M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2M, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=423, avgNextNanosActual=44, indexHitRateActual=0.00) [right] -│ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ExtensionElem (cycleStart) (hasNextFalseCountActual=0) -│ ║ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=1.1K, hasNextCallCountActual=2.3K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=602.1K, nextCallCountActual=1.1K, nextTimeNanosActual=65.7K, sourceRowsScannedActual=2.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1.7K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=56, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1535.8M, nextCallCountActual=1, nextTimeNanosActual=959, firstRowTimeNanosActual=1535.8M, openCountActual=1, lastRowTimeNanosActual=1535.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=767.9M, avgNextNanosActual=959) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1535.8M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=18, firstRowTimeNanosActual=1535.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1535.8M, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=767.9M, avgNextNanosActual=542) + │ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=1535.7M, nextCallCountActual=18, nextTimeNanosActual=792, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=18, sourceRowsFilteredActual=1.1K, plannedFilterEvidenceCount=90.2K, plannedFilterPassRatio=0.79, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=58.0K, exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=1535.7M, closeCountActual=1, exprEvalTimeNanosActual=1.9M, inputRowsActual=1.1K, rowsDroppedActual=1.1K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=76.8M, avgNextNanosActual=44, filterRejectRateActual=0.98) + │ ║ ├── ListMemberOperator (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=18, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user0") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=96.9K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user1") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=65.5K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="user2") (exprEvalCountActual=1.1K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=53.8K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1533.6M, nextCallCountActual=1.1K, nextTimeNanosActual=19.3K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=1.1K, firstRowTimeNanosActual=37.3K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=1535.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=2.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3M, avgNextNanosActual=16, leftRowsProbedActual=1.1K, rightRowsScannedActual=1.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=1532.0M, nextCallCountActual=1.1K, nextTimeNanosActual=109.2K, firstRowTimeNanosActual=36.3K, openCountActual=1, lastRowTimeNanosActual=1535.7M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3M, avgNextNanosActual=93) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=183125.0M, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=1.2M, joinRightBindingsConsumedActual=1.1K, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.2M, rowsDroppedActual=1.2M, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=3.7K, stddevActual=61, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=1.2M, joinRightIteratorsCreatedActual=143.7K, joinLeftBindingsConsumedActual=143.7K, joinRightBindingsConsumedActual=1.2M, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4M, rowsDroppedActual=143.7K, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=16, stddevActual=4.01, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=143.7K, rightRowsScannedActual=1.2M, avgRightRowsPerLeftActual=9.02, joinOutputPerLeftActual=9.02) [left] + │ ║ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=47.9K, resultSizeEstimate=143.7K, resultSizeActual=143.7K, hasNextCallCountActual=143.7K, hasNextTrueCountActual=143.7K, hasNextTimeNanosActual=13.4M, nextCallCountActual=143.7K, nextTimeNanosActual=6.9M, sourceRowsScannedActual=143.7K, sourceRowsMatchedActual=143.7K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=17.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1535.7M, optimizer.candidateCount=4, closeCountActual=1, varsAddedActual=3, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=48, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=1.2M, hasNextCallCountActual=1.4M, hasNextTrueCountActual=1.2M, hasNextTimeNanosActual=171.5M, nextCallCountActual=1.2M, nextTimeNanosActual=57.5M, sourceRowsScannedActual=1.4M, sourceRowsMatchedActual=1.2M, sourceRowsFilteredActual=143.7K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=143.7K, openCountActual=143.7K, lastRowTimeNanosActual=8.2K, closeCountActual=143.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=143.7K, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=119, avgNextNanosActual=44, indexHitRateActual=0.90) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=1.1K, hasNextCallCountActual=1.2M, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=595.1M, nextCallCountActual=1.1K, nextTimeNanosActual=56.3K, sourceRowsScannedActual=1.2M, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.2M, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=1.2M, openCountActual=1.2M, lastRowTimeNanosActual=417, closeCountActual=1.2M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2M, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=459, avgNextNanosActual=48, indexHitRateActual=0.00) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ExtensionElem (cycleStart) (hasNextFalseCountActual=0) + │ ║ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=1.1K, hasNextCallCountActual=2.3K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=641.0K, nextCallCountActual=1.1K, nextTimeNanosActual=70.0K, sourceRowsScannedActual=2.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=2.0K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=273, avgNextNanosActual=60, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2642,59 +2805,59 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="user0") -│ ║ │ ValueConstant (value="user1") -│ ║ │ ValueConstant (value="user2") -│ ║ └── LeftJoin -│ ║ ╠══ Extension [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=185224.2M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=77176.7M, optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=757961.1764705883 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.717674393E10 rawRows=1.85224185432E11 effectiveRows=1.85224185432E11 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.85224185432E11, effectiveRows=1.85224185432E11, adjustedCost=7.717674393E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) -│ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] -│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ │ s: Var (name=c) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ o: Var (name=a) (bindingState=bound) -│ ║ ║ └── ExtensionElem (cycleStart) -│ ║ ║ Var (name=a) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=a) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=a) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=a) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=91.4K, plannedFilterPassRatio=0.78, filterSelectivitySource=learned_filter) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=183125.0M, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K, optimizer.candidateCount=4, optimizer.score=76302.1M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?a http://example.com/theme/social/follows ?b), 1:SP(?b http://example.com/theme/social/follows ?c), 2:SP(?c http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?c follows ?a) score=7.6302097245E10 rawRows=1.83125033388E11 effectiveRows=1.83125033388E11 baseCostRows=1.83125033388E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?c follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.chosenOrder=[SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?a)], optimizer.scoreComponents=rawRows=1.83125033388E11, effectiveRows=1.83125033388E11, baseCostRows=1.83125033388E11, factorWorkRows=0.0, adjustedCost=7.6302097245E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=2, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) (bindingState=bound) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { -?a ?b . -?b ?c . -?c ?a . -BIND(?a AS ?cycleStart) -OPTIONAL { -?a ?optName . -} -FILTER (?optName IN ("user0", "user1", "user2")) + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) } Theme: SOCIAL_MEDIA z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 52 ms +Initial explain execution time: 54 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -2705,68 +2868,149 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 46 ms +Fastest execution time: 34 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=14.9M, openCountActual=1, lastRowTimeNanosActual=14.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=1.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=16.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=16.5M, openCountActual=1, lastRowTimeNanosActual=16.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.2M, avgNextNanosActual=1.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=14.9M, openCountActual=1, lastRowTimeNanosActual=14.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=542) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=14.9M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=343, firstRowTimeNanosActual=14.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=14.9M, maxGroupSizeActual=343, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=343, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=343, rowsDroppedActual=342, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=7.5M, avgNextNanosActual=375) -│ ╠══ Filter (resultSizeActual=343, hasNextCallCountActual=345, hasNextTrueCountActual=344, hasNextTimeNanosActual=14.8M, nextCallCountActual=343, nextTimeNanosActual=4.4K, sourceRowsScannedActual=343, sourceRowsMatchedActual=343, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=35.6K, exprEvalCountActual=343, openCountActual=1, exprTrueCountActual=343, lastRowTimeNanosActual=14.9M, closeCountActual=1, exprEvalTimeNanosActual=55.8K, inputRowsActual=343, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=43.1K, avgNextNanosActual=13, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=343, exprTrueCountActual=343, exprEvalTimeNanosActual=23.8K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=834, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=343, hasNextCallCountActual=344, hasNextTrueCountActual=343, hasNextTimeNanosActual=14.7M, nextCallCountActual=343, nextTimeNanosActual=5.7K, joinRightIteratorsCreatedActual=343, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, firstRowTimeNanosActual=32.9K, leftRowsWithMatchActual=343, openCountActual=1, lastRowTimeNanosActual=14.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=686, rowsDroppedActual=343, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=43.0K, avgNextNanosActual=17, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, resultSizeActual=343, joinRightIteratorsCreatedActual=8.9K, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=9.2K, rowsDroppedActual=8.9K, expansionFactorActual=0.04, sampleCountActual=2, varianceActual=191.5K, stddevActual=438, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, resultSizeActual=8.9K, joinLeftBindingsConsumedActual=4, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=8.9K, rowsDroppedActual=4, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.2K) [left] -│ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.7K, nextCallCountActual=4, nextTimeNanosActual=625, firstRowTimeNanosActual=3.9K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=14.8M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=1, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02600384375E10 rawRows=2.0663487504E10 effectiveRows=2.054656984E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.00740961328125E10 rawRows=2.0663487504E10 effectiveRows=2.049896861E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.8776828125E7 rawRows=1.509354E7 effectiveRows=1.5046868E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=358, avgNextNanosActual=156) [left] -│ ║ ║ │ ╚══ Filter (resultSizeActual=8.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, rowsDroppedActual=67, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] -│ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprFalseCountActual=67, exprTrueCountActual=8.9K, exprEvalTimeNanosActual=333.9K, hasNextFalseCountActual=0) -│ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M, resultSizeActual=9.0K, inputRowsActual=9.8K, rowsDroppedActual=850, expansionFactorActual=0.91, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=850, joinLeftBindingsConsumedActual=57, inputRowsActual=907, rowsDroppedActual=57, expansionFactorActual=0.94, hasNextFalseCountActual=0, leftRowsProbedActual=57, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=15) [left] -│ ║ ║ │ ║ ├── Filter (resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=98.8K, nextCallCountActual=57, nextTimeNanosActual=1.1K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.4K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=4.6M, closeCountActual=4, exprEvalTimeNanosActual=41.2K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.6K, avgNextNanosActual=20, filterRejectRateActual=0) [left] -│ ║ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=37.0K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (costEstimate=189, resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=34.5K, nextCallCountActual=57, nextTimeNanosActual=8.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexName=ospc, firstRowTimeNanosActual=1.1K, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=4.6M, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=566, avgNextNanosActual=151, indexHitRateActual=0.08) -│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── Filter (resultSizeActual=850, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=850, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] -│ ║ ║ │ ║ ╠══ Compare (!=) (exprEvalCountActual=850, exprTrueCountActual=850, exprEvalTimeNanosActual=202.4K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=850, hasNextCallCountActual=907, hasNextTrueCountActual=850, hasNextTimeNanosActual=104.5K, nextCallCountActual=850, nextTimeNanosActual=32.7K, sourceRowsScannedActual=907, sourceRowsMatchedActual=850, sourceRowsFilteredActual=57, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=57, openCountActual=57, lastRowTimeNanosActual=260.1K, closeCountActual=57, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=115, avgNextNanosActual=39, indexHitRateActual=0.94) -│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ Filter (resultSizeActual=9.0K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] -│ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprTrueCountActual=9.0K, exprEvalTimeNanosActual=445.4K, hasNextFalseCountActual=0) -│ ║ ║ │ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ └── StatementPattern [index: spoc] (costEstimate=190, resultSizeEstimate=143.7K, resultSizeActual=9.0K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.0K, hasNextTimeNanosActual=1.0M, nextCallCountActual=9.0K, nextTimeNanosActual=452.1K, sourceRowsScannedActual=9.8K, sourceRowsMatchedActual=9.0K, sourceRowsFilteredActual=850, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=850, openCountActual=850, lastRowTimeNanosActual=7.5K, closeCountActual=850, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=850, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=102, avgNextNanosActual=50, indexHitRateActual=0.91) -│ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=d) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=343, hasNextCallCountActual=9.2K, hasNextTrueCountActual=343, hasNextTimeNanosActual=3.5M, nextCallCountActual=343, nextTimeNanosActual=19.7K, sourceRowsScannedActual=9.2K, sourceRowsMatchedActual=343, sourceRowsFilteredActual=8.9K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=8.9K, openCountActual=8.9K, lastRowTimeNanosActual=459, closeCountActual=8.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.9K, nextPerHasNextRatioActual=0.04, avgHasNextNanosActual=386, avgNextNanosActual=58, indexHitRateActual=0.04) [right] -│ ║ ║ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=239.4K, nextCallCountActual=343, nextTimeNanosActual=51.3K, firstRowTimeNanosActual=916, openCountActual=343, lastRowTimeNanosActual=3.2K, closeCountActual=343, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=349, avgNextNanosActual=150) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=143.4K, nextCallCountActual=343, nextTimeNanosActual=25.1K, sourceRowsScannedActual=686, sourceRowsMatchedActual=343, sourceRowsFilteredActual=343, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=343, openCountActual=343, lastRowTimeNanosActual=2.8K, closeCountActual=343, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=73, indexHitRateActual=0.50) -│ ║ │ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) -│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=16.4M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=16.5M, openCountActual=1, lastRowTimeNanosActual=16.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.2M, avgNextNanosActual=667) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=16.4M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=343, firstRowTimeNanosActual=16.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=16.5M, maxGroupSizeActual=343, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=343, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=343, rowsDroppedActual=342, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.2M, avgNextNanosActual=541) + │ ╠══ Filter (resultSizeActual=343, hasNextCallCountActual=345, hasNextTrueCountActual=344, hasNextTimeNanosActual=16.4M, nextCallCountActual=343, nextTimeNanosActual=4.8K, sourceRowsScannedActual=343, sourceRowsMatchedActual=343, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=38.4K, exprEvalCountActual=343, openCountActual=1, exprTrueCountActual=343, lastRowTimeNanosActual=16.4M, closeCountActual=1, exprEvalTimeNanosActual=66.6K, inputRowsActual=343, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=47.6K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=343, exprTrueCountActual=343, exprEvalTimeNanosActual=24.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optAlias) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=343, hasNextCallCountActual=344, hasNextTrueCountActual=343, hasNextTimeNanosActual=16.3M, nextCallCountActual=343, nextTimeNanosActual=4.7K, joinRightIteratorsCreatedActual=343, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, firstRowTimeNanosActual=36.0K, leftRowsWithMatchActual=343, openCountActual=1, lastRowTimeNanosActual=16.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=686, rowsDroppedActual=343, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=47.4K, avgNextNanosActual=14, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1627088.6M, resultSizeActual=343, joinRightIteratorsCreatedActual=8.9K, joinLeftBindingsConsumedActual=343, joinRightBindingsConsumedActual=343, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553364025E11 rawRows=2.0610300744E10 effectiveRows=2.0553364025E10 baseCostRows=2.0553364025E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=9.2K, rowsDroppedActual=8.9K, expansionFactorActual=0.04, sampleCountActual=2, varianceActual=178.9K, stddevActual=423, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=343, rightRowsScannedActual=343, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.3M, resultSizeActual=8.9K, joinLeftBindingsConsumedActual=4, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553364025E11 rawRows=2.0610300744E10 effectiveRows=2.0553364025E10 baseCostRows=2.0553364025E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=8.9K, rowsDroppedActual=4, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=2.2K) + │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=2.5K, nextCallCountActual=4, nextTimeNanosActual=625, firstRowTimeNanosActual=5.7K, openCountActual=1, bindingsProvidedActual=4, lastRowTimeNanosActual=16.4M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=1, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553364025E11 rawRows=2.0610300744E10 effectiveRows=2.0553364025E10 baseCostRows=2.0553364025E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=516, avgNextNanosActual=156) + │ ║ ║ │ ╚══ Filter (resultSizeActual=8.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, inputRowsActual=9.0K, rowsDroppedActual=67, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] + │ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprFalseCountActual=67, exprTrueCountActual=8.9K, exprEvalTimeNanosActual=304.9K, hasNextFalseCountActual=0) + │ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=11.3M, resultSizeActual=9.0K, inputRowsActual=9.8K, rowsDroppedActual=850, expansionFactorActual=0.91, sampleCountActual=2, varianceActual=549.7K, stddevActual=741, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M, resultSizeActual=850, joinLeftBindingsConsumedActual=57, inputRowsActual=907, rowsDroppedActual=57, expansionFactorActual=0.94, sampleCountActual=2, varianceActual=1.4M, stddevActual=1.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=57, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=15) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=189, resultSizeEstimate=143.4K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=117.7K, nextCallCountActual=57, nextTimeNanosActual=1.4K, sourceRowsScannedActual=57, sourceRowsMatchedActual=57, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=18.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=3.5K, exprEvalCountActual=57, openCountActual=4, exprTrueCountActual=57, lastRowTimeNanosActual=5.2M, closeCountActual=4, exprEvalTimeNanosActual=48.7K, inputRowsActual=57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.9K, avgNextNanosActual=25, filterRejectRateActual=0) [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=57, exprTrueCountActual=57, exprEvalTimeNanosActual=43.6K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=143.7K, resultSizeActual=57, hasNextCallCountActual=61, hasNextTrueCountActual=57, hasNextTimeNanosActual=39.3K, nextCallCountActual=57, nextTimeNanosActual=10.5K, sourceRowsScannedActual=751, sourceRowsMatchedActual=57, sourceRowsFilteredActual=694, plannedIndexName=ospc, firstRowTimeNanosActual=2.9K, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=5.2M, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=645, avgNextNanosActual=186, indexHitRateActual=0.08) + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── Filter (costEstimate=189, resultSizeEstimate=143.4K, resultSizeActual=850, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=281.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=850, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] + │ ║ ║ │ ║ ╠══ Compare (!=) (exprEvalCountActual=850, exprTrueCountActual=850, exprEvalTimeNanosActual=182.2K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=850, hasNextCallCountActual=907, hasNextTrueCountActual=850, hasNextTimeNanosActual=109.7K, nextCallCountActual=850, nextTimeNanosActual=35.3K, sourceRowsScannedActual=907, sourceRowsMatchedActual=850, sourceRowsFilteredActual=57, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=57, openCountActual=57, lastRowTimeNanosActual=269.9K, closeCountActual=57, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=57, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=121, avgNextNanosActual=42, indexHitRateActual=0.94) + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ Filter (costEstimate=189, resultSizeEstimate=143.4K, resultSizeActual=9.0K, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=2.9M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=9.0K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] + │ ║ ║ │ ├── Compare (!=) (exprEvalCountActual=9.0K, exprTrueCountActual=9.0K, exprEvalTimeNanosActual=397.2K, hasNextFalseCountActual=0) + │ ║ ║ │ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=143.7K, resultSizeActual=9.0K, hasNextCallCountActual=9.8K, hasNextTrueCountActual=9.0K, hasNextTimeNanosActual=1.1M, nextCallCountActual=9.0K, nextTimeNanosActual=512.3K, sourceRowsScannedActual=9.8K, sourceRowsMatchedActual=9.0K, sourceRowsFilteredActual=850, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=850, openCountActual=850, lastRowTimeNanosActual=8.5K, closeCountActual=850, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=850, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=112, avgNextNanosActual=57, indexHitRateActual=0.91) + │ ║ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=343, hasNextCallCountActual=9.2K, hasNextTrueCountActual=343, hasNextTimeNanosActual=3.9M, nextCallCountActual=343, nextTimeNanosActual=21.9K, sourceRowsScannedActual=9.2K, sourceRowsMatchedActual=343, sourceRowsFilteredActual=8.9K, plannedIndexName=spoc, firstRowTimeNanosActual=4.7K, indexLookupCountActual=8.9K, openCountActual=8.9K, lastRowTimeNanosActual=417, closeCountActual=8.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.9K, nextPerHasNextRatioActual=0.04, avgHasNextNanosActual=428, avgNextNanosActual=64, indexHitRateActual=0.04) [right] + │ ║ ║ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=261.8K, nextCallCountActual=343, nextTimeNanosActual=55.7K, firstRowTimeNanosActual=1.7K, openCountActual=343, lastRowTimeNanosActual=6.0K, closeCountActual=343, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=382, avgNextNanosActual=162) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=343, hasNextCallCountActual=686, hasNextTrueCountActual=343, hasNextTimeNanosActual=146.5K, nextCallCountActual=343, nextTimeNanosActual=23.8K, sourceRowsScannedActual=686, sourceRowsMatchedActual=343, sourceRowsFilteredActual=343, plannedIndexName=spoc, firstRowTimeNanosActual=1.8K, indexLookupCountActual=343, openCountActual=343, lastRowTimeNanosActual=5.7K, closeCountActual=343, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=343, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=69, indexHitRateActual=0.50) + │ ║ │ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optAlias) (hasNextFalseCountActual=0) + │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2774,190 +3018,270 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optAlias) (bindingState=bound) -│ ║ │ ValueConstant (value="") -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1664604.1M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.6M, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=8579.2M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?a follows ?b) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?b follows ?c) score=38.60294117647059 rawRows=105.0 effectiveRows=105.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02617725625E10 rawRows=2.0663487504E10 effectiveRows=2.0547013776E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?a) score=8.0083242453125E10 rawRows=2.0663487504E10 effectiveRows=2.0501310068E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?a) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=347.42647058823525 rawRows=945.0 effectiveRows=945.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=5.877809765625E7 rawRows=1.509354E7 effectiveRows=1.5047193E7 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=53386.029411764706 rawRows=145210.0 effectiveRows=145210.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=38298.93048128342 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=349434.7593582887 rawRows=1306886.0 effectiveRows=1306886.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=8.57924001E9 rawRows=2.0590176024E10 effectiveRows=2.0590176024E10 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=2.0590176024E10, effectiveRows=2.0590176024E10, adjustedCost=8.57924001E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] -│ ║ ║ │ ├── Compare (!=) -│ ║ ║ │ │ Var (name=d) (bindingState=bound) -│ ║ ║ │ │ Var (name=a) (bindingState=bound) -│ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=185224.2M) -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] -│ ║ ║ │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] -│ ║ ║ │ ║ │ ╠══ Compare (!=) -│ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) -│ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=189, resultSizeEstimate=143.7K) -│ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) -│ ║ ║ │ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [right] -│ ║ ║ │ ║ ╠══ Compare (!=) -│ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) -│ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) -│ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) -│ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) -│ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [right] -│ ║ ║ │ ├── Compare (!=) -│ ║ ║ │ │ Var (name=c) (bindingState=bound) -│ ║ ║ │ │ Var (name=d) (bindingState=bound) -│ ║ ║ │ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) -│ ║ ║ │ s: Var (name=c) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ o: Var (name=d) (bindingState=unbound) -│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ s: Var (name=d) (bindingState=bound) -│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ o: Var (name=a) (bindingState=bound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=16.0K) -│ ║ │ s: Var (name=b) (bindingState=bound) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ │ o: Var (name=optName) (bindingState=unbound) -│ ║ └── ExtensionElem (optAlias) -│ ║ Var (name=optName) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=a) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=a) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optAlias) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1627088.6M, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ Var (name=a) + │ ║ ║ Var (name=b) + │ ║ ║ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ Var (name=b) + │ ║ ║ Var (name=c) + │ ║ ║ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ Var (name=c) + │ ║ ║ Var (name=d) + │ ║ ║ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553374655E11 rawRows=2.0610300744E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=11.3M, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ Var (name=a) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ Var (name=b) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ Var (name=c) + │ ║ ║ │ Var (name=d) + │ ║ ║ │ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553374655E11 rawRows=2.0610300744E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b=http://example.com/theme/social/user/6]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=16, optimizer.score=76307.2M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) [left] + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), SP(?d http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[b], rows=4), Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), SP(?d http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[b], rows=4), 1:Filter(SP(?a http://example.com/theme/social/follows ?b); Compare (!=) + │ ║ ║ │ ║ Var (name=a) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ ), 2:Filter(SP(?b http://example.com/theme/social/follows ?c); Compare (!=) + │ ║ ║ │ ║ Var (name=b) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ ), 3:Filter(SP(?c http://example.com/theme/social/follows ?d); Compare (!=) + │ ║ ║ │ ║ Var (name=c) + │ ║ ║ │ ║ Var (name=d) + │ ║ ║ │ ║ ), 4:SP(?d http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=104.0 effectiveRows=104.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=84342.35294117648 rawRows=105.0 effectiveRows=105.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher raw rows; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=Filter score=1433820.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143382.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b... right=SP(?d follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143382.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=2.0557250884E11 rawRows=2.0557250884E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=Filter score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=2.0553374655E11 rawRows=2.0610300744E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?d follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=548.8235294117648 rawRows=933.0 effectiveRows=933.0 baseCostRows=933.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=Filter score=1.4911312E8 rawRows=1.4911312E7 effectiveRows=1.4911312E7 baseCostRows=1.4911312E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=Filter score=84340.0 rawRows=1274016.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?a) score=84557.64705882354 rawRows=143424.0 effectiveRows=143424.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?a) score=7.630718832E10 rawRows=1.83137251968E11 effectiveRows=1.83137251968E11 baseCostRows=1.83137251968E11 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?d follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher raw rows, optimizer.originalOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[b=http://example.com/theme/social/user/3], [b=http://example.com/theme/social/user/4], [b=http://example.com/theme/social/user/5], [b..., Filter, Filter, Filter, SP(?d follows ?a)], optimizer.scoreComponents=rawRows=1.83137251968E11, effectiveRows=1.83137251968E11, baseCostRows=1.83137251968E11, factorWorkRows=0.0, adjustedCost=7.630718832E10, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ │ Var (name=a) (bindingState=bound) + │ ║ ║ │ └── Join (JoinIterator) (resultSizeEstimate=11.3M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── Filter (costEstimate=189, resultSizeEstimate=143.4K, plannedFilterEvidenceCount=18.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ │ s: Var (name=a) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ └── Filter (costEstimate=189, resultSizeEstimate=143.4K, plannedFilterEvidenceCount=282.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) [right] + │ ║ ║ │ ║ ╠══ Compare (!=) + │ ║ ║ │ ║ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ ║ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) (bindingState=unbound) + │ ║ ║ │ ╚══ Filter (costEstimate=189, resultSizeEstimate=143.4K, plannedFilterEvidenceCount=2.9M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) [right] + │ ║ ║ │ ├── Compare (!=) + │ ║ ║ │ │ Var (name=c) (bindingState=bound) + │ ║ ║ │ │ Var (name=d) (bindingState=bound) + │ ║ ║ │ └── StatementPattern (resultSizeEstimate=143.7K) + │ ║ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=d) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=d) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optAlias) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { -VALUES ?b { } -?a ?b . -FILTER (?a != ?b) -?b ?c . -FILTER (?b != ?c) -?c ?d . -FILTER (?c != ?d) -FILTER (?d != ?a) -?d ?a . -OPTIONAL { -?b ?optName . -BIND(?optName AS ?optAlias) -} -FILTER (?optAlias != "") + VALUES ?b { } + ?a ?b . + FILTER (?a != ?b) + ?b ?c . + FILTER (?b != ?c) + ?c ?d . + FILTER (?c != ?d) + FILTER (?d != ?a) + ?d ?a . + OPTIONAL { + ?b ?optName . + BIND(?optName AS ?optAlias) + } + FILTER (?optAlias != "") } Theme: SOCIAL_MEDIA z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 130 ms -Warmup execution 1/10 -Warmup execution 2/10 -Warmup execution 3/10 -Warmup execution 4/10 -Warmup execution 5/10 -Warmup execution 6/10 -Warmup execution 7/10 -Warmup execution 8/10 -Warmup execution 9/10 -Warmup execution 10/10 -Fastest execution time: 122 ms +Initial explain execution time: 222 ms +Warmup execution 1/9 +Warmup execution 2/9 +Warmup execution 3/9 +Warmup execution 4/9 +Warmup execution 5/9 +Warmup execution 6/9 +Warmup execution 7/9 +Warmup execution 8/9 +Warmup execution 9/9 +Fastest execution time: 197 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=589.2K, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=594.3K, openCountActual=1, lastRowTimeNanosActual=600.8K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=294.6K, avgNextNanosActual=1.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=766.4K, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=774.7K, openCountActual=1, lastRowTimeNanosActual=785.5K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=383.2K, avgNextNanosActual=1.7K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=588.0K, nextCallCountActual=1, nextTimeNanosActual=500, firstRowTimeNanosActual=604.0K, openCountActual=1, lastRowTimeNanosActual=608.5K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=294.0K, avgNextNanosActual=500) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=585.0K, nextCallCountActual=1, nextTimeNanosActual=209, aggregateEvalCountActual=12, firstRowTimeNanosActual=604.4K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=606.2K, maxGroupSizeActual=12, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=12, rowsDroppedActual=11, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292.5K, avgNextNanosActual=209) -│ ╠══ Filter (resultSizeActual=12, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=18, rowsDroppedActual=6, selectivityActual=0.67, expansionFactorActual=0.67, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=5.4K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user7") (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=373, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user9") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user10") (hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user11") (hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=129.9K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=18, hasNextTrueCountActual=12, hasNextTimeNanosActual=32.1K, sourceRowsScannedActual=18, sourceRowsMatchedActual=12, sourceRowsFilteredActual=6, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=18, exprFalseCountActual=6, openCountActual=18, lastRowTimeNanosActual=3.5K, exprTrueCountActual=12, closeCountActual=18, exprEvalTimeNanosActual=5.6K, inputRowsActual=18, rowsDroppedActual=18, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.8K, filterRejectRateActual=0.33) -│ ║ │ ╠══ Or (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, shortCircuitCountActual=6, exprEvalTimeNanosActual=4.7K, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=18, exprFalseCountActual=12, exprTrueCountActual=6, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="user7") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=708, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=752, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=7.3K, nextCallCountActual=18, nextTimeNanosActual=1.2K, sourceRowsScannedActual=24, sourceRowsMatchedActual=18, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=958, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=306, avgNextNanosActual=70, indexHitRateActual=0.75) -│ ║ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=413.1K, nextCallCountActual=18, nextTimeNanosActual=414, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=35.0K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=557.1K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.20451578E7M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=21.7K, avgNextNanosActual=23, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, resultSizeActual=18, joinRightIteratorsCreatedActual=33, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51, rowsDroppedActual=33, expansionFactorActual=0.35, sampleCountActual=2, varianceActual=3.89992814938E10M, stddevActual=197.5M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, resultSizeActual=33, joinLeftBindingsConsumedActual=20, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=53, rowsDroppedActual=20, expansionFactorActual=0.62, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.65) [left] -│ ║ ║ │ ╠══ Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=22.9K, nextCallCountActual=20, nextTimeNanosActual=667, sourceRowsScannedActual=25, sourceRowsMatchedActual=20, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=8.8K, exprEvalCountActual=25, exprFalseCountActual=5, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=554.2K, closeCountActual=1, exprEvalTimeNanosActual=4.6K, inputRowsActual=25, rowsDroppedActual=5, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=1.1K, avgNextNanosActual=33, filterRejectRateActual=0.20) [left] -│ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=25, exprFalseCountActual=5, exprTrueCountActual=20, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=25, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=25, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=30, rowsDroppedActual=5, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=100, stddevActual=10, confidenceScoreActual=0.15, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=25, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) -│ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=1.3K, nextCallCountActual=5, nextTimeNanosActual=542, firstRowTimeNanosActual=3.5K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=553.2K, optimizer.candidateCount=81, closeCountActual=1, varsAddedActual=1, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.022529078515625E10 rawRows=2.0663487504E10 effectiveRows=2.0537674441E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=222, avgNextNanosActual=108) -│ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=25, hasNextCallCountActual=30, hasNextTrueCountActual=25, hasNextTimeNanosActual=6.8K, nextCallCountActual=25, nextTimeNanosActual=667, firstRowTimeNanosActual=250, openCountActual=5, bindingsProvidedActual=25, lastRowTimeNanosActual=16.3K, closeCountActual=5, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=228, avgNextNanosActual=27) -│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=33, joinRightIteratorsCreatedActual=68, joinRightBindingsConsumedActual=33, inputRowsActual=101, rowsDroppedActual=68, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=33) [right] -│ ║ ║ │ ├── Filter (resultSizeActual=68, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.80, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=85, rowsDroppedActual=17, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] -│ ║ ║ │ │ ╠══ Compare (!=) (exprEvalCountActual=85, exprFalseCountActual=17, exprTrueCountActual=68, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) -│ ║ ║ │ │ ║ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ ║ Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=85, joinRightIteratorsCreatedActual=17, joinRightBindingsConsumedActual=85, inputRowsActual=102, rowsDroppedActual=17, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=17.9M, stddevActual=4.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=85) -│ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=17, joinRightIteratorsCreatedActual=36, joinRightBindingsConsumedActual=17, inputRowsActual=53, rowsDroppedActual=36, expansionFactorActual=0.32, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=17) [left] -│ ║ ║ │ │ │ ╠══ Filter (resultSizeActual=36, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow, inputRowsActual=45, rowsDroppedActual=9, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] -│ ║ ║ │ │ │ ║ ├── Compare (!=) (exprEvalCountActual=45, exprFalseCountActual=9, exprTrueCountActual=36, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=64.7M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=45) -│ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K, resultSizeActual=9, joinRightIteratorsCreatedActual=27, joinRightBindingsConsumedActual=9, inputRowsActual=36, rowsDroppedActual=27, expansionFactorActual=0.25, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9) [left] -│ ║ ║ │ │ │ ║ ║ ├── Filter (resultSizeActual=27, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.60, filterSelectivitySource=learned_filter, inputRowsActual=45, rowsDroppedActual=18, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [left] -│ ║ ║ │ │ │ ║ ║ │ ╠══ And (hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=45, exprFalseCountActual=9, exprTrueCountActual=36, exprEvalTimeNanosActual=2.6K, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) (exprEvalCountActual=36, exprFalseCountActual=9, exprTrueCountActual=27, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=63.4M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=45, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) -│ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=29, hasNextTrueCountActual=9, hasNextTimeNanosActual=13.3K, nextCallCountActual=9, nextTimeNanosActual=1.3K, sourceRowsScannedActual=29, sourceRowsMatchedActual=9, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=875, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=6.1K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=461, avgNextNanosActual=153, indexHitRateActual=0.31) [left] -│ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=6.7K, nextCallCountActual=45, nextTimeNanosActual=750, firstRowTimeNanosActual=208, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=4.3K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=125, avgNextNanosActual=17) [right] -│ ║ ║ │ │ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=36, hasNextTrueCountActual=9, hasNextTimeNanosActual=10.2K, nextCallCountActual=9, nextTimeNanosActual=417, sourceRowsScannedActual=36, sourceRowsMatchedActual=9, sourceRowsFilteredActual=27, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=27, openCountActual=27, lastRowTimeNanosActual=333, closeCountActual=27, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=27, nextPerHasNextRatioActual=0.25, avgHasNextNanosActual=286, avgNextNanosActual=46, indexHitRateActual=0.25) [right] -│ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=6.4K, nextCallCountActual=45, nextTimeNanosActual=792, firstRowTimeNanosActual=250, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=53.3K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=119, avgNextNanosActual=18) [right] -│ ║ ║ │ │ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=17, hasNextCallCountActual=53, hasNextTrueCountActual=17, hasNextTimeNanosActual=14.5K, nextCallCountActual=17, nextTimeNanosActual=793, sourceRowsScannedActual=53, sourceRowsMatchedActual=17, sourceRowsFilteredActual=36, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=36, openCountActual=36, lastRowTimeNanosActual=375, closeCountActual=36, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=36, nextPerHasNextRatioActual=0.32, avgHasNextNanosActual=275, avgNextNanosActual=47, indexHitRateActual=0.32) [right] -│ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=85, hasNextCallCountActual=102, hasNextTrueCountActual=85, hasNextTimeNanosActual=12.1K, nextCallCountActual=85, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=250, openCountActual=17, bindingsProvidedActual=85, lastRowTimeNanosActual=6.2K, closeCountActual=17, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=17, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=119, avgNextNanosActual=19) [right] -│ ║ ║ │ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=101, hasNextTrueCountActual=33, hasNextTimeNanosActual=26.7K, nextCallCountActual=33, nextTimeNanosActual=1.4K, sourceRowsScannedActual=101, sourceRowsMatchedActual=33, sourceRowsFilteredActual=68, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=68, openCountActual=68, lastRowTimeNanosActual=1.6K, closeCountActual=68, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=68, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=264, avgNextNanosActual=43, indexHitRateActual=0.33) [right] -│ ║ ║ │ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=18, hasNextCallCountActual=51, hasNextTrueCountActual=18, hasNextTimeNanosActual=12.1K, nextCallCountActual=18, nextTimeNanosActual=1.1K, sourceRowsScannedActual=51, sourceRowsMatchedActual=18, sourceRowsFilteredActual=33, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=33, openCountActual=33, lastRowTimeNanosActual=375, closeCountActual=33, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=239, avgNextNanosActual=62, indexHitRateActual=0.35) [right] -│ ║ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=9.2K, nextCallCountActual=18, nextTimeNanosActual=1.3K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=6.9K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=257, avgNextNanosActual=77, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=764.5K, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=790.2K, openCountActual=1, lastRowTimeNanosActual=798.7K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=382.3K, avgNextNanosActual=1000) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=757.8K, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=12, firstRowTimeNanosActual=790.0K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=792.8K, maxGroupSizeActual=12, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=12, rowsDroppedActual=11, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=378.9K, avgNextNanosActual=375) + │ ╠══ Filter (resultSizeActual=12, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=18, rowsDroppedActual=6, selectivityActual=0.67, expansionFactorActual=0.67, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=9.9K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user7") (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=1.1K, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=12, exprTrueCountActual=12, exprEvalTimeNanosActual=418, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user9") (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=333, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user10") (hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user11") (hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, exprEvalTimeNanosActual=127.8K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=18, hasNextTrueCountActual=12, hasNextTimeNanosActual=34.0K, sourceRowsScannedActual=18, sourceRowsMatchedActual=12, sourceRowsFilteredActual=6, plannedFilterEvidenceCount=1.1K, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter, exprEvalCountActual=18, exprFalseCountActual=6, openCountActual=18, lastRowTimeNanosActual=3.6K, exprTrueCountActual=12, closeCountActual=18, exprEvalTimeNanosActual=5.7K, inputRowsActual=18, rowsDroppedActual=18, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.9K, filterRejectRateActual=0.33) + │ ║ │ ╠══ Or (exprEvalCountActual=18, exprFalseCountActual=6, exprTrueCountActual=12, shortCircuitCountActual=6, exprEvalTimeNanosActual=4.6K, hasNextFalseCountActual=0) + │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=18, exprFalseCountActual=12, exprTrueCountActual=6, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="user7") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.3K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Compare (=) (exprEvalCountActual=12, exprFalseCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=541, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="user8") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=24, hasNextTrueCountActual=18, hasNextTimeNanosActual=7.0K, nextCallCountActual=18, nextTimeNanosActual=1.7K, sourceRowsScannedActual=24, sourceRowsMatchedActual=18, sourceRowsFilteredActual=6, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=750, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=293, avgNextNanosActual=95, indexHitRateActual=0.75) + │ ║ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=573.0K, nextCallCountActual=18, nextTimeNanosActual=416, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=93.3K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=720.2K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.01550409550899E13M, stddevActual=3186.7M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=30.2K, avgNextNanosActual=23, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=114721.1M, resultSizeActual=18, joinLeftBindingsConsumedActual=38, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146808E7 rawRows=1149984.0 effectiveRows=1146808.0 baseCostRows=1146808.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=38, rowsDroppedActual=20, expansionFactorActual=0.47, hasNextFalseCountActual=0, leftRowsProbedActual=38, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0.47) [left] + │ ║ ║ ├── Filter (resultSizeActual=20, hasNextCallCountActual=21, hasNextTrueCountActual=20, hasNextTimeNanosActual=36.8K, nextCallCountActual=20, nextTimeNanosActual=459, sourceRowsScannedActual=25, sourceRowsMatchedActual=20, sourceRowsFilteredActual=5, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=11.5K, exprEvalCountActual=25, exprFalseCountActual=5, openCountActual=1, exprTrueCountActual=20, lastRowTimeNanosActual=716.2K, closeCountActual=1, exprEvalTimeNanosActual=5.7K, inputRowsActual=25, rowsDroppedActual=5, selectivityActual=0.80, expansionFactorActual=0.80, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=1.8K, avgNextNanosActual=23, filterRejectRateActual=0.20) [left] + │ ║ ║ │ ╠══ Compare (!=) (exprEvalCountActual=25, exprFalseCountActual=5, exprTrueCountActual=20, exprEvalTimeNanosActual=2.7K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=25, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=25, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146808E7 rawRows=1149984.0 effectiveRows=1146808.0 baseCostRows=1146808.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=30, rowsDroppedActual=5, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=100, stddevActual=10, confidenceScoreActual=0.15, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=25, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) + │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=11.7K, nextCallCountActual=5, nextTimeNanosActual=874, firstRowTimeNanosActual=4.2K, openCountActual=1, bindingsProvidedActual=5, lastRowTimeNanosActual=714.6K, optimizer.candidateCount=81, closeCountActual=1, varsAddedActual=1, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146808E7 rawRows=1149984.0 effectiveRows=1146808.0 baseCostRows=1146808.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=2.0K, avgNextNanosActual=175) + │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=25, hasNextCallCountActual=30, hasNextTrueCountActual=25, hasNextTimeNanosActual=7.1K, nextCallCountActual=25, nextTimeNanosActual=623, firstRowTimeNanosActual=209, openCountActual=5, bindingsProvidedActual=25, lastRowTimeNanosActual=24.9K, closeCountActual=5, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=239, avgNextNanosActual=25) + │ ║ ║ └── Filter (resultSizeActual=18, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=30, rowsDroppedActual=12, selectivityActual=0.60, expansionFactorActual=0.60, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) [right] + │ ║ ║ ╠══ And (hasNextFalseCountActual=0) + │ ║ ║ ║ ├── And (hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╠══ And (hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=30, exprFalseCountActual=12, exprTrueCountActual=18, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ └── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=919, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╚══ Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=791, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=20616.9M, resultSizeActual=30, joinRightIteratorsCreatedActual=65, joinRightBindingsConsumedActual=30, inputRowsActual=95, rowsDroppedActual=65, expansionFactorActual=0.32, sampleCountActual=2, varianceActual=1.7M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=30) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K, resultSizeActual=65, joinRightIteratorsCreatedActual=165, joinRightBindingsConsumedActual=65, inputRowsActual=230, rowsDroppedActual=165, expansionFactorActual=0.28, sampleCountActual=2, varianceActual=450.4K, stddevActual=671, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=65) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.4K, resultSizeActual=165, joinRightIteratorsCreatedActual=33, joinRightBindingsConsumedActual=165, inputRowsActual=198, rowsDroppedActual=33, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=4.4M, stddevActual=2.1K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=165) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K, resultSizeActual=33, joinRightIteratorsCreatedActual=85, joinRightBindingsConsumedActual=33, inputRowsActual=118, rowsDroppedActual=85, expansionFactorActual=0.28, sampleCountActual=2, varianceActual=1.8M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=33) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.4K, resultSizeActual=85, joinRightIteratorsCreatedActual=17, joinRightBindingsConsumedActual=85, inputRowsActual=102, rowsDroppedActual=17, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=17.4M, stddevActual=4.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=85) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K, resultSizeActual=17, joinRightIteratorsCreatedActual=45, joinRightBindingsConsumedActual=17, inputRowsActual=62, rowsDroppedActual=45, expansionFactorActual=0.27, sampleCountActual=2, varianceActual=6.9M, stddevActual=2.6K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=17) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.7K, resultSizeActual=45, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=45, inputRowsActual=54, rowsDroppedActual=9, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=63.4M, stddevActual=8.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=45, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=9, hasNextCallCountActual=29, hasNextTrueCountActual=9, hasNextTimeNanosActual=16.2K, nextCallCountActual=9, nextTimeNanosActual=1.1K, sourceRowsScannedActual=29, sourceRowsMatchedActual=9, sourceRowsFilteredActual=20, plannedIndexName=spoc, firstRowTimeNanosActual=708, indexLookupCountActual=20, openCountActual=20, lastRowTimeNanosActual=18.3K, closeCountActual=20, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=562, avgNextNanosActual=129, indexHitRateActual=0.31) [left] + │ ║ ║ │ ║ │ ║ │ ║ │ s: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ o: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=45, hasNextCallCountActual=54, hasNextTrueCountActual=45, hasNextTimeNanosActual=9.7K, nextCallCountActual=45, nextTimeNanosActual=707, firstRowTimeNanosActual=166, openCountActual=9, bindingsProvidedActual=45, lastRowTimeNanosActual=16.6K, closeCountActual=9, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=180, avgNextNanosActual=16) [right] + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=17, hasNextCallCountActual=62, hasNextTrueCountActual=17, hasNextTimeNanosActual=15.4K, nextCallCountActual=17, nextTimeNanosActual=377, sourceRowsScannedActual=62, sourceRowsMatchedActual=17, sourceRowsFilteredActual=45, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=45, openCountActual=45, lastRowTimeNanosActual=12.3K, closeCountActual=45, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=45, nextPerHasNextRatioActual=0.27, avgHasNextNanosActual=249, avgNextNanosActual=22, indexHitRateActual=0.27) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=b) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ o: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=85, hasNextCallCountActual=102, hasNextTrueCountActual=85, hasNextTimeNanosActual=10.3K, nextCallCountActual=85, nextTimeNanosActual=999, firstRowTimeNanosActual=167, openCountActual=17, bindingsProvidedActual=85, lastRowTimeNanosActual=11.2K, closeCountActual=17, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=17, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=102, avgNextNanosActual=12) [right] + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=33, hasNextCallCountActual=118, hasNextTrueCountActual=33, hasNextTimeNanosActual=29.4K, nextCallCountActual=33, nextTimeNanosActual=1.4K, sourceRowsScannedActual=118, sourceRowsMatchedActual=33, sourceRowsFilteredActual=85, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=85, openCountActual=85, lastRowTimeNanosActual=333, closeCountActual=85, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=85, nextPerHasNextRatioActual=0.28, avgHasNextNanosActual=250, avgNextNanosActual=45, indexHitRateActual=0.28) [right] + │ ║ ║ │ ║ │ s: Var (name=c) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, resultSizeActual=165, hasNextCallCountActual=198, hasNextTrueCountActual=165, hasNextTimeNanosActual=18.4K, nextCallCountActual=165, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=209, openCountActual=33, bindingsProvidedActual=165, lastRowTimeNanosActual=5.7K, closeCountActual=33, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=33, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=93, avgNextNanosActual=19) [right] + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=65, hasNextCallCountActual=230, hasNextTrueCountActual=65, hasNextTimeNanosActual=55.9K, nextCallCountActual=65, nextTimeNanosActual=3.4K, sourceRowsScannedActual=230, sourceRowsMatchedActual=65, sourceRowsFilteredActual=165, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=165, openCountActual=165, lastRowTimeNanosActual=1.4K, closeCountActual=165, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=165, nextPerHasNextRatioActual=0.28, avgHasNextNanosActual=243, avgNextNanosActual=53, indexHitRateActual=0.28) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=143.7K, resultSizeActual=30, hasNextCallCountActual=95, hasNextTrueCountActual=30, hasNextTimeNanosActual=25.8K, nextCallCountActual=30, nextTimeNanosActual=1.4K, sourceRowsScannedActual=95, sourceRowsMatchedActual=30, sourceRowsFilteredActual=65, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=65, openCountActual=65, lastRowTimeNanosActual=333, closeCountActual=65, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=65, nextPerHasNextRatioActual=0.32, avgHasNextNanosActual=272, avgNextNanosActual=49, indexHitRateActual=0.32) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=16.0K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=8.8K, nextCallCountActual=18, nextTimeNanosActual=1.5K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=7.5K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=86, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=e) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=a) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=a) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -2965,187 +3289,185 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=optName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="user7") -│ ║ │ ║ ValueConstant (value="user8") -│ ║ │ ║ ValueConstant (value="user9") -│ ║ │ ║ ValueConstant (value="user10") -│ ║ │ ║ ValueConstant (value="user11") -│ ║ │ ╚══ Exists -│ ║ │ Filter (plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="user7") -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="user8") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) -│ ║ │ s: Var (name=a) (bindingState=bound) -│ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.8736256815E9M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=13034.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] -│ ║ ║ │ ║ ├── Compare (!=) -│ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) -│ ║ ║ │ ║ │ Var (name=b) (bindingState=bound) -│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ ║ │ ║ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=6.25 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=25.735294117647058 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=653400.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=20.58823529411765 rawRows=70.0 effectiveRows=56.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=41.1764705882353 rawRows=70.0 effectiveRows=70.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=296078.58455882355 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=4 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=7.475363957727272E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=6.424140901171875E10 rawRows=2.0663487504E10 effectiveRows=1.6445800707E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=8.0301761265625E10 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=344527.80748663103 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=8.02219825E10 rawRows=2.0663487504E10 effectiveRows=2.053682752E10 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=473725.73529411765 rawRows=1288534.0 effectiveRows=1288534.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.545454545454545 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=10.0 rawRows=1.0 effectiveRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=93.04812834224599 rawRows=143748.0 effectiveRows=348.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=561515.625 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=898425.0 rawRows=143748.0 effectiveRows=143748.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=36.36363636363636 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=19.25133689839572 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=4492125.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=3 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=7187400.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=4.704479999999999E7 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=381.1764705882353 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=4170995.454545454 rawRows=1149984.0 effectiveRows=917619.0 sharedVars=0 boundAnchors=0 cheapFilters=2 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=450.0 rawRows=72.0 effectiveRows=72.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=52661.029411764706 rawRows=143238.0 effectiveRows=143238.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=238.23529411764704 rawRows=648.0 effectiveRows=648.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=8.0 effectiveRows=8.0 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=26.470588235294116 rawRows=72.0 effectiveRows=72.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ ║ │ ║ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) -│ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) [right] -│ ║ ║ │ ├── Filter (plannedFilterPassRatio=0.80, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] -│ ║ ║ │ │ ╠══ Compare (!=) -│ ║ ║ │ │ ║ Var (name=d) (bindingState=bound) -│ ║ ║ │ │ ║ Var (name=e) (bindingState=bound) -│ ║ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=145.2K) -│ ║ ║ │ │ ├── Join (JoinIterator) (resultSizeEstimate=145.2K) [left] -│ ║ ║ │ │ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, deferredFilterScope=smallestWindow) [left] -│ ║ ║ │ │ │ ║ ├── Compare (!=) -│ ║ ║ │ │ │ ║ │ Var (name=c) (bindingState=bound) -│ ║ ║ │ │ │ ║ │ Var (name=d) (bindingState=bound) -│ ║ ║ │ │ │ ║ └── Join (JoinIterator) (resultSizeEstimate=145.2K) -│ ║ ║ │ │ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=145.2K) [left] -│ ║ ║ │ │ │ ║ ║ ├── Filter (plannedFilterPassRatio=0.60, filterSelectivitySource=learned_filter) [left] -│ ║ ║ │ │ │ ║ ║ │ ╠══ And -│ ║ ║ │ │ │ ║ ║ │ ║ ├── Compare (!=) -│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ │ ║ └── Compare (!=) -│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=b) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ │ ║ Var (name=c) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=143.7K) -│ ║ ║ │ │ │ ║ ║ │ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] -│ ║ ║ │ │ │ ║ ║ │ │ s: Var (name=a) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ │ │ ║ ║ │ │ o: Var (name=b) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ │ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] -│ ║ ║ │ │ │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ │ │ │ ║ ║ s: Var (name=b) (bindingState=bound) -│ ║ ║ │ │ │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ │ │ ║ ║ o: Var (name=c) (bindingState=bound) -│ ║ ║ │ │ │ ║ ╚══ BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] -│ ║ ║ │ │ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ │ │ │ s: Var (name=c) (bindingState=bound) -│ ║ ║ │ │ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ │ │ o: Var (name=d) (bindingState=bound) -│ ║ ║ │ │ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] -│ ║ ║ │ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ │ s: Var (name=d) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ │ o: Var (name=e) (bindingState=bound) -│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] -│ ║ ║ s: Var (name=e) (bindingState=bound) -│ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) -│ ║ ║ o: Var (name=a) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] -│ ║ s: Var (name=e) (bindingState=bound) -│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=a) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=a) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user7") + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ║ ValueConstant (value="user9") + │ ║ │ ║ ValueConstant (value="user10") + │ ║ │ ║ ValueConstant (value="user11") + │ ║ │ ╚══ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=1.2K, plannedFilterPassRatio=0.67, filterSelectivitySource=learned_filter) + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="user7") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="user8") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=16.0K) + │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ │ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=114721.1M, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146808E7 rawRows=1149984.0 effectiveRows=1146808.0 baseCostRows=1146808.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) [left] + │ ║ ║ │ ╠══ Compare (!=) + │ ║ ║ │ ║ Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ Var (name=b) (bindingState=bound) + │ ║ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146808E7 rawRows=1149984.0 effectiveRows=1146808.0 baseCostRows=1146808.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a=http://example.com/theme/social/user/10], [a=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00, optimizer.candidateCount=81, optimizer.score=479.2K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=GREEDY initiallyBoundVars=[] originalOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] promotedPrefixes=[] plannedOrder=[BSA(names=[a], rows=5), BSA(names=[b], rows=5), BSA(names=[c], rows=5), BSA(names=[d], rows=5), BSA(names=[e], rows=5), SP(?a http://example.com/theme/social/follows ?b), SP(?b http://example.com/theme/social/follows ?c), SP(?c http://example.com/theme/social/follows ?d), SP(?d http://example.com/theme/social/follows ?e), SP(?e http://example.com/theme/social/follows ?a)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:BSA(names=[a], rows=5), 1:BSA(names=[b], rows=5), 2:BSA(names=[c], rows=5), 3:BSA(names=[d], rows=5), 4:BSA(names=[e], rows=5), 5:SP(?a http://example.com/theme/social/follows ?b), 6:SP(?b http://example.com/theme/social/follows ?c), 7:SP(?c http://example.com/theme/social/follows ?d), 8:SP(?d http://example.com/theme/social/follows ?e), 9:SP(?e http://example.com/theme/social/follows ?a)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?a follows ?b) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a... right=SP(?e follows ?a) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?a follows ?b) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?b follows ?c) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?b follows ?c) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?c follows ?d) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=100.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=10.0 factorWorkRows=10.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=later tie-breaker index; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?c follows ?d) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?d follows ?e) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... right=SP(?e follows ?a) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?a follows ?b) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?b follows ?c) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143383.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?d follows ?e) score=84342.94117647059 rawRows=69.0 effectiveRows=69.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... right=SP(?e follows ?a) score=84342.94117647059 rawRows=70.0 effectiveRows=70.0 baseCostRows=143383.0 factorWorkRows=143383.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?b follows ?c) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?c follows ?d) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?a follows ?b) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?c follows ?d) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?d follows ?e) score=2.0553374655E11 rawRows=2.0663487504E10 effectiveRows=2.0553374655E10 baseCostRows=2.0553374655E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?b follows ?c) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?d follows ?e) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?c follows ?d) right=SP(?e follows ?a) score=2.0557250884E11 rawRows=2.0663487504E10 effectiveRows=2.0557250884E10 baseCostRows=2.0557250884E10 factorWorkRows=286756.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?d follows ?e) right=SP(?e follows ?a) score=749371.1764705883 rawRows=1273931.0 effectiveRows=1273931.0 baseCostRows=1273931.0 factorWorkRows=286756.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=50.0 rawRows=1.0 effectiveRows=1.0 baseCostRows=5.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?a follows ?b) score=3.3333333333333335 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=5 decision=chosen reason=chosen; expand candidate left=Join right=SP(?b follows ?c) score=205.88235294117646 rawRows=143748.0 effectiveRows=350.0 baseCostRows=350.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1437480.0 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=143748.0 effectiveRows=143748.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?b follows ?c) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=6 decision=chosen reason=chosen; expand candidate left=Join right=SP(?c follows ?d) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.149984E7 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=1.0349856E8 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?c follows ?d) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=7 decision=chosen reason=chosen; expand candidate left=Join right=SP(?d follows ?e) score=1.146808E7 rawRows=1149984.0 effectiveRows=1146808.0 baseCostRows=1146808.0 factorWorkRows=143378.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=720.0 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=84340.0 rawRows=143378.0 effectiveRows=143378.0 baseCostRows=143378.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=639.0 effectiveRows=639.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=80.0 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?d follows ?e) score=42.35294117647059 rawRows=72.0 effectiveRows=72.0 baseCostRows=72.0 factorWorkRows=9.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=8 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=84557.64705882354 rawRows=71.0 effectiveRows=71.0 baseCostRows=143748.0 factorWorkRows=143748.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e... score=4.705882352941177 rawRows=8.0 effectiveRows=8.0 baseCostRows=8.0 factorWorkRows=5.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen; expand candidate left=Join right=SP(?e follows ?a) score=4312440.0 rawRows=1.0349856E7 effectiveRows=1.0349856E7 baseCostRows=1.0349856E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?e follows ?a) score=479160.0 rawRows=1149984.0 effectiveRows=1149984.0 baseCostRows=1149984.0 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=9 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?e follows ?a), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?a follows ?b), SP(?b follows ?c), SP(?c follows ?d), SP(?d follows ?e), SP(?e follows ?a)], optimizer.chosenOrder=[BindingSetAssignment ([[a=http://example.com/theme/social/user/7], [a=http://example.com/theme/social/user/8], [a=http://example.com/theme/social/user/9], [a..., BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b..., SP(?a follows ?b), SP(?b follows ?c), BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c..., SP(?c follows ?d), BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d..., SP(?d follows ?e), BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e..., SP(?e follows ?a)], optimizer.scoreComponents=rawRows=1149984.0, effectiveRows=1149984.0, baseCostRows=1149984.0, factorWorkRows=0.0, adjustedCost=479160.0, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=9, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ BindingSetAssignment ([[b=http://example.com/theme/social/user/7], [b=http://example.com/theme/social/user/8], [b=http://example.com/theme/social/user/9], [b=http://example.com/theme/social/user/10], [b=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) + │ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [right] + │ ║ ║ ╠══ And + │ ║ ║ ║ ├── And + │ ║ ║ ║ │ ╠══ And + │ ║ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ ║ │ ║ │ Var (name=a) (bindingState=bound) + │ ║ ║ ║ │ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ ║ │ ║ └── Compare (!=) + │ ║ ║ ║ │ ║ Var (name=d) (bindingState=bound) + │ ║ ║ ║ │ ║ Var (name=e) (bindingState=bound) + │ ║ ║ ║ │ ╚══ Compare (!=) + │ ║ ║ ║ │ Var (name=c) (bindingState=bound) + │ ║ ║ ║ │ Var (name=d) (bindingState=bound) + │ ║ ║ ║ └── Compare (!=) + │ ║ ║ ║ Var (name=b) (bindingState=bound) + │ ║ ║ ║ Var (name=c) (bindingState=bound) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=20616.9M) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=143.4K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ ║ │ ║ │ s: Var (name=a) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ │ o: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ └── BindingSetAssignment ([[c=http://example.com/theme/social/user/7], [c=http://example.com/theme/social/user/8], [c=http://example.com/theme/social/user/9], [c=http://example.com/theme/social/user/10], [c=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=b) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ ║ └── BindingSetAssignment ([[d=http://example.com/theme/social/user/7], [d=http://example.com/theme/social/user/8], [d=http://example.com/theme/social/user/9], [d=http://example.com/theme/social/user/10], [d=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ │ s: Var (name=c) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=d) (bindingState=bound) + │ ║ ║ │ ║ └── BindingSetAssignment ([[e=http://example.com/theme/social/user/7], [e=http://example.com/theme/social/user/8], [e=http://example.com/theme/social/user/9], [e=http://example.com/theme/social/user/10], [e=http://example.com/theme/social/user/11]]) (costEstimate=0, resultSizeEstimate=1.00) [right] + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=d) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=e) (bindingState=bound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ s: Var (name=e) (bindingState=bound) + │ ║ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ o: Var (name=a) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=e) (bindingState=bound) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { -VALUES (?a ?b) { -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -( ) -} -FILTER (?a != ?b) -?a ?b . -VALUES ?c { } -FILTER ((?a != ?c) && (?b != ?c)) -?b ?c . -VALUES ?d { } -FILTER (?c != ?d) -?c ?d . -VALUES ?e { } -FILTER (?d != ?e) -?d ?e . -?e ?a . -OPTIONAL { -?e ?optName . -} -FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) + VALUES (?a ?b) { + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + ( ) + } + FILTER (?a != ?b) + ?a ?b . + VALUES ?c { } + ?b ?c . + VALUES ?d { } + ?c ?d . + VALUES ?e { } + ?d ?e . + ?e ?a . + FILTER ((((?a != ?c) && (?d != ?e)) && (?c != ?d)) && (?b != ?c)) + OPTIONAL { + ?e ?optName . + } + FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) } Theme: LIBRARY z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 1465 ms +Initial explain execution time: 1512 ms Warmup execution 1/1 -Fastest execution time: 775 ms +Fastest execution time: 778 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=1388.6M, openCountActual=1, lastRowTimeNanosActual=1388.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=1.4K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1459.3M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=1459.4M, openCountActual=1, lastRowTimeNanosActual=1459.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=729.7M, avgNextNanosActual=1.7K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=1388.6M, openCountActual=1, lastRowTimeNanosActual=1388.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=833) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1388.6M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=770.9K, firstRowTimeNanosActual=1388.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1388.6M, maxGroupSizeActual=770.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=770.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=770.9K, rowsDroppedActual=770.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=694.3M, avgNextNanosActual=625) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=770.9K, hasNextCallCountActual=770.9K, hasNextTrueCountActual=770.9K, hasNextTimeNanosActual=1236.7M, nextCallCountActual=770.9K, nextTimeNanosActual=10.9M, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=770.9K, firstRowTimeNanosActual=27.2K, leftRowsWithMatchActual=386.3K, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=1.1M, rowsDroppedActual=386.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=14, leftRowsProbedActual=386.3K, rightRowsScannedActual=770.9K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Filter (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=753.3M, nextCallCountActual=386.3K, nextTimeNanosActual=5.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.2K, exprEvalCountActual=386.3K, openCountActual=1, exprTrueCountActual=386.3K, lastRowTimeNanosActual=1388.5M, closeCountActual=1, exprEvalTimeNanosActual=42.2M, inputRowsActual=386.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.9K, avgNextNanosActual=14, filterRejectRateActual=0) [left] -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=15.4M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optBranch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=683.8M, nextCallCountActual=386.3K, nextTimeNanosActual=5.5M, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=386.3K, firstRowTimeNanosActual=24.4K, leftRowsWithMatchActual=128.8K, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=515.1K, rowsDroppedActual=128.8K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, leftRowsProbedActual=128.8K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=13.9M, nextCallCountActual=128.8K, nextTimeNanosActual=8.5M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=10.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1388.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=66, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=386.3K, hasNextCallCountActual=1.0M, hasNextTrueCountActual=901.3K, hasNextTimeNanosActual=551.2M, nextCallCountActual=386.3K, nextTimeNanosActual=17.5M, firstRowTimeNanosActual=1.2K, openCountActual=128.8K, lastRowTimeNanosActual=9.1K, closeCountActual=128.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=535, avgNextNanosActual=45) [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=515.1K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=80.1M, nextCallCountActual=386.3K, nextTimeNanosActual=22.4M, sourceRowsScannedActual=515.1K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=128.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=583, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=8.9K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=156, avgNextNanosActual=58, indexHitRateActual=0.75) [left] -│ ║ │ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=166.9M, nextCallCountActual=386.3K, nextTimeNanosActual=21.2M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=1.9K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=216, avgNextNanosActual=55, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optBranch) (hasNextFalseCountActual=0) -│ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=257.2K, resultSizeActual=770.9K, hasNextCallCountActual=1.9M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=202.8M, nextCallCountActual=770.9K, nextTimeNanosActual=34.9M, sourceRowsScannedActual=1.1M, sourceRowsMatchedActual=770.9K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=833, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=105, avgNextNanosActual=45, indexHitRateActual=0.67) [right] -│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1459.3M, nextCallCountActual=1, nextTimeNanosActual=959, firstRowTimeNanosActual=1459.4M, openCountActual=1, lastRowTimeNanosActual=1459.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=729.7M, avgNextNanosActual=959) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1459.3M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=770.9K, firstRowTimeNanosActual=1459.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1459.4M, maxGroupSizeActual=770.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=770.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=770.9K, rowsDroppedActual=770.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=729.7M, avgNextNanosActual=500) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=770.9K, hasNextCallCountActual=770.9K, hasNextTrueCountActual=770.9K, hasNextTimeNanosActual=1300.8M, nextCallCountActual=770.9K, nextTimeNanosActual=11.4M, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=770.9K, firstRowTimeNanosActual=20.7K, leftRowsWithMatchActual=386.3K, openCountActual=1, lastRowTimeNanosActual=1459.3M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=1.1M, rowsDroppedActual=386.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=15, leftRowsProbedActual=386.3K, rightRowsScannedActual=770.9K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Filter (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=784.5M, nextCallCountActual=386.3K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=18.5K, exprEvalCountActual=386.3K, openCountActual=1, exprTrueCountActual=386.3K, lastRowTimeNanosActual=1459.3M, closeCountActual=1, exprEvalTimeNanosActual=48.4M, inputRowsActual=386.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=15, filterRejectRateActual=0) [left] + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=16.4M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=706.5M, nextCallCountActual=386.3K, nextTimeNanosActual=5.9M, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=386.3K, firstRowTimeNanosActual=17.2K, leftRowsWithMatchActual=128.8K, openCountActual=1, lastRowTimeNanosActual=1459.3M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=515.1K, rowsDroppedActual=128.8K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=16, leftRowsProbedActual=128.8K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=12.7M, nextCallCountActual=128.8K, nextTimeNanosActual=8.8M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=6.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1459.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=69, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=386.3K, hasNextCallCountActual=1.0M, hasNextTrueCountActual=901.3K, hasNextTimeNanosActual=572.9M, nextCallCountActual=386.3K, nextTimeNanosActual=17.5M, firstRowTimeNanosActual=1.5K, openCountActual=128.8K, lastRowTimeNanosActual=9.5K, closeCountActual=128.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=556, avgNextNanosActual=46) [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.00, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=515.1K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=82.3M, nextCallCountActual=386.3K, nextTimeNanosActual=24.3M, sourceRowsScannedActual=515.1K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=128.8K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[book], firstRowTimeNanosActual=750, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=9.4K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=160, avgNextNanosActual=63, indexHitRateActual=0.75) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=172.9M, nextCallCountActual=386.3K, nextTimeNanosActual=23.7M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], sharedJoinVars=[copy], firstRowTimeNanosActual=417, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=2.1K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=61, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optBranch) (hasNextFalseCountActual=0) + │ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=257.2K, resultSizeActual=770.9K, hasNextCallCountActual=1.9M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=211.1M, nextCallCountActual=770.9K, nextTimeNanosActual=42.1M, sourceRowsScannedActual=1.1M, sourceRowsMatchedActual=770.9K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=916, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=110, avgNextNanosActual=55, indexHitRateActual=0.67) [right] + │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3153,122 +3475,121 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optBranch) (bindingState=bound) -│ ║ │ ║ Var (name=book) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] -│ ║ │ │ s: Var (name=book) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=384.9K) -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ │ s: Var (name=book) (bindingState=bound) -│ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) -│ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=copy) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) -│ ║ │ ║ o: Var (name=branch) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optBranch) -│ ║ │ Var (name=branch) (bindingState=bound) -│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] -│ ║ s: Var (name=book) (bindingState=bound) -│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) -│ ║ o: Var (name=author) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=book) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=book) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optBranch) (bindingState=bound) + │ ║ │ ║ Var (name=book) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=128.9K) [left] + │ ║ │ │ s: Var (name=book) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.00) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[book]) [left] + │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6cec5947_uri, _const_f5e5585a_uri, book, copy], sharedJoinVars=[copy]) [right] + │ ║ │ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optBranch) + │ ║ │ Var (name=branch) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { -?book a . -OPTIONAL { -?book ?copy . -?copy ?branch . -BIND(?branch AS ?optBranch) -} -FILTER (?optBranch != ?book) -OPTIONAL { -?book ?author . -} + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } } Theme: LIBRARY z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 324 ms -Warmup execution 1/6 -Warmup execution 2/6 -Warmup execution 3/6 -Warmup execution 4/6 -Warmup execution 5/6 -Warmup execution 6/6 -Fastest execution time: 201 ms +Initial explain execution time: 339 ms +Warmup execution 1/5 +Warmup execution 2/5 +Warmup execution 3/5 +Warmup execution 4/5 +Warmup execution 5/5 +Fastest execution time: 206 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=306.8M, openCountActual=1, lastRowTimeNanosActual=306.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=2.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=338.2M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=338.2M, openCountActual=1, lastRowTimeNanosActual=338.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=169.1M, avgNextNanosActual=2.6K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=306.8M, openCountActual=1, lastRowTimeNanosActual=306.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=1.3K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=306.8M, nextCallCountActual=1, nextTimeNanosActual=541, aggregateEvalCountActual=4, firstRowTimeNanosActual=306.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=306.8M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=153.4M, avgNextNanosActual=541) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=306.7M, nextCallCountActual=4, nextTimeNanosActual=83, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.2K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=306.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=51.1M, avgNextNanosActual=21, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) -│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] -│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=11.0M, nextCallCountActual=4, nextTimeNanosActual=291, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=10.1K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=54.4K, exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=306.7M, closeCountActual=1, exprEvalTimeNanosActual=4.6M, inputRowsActual=10.1K, rowsDroppedActual=10.1K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=2.2M, avgNextNanosActual=73, filterRejectRateActual=1.00) -│ ║ │ ║ ├── Or (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=3.9M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=3.0M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=425.6K, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, resultSizeActual=10.1K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=5.0K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.21, stddevActual=0.46, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=5.1K) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.3K, nextCallCountActual=2, nextTimeNanosActual=917, firstRowTimeNanosActual=32.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=44.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=445, avgNextNanosActual=459) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K, resultSizeActual=5.0K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=5.0K, inputRowsActual=10.1K, rowsDroppedActual=5.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16, stddevActual=3.96, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=5.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.1K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=447.2K, nextCallCountActual=5.0K, nextTimeNanosActual=228.5K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=11.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=88, avgNextNanosActual=45, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5.0K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=2.1M, nextCallCountActual=5.0K, nextTimeNanosActual=257.2K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=5.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=1.6K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=51, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, inputRowsActual=257.7K, rowsDroppedActual=257.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ │ ├── Or (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=107.9M, hasNextFalseCountActual=0) -│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=81.8M, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=11.4M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, resultSizeActual=257.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=128.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=128.9K) -│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=625, nextCallCountActual=2, nextTimeNanosActual=500, firstRowTimeNanosActual=11.1M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=11.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=208, avgNextNanosActual=250) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=128.8K, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=128.8K, inputRowsActual=257.7K, rowsDroppedActual=128.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=128.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=130.6K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=11.7M, nextCallCountActual=128.8K, nextTimeNanosActual=5.5M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=11.1M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=306.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=43, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=133.3K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=67.6M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=1.4K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=40, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.9K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=500, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=490, indexHitRateActual=0) [right] -│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=338.2M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=338.2M, openCountActual=1, lastRowTimeNanosActual=338.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=169.1M, avgNextNanosActual=1.5K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=338.2M, nextCallCountActual=1, nextTimeNanosActual=458, aggregateEvalCountActual=4, firstRowTimeNanosActual=338.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=338.2M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=169.1M, avgNextNanosActual=458) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=338.1M, nextCallCountActual=4, nextTimeNanosActual=124, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.2K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=338.2M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=56.4M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) + │ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] + │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=12.1M, nextCallCountActual=4, nextTimeNanosActual=376, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=10.1K, plannedFilterEvidenceCount=751.9K, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=55.0K, exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=338.1M, closeCountActual=1, exprEvalTimeNanosActual=5.1M, inputRowsActual=10.1K, rowsDroppedActual=10.1K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=2.4M, avgNextNanosActual=94, filterRejectRateActual=1.00) + │ ║ │ ║ ├── Or (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=4.2M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=3.1M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=10.1K, exprFalseCountActual=10.1K, exprTrueCountActual=2, exprEvalTimeNanosActual=425.8K, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=3.3K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, resultSizeActual=10.1K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=5.0K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.21, stddevActual=0.46, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=5.1K) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.4K, nextCallCountActual=2, nextTimeNanosActual=791, firstRowTimeNanosActual=34.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=44.7K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=486, avgNextNanosActual=396) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K, resultSizeActual=5.0K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=5.0K, inputRowsActual=10.1K, rowsDroppedActual=5.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16, stddevActual=3.96, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=5.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.1K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=455.7K, nextCallCountActual=5.0K, nextTimeNanosActual=265.3K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=16.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=12.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=52, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5.0K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=2.3M, nextCallCountActual=5.0K, nextTimeNanosActual=284.1K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=5.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=625, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=1.8K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=231, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=19.0M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=257.7K, rowsDroppedActual=257.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ │ ├── Or (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=116.1M, hasNextFalseCountActual=0) + │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=88.3M, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=257.7K, exprFalseCountActual=257.7K, exprEvalTimeNanosActual=10.6M, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Member 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, resultSizeActual=257.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=128.8K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=128.9K) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=334, nextCallCountActual=2, nextTimeNanosActual=417, firstRowTimeNanosActual=12.1M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=12.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=111, avgNextNanosActual=209) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=128.8K, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, joinRightBindingsConsumedActual=128.8K, inputRowsActual=257.7K, rowsDroppedActual=128.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=128.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=130.6K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=14.6M, nextCallCountActual=128.8K, nextTimeNanosActual=7.0M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedAccessRows=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=12.1M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=338.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=55, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=133.3K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=74.5M, nextCallCountActual=128.8K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity], firstRowTimeNanosActual=708, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=2.4K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=47, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.6K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=417, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=417, indexHitRateActual=0) [right] + │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3276,144 +3597,146 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Union [left] -│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ║ ├── Or -│ ║ │ ║ │ ╠══ Compare (=) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ ║ │ ╚══ Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="Member 3") -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ │ ║ o: Var (name=name) (bindingState=unbound) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ │ ├── Or -│ ║ │ │ ╠══ Compare (=) -│ ║ │ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ │ ╚══ Compare (=) -│ ║ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ ValueConstant (value="Member 3") -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) -│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] -│ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) -│ ║ │ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) -│ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] -│ ║ s: Var (name=entity) (bindingState=bound) -│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) -│ ║ o: Var (name=copy) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=entity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=entity) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=762.1K, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Member 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.1K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=19.3M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Member 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=130.6K, plannedAccessRows=130.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=133.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ o: Var (name=copy) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { -{ -VALUES ?target { "Member 1" "Member 2" } -{ -{ -?entity a . -?entity ?name . -} -} -FILTER ((?name = ?target) || (?name = "Member 3")) -} -UNION -{ -VALUES ?target { "Member 1" "Member 2" } -{ -{ -?entity ?name . -?entity a . -} -} -FILTER ((?name = ?target) || (?name = "Member 3")) -} -OPTIONAL { -?entity ?copy . -} + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + UNION + { + VALUES ?target { "Member 1" "Member 2" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Member 3")) + } + OPTIONAL { + ?entity ?copy . + } } Theme: LIBRARY z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 242 ms -Warmup execution 1/8 -Warmup execution 2/8 -Warmup execution 3/8 -Warmup execution 4/8 -Warmup execution 5/8 -Warmup execution 6/8 -Warmup execution 7/8 -Warmup execution 8/8 -Fastest execution time: 123 ms +Initial explain execution time: 45 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 26 ms -Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=5.7K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.9K) +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=37.2M, nextCallCountActual=3, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=37.2M, openCountActual=1, lastRowTimeNanosActual=37.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=9.3M, avgNextNanosActual=695) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "author" (hasNextFalseCountActual=0) ║ ProjectionElem "bookCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=4.3K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.4K) -├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=4.2K, firstRowTimeNanosActual=227.3M, openCountActual=1, lastRowTimeNanosActual=227.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.4K) -│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=3.6K, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=227.3M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=227.3M, closeCountActual=1, exprEvalTimeNanosActual=4.9K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=1.2K, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=4.4K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=8.7K, hasNextFalseCountActual=0) -│ ║ └── Group (author) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=227.3M, nextCallCountActual=3, nextTimeNanosActual=541, aggregateEvalCountActual=30, firstRowTimeNanosActual=227.3M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=227.3M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=5.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=15, rowsDroppedActual=12, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=56.8M, avgNextNanosActual=180) -│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=15, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=227.2M, nextCallCountActual=15, nextTimeNanosActual=459, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=15, firstRowTimeNanosActual=54.2K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=227.2M, closeCountActual=1, maxRightRowsPerLeftActual=5, inputRowsActual=18, rowsDroppedActual=3, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=67.7M, stddevActual=8.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.88, avgHasNextNanosActual=13.4M, avgNextNanosActual=31, leftRowsProbedActual=3, rightRowsScannedActual=15, avgRightRowsPerLeftActual=5.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.00, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K, resultSizeActual=3, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=3, inputRowsActual=40.2K, rowsDroppedActual=40.2K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=118.5K, stddevActual=344, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=12.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=227.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=39, indexHitRateActual=1.00) [left] -│ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, resultSizeActual=3, hasNextCallCountActual=40.2K, hasNextTrueCountActual=3, hasNextTimeNanosActual=135.1M, nextCallCountActual=3, nextTimeNanosActual=83, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=40.2K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.6K, exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, openCountActual=40.2K, exprTrueCountActual=3, lastRowTimeNanosActual=3.2K, closeCountActual=40.2K, exprEvalTimeNanosActual=31.8M, inputRowsActual=40.2K, rowsDroppedActual=40.2K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] -│ ║ │ ├── ListMemberOperator (exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, exprTrueCountActual=3, exprEvalTimeNanosActual=29.2M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Author 1") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Author 2") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Author 3") (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=40.2K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=19.0M, nextCallCountActual=40.2K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=1.4K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=36, indexHitRateActual=0.50) -│ ║ │ s: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=257.2K, resultSizeActual=15, hasNextCallCountActual=42, hasNextTrueCountActual=39, hasNextTimeNanosActual=5.0K, nextCallCountActual=15, nextTimeNanosActual=666, sourceRowsScannedActual=18, sourceRowsMatchedActual=15, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=625, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.2K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=119, avgNextNanosActual=44, indexHitRateActual=0.83) [right] -│ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (bookCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_37213f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (bookCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=37.2M, nextCallCountActual=3, nextTimeNanosActual=875, firstRowTimeNanosActual=37.2M, openCountActual=1, lastRowTimeNanosActual=37.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=9.3M, avgNextNanosActual=292) + ├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=37.2M, nextCallCountActual=3, nextTimeNanosActual=666, firstRowTimeNanosActual=37.2M, openCountActual=1, lastRowTimeNanosActual=37.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=9.3M, avgNextNanosActual=222) + │ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=37.2M, nextCallCountActual=3, nextTimeNanosActual=250, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=37.2M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=37.2M, closeCountActual=1, exprEvalTimeNanosActual=3.5K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=9.3M, avgNextNanosActual=83, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=3.1K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_4321e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.9K, hasNextFalseCountActual=0) + │ ║ └── Group (author) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=37.2M, nextCallCountActual=3, nextTimeNanosActual=416, aggregateEvalCountActual=30, firstRowTimeNanosActual=37.2M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=37.2M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=5.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=15, rowsDroppedActual=12, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=9.3M, avgNextNanosActual=139) + │ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=15, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=37.1M, nextCallCountActual=15, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=15, firstRowTimeNanosActual=37.2K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=37.1M, closeCountActual=1, maxRightRowsPerLeftActual=5, inputRowsActual=18, rowsDroppedActual=3, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=73.4M, stddevActual=8.6K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.88, avgHasNextNanosActual=2.2M, avgNextNanosActual=14, leftRowsProbedActual=3, rightRowsScannedActual=15, avgRightRowsPerLeftActual=5.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.00, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=40, resultSizeActual=3, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=6, joinRightBindingsConsumedActual=3, inputRowsActual=6, rowsDroppedActual=3, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=45.0M, stddevActual=6.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=6, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ │ ╠══ Filter (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=37.0M, nextCallCountActual=3, nextTimeNanosActual=125, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=45.3K, plannedFilterEvidenceCount=25.1M, plannedAccessRows=45.8K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=17.9K, exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=37.1M, closeCountActual=1, exprEvalTimeNanosActual=30.0M, inputRowsActual=45.3K, rowsDroppedActual=45.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=9.3M, avgNextNanosActual=42, filterRejectRateActual=1.00) [left] + │ ║ │ ║ ├── ListMemberOperator (exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, exprTrueCountActual=3, exprEvalTimeNanosActual=27.2M, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="Author 1") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="Author 2") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="Author 3") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.4M, nextCallCountActual=45.3K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=37.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=75, avgNextNanosActual=33, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=40.3K, resultSizeActual=3, hasNextCallCountActual=6, hasNextTrueCountActual=3, hasNextTimeNanosActual=3.5K, nextCallCountActual=3, nextTimeNanosActual=1000, sourceRowsScannedActual=6, sourceRowsMatchedActual=3, sourceRowsFilteredActual=3, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[author, authorName], sharedJoinVars=[author], firstRowTimeNanosActual=750, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=6.0K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=583, avgNextNanosActual=333, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) (hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=257.2K, resultSizeActual=15, hasNextCallCountActual=42, hasNextTrueCountActual=39, hasNextTimeNanosActual=5.9K, nextCallCountActual=15, nextTimeNanosActual=1.0K, sourceRowsScannedActual=18, sourceRowsMatchedActual=15, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=666, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=4.6K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=142, avgNextNanosActual=69, indexHitRateActual=0.83) [right] + │ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_4321e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (bookCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_4321e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (bookCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3422,54 +3745,54 @@ Projection ║ ProjectionElem "author" ║ ProjectionElem "bookCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (author) -│ ║ LeftJoin -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.1K) [left] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=51.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ s: Var (name=author) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) -│ ║ │ ╚══ Filter (resultSizeEstimate=2.1K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[author], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ├── ListMemberOperator -│ ║ │ │ Var (name=authorName) (bindingState=bound) -│ ║ │ │ ValueConstant (value="Author 1") -│ ║ │ │ ValueConstant (value="Author 2") -│ ║ │ │ ValueConstant (value="Author 3") -│ ║ │ └── StatementPattern (resultSizeEstimate=45.3K) -│ ║ │ s: Var (name=author) (bindingState=bound) -│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ │ o: Var (name=authorName) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] -│ ║ s: Var (name=book) (bindingState=unbound) -│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) -│ ║ o: Var (name=author) (bindingState=bound) -│ ║ GroupElem (_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456) -│ ║ Count -│ ║ Var (name=book) (bindingState=bound) -│ ║ GroupElem (bookCount) -│ ║ Count (Distinct) -│ ║ Var (name=book) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_77213f2fe36952f541b08a42a7b8ce15e70d0123456) -│ Count -│ Var (name=book) (bindingState=unbound) -└── ExtensionElem (bookCount) -Count (Distinct) -Var (name=book) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8321e226babdcc344c88a5a61806b6a8e7f301234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=40) [left] + │ ║ │ ╠══ Filter (resultSizeEstimate=3.00, plannedFilterEvidenceCount=25.1M, plannedAccessRows=45.8K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ ├── ListMemberOperator + │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Author 1") + │ ║ │ ║ │ ValueConstant (value="Author 2") + │ ║ │ ║ │ ValueConstant (value="Author 3") + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ s: Var (name=author) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[author, authorName], sharedJoinVars=[author]) [right] + │ ║ │ s: Var (name=author) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_e1dd2069_uri, value=http://example.com/theme/library/Author, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=bound) + │ ║ GroupElem (_anon_having_8321e226babdcc344c88a5a61806b6a8e7f301234567) + │ ║ Count + │ ║ Var (name=book) (bindingState=bound) + │ ║ GroupElem (bookCount) + │ ║ Count (Distinct) + │ ║ Var (name=book) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8321e226babdcc344c88a5a61806b6a8e7f301234567) + │ Count + │ Var (name=book) (bindingState=unbound) + └── ExtensionElem (bookCount) + Count (Distinct) + Var (name=book) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { -?author a . -?author ?authorName . -FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) -OPTIONAL { -?book ?author . -} + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . + OPTIONAL { + ?book ?author . + } } GROUP BY ?author HAVING (COUNT(?book) > 0) @@ -3477,7 +3800,7 @@ HAVING (COUNT(?book) > 0) Theme: LIBRARY z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 92 ms +Initial explain execution time: 96 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -3488,51 +3811,51 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 54 ms +Fastest execution time: 55 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=82.3M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=1.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=85.4M, nextCallCountActual=1, nextTimeNanosActual=2.3K, firstRowTimeNanosActual=85.4M, openCountActual=1, lastRowTimeNanosActual=85.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=42.7M, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=709, firstRowTimeNanosActual=82.3M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=709) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=82.3M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.9K, firstRowTimeNanosActual=82.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=82.3M, maxGroupSizeActual=7.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=8.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.9K, rowsDroppedActual=7.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.2M, avgNextNanosActual=542) -│ ╠══ Difference (resultSizeActual=7.9K, hasNextCallCountActual=7.9K, hasNextTrueCountActual=7.9K, hasNextTimeNanosActual=77.7M, nextCallCountActual=7.9K, nextTimeNanosActual=91.6K, firstRowTimeNanosActual=39.8M, openCountActual=1, lastRowTimeNanosActual=82.3M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.2K, rowsDroppedActual=3.3K, selectivityActual=0.71, expansionFactorActual=0.71, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.8K, avgNextNanosActual=12, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=1.1K, overlapRowsActual=2.1K) -│ ║ ├── Filter (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=33.1M, nextCallCountActual=10.1K, nextTimeNanosActual=127.9K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.5K, exprEvalCountActual=10.1K, openCountActual=1, exprTrueCountActual=10.1K, lastRowTimeNanosActual=82.3M, closeCountActual=1, exprEvalTimeNanosActual=6.2M, inputRowsActual=10.1K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=13, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=10.1K, exprTrueCountActual=10.1K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optDue) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=26.1M, nextCallCountActual=10.1K, nextTimeNanosActual=107.7K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, firstRowTimeNanosActual=48.2K, leftRowsWithMatchActual=10.1K, openCountActual=1, lastRowTimeNanosActual=82.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=11, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=20.3K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=20.3K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] -│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=579.3K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=23.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=82.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=57, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.4M, nextCallCountActual=10.1K, nextTimeNanosActual=521.8K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=541, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=51, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=7.2M, nextCallCountActual=10.1K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=500, openCountActual=10.1K, lastRowTimeNanosActual=2.7K, closeCountActual=10.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=359, avgNextNanosActual=148) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=649.6K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=2.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233, avgNextNanosActual=64, indexHitRateActual=0.50) -│ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optDue) (hasNextFalseCountActual=0) -│ ║ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=38.4M, nextCallCountActual=1.1K, nextTimeNanosActual=15.8K, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=44.2K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=33.8M, exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=39.2M, closeCountActual=1, exprEvalTimeNanosActual=31.5M, inputRowsActual=45.3K, rowsDroppedActual=44.2K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=34.6K, avgNextNanosActual=14, filterRejectRateActual=0.98) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=29.0M, hasNextFalseCountActual=0) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=24.2M, hasNextFalseCountActual=0) -│ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=20.5M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="member 1") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.5M, nextCallCountActual=45.3K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=39.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=78, avgNextNanosActual=29, indexHitRateActual=1.00) -│ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=85.4M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=85.4M, openCountActual=1, lastRowTimeNanosActual=85.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=42.7M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=85.4M, nextCallCountActual=1, nextTimeNanosActual=709, aggregateEvalCountActual=7.9K, firstRowTimeNanosActual=85.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=85.5M, maxGroupSizeActual=7.9K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=8.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.9K, rowsDroppedActual=7.9K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=42.7M, avgNextNanosActual=709) + │ ╠══ Difference (resultSizeActual=7.9K, hasNextCallCountActual=7.9K, hasNextTrueCountActual=7.9K, hasNextTimeNanosActual=80.6M, nextCallCountActual=7.9K, nextTimeNanosActual=89.7K, firstRowTimeNanosActual=42.7M, openCountActual=1, lastRowTimeNanosActual=85.4M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.2K, rowsDroppedActual=3.3K, selectivityActual=0.71, expansionFactorActual=0.71, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.1K, avgNextNanosActual=11, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=1.1K, overlapRowsActual=2.1K) + │ ║ ├── Filter (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=32.9M, nextCallCountActual=10.1K, nextTimeNanosActual=140.7K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=49.7K, exprEvalCountActual=10.1K, openCountActual=1, exprTrueCountActual=10.1K, lastRowTimeNanosActual=85.3M, closeCountActual=1, exprEvalTimeNanosActual=5.5M, inputRowsActual=10.1K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.2K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=10.1K, exprTrueCountActual=10.1K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optDue) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=834, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=26.7M, nextCallCountActual=10.1K, nextTimeNanosActual=104.5K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, firstRowTimeNanosActual=46.6K, leftRowsWithMatchActual=10.1K, openCountActual=1, lastRowTimeNanosActual=85.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=10, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=20.3K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=20.3K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=603.1K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=21.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=85.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=550.4K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan], firstRowTimeNanosActual=583, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=4.0K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=54, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=7.4M, nextCallCountActual=10.1K, nextTimeNanosActual=1.5M, firstRowTimeNanosActual=625, openCountActual=10.1K, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=368, avgNextNanosActual=153) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=701.2K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=2.9K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=235, avgNextNanosActual=69, indexHitRateActual=0.50) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optDue) (hasNextFalseCountActual=0) + │ ║ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=41.5M, nextCallCountActual=1.1K, nextTimeNanosActual=11.7K, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=44.2K, plannedFilterEvidenceCount=11.7M, plannedFilterPassRatio=0.02, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=36.9M, exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=42.2M, closeCountActual=1, exprEvalTimeNanosActual=33.8M, inputRowsActual=45.3K, rowsDroppedActual=44.2K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=37.4K, avgNextNanosActual=11, filterRejectRateActual=0.98) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=44.2K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=31.0M, hasNextFalseCountActual=0) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=26.1M, hasNextFalseCountActual=0) + │ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=21.9M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="member 1") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.4M, nextCallCountActual=45.3K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=7.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=42.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=76, avgNextNanosActual=39, indexHitRateActual=1.00) + │ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3540,109 +3863,117 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optDue) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="2024-01-10"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) -│ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ │ s: Var (name=loan) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) -│ ║ │ ║ s: Var (name=loan) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) -│ ║ │ ║ o: Var (name=due) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optDue) -│ ║ │ Var (name=due) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) -│ ║ ║ │ Str -│ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="member 1") -│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) -│ ║ s: Var (name=member) (bindingState=unbound) -│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ o: Var (name=name) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=loan) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=loan) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optDue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="2024-01-10"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ │ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] + │ ║ │ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ ║ o: Var (name=due) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optDue) + │ ║ │ Var (name=due) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=11.8M, plannedFilterPassRatio=0.02, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="member 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=member) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { -?loan ?member . -?loan a . -OPTIONAL { -?loan ?due . -BIND(?due AS ?optDue) -} -FILTER (?optDue > "2024-01-10"^^) -MINUS { -?member ?name . -FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) -} + ?loan ?member . + ?loan a . + OPTIONAL { + ?loan ?due . + BIND(?due AS ?optDue) + } + FILTER (?optDue > "2024-01-10"^^) + MINUS { + ?member ?name . + FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) + } } Theme: LIBRARY z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 848 ms -Warmup execution 1/2 -Warmup execution 2/2 -Fastest execution time: 447 ms +Initial explain execution time: 105 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 71 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.1M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=836.1M, openCountActual=1, lastRowTimeNanosActual=836.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.1M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=108.8M, nextCallCountActual=1, nextTimeNanosActual=6.7K, firstRowTimeNanosActual=108.8M, openCountActual=1, lastRowTimeNanosActual=108.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=54.4M, avgNextNanosActual=6.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.1M, nextCallCountActual=1, nextTimeNanosActual=958, firstRowTimeNanosActual=836.1M, openCountActual=1, lastRowTimeNanosActual=836.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.1M, avgNextNanosActual=958) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=836.0M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=836.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=836.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=418.0M, avgNextNanosActual=542, avgGroupSizeActual=0) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=836.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=836.0M) -│ ║ ├── Exists (hasNextFalseCountActual=0) -│ ║ │ StatementPattern (resultSizeEstimate=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) -│ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=836.0M, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=836.0M, leftRowsProbedActual=0, rightRowsScannedActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=0, joinRightIteratorsCreatedActual=128.8K, joinLeftBindingsConsumedActual=128.8K, inputRowsActual=128.8K, rowsDroppedActual=128.8K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=128.8K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] -│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=15.1M, nextCallCountActual=128.8K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=836.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=47, indexHitRateActual=1.00) [left] -│ ║ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=133.3K, resultSizeActual=0, hasNextCallCountActual=128.8K, hasNextTimeNanosActual=500.3M, sourceRowsScannedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], filterSelectivitySource=cardinality, plannedLookupComponents=[S, O, P], exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=3.8K, closeCountActual=128.8K, exprEvalTimeNanosActual=105.6M, inputRowsActual=128.8K, rowsDroppedActual=128.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.9K, filterRejectRateActual=1.00) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=97.6M, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=82.5M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="Book 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="Book 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=257.7K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=76.8M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=257.7K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=128.8K, openCountActual=128.8K, lastRowTimeNanosActual=1.5K, closeCountActual=128.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=128.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=298, avgNextNanosActual=39, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=title) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=108.8M, nextCallCountActual=1, nextTimeNanosActual=6.0K, firstRowTimeNanosActual=108.8M, openCountActual=1, lastRowTimeNanosActual=108.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=54.4M, avgNextNanosActual=6.0K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=108.8M, nextCallCountActual=1, nextTimeNanosActual=84, firstRowTimeNanosActual=108.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=108.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=54.4M, avgNextNanosActual=84, avgGroupSizeActual=0) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=108.7M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=108.8M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=108.8M) + │ ║ ├── Exists (hasNextFalseCountActual=0) + │ ║ │ StatementPattern (resultSizeEstimate=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) + │ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=108.7M, openCountActual=1, lastRowTimeNanosActual=108.7M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=108.8M, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K, resultSizeActual=0, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=130.6K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=108.7M, sourceRowsScannedActual=128.8K, sourceRowsFilteredActual=128.8K, plannedFilterEvidenceCount=23.7M, plannedAccessRows=130.6K, plannedFilterPassRatio=0, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, openCountActual=1, lastRowTimeNanosActual=108.7M, closeCountActual=1, exprEvalTimeNanosActual=86.3M, inputRowsActual=128.8K, rowsDroppedActual=128.8K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=108.8M, filterRejectRateActual=1.00) [left] + │ ║ ║ │ ╠══ Or (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=78.0M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ├── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=64.3M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ValueConstant (value="Book 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── Compare (=) (exprEvalCountActual=128.8K, exprFalseCountActual=128.8K, exprEvalTimeNanosActual=5.6M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=title) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="Book 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=128.9K, resultSizeActual=128.8K, hasNextCallCountActual=128.8K, hasNextTrueCountActual=128.8K, hasNextTimeNanosActual=10.7M, nextCallCountActual=128.8K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=128.8K, sourceRowsMatchedActual=128.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=12.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=108.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=84, avgNextNanosActual=39, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=title) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern (resultSizeEstimate=133.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[book, title], sharedJoinVars=[book], varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3650,60 +3981,60 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Exists -│ ║ │ StatementPattern (resultSizeEstimate=386.3K) -│ ║ │ s: Var (name=book) (bindingState=bound) -│ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) -│ ║ │ o: Var (name=copy) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] -│ ║ ║ ├── StatementPattern (resultSizeEstimate=128.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=141.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ s: Var (name=book) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) -│ ║ ║ └── Filter (resultSizeEstimate=133.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[book], filterSelectivitySource=cardinality, plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (=) -│ ║ ║ ║ │ Var (name=title) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="Book 1") -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=title) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="Book 2") -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) -│ ║ ║ s: Var (name=book) (bindingState=bound) -│ ║ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) -│ ║ ║ o: Var (name=title) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] -│ ║ s: Var (name=book) (bindingState=bound) -│ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) -│ ║ o: Var (name=author) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=book) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=book) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=133.3K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=130.6K, plannedFilterEvidenceCount=23.8M, plannedAccessRows=130.6K, plannedFilterPassRatio=0, plannedIndexPrefixLength=1.00, plannedWorkRows=130.6K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=title) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Book 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=title) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Book 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=128.9K) + │ ║ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ ║ │ o: Var (name=title) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=133.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[book, title], sharedJoinVars=[book]) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=257.2K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ o: Var (name=author) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=book) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=book) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { -?book a . -?book ?title . -FILTER ((?title = "Book 1") || (?title = "Book 2")) -OPTIONAL { -?book ?author . -} -FILTER EXISTS { -?book ?copy . -} + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + ?book a . + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } } Theme: LIBRARY z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 66 ms +Initial explain execution time: 16 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -3714,56 +4045,46 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 35 ms +Fastest execution time: 9 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=61.6M, openCountActual=1, lastRowTimeNanosActual=61.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=2.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.3M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=9.3M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=1.2K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=61.6M, openCountActual=1, lastRowTimeNanosActual=61.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=1.0K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=61.6M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=217, firstRowTimeNanosActual=61.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=61.6M, maxGroupSizeActual=217, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=217, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=217, rowsDroppedActual=216, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=30.8M, avgNextNanosActual=708) -│ ╠══ Filter (resultSizeActual=217, hasNextCallCountActual=219, hasNextTrueCountActual=218, hasNextTimeNanosActual=61.3M, nextCallCountActual=217, nextTimeNanosActual=2.7K, sourceRowsScannedActual=217, sourceRowsMatchedActual=217, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=845.5K, exprEvalCountActual=217, openCountActual=1, exprTrueCountActual=217, lastRowTimeNanosActual=61.6M, closeCountActual=1, exprEvalTimeNanosActual=924.3K, inputRowsActual=217, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=280.0K, avgNextNanosActual=13, filterRejectRateActual=0) -│ ║ ├── Not (exprEvalCountActual=217, exprTrueCountActual=217, exprEvalTimeNanosActual=907.9K, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=890.1K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=217, hasNextTimeNanosActual=549.8K, sourceRowsScannedActual=217, sourceRowsFilteredActual=217, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=217, exprFalseCountActual=217, openCountActual=217, lastRowTimeNanosActual=2.7K, closeCountActual=217, exprEvalTimeNanosActual=107.1K, inputRowsActual=217, rowsDroppedActual=217, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.5K, filterRejectRateActual=1.00) -│ ║ │ ╠══ Compare (<) (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=97.8K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=217, hasNextCallCountActual=434, hasNextTrueCountActual=217, hasNextTimeNanosActual=98.5K, nextCallCountActual=217, nextTimeNanosActual=7.9K, sourceRowsScannedActual=434, sourceRowsMatchedActual=217, sourceRowsFilteredActual=217, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=217, openCountActual=217, lastRowTimeNanosActual=1.5K, closeCountActual=217, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=36, indexHitRateActual=0.50) -│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M, resultSizeActual=217, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=217, inputRowsActual=10.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.02, sampleCountActual=2, varianceActual=0.46, stddevActual=0.68, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=217) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=10.1K, joinType=Cartesian product, inputRowsActual=10.1K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.06, stddevActual=0.25, confidenceScoreActual=0.62, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=10.2K, joinOutputPerLeftActual=10.2K) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=17.2K, nextCallCountActual=1, nextTimeNanosActual=5.2K, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=7.8K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=61.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.6K, avgNextNanosActual=5.3K) [left] -│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=15.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.5M, nextCallCountActual=10.1K, nextTimeNanosActual=892.0K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=due) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=10.2K) -│ ║ ║ Var (name=loan) -│ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) -│ ║ ║ Var (name=due) -│ ║ ║ , firstRowTimeNanosActual=12.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=61.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=156, avgNextNanosActual=88, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Filter (resultSizeEstimate=511, resultSizeActual=217, hasNextCallCountActual=10.3K, hasNextTrueCountActual=217, hasNextTimeNanosActual=34.3M, nextCallCountActual=217, nextTimeNanosActual=3.8K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=217, sourceRowsFilteredActual=9.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=917, exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, openCountActual=10.1K, exprTrueCountActual=217, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, exprEvalTimeNanosActual=6.5M, inputRowsActual=10.1K, rowsDroppedActual=9.9K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.02, avgHasNextNanosActual=3.3K, avgNextNanosActual=18, filterRejectRateActual=0.98) [right] -│ ║ ├── ListMemberOperator (exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, exprTrueCountActual=217, exprEvalTimeNanosActual=5.9M, hasNextFalseCountActual=0) -│ ║ │ Var (name=loanDate) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=10.1K, exprEvalTimeNanosActual=231.6K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="2024-01-02"^^) (exprEvalCountActual=10.0K, exprEvalTimeNanosActual=260.4K, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.5M, nextCallCountActual=10.1K, nextTimeNanosActual=384.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=1.1K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=272, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=loanDate) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.3M, nextCallCountActual=1, nextTimeNanosActual=583, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=583) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.3M, nextCallCountActual=1, nextTimeNanosActual=333, aggregateEvalCountActual=217, firstRowTimeNanosActual=9.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, maxGroupSizeActual=217, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=217, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=217, rowsDroppedActual=216, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=333) + │ ╠══ Filter (resultSizeActual=217, hasNextCallCountActual=219, hasNextTrueCountActual=218, hasNextTimeNanosActual=9.1M, nextCallCountActual=217, nextTimeNanosActual=2.7K, sourceRowsScannedActual=217, sourceRowsMatchedActual=217, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=147.2K, exprEvalCountActual=217, openCountActual=1, exprTrueCountActual=217, lastRowTimeNanosActual=9.3M, closeCountActual=1, exprEvalTimeNanosActual=965.8K, inputRowsActual=217, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=41.7K, avgNextNanosActual=13, filterRejectRateActual=0) + │ ║ ├── Not (exprEvalCountActual=217, exprTrueCountActual=217, exprEvalTimeNanosActual=946.8K, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=933.0K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=217, hasNextTimeNanosActual=581.5K, sourceRowsScannedActual=217, sourceRowsFilteredActual=217, plannedFilterEvidenceCount=273.6K, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=217, exprFalseCountActual=217, openCountActual=217, lastRowTimeNanosActual=3.0K, closeCountActual=217, exprEvalTimeNanosActual=99.9K, inputRowsActual=217, rowsDroppedActual=217, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.7K, filterRejectRateActual=1.00) + │ ║ │ ╠══ Compare (<) (exprEvalCountActual=217, exprFalseCountActual=217, exprEvalTimeNanosActual=91.7K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=217, hasNextCallCountActual=434, hasNextTrueCountActual=217, hasNextTimeNanosActual=113.6K, nextCallCountActual=217, nextTimeNanosActual=12.7K, sourceRowsScannedActual=434, sourceRowsMatchedActual=217, sourceRowsFilteredActual=217, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=217, openCountActual=217, lastRowTimeNanosActual=1.5K, closeCountActual=217, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=262, avgNextNanosActual=59, indexHitRateActual=0.50) + │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=219, resultSizeActual=217, joinRightIteratorsCreatedActual=217, joinRightBindingsConsumedActual=217, joinType=Cartesian product, inputRowsActual=434, rowsDroppedActual=217, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=11.7K, stddevActual=108, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=217) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=219, resultSizeActual=217, joinRightIteratorsCreatedActual=217, joinLeftBindingsConsumedActual=217, joinRightBindingsConsumedActual=217, inputRowsActual=434, rowsDroppedActual=217, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=524, stddevActual=23, confidenceScoreActual=0.08, hasNextFalseCountActual=0, leftRowsProbedActual=217, rightRowsScannedActual=217, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=217, resultSizeActual=217, hasNextCallCountActual=218, hasNextTrueCountActual=217, hasNextTimeNanosActual=7.5M, nextCallCountActual=217, nextTimeNanosActual=7.6K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=217, sourceRowsFilteredActual=9.9K, plannedFilterEvidenceCount=12.8M, plannedAccessRows=10.1K, plannedFilterPassRatio=0.02, plannedIndexPrefixLength=1.00, plannedWorkRows=10.1K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=118.9K, exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, openCountActual=1, exprTrueCountActual=217, lastRowTimeNanosActual=9.3M, closeCountActual=1, exprEvalTimeNanosActual=5.8M, inputRowsActual=10.1K, rowsDroppedActual=9.9K, selectivityActual=0.02, expansionFactorActual=0.02, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=34.7K, avgNextNanosActual=35, filterRejectRateActual=0.98) [left] + │ ║ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=10.1K, exprFalseCountActual=9.9K, exprTrueCountActual=217, exprEvalTimeNanosActual=5.2M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) (exprEvalCountActual=10.1K, exprEvalTimeNanosActual=312.3K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) (exprEvalCountActual=10.0K, exprEvalTimeNanosActual=212.2K, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=737.2K, nextCallCountActual=10.1K, nextTimeNanosActual=422.4K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=7.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=9.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=73, avgNextNanosActual=42, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=217, hasNextCallCountActual=434, hasNextTrueCountActual=217, hasNextTimeNanosActual=258.4K, nextCallCountActual=217, nextTimeNanosActual=10.7K, sourceRowsScannedActual=434, sourceRowsMatchedActual=217, sourceRowsFilteredActual=217, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_f4588bfc_uri, loan, loanDate], firstRowTimeNanosActual=958, indexLookupCountActual=217, openCountActual=217, lastRowTimeNanosActual=10.6K, closeCountActual=217, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=595, avgNextNanosActual=50, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, resultSizeActual=217, hasNextCallCountActual=434, hasNextTrueCountActual=217, hasNextTimeNanosActual=33.6K, nextCallCountActual=217, nextTimeNanosActual=3.2K, plannedWorkRows=1.00, plannedBoundVars=[_const_6cf0e34e_uri, _const_f4588bfc_uri, _const_f5e5585a_uri, loan, loanDate], firstRowTimeNanosActual=167, openCountActual=217, bindingsProvidedActual=217, lastRowTimeNanosActual=9.1K, closeCountActual=217, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=217, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=77, avgNextNanosActual=15) [right] + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3771,121 +4092,111 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ ├── Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (<) -│ ║ │ ║ Var (name=due) (bindingState=bound) -│ ║ │ ║ Var (name=threshold) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) -│ ║ │ s: Var (name=loan) (bindingState=bound) -│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) -│ ║ │ o: Var (name=due) (bindingState=unbound) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=5.1M) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, joinType=Cartesian product) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ └── StatementPattern (resultSizeEstimate=15.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=22.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=due) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=10.2K) -│ ║ ║ Var (name=loan) -│ ║ ║ Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) -│ ║ ║ Var (name=due) -│ ║ ║ ) -│ ║ ║ s: Var (name=loan) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) -│ ║ ╚══ Filter (resultSizeEstimate=511, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[loan, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=loanDate) (bindingState=bound) -│ ║ │ ValueConstant (value="2024-01-01"^^) -│ ║ │ ValueConstant (value="2024-01-02"^^) -│ ║ └── StatementPattern (resultSizeEstimate=10.2K) -│ ║ s: Var (name=loan) (bindingState=bound) -│ ║ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) -│ ║ o: Var (name=loanDate) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=loan) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=loan) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=273.8K, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=due) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=219, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=219) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=217, plannedFilterEvidenceCount=12.8M, plannedAccessRows=10.1K, plannedFilterPassRatio=0.02, plannedIndexPrefixLength=1.00, plannedWorkRows=10.1K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=loanDate) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="2024-01-01"^^) + │ ║ ║ │ ║ ValueConstant (value="2024-01-02"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K) + │ ║ ║ │ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f4588bfc_uri, value=http://example.com/theme/library/loanDate, anonymous) + │ ║ ║ │ o: Var (name=loanDate) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_f4588bfc_uri, loan, loanDate]) [right] + │ ║ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="2024-01-01"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_6cf0e34e_uri, _const_f4588bfc_uri, _const_f5e5585a_uri, loan, loanDate]) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=loan) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=loan) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { -VALUES ?threshold { "2024-01-01"^^ } -?loan a . -?loan ?loanDate . -FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) -FILTER NOT EXISTS { -?loan ?due . -FILTER (?due < ?threshold) -} + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } } Theme: LIBRARY z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 30007 ms +Initial explain execution time: 30003 ms Timed out while retrieving explanation! Explanation may be incomplete! You can change the timeout by setting .setMaxExecutionTime(...) on your query. -Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29995.0M, openCountActual=1, lastRowTimeNanosActual=29995.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29995.0M) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "member" (hasNextFalseCountActual=0) ║ ProjectionElem "loanCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) -├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29998.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=29998.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) -│ ║ ├── Compare (>) (hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.4K, hasNextFalseCountActual=0) -│ ║ └── Group (member) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29998.6M, aggregateEvalCountActual=54.0M, groupsCreatedActual=5.0K, openCountActual=1, lastRowTimeNanosActual=29998.6M, maxGroupSizeActual=10.1K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=5.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=27.0M, rowsDroppedActual=27.0M, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29998.6M) -│ ║ Filter (resultSizeActual=27.0M, hasNextCallCountActual=27.0M, hasNextTrueCountActual=27.0M, hasNextTimeNanosActual=15679.6M, nextCallCountActual=27.0M, nextTimeNanosActual=306.4M, sourceRowsScannedActual=27.0M, sourceRowsMatchedActual=27.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=74.1K, exprEvalCountActual=27.0M, openCountActual=1, exprTrueCountActual=27.0M, lastRowTimeNanosActual=29997.6M, closeCountActual=1, exprEvalTimeNanosActual=3264.2M, inputRowsActual=27.0M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=581, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=27.0M, exprTrueCountActual=27.0M, exprEvalTimeNanosActual=1277.7M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=27.0M, hasNextCallCountActual=27.0M, hasNextTrueCountActual=27.0M, hasNextTimeNanosActual=10018.4M, nextCallCountActual=27.0M, nextTimeNanosActual=350.3M, joinRightIteratorsCreatedActual=12.8K, joinLeftBindingsConsumedActual=12.8K, joinRightBindingsConsumedActual=27.0M, firstRowTimeNanosActual=21.4K, leftRowsWithMatchActual=12.8K, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, maxRightRowsPerLeftActual=10.1K, inputRowsActual=27.0M, rowsDroppedActual=12.8K, expansionFactorActual=1.00, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=371, avgNextNanosActual=13, leftRowsProbedActual=12.8K, rightRowsScannedActual=27.0M, avgRightRowsPerLeftActual=2.1K, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.1K, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=12.8K, hasNextCallCountActual=12.8K, hasNextTrueCountActual=12.8K, hasNextTimeNanosActual=16.8M, nextCallCountActual=12.8K, nextTimeNanosActual=322.0K, firstRowTimeNanosActual=17.7K, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, sampleCountActual=2, varianceActual=0.20, stddevActual=0.45, confidenceScoreActual=0.58, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=25, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=2.6K, leftRowsOutputContributionActual=10.1K, rightRowsOutputContributionActual=2.6K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=569.7K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=13.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=39.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=107, avgNextNanosActual=56, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.9M, nextCallCountActual=10.1K, nextTimeNanosActual=548.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=459, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.0K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=291, avgNextNanosActual=54, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.1K, resultSizeActual=2.6K, hasNextCallCountActual=2.6K, hasNextTrueCountActual=2.6K, hasNextTimeNanosActual=1.4M, nextCallCountActual=2.6K, nextTimeNanosActual=329.0K, sourceRowsScannedActual=2.6K, sourceRowsMatchedActual=2.6K, plannedIndexName=ospc, firstRowTimeNanosActual=39.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=29997.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=564, avgNextNanosActual=124, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=27.0M, hasNextCallCountActual=81.0M, hasNextTrueCountActual=80.9M, hasNextTimeNanosActual=5461.0M, nextCallCountActual=27.0M, nextTimeNanosActual=2403.3M, firstRowTimeNanosActual=1.3K, openCountActual=12.8K, lastRowTimeNanosActual=5.4M, closeCountActual=12.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12.8K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=67, avgNextNanosActual=89) [right] -│ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=27.0M, hasNextCallCountActual=81.0M, hasNextTrueCountActual=80.9M, hasNextTimeNanosActual=3327.1M, nextCallCountActual=27.0M, nextTimeNanosActual=1122.4M, sourceRowsScannedActual=27.0M, sourceRowsMatchedActual=27.0M, sourceRowsFilteredActual=12.8K, plannedIndexName=psoc, firstRowTimeNanosActual=1.2K, indexLookupCountActual=12.8K, openCountActual=12.8K, lastRowTimeNanosActual=5.4M, closeCountActual=12.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12.8K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=41, avgNextNanosActual=42, indexHitRateActual=1.00) -│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optCopy) (hasNextFalseCountActual=0) -│ ║ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_39313f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (loanCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29995.0M, openCountActual=1, lastRowTimeNanosActual=29995.0M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29995.0M) + ├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29995.0M, openCountActual=1, lastRowTimeNanosActual=29995.0M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29995.0M) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29995.0M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=29995.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29995.0M) + │ ║ ├── Compare (>) (hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_6831e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=4.1K, hasNextFalseCountActual=0) + │ ║ └── Group (member) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29994.9M, aggregateEvalCountActual=50.8M, groupsCreatedActual=5.0K, openCountActual=1, lastRowTimeNanosActual=29995.0M, maxGroupSizeActual=10.1K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=5.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=25.4M, rowsDroppedActual=25.4M, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29995.0M) + │ ║ Filter (resultSizeActual=25.4M, hasNextCallCountActual=25.4M, hasNextTrueCountActual=25.4M, hasNextTimeNanosActual=15777.8M, nextCallCountActual=25.4M, nextTimeNanosActual=356.3M, sourceRowsScannedActual=25.4M, sourceRowsMatchedActual=25.4M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=52.4K, exprEvalCountActual=25.4M, openCountActual=1, exprTrueCountActual=25.4M, lastRowTimeNanosActual=29993.8M, closeCountActual=1, exprEvalTimeNanosActual=3526.6M, inputRowsActual=25.4M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=620, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=25.4M, exprTrueCountActual=25.4M, exprEvalTimeNanosActual=1086.3M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=25.4M, hasNextCallCountActual=25.4M, hasNextTrueCountActual=25.4M, hasNextTimeNanosActual=10054.6M, nextCallCountActual=25.4M, nextTimeNanosActual=379.4M, joinRightIteratorsCreatedActual=12.6K, joinLeftBindingsConsumedActual=12.6K, joinRightBindingsConsumedActual=25.4M, firstRowTimeNanosActual=20.1K, leftRowsWithMatchActual=12.6K, openCountActual=1, lastRowTimeNanosActual=29993.1M, closeCountActual=1, maxRightRowsPerLeftActual=10.1K, inputRowsActual=25.4M, rowsDroppedActual=12.6K, expansionFactorActual=1.00, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=395, avgNextNanosActual=15, leftRowsProbedActual=12.6K, rightRowsScannedActual=25.4M, avgRightRowsPerLeftActual=2.0K, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.0K, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=12.6K, hasNextCallCountActual=12.6K, hasNextTrueCountActual=12.6K, hasNextTimeNanosActual=17.1M, nextCallCountActual=12.6K, nextTimeNanosActual=315.6K, firstRowTimeNanosActual=14.8K, openCountActual=1, lastRowTimeNanosActual=29993.1M, closeCountActual=1, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4K, avgNextNanosActual=25, leftRowsConsumedActual=10.1K, rightRowsConsumedActual=2.5K, leftRowsOutputContributionActual=10.1K, rightRowsOutputContributionActual=2.5K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.1K, nextTimeNanosActual=614.1K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=21.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=38.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=60, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.9M, nextCallCountActual=10.1K, nextTimeNanosActual=553.2K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan], firstRowTimeNanosActual=500, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=3.3K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=245, avgNextNanosActual=54, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.1K, resultSizeActual=2.5K, hasNextCallCountActual=2.5K, hasNextTrueCountActual=2.5K, hasNextTimeNanosActual=2.2M, nextCallCountActual=2.5K, nextTimeNanosActual=516.2K, sourceRowsScannedActual=2.5K, sourceRowsMatchedActual=2.5K, plannedIndexName=ospc, firstRowTimeNanosActual=38.4M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=29993.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=903, avgNextNanosActual=206, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=25.4M, hasNextCallCountActual=76.2M, hasNextTrueCountActual=76.2M, hasNextTimeNanosActual=5096.7M, nextCallCountActual=25.4M, nextTimeNanosActual=2746.3M, firstRowTimeNanosActual=8.0K, openCountActual=12.6K, lastRowTimeNanosActual=2.5M, closeCountActual=12.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12.6K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=67, avgNextNanosActual=108) [right] + │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=25.4M, hasNextCallCountActual=76.2M, hasNextTrueCountActual=76.2M, hasNextTimeNanosActual=3000.9M, nextCallCountActual=25.4M, nextTimeNanosActual=1131.8M, sourceRowsScannedActual=25.4M, sourceRowsMatchedActual=25.4M, sourceRowsFilteredActual=12.6K, plannedIndexName=psoc, firstRowTimeNanosActual=7.9K, indexLookupCountActual=12.6K, openCountActual=12.6K, lastRowTimeNanosActual=2.5M, closeCountActual=12.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12.6K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=39, avgNextNanosActual=45, indexHitRateActual=1.00) + │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optCopy) (hasNextFalseCountActual=0) + │ ║ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_6831e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_6831e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (loanCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -3894,67 +4205,67 @@ Projection ║ ProjectionElem "member" ║ ProjectionElem "loanCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (member) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optCopy) (bindingState=bound) -│ ║ │ Var (name=member) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) -│ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ s: Var (name=loan) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) -│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) -│ ║ ║ s: Var (name=member) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=10.2K) -│ ║ │ s: Var (name=loan) (bindingState=bound) -│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) -│ ║ │ o: Var (name=copy) (bindingState=unbound) -│ ║ └── ExtensionElem (optCopy) -│ ║ Var (name=copy) (bindingState=bound) -│ ║ GroupElem (_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567) -│ ║ Count -│ ║ Var (name=loan) (bindingState=bound) -│ ║ GroupElem (loanCount) -│ ║ Count (Distinct) -│ ║ Var (name=loan) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_89313f2fe36952f541b08a42a7b8ce15e70d01234567) -│ Count -│ Var (name=loan) (bindingState=unbound) -└── ExtensionElem (loanCount) -Count (Distinct) -Var (name=loan) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_1931e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (member) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optCopy) (bindingState=bound) + │ ║ │ Var (name=member) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] + │ ║ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) + │ ║ ║ s: Var (name=member) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ └── ExtensionElem (optCopy) + │ ║ Var (name=copy) (bindingState=bound) + │ ║ GroupElem (_anon_having_1931e226babdcc344c88a5a61806b6a8e7f30) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_1931e226babdcc344c88a5a61806b6a8e7f30) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { -{ -?loan ?member . -?loan a . -} -UNION -{ -?member a . -} -OPTIONAL { -?loan ?copy . -BIND(?copy AS ?optCopy) -} -FILTER (?optCopy != ?member) + { + ?loan ?member . + ?loan a . + } + UNION + { + ?member a . + } + OPTIONAL { + ?loan ?copy . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?member) } GROUP BY ?member HAVING (COUNT(?loan) > 0) @@ -3962,62 +4273,65 @@ HAVING (COUNT(?loan) > 0) Theme: LIBRARY z_queryIndex: 7 === Explanation Telemetry === -Initial explain execution time: 3469 ms +Initial explain execution time: 30011 ms + +Timed out while retrieving explanation! Explanation may be incomplete! +You can change the timeout by setting .setMaxExecutionTime(...) on your query. -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=3450.3M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=5.0K) +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29993.6M, openCountActual=1, lastRowTimeNanosActual=29993.7M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29993.7M) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=3450.3M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=2.9K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3450.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, aggregateEvalCountActual=77.2K, firstRowTimeNanosActual=3450.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3450.3M, maxGroupSizeActual=77.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=77.3K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=77.2K, rowsDroppedActual=77.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1725.2M, avgNextNanosActual=1.2K) -│ ╠══ Difference (resultSizeActual=77.2K, hasNextCallCountActual=77.2K, hasNextTrueCountActual=77.2K, hasNextTimeNanosActual=3424.0M, nextCallCountActual=77.2K, nextTimeNanosActual=1.5M, firstRowTimeNanosActual=285.5M, openCountActual=1, lastRowTimeNanosActual=3450.3M, closeCountActual=1, inputRowsActual=231.5K, rowsDroppedActual=154.2K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=44.3K, avgNextNanosActual=20, leftRowsConsumedActual=154.4K, rightRowsConsumedActual=77.1K, overlapRowsActual=77.1K) -│ ║ ├── Filter (resultSizeActual=154.4K, hasNextCallCountActual=154.4K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=2974.6M, nextCallCountActual=154.4K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=154.4K, sourceRowsMatchedActual=154.4K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=84.3K, exprEvalCountActual=154.4K, openCountActual=1, exprTrueCountActual=154.4K, lastRowTimeNanosActual=3450.2M, closeCountActual=1, exprEvalTimeNanosActual=142.5M, inputRowsActual=154.4K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.3K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ │ ╠══ Exists (exprEvalCountActual=154.4K, exprTrueCountActual=154.4K, exprEvalTimeNanosActual=133.4M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=154.4K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=54.5M, sourceRowsScannedActual=154.4K, sourceRowsMatchedActual=154.4K, plannedIndexName=spoc, indexLookupCountActual=154.4K, openCountActual=154.4K, lastRowTimeNanosActual=417, closeCountActual=154.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=154.4K, joinRightIteratorsCreatedActual=386.3K, joinRightBindingsConsumedActual=154.4K, inputRowsActual=540.7K, rowsDroppedActual=386.3K, expansionFactorActual=0.29, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=154.4K) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K, resultSizeActual=386.3K, joinRightIteratorsCreatedActual=386.3K, joinLeftBindingsConsumedActual=386.3K, joinRightBindingsConsumedActual=386.3K, inputRowsActual=772.6K, rowsDroppedActual=386.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=386.3K, rightRowsScannedActual=386.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=389.0K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=48.6M, nextCallCountActual=386.3K, nextTimeNanosActual=17.0M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] -│ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) -│ ║ │ │ ║ Var (name=copy) -│ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) -│ ║ │ │ ║ , firstRowTimeNanosActual=23.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3450.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=126, avgNextNanosActual=44, indexHitRateActual=1.00) -│ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=202.7M, nextCallCountActual=386.3K, nextTimeNanosActual=14.5M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=6.3K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=262, avgNextNanosActual=38, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=0, resultSizeActual=154.4K, hasNextCallCountActual=540.7K, hasNextTrueCountActual=154.4K, hasNextTimeNanosActual=1336.7M, nextCallCountActual=154.4K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=154.4K, sourceRowsFilteredActual=231.9K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=386.3K, exprFalseCountActual=231.9K, openCountActual=386.3K, exprTrueCountActual=154.4K, lastRowTimeNanosActual=3.4K, closeCountActual=386.3K, exprEvalTimeNanosActual=93.3M, inputRowsActual=386.3K, rowsDroppedActual=231.9K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.29, avgHasNextNanosActual=2.5K, avgNextNanosActual=13, filterRejectRateActual=0.60) [right] -│ ║ │ ╠══ Or (exprEvalCountActual=386.3K, exprFalseCountActual=231.9K, exprTrueCountActual=154.4K, shortCircuitCountActual=77.1K, exprEvalTimeNanosActual=69.4M, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="Branch 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=309.2K, exprFalseCountActual=231.9K, exprTrueCountActual=77.2K, exprEvalTimeNanosActual=14.9M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="Branch 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=386.3K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=181.0M, nextCallCountActual=386.3K, nextTimeNanosActual=16.7M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=386.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=386.3K, openCountActual=386.3K, lastRowTimeNanosActual=1.0K, closeCountActual=386.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=386.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=43, indexHitRateActual=0.50) -│ ║ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=branchName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=77.1K, hasNextCallCountActual=77.1K, hasNextTrueCountActual=77.1K, hasNextTimeNanosActual=155.0M, nextCallCountActual=77.1K, nextTimeNanosActual=731.4K, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=77.1K, sourceRowsFilteredActual=309.2K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.1K, exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, openCountActual=1, exprTrueCountActual=77.1K, lastRowTimeNanosActual=200.7M, closeCountActual=1, exprEvalTimeNanosActual=93.8M, inputRowsActual=386.3K, rowsDroppedActual=309.2K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=9.49, filterRejectRateActual=0.80) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=70.2M, hasNextFalseCountActual=0) -│ ║ ║ ├── Str (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=21.1M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="branch/0") (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=26.6M, nextCallCountActual=386.3K, nextTimeNanosActual=12.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=200.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=69, avgNextNanosActual=32, indexHitRateActual=1.00) -│ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29993.6M, openCountActual=1, lastRowTimeNanosActual=29993.7M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29993.7M) + ├── Group () (resultSizeActual=0, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=29993.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=29993.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29993.7M, avgGroupSizeActual=0) + │ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=29993.6M, openCountActual=1, lastRowTimeNanosActual=29993.6M, closeCountActual=1, inputRowsActual=92.8K, rowsDroppedActual=92.8K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=29993.6M, leftRowsConsumedActual=15.7K, rightRowsConsumedActual=77.1K, overlapRowsActual=15.7K) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=15.7K, joinRightIteratorsCreatedActual=15.7K, joinRightBindingsConsumedActual=15.7K, inputRowsActual=31.5K, rowsDroppedActual=15.7K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=15.7K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=15.7K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=15.7K, inputRowsActual=15.7K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=15.7K, avgRightRowsPerLeftActual=15.8K, joinOutputPerLeftActual=15.8K) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=2.00, resultSizeActual=1, hasNextCallCountActual=1, hasNextTrueCountActual=1, hasNextTimeNanosActual=36.4M, nextCallCountActual=1, nextTimeNanosActual=583, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=40.2K, plannedFilterEvidenceCount=90.6K, plannedAccessRows=45.8K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=36.4M, exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, openCountActual=1, lastRowTimeNanosActual=29993.4M, exprTrueCountActual=1, closeCountActual=1, exprEvalTimeNanosActual=29.6M, inputRowsActual=40.2K, rowsDroppedActual=40.2K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=36.4M, avgNextNanosActual=583, filterRejectRateActual=1.00) [left] + │ ║ │ ║ │ ╠══ Or (exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, exprTrueCountActual=1, shortCircuitCountActual=1, exprEvalTimeNanosActual=26.6M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, exprTrueCountActual=1, exprEvalTimeNanosActual=21.9M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ │ ValueConstant (value="Branch 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.6K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ └── Compare (=) (exprEvalCountActual=40.2K, exprFalseCountActual=40.2K, exprEvalTimeNanosActual=1.9M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=branchName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="Branch 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3.2M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, plannedIndexName=psoc, firstRowTimeNanosActual=15.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=29993.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81, avgNextNanosActual=41, indexHitRateActual=1.00) + │ ║ │ ║ │ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=branchName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── Filter (resultSizeActual=15.7K, hasNextCallCountActual=15.7K, hasNextTrueCountActual=15.7K, hasNextTimeNanosActual=96.8M, nextCallCountActual=15.7K, nextTimeNanosActual=927.0K, sourceRowsScannedActual=15.7K, sourceRowsMatchedActual=15.7K, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=1.0M, plannedFilterPassRatio=0.43, filterSelectivitySource=learned_pattern, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=37.5K, exprEvalCountActual=15.7K, openCountActual=1, lastRowTimeNanosActual=29957.1M, exprTrueCountActual=15.7K, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=74.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=15.7K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.2K, avgNextNanosActual=59, filterRejectRateActual=0) [right] + │ ║ │ ║ ╠══ Exists (exprEvalCountActual=15.7K, exprTrueCountActual=15.7K, exprEvalTimeNanosActual=68.9M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ ║ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=0, hasNextCallCountActual=15.7K, hasNextTrueCountActual=15.7K, hasNextTimeNanosActual=31.0M, sourceRowsScannedActual=15.7K, sourceRowsMatchedActual=15.7K, plannedIndexName=spoc, indexLookupCountActual=15.7K, openCountActual=15.7K, lastRowTimeNanosActual=2.3K, closeCountActual=15.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.0K, indexHitRateActual=1.00) + │ ║ │ ║ ║ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=15.7K, hasNextCallCountActual=15.7K, hasNextTrueCountActual=15.7K, hasNextTimeNanosActual=12.1M, nextCallCountActual=15.7K, nextTimeNanosActual=5.5M, sourceRowsScannedActual=15.7K, sourceRowsMatchedActual=15.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[branch, branchName], unlockedFilters=Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ Var (name=copy) + │ ║ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ source=unknown, sharedJoinVars=[branch], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=29957.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=770, avgNextNanosActual=351, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=15.7K, hasNextCallCountActual=31.5K, hasNextTrueCountActual=15.7K, hasNextTimeNanosActual=22.8M, nextCallCountActual=15.7K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=31.5K, sourceRowsMatchedActual=15.7K, sourceRowsFilteredActual=15.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[branch, branchName, copy], sharedJoinVars=[copy], firstRowTimeNanosActual=500, indexLookupCountActual=15.7K, openCountActual=15.7K, lastRowTimeNanosActual=5.6M, closeCountActual=15.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=15.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=724, avgNextNanosActual=96, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) (hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=77.1K, hasNextCallCountActual=77.1K, hasNextTrueCountActual=77.1K, hasNextTimeNanosActual=180.7M, nextCallCountActual=77.1K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=77.1K, sourceRowsFilteredActual=309.2K, plannedFilterEvidenceCount=772.6K, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=66.9K, exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, openCountActual=1, exprTrueCountActual=77.1K, lastRowTimeNanosActual=236.7M, closeCountActual=1, exprEvalTimeNanosActual=109.5M, inputRowsActual=386.3K, rowsDroppedActual=309.2K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.3K, avgNextNanosActual=18, filterRejectRateActual=0.80) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=386.3K, exprFalseCountActual=309.2K, exprTrueCountActual=77.1K, exprEvalTimeNanosActual=83.5M, hasNextFalseCountActual=0) + │ ║ ║ ├── Str (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=28.6M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="branch/0") (exprEvalCountActual=386.3K, exprTrueCountActual=386.3K, exprEvalTimeNanosActual=14.0M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=386.3K, resultSizeActual=386.3K, hasNextCallCountActual=386.3K, hasNextTrueCountActual=386.3K, hasNextTimeNanosActual=30.0M, nextCallCountActual=386.3K, nextTimeNanosActual=15.9M, sourceRowsScannedActual=386.3K, sourceRowsMatchedActual=386.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=8.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=236.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=78, avgNextNanosActual=41, indexHitRateActual=1.00) + │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4025,77 +4339,77 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) -│ ║ │ ╠══ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) -│ ║ │ ║ s: Var (name=copy) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=384.6K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=389.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=389.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=Exists [left] -│ ║ │ │ ║ StatementPattern (resultSizeEstimate=386.3K) -│ ║ │ │ ║ Var (name=copy) -│ ║ │ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) -│ ║ │ │ ║ ) -│ ║ │ │ ║ s: Var (name=copy) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) -│ ║ │ │ ║ o: Var (name=branch) (bindingState=unbound) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch, copy], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ │ s: Var (name=copy) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) -│ ║ │ └── Filter (resultSizeEstimate=0, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=0.40, plannedIndexName=spoc, plannedBoundVars=[branch, copy], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=branchName) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="Branch 0") -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=branchName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="Branch 1") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) -│ ║ │ s: Var (name=branch) (bindingState=bound) -│ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ │ o: Var (name=branchName) (bindingState=unbound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── Str -│ ║ ║ │ Var (name=branch) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="branch/0") -│ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) -│ ║ s: Var (name=copy) (bindingState=unbound) -│ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) -│ ║ o: Var (name=branch) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=copy) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=copy) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=0) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=130.9K, plannedAccessRows=45.8K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ │ ╠══ Or + │ ║ │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ ║ │ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ║ │ ValueConstant (value="Branch 0") + │ ║ │ ║ │ ║ └── Compare (=) + │ ║ │ ║ │ ║ Var (name=branchName) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Branch 1") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ │ ║ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ ║ │ o: Var (name=branchName) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=1.4M, plannedFilterPassRatio=0.37, filterSelectivitySource=learned_pattern, deferredFilterScope=smallestWindow) [right] + │ ║ │ ║ ╠══ Exists + │ ║ │ ║ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ ║ s: Var (name=copy) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ ║ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[branch, branchName], unlockedFilters=Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ Var (name=copy) + │ ║ │ ║ Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ │ ║ source=unknown, sharedJoinVars=[branch]) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[branch, branchName, copy], sharedJoinVars=[copy]) [right] + │ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_6ceccdd3_uri, value=http://example.com/theme/library/Copy, anonymous) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=1.1M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=branch) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch/0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ o: Var (name=branch) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=copy) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=copy) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { -?copy ?branch . -?copy a . -?branch ?branchName . -FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) -FILTER EXISTS { -?copy a . -} -MINUS { -?copy ?branch . -FILTER (CONTAINS(STR(?branch), "branch/0")) -} + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } } Theme: LIBRARY z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 171 ms +Initial explain execution time: 162 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -4106,76 +4420,76 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 117 ms +Fastest execution time: 92 ms -Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=317) +Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=127.5M, nextCallCountActual=10, nextTimeNanosActual=4.7K, firstRowTimeNanosActual=127.4M, openCountActual=1, lastRowTimeNanosActual=127.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.6M, avgNextNanosActual=479) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "author" (hasNextFalseCountActual=0) ║ ProjectionElem "loanCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=179) -├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.5M, nextCallCountActual=10, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=124.4M, openCountActual=1, lastRowTimeNanosActual=124.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=108) -│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=375, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=124.4M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=124.5M, closeCountActual=1, exprEvalTimeNanosActual=6.4K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=38, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=5.2K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.7K, hasNextFalseCountActual=0) -│ ║ └── Group (author) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=709, aggregateEvalCountActual=20, firstRowTimeNanosActual=124.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=124.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=15, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.3M, avgNextNanosActual=71) -│ ║ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=124.4M, nextCallCountActual=10, nextTimeNanosActual=208, sourceRowsScannedActual=20.2K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=20.2K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=104.0K, exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=124.4M, closeCountActual=1, exprEvalTimeNanosActual=9.8M, inputRowsActual=20.2K, rowsDroppedActual=20.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=10.4M, avgNextNanosActual=21, filterRejectRateActual=1.00) -│ ║ ├── ListMemberOperator (exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, exprTrueCountActual=10, exprEvalTimeNanosActual=7.9M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="Member 1") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=592.7K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="Member 2") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=672.0K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=794.3K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20.2K, hasNextCallCountActual=20.2K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=113.1M, nextCallCountActual=20.2K, nextTimeNanosActual=177.9K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, firstRowTimeNanosActual=28.4K, leftRowsWithMatchActual=20.2K, openCountActual=1, lastRowTimeNanosActual=124.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=30, stddevActual=5.46, confidenceScoreActual=0.24, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=8.79, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=30.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.01, stddevActual=0.11, confidenceScoreActual=0.64, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20.2K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=38, stddevActual=6.16, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=342, stddevActual=18, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=343, stddevActual=19, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] -│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.4M, nextCallCountActual=10.1K, nextTimeNanosActual=546.4K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=7.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=124.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=144, avgNextNanosActual=54, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.5M, nextCallCountActual=10.1K, nextTimeNanosActual=541.9K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=10.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=275, avgNextNanosActual=53, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=13.1M, nextCallCountActual=10.1K, nextTimeNanosActual=578.5K, sourceRowsScannedActual=30.7K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=20.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O], firstRowTimeNanosActual=625, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=9.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=650, avgNextNanosActual=57, indexHitRateActual=0.33) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=12.6M, nextCallCountActual=10.1K, nextTimeNanosActual=578.3K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.2K, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=8.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=620, avgNextNanosActual=57, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=135.9K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.7M, nextCallCountActual=10.1K, nextTimeNanosActual=476.3K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=6.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=47, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=266.2K, resultSizeActual=20.2K, hasNextCallCountActual=30.3K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=5.2M, nextCallCountActual=20.2K, nextTimeNanosActual=987.6K, sourceRowsScannedActual=30.3K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=10.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=5.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=173, avgNextNanosActual=49, indexHitRateActual=0.67) [right] -│ ║ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=265.2K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=8.4M, nextCallCountActual=20.2K, nextTimeNanosActual=851.0K, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=375, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1.8K, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=42, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=8.9M, nextCallCountActual=20.2K, nextTimeNanosActual=980.9K, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1000, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=48, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_61513f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (loanCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=127.5M, nextCallCountActual=10, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=127.5M, openCountActual=1, lastRowTimeNanosActual=127.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.6M, avgNextNanosActual=279) + ├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=127.5M, nextCallCountActual=10, nextTimeNanosActual=2.1K, firstRowTimeNanosActual=127.5M, openCountActual=1, lastRowTimeNanosActual=127.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.6M, avgNextNanosActual=213) + │ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=127.5M, nextCallCountActual=10, nextTimeNanosActual=751, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=127.5M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=127.5M, closeCountActual=1, exprEvalTimeNanosActual=7.1K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.6M, avgNextNanosActual=75, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=5.5K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_9051e226babdcc344c88a5a61806b6a8e7f3012345678, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=4.8K, hasNextFalseCountActual=0) + │ ║ └── Group (author) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=127.4M, nextCallCountActual=10, nextTimeNanosActual=875, aggregateEvalCountActual=20, firstRowTimeNanosActual=127.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=127.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=15, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=11.6M, avgNextNanosActual=88) + │ ║ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=127.4M, nextCallCountActual=10, nextTimeNanosActual=458, sourceRowsScannedActual=20.2K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=20.2K, plannedFilterEvidenceCount=3.0M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=112.2K, exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=127.4M, closeCountActual=1, exprEvalTimeNanosActual=11.3M, inputRowsActual=20.2K, rowsDroppedActual=20.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=10.6M, avgNextNanosActual=46, filterRejectRateActual=1.00) + │ ║ ├── ListMemberOperator (exprEvalCountActual=20.2K, exprFalseCountActual=20.2K, exprTrueCountActual=10, exprEvalTimeNanosActual=8.5M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="Member 1") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=881.5K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="Member 2") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=742.1K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="Member 3") (exprEvalCountActual=20.2K, exprTrueCountActual=20.2K, exprEvalTimeNanosActual=858.0K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=20.2K, hasNextCallCountActual=20.2K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=114.7M, nextCallCountActual=20.2K, nextTimeNanosActual=214.3K, joinRightIteratorsCreatedActual=20.2K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, firstRowTimeNanosActual=33.4K, leftRowsWithMatchActual=20.2K, openCountActual=1, lastRowTimeNanosActual=127.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=40.4K, rowsDroppedActual=20.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=31, stddevActual=5.60, confidenceScoreActual=0.23, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.7K, avgNextNanosActual=11, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=272.0K, resultSizeActual=20.2K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=20.2K, joinRightBindingsConsumedActual=20.2K, inputRowsActual=30.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.02, stddevActual=0.15, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=20.2K, rightRowsScannedActual=20.2K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=139.6K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=155, stddevActual=12, confidenceScoreActual=0.13, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=133.4K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=36, stddevActual=6.03, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=343, stddevActual=19, confidenceScoreActual=0.09, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.1K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=10.1K, joinRightIteratorsCreatedActual=10.1K, joinLeftBindingsConsumedActual=10.1K, joinRightBindingsConsumedActual=10.1K, inputRowsActual=20.3K, rowsDroppedActual=10.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.1K, rightRowsScannedActual=10.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=10.1K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=1.3M, nextCallCountActual=10.1K, nextTimeNanosActual=667.1K, sourceRowsScannedActual=10.1K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=1, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=127.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=138, avgNextNanosActual=66, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.9M, nextCallCountActual=10.1K, nextTimeNanosActual=590.5K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan], firstRowTimeNanosActual=625, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=11.7K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=291, avgNextNanosActual=58, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=4.8M, nextCallCountActual=10.1K, nextTimeNanosActual=654.7K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan], firstRowTimeNanosActual=584, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=10.6K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=240, avgNextNanosActual=64, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=14.3M, nextCallCountActual=10.1K, nextTimeNanosActual=636.4K, sourceRowsScannedActual=30.7K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=20.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=10.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[copy, loan, member], sharedJoinVars=[copy], firstRowTimeNanosActual=916, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=9.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=707, avgNextNanosActual=63, indexHitRateActual=0.33) [right] + │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=133.4K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=13.8M, nextCallCountActual=10.1K, nextTimeNanosActual=566.9K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[book, copy, loan, member], sharedJoinVars=[book], firstRowTimeNanosActual=1.1K, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=8.1K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=682, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=10.1K, hasNextCallCountActual=20.3K, hasNextTrueCountActual=10.1K, hasNextTimeNanosActual=5.3M, nextCallCountActual=10.1K, nextTimeNanosActual=573.4K, sourceRowsScannedActual=20.3K, sourceRowsMatchedActual=10.1K, sourceRowsFilteredActual=10.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[book, copy, loan, member], sharedJoinVars=[copy], firstRowTimeNanosActual=375, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=6.4K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=272.0K, resultSizeActual=20.2K, hasNextCallCountActual=30.3K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=5.7M, nextCallCountActual=20.2K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=30.3K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=10.1K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[book, branch, copy, loan, member], sharedJoinVars=[book], firstRowTimeNanosActual=542, indexLookupCountActual=10.1K, openCountActual=10.1K, lastRowTimeNanosActual=5.5K, closeCountActual=10.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.1K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=189, avgNextNanosActual=52, indexHitRateActual=0.67) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=20.2K, hasNextCallCountActual=40.4K, hasNextTrueCountActual=20.2K, hasNextTimeNanosActual=10.0M, nextCallCountActual=20.2K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=40.4K, sourceRowsMatchedActual=20.2K, sourceRowsFilteredActual=20.2K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=20.2K, openCountActual=20.2K, lastRowTimeNanosActual=1.0K, closeCountActual=20.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=51, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_9051e226babdcc344c88a5a61806b6a8e7f3012345678) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (loanCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_9051e226babdcc344c88a5a61806b6a8e7f3012345678) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (loanCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4184,84 +4498,84 @@ Projection ║ ProjectionElem "author" ║ ProjectionElem "loanCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (author) -│ ║ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="Member 1") -│ ║ │ ValueConstant (value="Member 2") -│ ║ │ ValueConstant (value="Member 3") -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=266.2K) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=266.2K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=135.9K) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.7K) [left] -│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.3K) [left] -│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) -│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[loan, member], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) -│ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[copy, loan, member], plannedLookupComponents=[O]) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) -│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, copy, loan, member], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ │ s: Var (name=copy) (bindingState=bound) -│ ║ ║ │ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) -│ ║ ║ │ ║ │ o: Var (name=branch) (bindingState=unbound) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=135.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=266.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[book, branch, copy, loan, member], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=book) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) -│ ║ ║ │ o: Var (name=author) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=265.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, book, branch, copy, loan, member], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=loan) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) -│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] -│ ║ s: Var (name=member) (bindingState=bound) -│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ║ GroupElem (_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234) -│ ║ Count -│ ║ Var (name=loan) (bindingState=bound) -│ ║ GroupElem (loanCount) -│ ║ Count (Distinct) -│ ║ Var (name=loan) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_52513f2fe36952f541b08a42a7b8ce15e70d01234) -│ Count -│ Var (name=loan) (bindingState=unbound) -└── ExtensionElem (loanCount) -Count (Distinct) -Var (name=loan) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_8151e226babdcc344c88a5a61806b6a8e7f301234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (author) + │ ║ Filter (plannedFilterEvidenceCount=3.0M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="Member 1") + │ ║ │ ValueConstant (value="Member 2") + │ ║ │ ValueConstant (value="Member 3") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=272.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=139.6K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=133.4K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=10.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[loan, member], sharedJoinVars=[loan]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=10.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[copy, loan, member], sharedJoinVars=[copy]) [right] + │ ║ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=133.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[book, copy, loan, member], sharedJoinVars=[book]) [right] + │ ║ ║ │ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[book, copy, loan, member], sharedJoinVars=[copy]) [right] + │ ║ ║ │ s: Var (name=copy) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ ║ │ o: Var (name=branch) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=272.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[book, branch, copy, loan, member], sharedJoinVars=[book]) [right] + │ ║ ║ s: Var (name=book) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ o: Var (name=author) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) [right] + │ ║ s: Var (name=member) (bindingState=bound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_8151e226babdcc344c88a5a61806b6a8e7f301234567) + │ ║ Count + │ ║ Var (name=loan) (bindingState=bound) + │ ║ GroupElem (loanCount) + │ ║ Count (Distinct) + │ ║ Var (name=loan) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8151e226babdcc344c88a5a61806b6a8e7f301234567) + │ Count + │ Var (name=loan) (bindingState=unbound) + └── ExtensionElem (loanCount) + Count (Distinct) + Var (name=loan) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { -?loan ?member . -?loan ?copy . -?book ?copy . -?copy ?branch . -?book a . -?book ?author . -?loan a . -OPTIONAL { -?member ?optName . -} -FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) + ?loan ?member . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book a . + ?copy ?branch . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) } GROUP BY ?author HAVING (COUNT(?loan) > 0) @@ -4269,7 +4583,7 @@ HAVING (COUNT(?loan) > 0) Theme: LIBRARY z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 163 ms +Initial explain execution time: 121 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -4280,90 +4594,83 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 107 ms +Fastest execution time: 79 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=110.0M, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=2.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=51.2M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=51.2M, openCountActual=1, lastRowTimeNanosActual=51.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.6M, avgNextNanosActual=2.0K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=110.0M, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=1.3K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=110.0M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=2, firstRowTimeNanosActual=110.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=110.0M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=17, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=55.0M, avgNextNanosActual=708) -│ ╠══ Filter (resultSizeActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=2, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=5.9K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optTitle) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) -│ ║ │ ╚══ Not (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=28.2K, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=27.4K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=2, hasNextTimeNanosActual=18.5K, sourceRowsScannedActual=2, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=2, exprFalseCountActual=2, openCountActual=2, lastRowTimeNanosActual=9.1K, closeCountActual=2, exprEvalTimeNanosActual=8.3K, inputRowsActual=2, rowsDroppedActual=2, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.3K, filterRejectRateActual=1.00) -│ ║ │ ├── Compare (<) (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=8.0K, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=4.8K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=104, indexHitRateActual=0.50) -│ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.9M, nextCallCountActual=2, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=93.1K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=110.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=9.223372036854776E17M, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=36.7M, avgNextNanosActual=104, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=9.223372036854776E17M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.866511454927122E15M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=5.776968444044E11M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M, resultSizeActual=2, joinRightIteratorsCreatedActual=30, joinRightBindingsConsumedActual=2, inputRowsActual=32, rowsDroppedActual=30, expansionFactorActual=0.06, sampleCountActual=2, varianceActual=9.223372036854776E17M, stddevActual=3792528.1M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M, resultSizeActual=30, joinRightIteratorsCreatedActual=10, joinRightBindingsConsumedActual=30, inputRowsActual=40, rowsDroppedActual=10, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=8.665262962E8M, stddevActual=29.4M, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=30) [left] -│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M, resultSizeActual=10, joinRightIteratorsCreatedActual=2, joinRightBindingsConsumedActual=10, inputRowsActual=12, rowsDroppedActual=2, expansionFactorActual=0.83, sampleCountActual=2, varianceActual=153.1M, stddevActual=12.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10) [left] -│ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.2K, nextCallCountActual=2, nextTimeNanosActual=1.0K, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=6.3K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=110.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=750, avgNextNanosActual=521) [left] -│ ║ ║ │ ║ │ ║ │ ║ └── Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.8M, nextCallCountActual=2, nextTimeNanosActual=375, sourceRowsScannedActual=90.6K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=90.6K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=18.9K, exprEvalCountActual=90.6K, predicateErrorCountActual=90.6K, openCountActual=2, exprTrueCountActual=2, lastRowTimeNanosActual=55.5M, closeCountActual=2, exprEvalTimeNanosActual=85.9M, inputRowsActual=90.6K, rowsDroppedActual=90.6K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=27.5M, avgNextNanosActual=188, filterRejectRateActual=1.00) [right] -│ ║ ║ │ ║ │ ║ │ ║ ╠══ Or (exprEvalCountActual=90.6K, exprTrueCountActual=2, exprErrorCountActual=90.6K, exprEvalTimeNanosActual=74.6M, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) (exprEvalCountActual=90.6K, exprErrorCountActual=90.6K, exprEvalTimeNanosActual=9.2M, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) (exprEvalCountActual=90.6K, exprFalseCountActual=90.6K, exprTrueCountActual=2, exprEvalTimeNanosActual=46.5M, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.0K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=91.6K, resultSizeActual=90.6K, hasNextCallCountActual=90.6K, hasNextTrueCountActual=90.6K, hasNextTimeNanosActual=8.4M, nextCallCountActual=90.6K, nextTimeNanosActual=10.9M, sourceRowsScannedActual=90.6K, sourceRowsMatchedActual=90.6K, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or -│ ║ ║ │ ║ │ ║ │ ║ Compare (=) -│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) -│ ║ ║ │ ║ │ ║ │ ║ Var (name=target) -│ ║ ║ │ ║ │ ║ │ ║ Compare (=) -│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) -│ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") -│ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P], firstRowTimeNanosActual=8.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=55.4M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=121, indexHitRateActual=1.00) -│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=259.0K, resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.9K, nextCallCountActual=10, nextTimeNanosActual=1.2K, sourceRowsScannedActual=12, sourceRowsMatchedActual=10, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O], firstRowTimeNanosActual=3.2K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=73.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=660, avgNextNanosActual=121, indexHitRateActual=0.83) [right] -│ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=761.7K, resultSizeActual=30, hasNextCallCountActual=40, hasNextTrueCountActual=30, hasNextTimeNanosActual=21.5K, nextCallCountActual=30, nextTimeNanosActual=2.2K, sourceRowsScannedActual=40, sourceRowsMatchedActual=30, sourceRowsFilteredActual=10, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.7K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=7.6K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=538, avgNextNanosActual=75, indexHitRateActual=0.75) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=32, hasNextTrueCountActual=2, hasNextTimeNanosActual=25.5K, nextCallCountActual=2, nextTimeNanosActual=41, sourceRowsScannedActual=62, sourceRowsMatchedActual=2, sourceRowsFilteredActual=60, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O], firstRowTimeNanosActual=1.2K, indexLookupCountActual=30, openCountActual=30, lastRowTimeNanosActual=500, closeCountActual=30, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=30, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=800, avgNextNanosActual=21, indexHitRateActual=0.03) [right] -│ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=4.9K, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.2K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=31.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2K, avgNextNanosActual=104, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.8K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.1K, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=27.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=281, avgNextNanosActual=105, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.6K, nextCallCountActual=2, nextTimeNanosActual=41, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.1K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=25.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=667, avgNextNanosActual=21, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.6K, nextCallCountActual=2, nextTimeNanosActual=125, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=709, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=22.5K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=417, avgNextNanosActual=63, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optTitle) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=51.2M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=51.3M, openCountActual=1, lastRowTimeNanosActual=51.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.6M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=51.2M, nextCallCountActual=1, nextTimeNanosActual=333, aggregateEvalCountActual=2, firstRowTimeNanosActual=51.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=51.3M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=17, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.6M, avgNextNanosActual=333) + │ ╠══ Filter (resultSizeActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=2, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) + │ ║ │ ╚══ Not (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=38.3K, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=33.7K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=2, hasNextTimeNanosActual=17.4K, sourceRowsScannedActual=2, sourceRowsFilteredActual=2, plannedFilterEvidenceCount=368, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=2, exprFalseCountActual=2, openCountActual=2, lastRowTimeNanosActual=4.7K, closeCountActual=2, exprEvalTimeNanosActual=5.6K, inputRowsActual=2, rowsDroppedActual=2, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.7K, filterRejectRateActual=1.00) + │ ║ │ ├── Compare (<) (exprEvalCountActual=2, exprFalseCountActual=2, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=due) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.3K, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=875, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1.6K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=344, avgNextNanosActual=105, indexHitRateActual=0.50) + │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=due) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=51.1M, nextCallCountActual=2, nextTimeNanosActual=83, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=104.0K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=51.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=957.3M, stddevActual=30.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=17.1M, avgNextNanosActual=42, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.1K, resultSizeActual=2, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, inputRowsActual=3, rowsDroppedActual=1, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=6.5M, stddevActual=2.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.1K, resultSizeActual=1, joinRightIteratorsCreatedActual=1, joinRightBindingsConsumedActual=1, inputRowsActual=2, rowsDroppedActual=1, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=6.4M, stddevActual=2.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=1, joinRightIteratorsCreatedActual=1, joinRightBindingsConsumedActual=1, inputRowsActual=2, rowsDroppedActual=1, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.2K, stddevActual=35, confidenceScoreActual=0.05, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K, resultSizeActual=1, joinRightIteratorsCreatedActual=1, joinRightBindingsConsumedActual=1, inputRowsActual=2, rowsDroppedActual=1, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=25.8M, stddevActual=5.1K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=6.00, resultSizeActual=1, joinRightIteratorsCreatedActual=15, joinRightBindingsConsumedActual=1, inputRowsActual=16, rowsDroppedActual=15, expansionFactorActual=0.06, sampleCountActual=2, varianceActual=61.8M, stddevActual=7.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=388.1K, resultSizeActual=15, joinRightIteratorsCreatedActual=5, joinRightBindingsConsumedActual=15, inputRowsActual=20, rowsDroppedActual=5, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=165.2M, stddevActual=12.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=15) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=259, resultSizeActual=5, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=5, inputRowsActual=6, rowsDroppedActual=1, expansionFactorActual=0.83, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=5, avgRightRowsPerLeftActual=5.00, joinOutputPerLeftActual=5.00) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=51.0M, nextCallCountActual=1, nextTimeNanosActual=334, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=45.3K, plannedFilterEvidenceCount=8.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=46.9K, exprEvalCountActual=45.3K, predicateErrorCountActual=45.3K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=51.2M, closeCountActual=1, exprEvalTimeNanosActual=43.1M, inputRowsActual=45.3K, rowsDroppedActual=45.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=25.5M, avgNextNanosActual=334, filterRejectRateActual=1.00) [left] + │ ║ ║ │ ║ │ ║ │ ║ │ ╠══ Or (exprEvalCountActual=45.3K, exprTrueCountActual=1, exprErrorCountActual=45.3K, exprEvalTimeNanosActual=37.0M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=45.3K, exprErrorCountActual=45.3K, exprEvalTimeNanosActual=5.1M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ │ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ │ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ └── Compare (=) (exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=22.8M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ Var (name=authorName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=20.5K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=45.3K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedAccessRows=45.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=13.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=51.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=37, indexHitRateActual=1.00) + │ ║ ║ │ ║ │ ║ │ ║ │ s: Var (name=author) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ │ o: Var (name=authorName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=257.2K, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=6.5K, nextCallCountActual=5, nextTimeNanosActual=1.6K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=257.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_6d0024c9_uri, author, authorName], firstRowTimeNanosActual=6.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.6K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.1K, avgNextNanosActual=325, indexHitRateActual=0.83) [right] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=author) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=386.3K, resultSizeActual=15, hasNextCallCountActual=20, hasNextTrueCountActual=15, hasNextTimeNanosActual=13.7K, nextCallCountActual=15, nextTimeNanosActual=1.2K, sourceRowsScannedActual=20, sourceRowsMatchedActual=15, sourceRowsFilteredActual=5, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6d0024c9_uri, _const_e1624c50_uri, author, authorName, book], firstRowTimeNanosActual=2.3K, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=8.2K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=690, avgNextNanosActual=86, indexHitRateActual=0.75) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=10.2K, resultSizeActual=1, hasNextCallCountActual=16, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.2K, nextCallCountActual=1, nextTimeNanosActual=125, sourceRowsScannedActual=31, sourceRowsMatchedActual=1, sourceRowsFilteredActual=30, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_469a1e31_uri, _const_6d0024c9_uri, _const_e1624c50_uri, author, authorName, book, copy], firstRowTimeNanosActual=1.6K, indexLookupCountActual=15, openCountActual=15, lastRowTimeNanosActual=416, closeCountActual=15, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=15, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=956, avgNextNanosActual=125, indexHitRateActual=0.03) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3.0K, nextCallCountActual=1, nextTimeNanosActual=209, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_469a1e31_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_e1624c50_uri, author, authorName, book, copy, loan], firstRowTimeNanosActual=3.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=81.6K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.5K, avgNextNanosActual=209, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.2K, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=583, nextCallCountActual=1, nextTimeNanosActual=125, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_e1624c50_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan], firstRowTimeNanosActual=625, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=76.7K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292, avgNextNanosActual=125, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=5.1K, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.7K, nextCallCountActual=1, nextTimeNanosActual=208, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_b9a39489_uri, _const_e1624c50_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan, member], firstRowTimeNanosActual=1.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=74.5K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=896, avgNextNanosActual=208, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.8K, nextCallCountActual=2, nextTimeNanosActual=583, plannedWorkRows=2.00, plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_b9a39489_uri, _const_e1624c50_uri, _const_f5728978_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan, member], firstRowTimeNanosActual=2.4K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=68.2K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=958, avgNextNanosActual=292) [right] + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=128.9K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.9K, nextCallCountActual=2, nextTimeNanosActual=167, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=917, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=24.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=479, avgNextNanosActual=84, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=book) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optTitle) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=member) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=member) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4371,159 +4678,152 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optTitle) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="") -│ ║ │ ╚══ Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ├── Compare (<) -│ ║ │ │ Var (name=due) (bindingState=bound) -│ ║ │ │ ValueConstant (value="2024-01-10"^^) -│ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) -│ ║ │ s: Var (name=loan) (bindingState=bound) -│ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) -│ ║ │ o: Var (name=due) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.223372036854776E17M) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.346604581970849E16M) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.3107873776178E12M) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.275516866E8M) [left] -│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=589.0M) [left] -│ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.3K) [left] -│ ║ ║ │ ║ │ ║ │ ║ ├── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ │ ║ │ ║ │ ║ └── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] -│ ║ ║ │ ║ │ ║ │ ║ ╠══ Or -│ ║ ║ │ ║ │ ║ │ ║ ║ ├── Compare (=) -│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=authorName) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ ║ ║ │ Var (name=target) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ ║ ║ └── Compare (=) -│ ║ ║ │ ║ │ ║ │ ║ ║ Var (name=authorName) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ ║ ║ ValueConstant (value="Author 3") -│ ║ ║ │ ║ │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=91.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedBoundVars=[target], unlockedFilters=Or -│ ║ ║ │ ║ │ ║ │ ║ Compare (=) -│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) -│ ║ ║ │ ║ │ ║ │ ║ Var (name=target) -│ ║ ║ │ ║ │ ║ │ ║ Compare (=) -│ ║ ║ │ ║ │ ║ │ ║ Var (name=authorName) -│ ║ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") -│ ║ ║ │ ║ │ ║ │ ║ , plannedLookupComponents=[P]) -│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=author) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=authorName) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=259.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, target], plannedLookupComponents=[O]) [right] -│ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) -│ ║ ║ │ ║ │ ║ │ o: Var (name=author) (bindingState=bound) -│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=761.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, target], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=book) (bindingState=bound) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) -│ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=unbound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[author, authorName, book, copy, target], plannedLookupComponents=[O]) [right] -│ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) -│ ║ ║ │ ║ │ o: Var (name=copy) (bindingState=bound) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, target], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=loan) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) -│ ║ ║ │ o: Var (name=member) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=20.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[author, authorName, book, copy, loan, member, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=member) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) -│ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] -│ ║ s: Var (name=book) (bindingState=bound) -│ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) -│ ║ o: Var (name=optTitle) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=member) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=member) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTitle) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=370, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=due) (bindingState=bound) + │ ║ │ │ ValueConstant (value="2024-01-10"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=10.2K) + │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ │ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) + │ ║ │ o: Var (name=due) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5.1K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=5.1K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=6.00) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=388.1K) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=259) [left] + │ ║ ║ │ ║ │ ║ │ ║ ├── Filter (plannedFilterEvidenceCount=8.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] + │ ║ ║ │ ║ │ ║ │ ║ │ ╠══ Or + │ ║ ║ │ ║ │ ║ │ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ │ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ │ Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ Var (name=authorName) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ║ │ ║ ValueConstant (value="Author 3") + │ ║ ║ │ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=45.3K, plannedAccessRows=45.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=45.8K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) + │ ║ ║ │ ║ │ ║ │ ║ │ s: Var (name=author) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ │ o: Var (name=authorName) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=257.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=257.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_6d0024c9_uri, author, authorName]) [right] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=book) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_e1624c50_uri, value=http://example.com/theme/library/writtenBy, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=author) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=386.3K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_6d0024c9_uri, _const_e1624c50_uri, author, authorName, book]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=book) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=copy) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=10.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_469a1e31_uri, _const_6d0024c9_uri, _const_e1624c50_uri, author, authorName, book, copy]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=loan) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=copy) (bindingState=bound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_469a1e31_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_e1624c50_uri, author, authorName, book, copy, loan]) [right] + │ ║ ║ │ ║ │ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=10.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_e1624c50_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan]) [right] + │ ║ ║ │ ║ s: Var (name=loan) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=member) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=5.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_b9a39489_uri, _const_e1624c50_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan, member]) [right] + │ ║ ║ │ s: Var (name=member) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) + │ ║ ║ └── BindingSetAssignment ([[target="Author 1"], [target="Author 2"]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannedBoundVars=[_const_469a1e31_uri, _const_6cf0e34e_uri, _const_6d0024c9_uri, _const_78c99d62_uri, _const_b9a39489_uri, _const_e1624c50_uri, _const_f5728978_uri, _const_f5e5585a_uri, author, authorName, book, copy, loan, member]) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=128.9K) [right] + │ ║ s: Var (name=book) (bindingState=bound) + │ ║ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) + │ ║ o: Var (name=optTitle) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=member) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=member) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { -VALUES ?target { "Author 1" "Author 2" } -?author ?authorName . -FILTER ((?authorName = ?target) || (?authorName = "Author 3")) -?book ?author . -?book ?copy . -?loan ?copy . -?loan a . -?loan ?member . -?member a . -OPTIONAL { -?book ?optTitle . -} -FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) + ?author ?authorName . + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + ?book ?author . + ?book ?copy . + ?loan ?copy . + ?loan a . + ?loan ?member . + ?member a . + VALUES ?target { "Author 1" "Author 2" } + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) } Theme: LIBRARY z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 713 ms +Initial explain execution time: 733 ms Warmup execution 1/2 Warmup execution 2/2 Fastest execution time: 289 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.5M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=708.5M, openCountActual=1, lastRowTimeNanosActual=708.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.3M, avgNextNanosActual=2.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=741.2M, nextCallCountActual=1, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=741.3M, openCountActual=1, lastRowTimeNanosActual=741.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=370.6M, avgNextNanosActual=2.7K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.5M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=708.5M, openCountActual=1, lastRowTimeNanosActual=708.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.3M, avgNextNanosActual=1.3K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=708.4M, nextCallCountActual=1, nextTimeNanosActual=875, aggregateEvalCountActual=618.4K, firstRowTimeNanosActual=708.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=708.5M, maxGroupSizeActual=618.4K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=618.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=618.4K, rowsDroppedActual=618.4K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=354.2M, avgNextNanosActual=875) -│ ╠══ Difference (resultSizeActual=618.4K, hasNextCallCountActual=618.4K, hasNextTrueCountActual=618.4K, hasNextTimeNanosActual=656.9M, nextCallCountActual=618.4K, nextTimeNanosActual=6.8M, firstRowTimeNanosActual=97.1M, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=772.6K, rowsDroppedActual=154.2K, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.1K, avgNextNanosActual=11, leftRowsConsumedActual=772.6K, rightRowsConsumedActual=1, overlapRowsActual=154.2K) -│ ║ ├── Filter (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=427.3M, nextCallCountActual=772.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.5K, exprEvalCountActual=772.6K, openCountActual=1, exprTrueCountActual=772.6K, lastRowTimeNanosActual=708.4M, closeCountActual=1, exprEvalTimeNanosActual=84.7M, inputRowsActual=772.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=553, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=772.6K, exprTrueCountActual=772.6K, exprEvalTimeNanosActual=32.7M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=281.9M, nextCallCountActual=772.6K, nextTimeNanosActual=10.2M, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=772.6K, firstRowTimeNanosActual=13.1K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, maxRightRowsPerLeftActual=77.3K, inputRowsActual=772.6K, rowsDroppedActual=10, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=365, avgNextNanosActual=13, leftRowsProbedActual=10, rightRowsScannedActual=772.6K, avgRightRowsPerLeftActual=77.3K, joinMatchRateActual=1.00, joinOutputPerLeftActual=77.3K, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Union (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=81.2K, nextCallCountActual=10, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=8.0K, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=7.4K, avgNextNanosActual=133, leftRowsConsumedActual=5, rightRowsConsumedActual=5, leftRowsOutputContributionActual=5, rightRowsOutputContributionActual=5) [left] -│ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=4.9K, nextCallCountActual=5, nextTimeNanosActual=1.1K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=5.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=365.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=820, avgNextNanosActual=225, indexHitRateActual=0.83) -│ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00, resultSizeActual=5, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=10, rowsDroppedActual=5, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=20.5M, stddevActual=4.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=7.9K, nextCallCountActual=5, nextTimeNanosActual=1.0K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=365.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=708.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.3K, avgNextNanosActual=208, indexHitRateActual=0.83) [left] -│ ║ │ │ │ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5, hasNextCallCountActual=10, hasNextTrueCountActual=5, hasNextTimeNanosActual=16.2K, nextCallCountActual=5, nextTimeNanosActual=1.2K, sourceRowsScannedActual=10, sourceRowsMatchedActual=5, sourceRowsFilteredActual=5, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[S, P], firstRowTimeNanosActual=2.1K, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=72.1M, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.6K, avgNextNanosActual=242, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=157.7M, nextCallCountActual=772.6K, nextTimeNanosActual=65.5M, firstRowTimeNanosActual=1.7K, openCountActual=10, lastRowTimeNanosActual=72.1M, closeCountActual=10, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=85) [right] -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=99.7M, nextCallCountActual=772.6K, nextTimeNanosActual=30.9M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=10, plannedIndexName=ospc, firstRowTimeNanosActual=1.7K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=72.1M, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=43, avgNextNanosActual=40, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optCopy) (hasNextFalseCountActual=0) -│ ║ │ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=37.5M, nextCallCountActual=1, nextTimeNanosActual=167, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=45.3K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=33.3M, exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=37.5M, closeCountActual=1, exprEvalTimeNanosActual=30.8M, inputRowsActual=45.3K, rowsDroppedActual=45.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=18.8M, avgNextNanosActual=167, filterRejectRateActual=1.00) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=28.2M, hasNextFalseCountActual=0) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=23.9M, hasNextFalseCountActual=0) -│ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=20.4M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="branch 0") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.3M, nextCallCountActual=45.3K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=37.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=31, indexHitRateActual=1.00) -│ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=741.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=741.3M, openCountActual=1, lastRowTimeNanosActual=741.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=370.6M, avgNextNanosActual=1.4K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=741.2M, nextCallCountActual=1, nextTimeNanosActual=958, aggregateEvalCountActual=618.4K, firstRowTimeNanosActual=741.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=741.3M, maxGroupSizeActual=618.4K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=618.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=618.4K, rowsDroppedActual=618.4K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=370.6M, avgNextNanosActual=958) + │ ╠══ Difference (resultSizeActual=618.4K, hasNextCallCountActual=618.4K, hasNextTrueCountActual=618.4K, hasNextTimeNanosActual=685.4M, nextCallCountActual=618.4K, nextTimeNanosActual=8.7M, firstRowTimeNanosActual=101.2M, openCountActual=1, lastRowTimeNanosActual=741.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=772.6K, rowsDroppedActual=154.2K, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.1K, avgNextNanosActual=14, leftRowsConsumedActual=772.6K, rightRowsConsumedActual=1, overlapRowsActual=154.2K) + │ ║ ├── Filter (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=451.7M, nextCallCountActual=772.6K, nextTimeNanosActual=12.7M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=13.6K, exprEvalCountActual=772.6K, openCountActual=1, exprTrueCountActual=772.6K, lastRowTimeNanosActual=741.2M, closeCountActual=1, exprEvalTimeNanosActual=99.5M, inputRowsActual=772.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=585, avgNextNanosActual=16, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=772.6K, exprTrueCountActual=772.6K, exprEvalTimeNanosActual=31.9M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=772.6K, hasNextCallCountActual=772.6K, hasNextTrueCountActual=772.6K, hasNextTimeNanosActual=290.3M, nextCallCountActual=772.6K, nextTimeNanosActual=12.7M, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=772.6K, firstRowTimeNanosActual=11.7K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=741.1M, closeCountActual=1, maxRightRowsPerLeftActual=77.3K, inputRowsActual=772.6K, rowsDroppedActual=10, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=376, avgNextNanosActual=16, leftRowsProbedActual=10, rightRowsScannedActual=772.6K, avgRightRowsPerLeftActual=77.3K, joinMatchRateActual=1.00, joinOutputPerLeftActual=77.3K, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Union (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=172.8K, nextCallCountActual=10, nextTimeNanosActual=4.8K, firstRowTimeNanosActual=5.1K, openCountActual=1, lastRowTimeNanosActual=741.1M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=15.7K, avgNextNanosActual=488, leftRowsConsumedActual=5, rightRowsConsumedActual=5, leftRowsOutputContributionActual=5, rightRowsOutputContributionActual=5) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=6.4K, nextCallCountActual=5, nextTimeNanosActual=1.9K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=6.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=369.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.1K, avgNextNanosActual=391, indexHitRateActual=0.83) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00, resultSizeActual=5, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=10, rowsDroppedActual=5, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=20.5M, stddevActual=4.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.00, resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=17.9K, nextCallCountActual=5, nextTimeNanosActual=3.2K, sourceRowsScannedActual=6, sourceRowsMatchedActual=5, sourceRowsFilteredActual=1, plannedAccessRows=5.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=369.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=741.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=3.0K, avgNextNanosActual=642, indexHitRateActual=0.83) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=45.3K, resultSizeActual=5, hasNextCallCountActual=10, hasNextTrueCountActual=5, hasNextTimeNanosActual=37.2K, nextCallCountActual=5, nextTimeNanosActual=1.2K, sourceRowsScannedActual=10, sourceRowsMatchedActual=5, sourceRowsFilteredActual=5, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[branch], sharedJoinVars=[branch], firstRowTimeNanosActual=6.7K, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=77.0M, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7K, avgNextNanosActual=242, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=159.7M, nextCallCountActual=772.6K, nextTimeNanosActual=71.4M, firstRowTimeNanosActual=3.0K, openCountActual=10, lastRowTimeNanosActual=77.0M, closeCountActual=10, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=69, avgNextNanosActual=92) [right] + │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=386.3K, resultSizeActual=772.6K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=100.0M, nextCallCountActual=772.6K, nextTimeNanosActual=29.5M, sourceRowsScannedActual=772.6K, sourceRowsMatchedActual=772.6K, sourceRowsFilteredActual=10, plannedIndexName=ospc, firstRowTimeNanosActual=3.0K, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=77.0M, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=43, avgNextNanosActual=38, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optCopy) (hasNextFalseCountActual=0) + │ ║ │ Var (name=copy) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=40.4M, nextCallCountActual=1, nextTimeNanosActual=125, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=45.3K, plannedFilterEvidenceCount=2.5M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=35.7M, exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=40.4M, closeCountActual=1, exprEvalTimeNanosActual=33.0M, inputRowsActual=45.3K, rowsDroppedActual=45.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=20.2M, avgNextNanosActual=125, filterRejectRateActual=1.00) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=45.3K, exprFalseCountActual=45.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=30.2M, hasNextFalseCountActual=0) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=25.4M, hasNextFalseCountActual=0) + │ ║ ║ │ Str (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=21.4M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="branch 0") (exprEvalCountActual=45.3K, exprTrueCountActual=45.3K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=45.3K, resultSizeActual=45.3K, hasNextCallCountActual=45.3K, hasNextTrueCountActual=45.3K, hasNextTimeNanosActual=3.3M, nextCallCountActual=45.3K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=45.3K, sourceRowsMatchedActual=45.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=40.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=36, indexHitRateActual=1.00) + │ ║ s: Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=branch) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=branch) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4531,115 +4831,114 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optCopy) (bindingState=bound) -│ ║ │ ║ Var (name=branch) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Union [left] -│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) -│ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) -│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) -│ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) -│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) -│ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[branch], plannedLookupComponents=[S, P]) [right] -│ ║ │ │ s: Var (name=branch) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ │ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) -│ ║ │ ║ s: Var (name=copy) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) -│ ║ │ ║ o: Var (name=branch) (bindingState=bound) -│ ║ │ ╚══ ExtensionElem (optCopy) -│ ║ │ Var (name=copy) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) -│ ║ ║ │ Str -│ ║ ║ │ Var (name=name2) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="branch 0") -│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) -│ ║ s: Var (name=branch) (bindingState=unbound) -│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) -│ ║ o: Var (name=name2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=branch) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=branch) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCopy) (bindingState=bound) + │ ║ │ ║ Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=5.00) + │ ║ │ │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=5.00) + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=5.00, plannedAccessRows=5.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=5.2K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ │ s: Var (name=branch) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_e35f2480_uri, value=http://example.com/theme/library/Branch, anonymous) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=45.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[branch], sharedJoinVars=[branch]) [right] + │ ║ │ │ s: Var (name=branch) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=386.3K) + │ ║ │ ║ s: Var (name=copy) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_ecfc63a7_uri, value=http://example.com/theme/library/locatedAt, anonymous) + │ ║ │ ║ o: Var (name=branch) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optCopy) + │ ║ │ Var (name=copy) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="branch 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) + │ ║ s: Var (name=branch) (bindingState=unbound) + │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=branch) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=branch) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { -{ -?branch a . -} -UNION -{ -?branch a . -?branch ?name . -} -OPTIONAL { -?copy ?branch . -BIND(?copy AS ?optCopy) -} -FILTER (?optCopy != ?branch) -MINUS { -?branch ?name2 . -FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) -} + { + ?branch a . + } + UNION + { + ?branch a . + ?branch ?name . + } + OPTIONAL { + ?copy ?branch . + BIND(?copy AS ?optCopy) + } + FILTER (?optCopy != ?branch) + MINUS { + ?branch ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) + } } Theme: ENGINEERING z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 471 ms -Warmup execution 1/4 -Warmup execution 2/4 -Warmup execution 3/4 -Warmup execution 4/4 -Fastest execution time: 252 ms +Initial explain execution time: 534 ms +Warmup execution 1/3 +Warmup execution 2/3 +Warmup execution 3/3 +Fastest execution time: 277 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=452.7M, openCountActual=1, lastRowTimeNanosActual=452.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=485.0M, nextCallCountActual=1, nextTimeNanosActual=2.4K, firstRowTimeNanosActual=485.0M, openCountActual=1, lastRowTimeNanosActual=485.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242.5M, avgNextNanosActual=2.4K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=452.7M, openCountActual=1, lastRowTimeNanosActual=452.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=452.7M, nextCallCountActual=1, nextTimeNanosActual=667, aggregateEvalCountActual=132.6K, firstRowTimeNanosActual=452.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=452.7M, maxGroupSizeActual=132.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=132.7K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226.4M, avgNextNanosActual=667) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=368.0M, nextCallCountActual=132.6K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=43.4K, leftRowsWithMatchActual=132.6K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=11, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) -│ ║ ├── Filter (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=228.1M, nextCallCountActual=132.6K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.0K, exprEvalCountActual=132.6K, openCountActual=1, exprTrueCountActual=132.6K, lastRowTimeNanosActual=452.6M, closeCountActual=1, exprEvalTimeNanosActual=13.6M, inputRowsActual=132.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=14, filterRejectRateActual=0) [left] -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=132.6K, exprTrueCountActual=132.6K, exprEvalTimeNanosActual=5.4M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optAssembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=204.1M, nextCallCountActual=132.6K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=19.9K, leftRowsWithMatchActual=132.6K, openCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5K, avgNextNanosActual=8.95, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.9M, nextCallCountActual=132.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=11.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=452.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=64, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=93.0M, nextCallCountActual=132.6K, nextTimeNanosActual=20.9M, firstRowTimeNanosActual=625, openCountActual=132.6K, lastRowTimeNanosActual=2.9K, closeCountActual=132.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=351, avgNextNanosActual=158) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=59.3M, nextCallCountActual=132.6K, nextTimeNanosActual=9.4M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=2.7K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=72, indexHitRateActual=0.50) -│ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optAssembly) (hasNextFalseCountActual=0) -│ ║ │ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=55.7M, nextCallCountActual=132.6K, nextTimeNanosActual=7.4M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=56, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=485.0M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=485.0M, openCountActual=1, lastRowTimeNanosActual=485.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242.5M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=485.0M, nextCallCountActual=1, nextTimeNanosActual=750, aggregateEvalCountActual=132.6K, firstRowTimeNanosActual=485.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=485.0M, maxGroupSizeActual=132.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=132.7K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=242.5M, avgNextNanosActual=750) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=392.8M, nextCallCountActual=132.6K, nextTimeNanosActual=1.6M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=23.8K, leftRowsWithMatchActual=132.6K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=485.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=12, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) + │ ║ ├── Filter (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=243.6M, nextCallCountActual=132.6K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=17.2K, exprEvalCountActual=132.6K, openCountActual=1, exprTrueCountActual=132.6K, lastRowTimeNanosActual=484.9M, closeCountActual=1, exprEvalTimeNanosActual=17.2M, inputRowsActual=132.6K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, filterRejectRateActual=0) [left] + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=132.6K, exprTrueCountActual=132.6K, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=215.7M, nextCallCountActual=132.6K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=132.6K, firstRowTimeNanosActual=15.5K, leftRowsWithMatchActual=132.6K, openCountActual=1, lastRowTimeNanosActual=484.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=265.3K, rowsDroppedActual=132.6K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=11, leftRowsProbedActual=132.6K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=16.4M, nextCallCountActual=132.6K, nextTimeNanosActual=8.4M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=484.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=124, avgNextNanosActual=64, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=97.9M, nextCallCountActual=132.6K, nextTimeNanosActual=20.7M, firstRowTimeNanosActual=625, openCountActual=132.6K, lastRowTimeNanosActual=3.5K, closeCountActual=132.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=369, avgNextNanosActual=156) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=63.4M, nextCallCountActual=132.6K, nextTimeNanosActual=8.8M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=3.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=239, avgNextNanosActual=67, indexHitRateActual=0.50) + │ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optAssembly) (hasNextFalseCountActual=0) + │ ║ │ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=59.7M, nextCallCountActual=132.6K, nextTimeNanosActual=7.8M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.5K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=59, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4647,116 +4946,116 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optAssembly) (bindingState=bound) -│ ║ │ ║ Var (name=component) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] -│ ║ │ │ s: Var (name=component) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) -│ ║ │ ║ s: Var (name=component) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) -│ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optAssembly) -│ ║ │ Var (name=assembly) (bindingState=bound) -│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] -│ ║ s: Var (name=component) (bindingState=bound) -│ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) -│ ║ o: Var (name=dep) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=component) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=component) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optAssembly) (bindingState=bound) + │ ║ │ ║ Var (name=component) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + │ ║ │ │ s: Var (name=component) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optAssembly) + │ ║ │ Var (name=assembly) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ o: Var (name=dep) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { -?component a . -OPTIONAL { -?component ?assembly . -BIND(?assembly AS ?optAssembly) -} -FILTER (?optAssembly != ?component) -OPTIONAL { -?component ?dep . -} + ?component a . + OPTIONAL { + ?component ?assembly . + BIND(?assembly AS ?optAssembly) + } + FILTER (?optAssembly != ?component) + OPTIONAL { + ?component ?dep . + } } Theme: ENGINEERING z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 298 ms +Initial explain execution time: 330 ms Warmup execution 1/6 Warmup execution 2/6 Warmup execution 3/6 Warmup execution 4/6 Warmup execution 5/6 Warmup execution 6/6 -Fastest execution time: 190 ms +Fastest execution time: 203 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=298.9M, openCountActual=1, lastRowTimeNanosActual=298.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=2.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=321.2M, nextCallCountActual=1, nextTimeNanosActual=2.4K, firstRowTimeNanosActual=321.2M, openCountActual=1, lastRowTimeNanosActual=321.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=160.6M, avgNextNanosActual=2.4K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=298.9M, openCountActual=1, lastRowTimeNanosActual=299.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=298.9M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=4, firstRowTimeNanosActual=298.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=299.0M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=149.5M, avgNextNanosActual=500) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=298.9M, nextCallCountActual=4, nextTimeNanosActual=125, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=42.0K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=298.9M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=49.8M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) -│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] -│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.2M, nextCallCountActual=4, nextTimeNanosActual=250, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=1.0K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=42.2K, exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=298.9M, closeCountActual=1, exprEvalTimeNanosActual=484.4K, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=242.5K, avgNextNanosActual=63, filterRejectRateActual=1.00) -│ ║ │ ║ ├── Or (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=410.0K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=312.1K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=38.4K, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, resultSizeActual=1.0K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=522, expansionFactorActual=1.99, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=520) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=749, firstRowTimeNanosActual=28.2K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=38.7K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=361, avgNextNanosActual=375) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.5K, stddevActual=128, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=51.8K, nextCallCountActual=520, nextTimeNanosActual=25.7K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=14.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=49, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=229.9K, nextCallCountActual=520, nextTimeNanosActual=27.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=53, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=265.3K, rowsDroppedActual=265.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ │ ├── Or (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=107.6M, hasNextFalseCountActual=0) -│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=80.2M, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=9.9M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, resultSizeActual=265.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=132.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=132.7K) -│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=208, nextCallCountActual=2, nextTimeNanosActual=126, firstRowTimeNanosActual=2.0M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=2.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=69, avgNextNanosActual=63) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K, resultSizeActual=132.6K, joinRightIteratorsCreatedActual=134.1K, joinLeftBindingsConsumedActual=134.1K, joinRightBindingsConsumedActual=132.6K, inputRowsActual=266.7K, rowsDroppedActual=134.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.1K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=0.99, joinOutputPerLeftActual=0.99) [right] -│ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=134.2K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=14.6M, nextCallCountActual=134.1K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=1.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=298.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=45, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=137.2K, resultSizeActual=132.6K, hasNextCallCountActual=266.7K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=60.6M, nextCallCountActual=132.6K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=266.7K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=134.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=134.1K, openCountActual=134.1K, lastRowTimeNanosActual=375, closeCountActual=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=134.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=42, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.2K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=333, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=323, indexHitRateActual=0) [right] -│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=321.2M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=321.2M, openCountActual=1, lastRowTimeNanosActual=321.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=160.6M, avgNextNanosActual=1.3K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=321.2M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=4, firstRowTimeNanosActual=321.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=321.2M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=160.6M, avgNextNanosActual=375) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=321.2M, nextCallCountActual=4, nextTimeNanosActual=41, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.6K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=321.2M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=53.5M, avgNextNanosActual=10, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) + │ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] + │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=1.3M, nextCallCountActual=4, nextTimeNanosActual=416, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=1.0K, plannedFilterEvidenceCount=22.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=54.2K, exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=321.2M, closeCountActual=1, exprEvalTimeNanosActual=558.7K, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=278.4K, avgNextNanosActual=104, filterRejectRateActual=1.00) + │ ║ │ ║ ├── Or (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=468.7K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=352.2K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=1.0K, exprFalseCountActual=1.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=45.0K, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, resultSizeActual=1.0K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=522, expansionFactorActual=1.99, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=520) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=918, firstRowTimeNanosActual=37.2K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=46.0K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=361, avgNextNanosActual=459) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.5K, stddevActual=128, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=55.0K, nextCallCountActual=520, nextTimeNanosActual=30.5K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedAccessRows=6.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=18.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=275.7K, nextCallCountActual=520, nextTimeNanosActual=32.7K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=833, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=2.1K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=265, avgNextNanosActual=63, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=22.3M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=265.3K, rowsDroppedActual=265.3K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ │ ├── Or (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=116.3M, hasNextFalseCountActual=0) + │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=87.0M, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=265.3K, exprFalseCountActual=265.3K, exprEvalTimeNanosActual=10.8M, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="REQ-1002") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, resultSizeActual=265.3K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=132.6K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=132.7K) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=335, nextCallCountActual=2, nextTimeNanosActual=167, firstRowTimeNanosActual=2.2M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=2.2M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=112, avgNextNanosActual=84) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K, resultSizeActual=132.6K, joinRightIteratorsCreatedActual=134.1K, joinLeftBindingsConsumedActual=134.1K, joinRightBindingsConsumedActual=132.6K, inputRowsActual=266.7K, rowsDroppedActual=134.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.02, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.1K, rightRowsScannedActual=132.6K, avgRightRowsPerLeftActual=0.99, joinOutputPerLeftActual=0.99) [right] + │ ║ │ ├── StatementPattern [index: psoc] (resultSizeEstimate=134.2K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=12.9M, nextCallCountActual=134.1K, nextTimeNanosActual=6.6M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedAccessRows=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.4M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=321.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=49, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=137.2K, resultSizeActual=132.6K, hasNextCallCountActual=266.7K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=66.5M, nextCallCountActual=132.6K, nextTimeNanosActual=6.1M, sourceRowsScannedActual=266.7K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=134.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity], firstRowTimeNanosActual=667, indexLookupCountActual=134.1K, openCountActual=134.1K, lastRowTimeNanosActual=333, closeCountActual=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=134.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=46, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.8K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=417, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=469, indexHitRateActual=0) [right] + │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4764,85 +5063,85 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Union [left] -│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ║ ├── Or -│ ║ │ ║ │ ╠══ Compare (=) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ ║ │ ╚══ Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="REQ-1002") -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ │ ║ o: Var (name=name) (bindingState=unbound) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ├── Or -│ ║ │ │ ╠══ Compare (=) -│ ║ │ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ │ ╚══ Compare (=) -│ ║ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ ValueConstant (value="REQ-1002") -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) -│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] -│ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ │ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) -│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] -│ ║ s: Var (name=entity) (bindingState=bound) -│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) -│ ║ o: Var (name=assembly) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=entity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=entity) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=22.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1002") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedAccessRows=6.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=134.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=22.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="REQ-1002") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=134.2K, plannedAccessRows=134.2K, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=137.2K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { -{ -VALUES ?target { "REQ-1000" "REQ-1001" } -{ -{ -?entity a . -?entity ?name . -} -} -FILTER ((?name = ?target) || (?name = "REQ-1002")) -} -UNION -{ -VALUES ?target { "REQ-1000" "REQ-1001" } -{ -{ -?entity ?name . -?entity a . -} -} -FILTER ((?name = ?target) || (?name = "REQ-1002")) -} -OPTIONAL { -?entity ?assembly . -} + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + UNION + { + VALUES ?target { "REQ-1000" "REQ-1001" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "REQ-1002")) + } + OPTIONAL { + ?entity ?assembly . + } } @@ -4859,56 +5158,56 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 5 ms +Fastest execution time: 4 ms -Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=917, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=306) +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.9M, nextCallCountActual=3, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=5.8M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.5M, avgNextNanosActual=430) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "assembly" (hasNextFalseCountActual=0) ║ ProjectionElem "componentCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=542, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=181) -├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=335, firstRowTimeNanosActual=5.7M, openCountActual=1, lastRowTimeNanosActual=5.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=112) -│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.7M, nextCallCountActual=3, nextTimeNanosActual=41, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=5.7M, closeCountActual=1, exprEvalTimeNanosActual=1.4K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=957, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.1K, hasNextFalseCountActual=0) -│ ║ └── Group (assembly) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.6M, nextCallCountActual=3, nextTimeNanosActual=83, aggregateEvalCountActual=840, firstRowTimeNanosActual=5.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=5.7M, maxGroupSizeActual=148, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=140, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=420, rowsDroppedActual=417, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.4M, avgNextNanosActual=28) -│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=420, hasNextCallCountActual=422, hasNextTrueCountActual=421, hasNextTimeNanosActual=5.4M, nextCallCountActual=420, nextTimeNanosActual=6.4K, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=420, firstRowTimeNanosActual=21.4K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=5.6M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=423, rowsDroppedActual=3, expansionFactorActual=0.99, sampleCountActual=2, varianceActual=22.5K, stddevActual=150, confidenceScoreActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=15, leftRowsProbedActual=3, rightRowsScannedActual=420, avgRightRowsPerLeftActual=140, joinMatchRateActual=1.00, joinOutputPerLeftActual=140, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=3, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=924, joinRightBindingsConsumedActual=3, inputRowsActual=924, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=924, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=84.9K, nextCallCountActual=921, nextTimeNanosActual=36.4K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=92, avgNextNanosActual=40, indexHitRateActual=1.00) [left] -│ ║ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeActual=3, hasNextCallCountActual=924, hasNextTrueCountActual=3, hasNextTimeNanosActual=3.1M, nextCallCountActual=3, nextTimeNanosActual=84, sourceRowsScannedActual=921, sourceRowsMatchedActual=3, sourceRowsFilteredActual=918, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.8K, exprEvalCountActual=921, exprFalseCountActual=918, openCountActual=921, exprTrueCountActual=3, lastRowTimeNanosActual=3.3K, closeCountActual=921, exprEvalTimeNanosActual=699.6K, inputRowsActual=921, rowsDroppedActual=918, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] -│ ║ │ ├── ListMemberOperator (exprEvalCountActual=921, exprFalseCountActual=918, exprTrueCountActual=3, exprEvalTimeNanosActual=645.5K, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=assemblyName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Assembly 1") (exprEvalCountActual=921, exprTrueCountActual=921, exprEvalTimeNanosActual=28.2K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=920, exprTrueCountActual=920, exprEvalTimeNanosActual=28.3K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Assembly 3") (exprEvalCountActual=919, exprTrueCountActual=919, exprEvalTimeNanosActual=36.2K, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=426.8K, nextCallCountActual=921, nextTimeNanosActual=34.8K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=ListMemberOperator -│ ║ │ Var (name=assemblyName) -│ ║ │ ValueConstant (value="Assembly 1") -│ ║ │ ValueConstant (value="Assembly 2") -│ ║ │ ValueConstant (value="Assembly 3") -│ ║ │ , firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.4K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=232, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=assemblyName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=420, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=47.3K, nextCallCountActual=420, nextTimeNanosActual=15.0K, sourceRowsScannedActual=423, sourceRowsMatchedActual=420, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=709, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=106.3K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=38, avgNextNanosActual=36, indexHitRateActual=0.99) [right] -│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (componentCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_18713f2fe36952f541b08a42a7b8ce15e70d0) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (componentCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.9M, nextCallCountActual=3, nextTimeNanosActual=708, firstRowTimeNanosActual=5.8M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.5M, avgNextNanosActual=236) + ├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.9M, nextCallCountActual=3, nextTimeNanosActual=501, firstRowTimeNanosActual=5.8M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.5M, avgNextNanosActual=167) + │ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.8M, nextCallCountActual=3, nextTimeNanosActual=167, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.8M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=1.8K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.5M, avgNextNanosActual=56, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=1.4K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_1771e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=3.6K, hasNextFalseCountActual=0) + │ ║ └── Group (assembly) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=5.8M, nextCallCountActual=3, nextTimeNanosActual=207, aggregateEvalCountActual=840, firstRowTimeNanosActual=5.8M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=5.8M, maxGroupSizeActual=148, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=140, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=420, rowsDroppedActual=417, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.5M, avgNextNanosActual=69) + │ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=420, hasNextCallCountActual=422, hasNextTrueCountActual=421, hasNextTimeNanosActual=5.5M, nextCallCountActual=420, nextTimeNanosActual=7.2K, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=420, firstRowTimeNanosActual=29.6K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=5.8M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=423, rowsDroppedActual=3, expansionFactorActual=0.99, sampleCountActual=2, varianceActual=24.8K, stddevActual=157, confidenceScoreActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.2K, avgNextNanosActual=17, leftRowsProbedActual=3, rightRowsScannedActual=420, avgRightRowsPerLeftActual=140, joinMatchRateActual=1.00, joinOutputPerLeftActual=140, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.00, resultSizeActual=3, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=924, joinRightBindingsConsumedActual=3, inputRowsActual=924, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=924, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] + │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=91.9K, nextCallCountActual=921, nextTimeNanosActual=33.4K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedAccessRows=15.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=100, avgNextNanosActual=36, indexHitRateActual=1.00) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=3, hasNextCallCountActual=924, hasNextTrueCountActual=3, hasNextTimeNanosActual=3.2M, nextCallCountActual=3, nextTimeNanosActual=84, sourceRowsScannedActual=921, sourceRowsMatchedActual=3, sourceRowsFilteredActual=918, plannedFilterEvidenceCount=2.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.9K, exprEvalCountActual=921, exprFalseCountActual=918, openCountActual=921, exprTrueCountActual=3, lastRowTimeNanosActual=3.4K, closeCountActual=921, exprEvalTimeNanosActual=764.0K, inputRowsActual=921, rowsDroppedActual=918, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.6K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] + │ ║ │ ├── ListMemberOperator (exprEvalCountActual=921, exprFalseCountActual=918, exprTrueCountActual=3, exprEvalTimeNanosActual=701.7K, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=assemblyName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Assembly 1") (exprEvalCountActual=921, exprTrueCountActual=921, exprEvalTimeNanosActual=35.5K, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=920, exprTrueCountActual=920, exprEvalTimeNanosActual=24.3K, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Assembly 3") (exprEvalCountActual=919, exprTrueCountActual=919, exprEvalTimeNanosActual=38.8K, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=452.2K, nextCallCountActual=921, nextTimeNanosActual=33.4K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[assembly], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=assemblyName) + │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ ValueConstant (value="Assembly 2") + │ ║ │ ValueConstant (value="Assembly 3") + │ ║ │ passRatio=0.003257328990228013 source=learned_filter evidence=2680110, sharedJoinVars=[assembly], firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.4K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=36, indexHitRateActual=0.50) + │ ║ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=420, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=47.3K, nextCallCountActual=420, nextTimeNanosActual=17.1K, sourceRowsScannedActual=423, sourceRowsMatchedActual=420, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=666, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=119.4K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=38, avgNextNanosActual=41, indexHitRateActual=0.99) [right] + │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_1771e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (componentCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_1771e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (componentCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -4917,59 +5216,59 @@ Projection ║ ProjectionElem "assembly" ║ ProjectionElem "componentCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (assembly) -│ ║ LeftJoin -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] -│ ║ │ ├── ListMemberOperator -│ ║ │ │ Var (name=assemblyName) (bindingState=bound) -│ ║ │ │ ValueConstant (value="Assembly 1") -│ ║ │ │ ValueConstant (value="Assembly 2") -│ ║ │ │ ValueConstant (value="Assembly 3") -│ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=ListMemberOperator -│ ║ │ Var (name=assemblyName) -│ ║ │ ValueConstant (value="Assembly 1") -│ ║ │ ValueConstant (value="Assembly 2") -│ ║ │ ValueConstant (value="Assembly 3") -│ ║ │ ) -│ ║ │ s: Var (name=assembly) (bindingState=bound) -│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ │ o: Var (name=assemblyName) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] -│ ║ s: Var (name=component) (bindingState=unbound) -│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) -│ ║ o: Var (name=assembly) (bindingState=bound) -│ ║ GroupElem (_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234) -│ ║ Count -│ ║ Var (name=component) (bindingState=bound) -│ ║ GroupElem (componentCount) -│ ║ Count (Distinct) -│ ║ Var (name=component) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_58713f2fe36952f541b08a42a7b8ce15e70d01234) -│ Count -│ Var (name=component) (bindingState=unbound) -└── ExtensionElem (componentCount) -Count (Distinct) -Var (name=component) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5771e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (assembly) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=3.00) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedAccessRows=15.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=2.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=assemblyName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ ValueConstant (value="Assembly 3") + │ ║ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[assembly], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=assemblyName) + │ ║ │ ValueConstant (value="Assembly 1") + │ ║ │ ValueConstant (value="Assembly 2") + │ ║ │ ValueConstant (value="Assembly 3") + │ ║ │ passRatio=0.003257328990228013 source=learned_filter evidence=2681031, sharedJoinVars=[assembly]) + │ ║ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=assemblyName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ GroupElem (_anon_having_5771e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ Count + │ ║ Var (name=component) (bindingState=bound) + │ ║ GroupElem (componentCount) + │ ║ Count (Distinct) + │ ║ Var (name=component) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5771e226babdcc344c88a5a61806b6a8e7f301234) + │ Count + │ Var (name=component) (bindingState=unbound) + └── ExtensionElem (componentCount) + Count (Distinct) + Var (name=component) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { -?assembly a . -?assembly ?assemblyName . -FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) -OPTIONAL { -?component ?assembly . -} + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } } GROUP BY ?assembly HAVING (COUNT(?component) > 0) @@ -4977,60 +5276,59 @@ HAVING (COUNT(?component) > 0) Theme: ENGINEERING z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 207 ms -Warmup execution 1/9 -Warmup execution 2/9 -Warmup execution 3/9 -Warmup execution 4/9 -Warmup execution 5/9 -Warmup execution 6/9 -Warmup execution 7/9 -Warmup execution 8/9 -Warmup execution 9/9 -Fastest execution time: 143 ms +Initial explain execution time: 225 ms +Warmup execution 1/8 +Warmup execution 2/8 +Warmup execution 3/8 +Warmup execution 4/8 +Warmup execution 5/8 +Warmup execution 6/8 +Warmup execution 7/8 +Warmup execution 8/8 +Fastest execution time: 168 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=185.1M, openCountActual=1, lastRowTimeNanosActual=185.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=1.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=245.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=245.9M, openCountActual=1, lastRowTimeNanosActual=245.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=123.0M, avgNextNanosActual=1.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=185.2M, openCountActual=1, lastRowTimeNanosActual=185.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=625) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=185.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=185.2M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=500) -│ ╠══ Difference (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=184.8M, nextCallCountActual=1.0K, nextTimeNanosActual=11.5K, firstRowTimeNanosActual=181.8M, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=45.3K, rowsDroppedActual=44.3K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=177.4K, avgNextNanosActual=11, leftRowsConsumedActual=1.5K, rightRowsConsumedActual=43.7K, overlapRowsActual=517) -│ ║ ├── Filter (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.5K, nextTimeNanosActual=20.2K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=21.5K, exprEvalCountActual=1.5K, openCountActual=1, exprTrueCountActual=1.5K, lastRowTimeNanosActual=185.1M, closeCountActual=1, exprEvalTimeNanosActual=183.7K, inputRowsActual=1.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=13, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=72.1K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optTest) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.7M, nextCallCountActual=1.5K, nextTimeNanosActual=16.6K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=1.5K, firstRowTimeNanosActual=18.0K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=2.0K, rowsDroppedActual=520, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=11, leftRowsProbedActual=520, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=2.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.99, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=1.0K, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1.0K, rightRowsScannedActual=520, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] -│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=56.7K, nextCallCountActual=520, nextTimeNanosActual=32.3K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=9.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=185.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=62, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=239.1K, nextCallCountActual=520, nextTimeNanosActual=35.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=6.0K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=68, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=591.2K, nextCallCountActual=1.5K, nextTimeNanosActual=167.7K, firstRowTimeNanosActual=667, openCountActual=520, lastRowTimeNanosActual=5.0K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=142, avgNextNanosActual=108) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=369.2K, nextCallCountActual=1.5K, nextTimeNanosActual=76.3K, sourceRowsScannedActual=2.0K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.9K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=89, avgNextNanosActual=49, indexHitRateActual=0.75) -│ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optTest) (hasNextFalseCountActual=0) -│ ║ │ Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=43.7K, hasNextCallCountActual=43.7K, hasNextTrueCountActual=43.7K, hasNextTimeNanosActual=111.9M, nextCallCountActual=43.7K, nextTimeNanosActual=562.8K, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=43.7K, sourceRowsFilteredActual=90.3K, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=700.1K, exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, openCountActual=1, exprTrueCountActual=43.7K, lastRowTimeNanosActual=150.8M, closeCountActual=1, exprEvalTimeNanosActual=88.2M, inputRowsActual=134.1K, rowsDroppedActual=90.3K, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=13, filterRejectRateActual=0.67) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, exprTrueCountActual=43.7K, exprEvalTimeNanosActual=80.4M, hasNextFalseCountActual=0) -│ ║ ║ ├── Str (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=65.3M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="Component 1") (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=4.2M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.1K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=10.7M, nextCallCountActual=134.1K, nextTimeNanosActual=4.8M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=150.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=37, indexHitRateActual=1.00) -│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=245.9M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=245.9M, openCountActual=1, lastRowTimeNanosActual=245.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=123.0M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=245.9M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=245.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=245.9M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=123.0M, avgNextNanosActual=583) + │ ╠══ Difference (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=245.5M, nextCallCountActual=1.0K, nextTimeNanosActual=24.6K, firstRowTimeNanosActual=241.7M, openCountActual=1, lastRowTimeNanosActual=245.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=45.3K, rowsDroppedActual=44.3K, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=235.7K, avgNextNanosActual=24, leftRowsConsumedActual=1.5K, rightRowsConsumedActual=43.7K, overlapRowsActual=517) + │ ║ ├── Filter (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=2.5M, nextCallCountActual=1.5K, nextTimeNanosActual=34.0K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=33.0K, exprEvalCountActual=1.5K, openCountActual=1, exprTrueCountActual=1.5K, lastRowTimeNanosActual=245.9M, closeCountActual=1, exprEvalTimeNanosActual=244.9K, inputRowsActual=1.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=22, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=81.5K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optTest) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.5K, nextTimeNanosActual=26.6K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=1.5K, firstRowTimeNanosActual=28.6K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=245.8M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=2.0K, rowsDroppedActual=520, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4K, avgNextNanosActual=17, leftRowsProbedActual=520, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=2.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.99, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=1.0K, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1.0K, rightRowsScannedActual=520, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=69.9K, nextCallCountActual=520, nextTimeNanosActual=38.8K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=14.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=245.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=134, avgNextNanosActual=75, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=293.7K, nextCallCountActual=520, nextTimeNanosActual=38.6K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[requirement], firstRowTimeNanosActual=458, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=6.8K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=282, avgNextNanosActual=74, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=669.6K, nextCallCountActual=1.5K, nextTimeNanosActual=225.9K, firstRowTimeNanosActual=625, openCountActual=520, lastRowTimeNanosActual=5.9K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=161, avgNextNanosActual=145) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.1K, hasNextTrueCountActual=3.6K, hasNextTimeNanosActual=413.4K, nextCallCountActual=1.5K, nextTimeNanosActual=98.8K, sourceRowsScannedActual=2.0K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.7K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=100, avgNextNanosActual=64, indexHitRateActual=0.75) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optTest) (hasNextFalseCountActual=0) + │ ║ │ Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=43.7K, hasNextCallCountActual=43.7K, hasNextTrueCountActual=43.7K, hasNextTimeNanosActual=135.6M, nextCallCountActual=43.7K, nextTimeNanosActual=713.8K, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=43.7K, sourceRowsFilteredActual=90.3K, plannedFilterEvidenceCount=12.7M, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=894.5K, exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, openCountActual=1, exprTrueCountActual=43.7K, lastRowTimeNanosActual=184.5M, closeCountActual=1, exprEvalTimeNanosActual=108.4M, inputRowsActual=134.1K, rowsDroppedActual=90.3K, selectivityActual=0.33, expansionFactorActual=0.33, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.1K, avgNextNanosActual=16, filterRejectRateActual=0.67) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=134.1K, exprFalseCountActual=90.3K, exprTrueCountActual=43.7K, exprEvalTimeNanosActual=98.5M, hasNextFalseCountActual=0) + │ ║ ║ ├── Str (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=78.9M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="Component 1") (exprEvalCountActual=134.1K, exprTrueCountActual=134.1K, exprEvalTimeNanosActual=5.2M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.1K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=11.5M, nextCallCountActual=134.1K, nextTimeNanosActual=6.7M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=184.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=50, indexHitRateActual=1.00) + │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5038,108 +5336,116 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optTest) (bindingState=bound) -│ ║ │ ║ Var (name=requirement) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ │ s: Var (name=requirement) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) -│ ║ │ ║ s: Var (name=requirement) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) -│ ║ │ ║ o: Var (name=test) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optTest) -│ ║ │ Var (name=test) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── Str -│ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="Component 1") -│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) -│ ║ s: Var (name=component) (bindingState=unbound) -│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ o: Var (name=name) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=requirement) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=requirement) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTest) (bindingState=bound) + │ ║ │ ║ Var (name=requirement) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=520) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[requirement]) [right] + │ ║ │ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=3.1K) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ │ ║ o: Var (name=test) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTest) + │ ║ │ Var (name=test) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=12.8M, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Component 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { -?requirement ?component . -?requirement a . -OPTIONAL { -?requirement ?test . -BIND(?test AS ?optTest) -} -FILTER (?optTest != ?requirement) -MINUS { -?component ?name . -FILTER (CONTAINS(STR(?name), "Component 1")) -} + ?requirement ?component . + ?requirement a . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } } Theme: ENGINEERING z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 857 ms -Warmup execution 1/2 -Warmup execution 2/2 -Fastest execution time: 455 ms +Initial explain execution time: 124 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 76 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=848.1M, openCountActual=1, lastRowTimeNanosActual=848.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=6.4K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=109.3M, nextCallCountActual=1, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=109.3M, openCountActual=1, lastRowTimeNanosActual=109.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=54.7M, avgNextNanosActual=2.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=5.4K, firstRowTimeNanosActual=848.1M, openCountActual=1, lastRowTimeNanosActual=848.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=5.5K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=848.1M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=2, firstRowTimeNanosActual=848.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=848.1M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=424.1M, avgNextNanosActual=583) -│ ╠══ Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=848.0M, nextCallCountActual=2, nextTimeNanosActual=83, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=64.2K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=848.0M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=3.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212.0M, avgNextNanosActual=42, filterRejectRateActual=0) -│ ║ ├── Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=3.0K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=708, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=417, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) -│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=848.0M, nextCallCountActual=2, nextTimeNanosActual=126, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=60.8K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=848.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=989.3M, stddevActual=31.5K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=282.7M, avgNextNanosActual=63, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K, resultSizeActual=2, joinRightIteratorsCreatedActual=132.6K, joinLeftBindingsConsumedActual=132.6K, joinRightBindingsConsumedActual=2, inputRowsActual=132.6K, rowsDroppedActual=132.6K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=2.9M, stddevActual=1.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=132.6K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] -│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=132.9K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=13.7M, nextCallCountActual=132.6K, nextTimeNanosActual=5.3M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=848.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=40, indexHitRateActual=1.00) [left] -│ ║ ║ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=6.9K, resultSizeActual=2, hasNextCallCountActual=132.6K, hasNextTrueCountActual=2, hasNextTimeNanosActual=498.5M, nextCallCountActual=2, nextTimeNanosActual=208, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=132.6K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.9K, exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, openCountActual=132.6K, exprTrueCountActual=2, lastRowTimeNanosActual=3.4K, closeCountActual=132.6K, exprEvalTimeNanosActual=98.8M, inputRowsActual=132.6K, rowsDroppedActual=132.6K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=104, filterRejectRateActual=1.00) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=91.1M, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=1, exprEvalTimeNanosActual=76.1M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="Component 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=132.6K, exprFalseCountActual=132.6K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.5M, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="Component 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=132.6K, hasNextCallCountActual=265.3K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=65.9M, nextCallCountActual=132.6K, nextTimeNanosActual=5.2M, sourceRowsScannedActual=265.3K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=132.6K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=132.6K, openCountActual=132.6K, lastRowTimeNanosActual=1.2K, closeCountActual=132.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=132.6K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=248, avgNextNanosActual=40, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.1K, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=6.6K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=292, avgNextNanosActual=21, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=109.3M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=109.3M, openCountActual=1, lastRowTimeNanosActual=109.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=54.7M, avgNextNanosActual=1.7K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=109.3M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=2, firstRowTimeNanosActual=109.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=109.3M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=54.7M, avgNextNanosActual=542) + │ ╠══ Filter (resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=109.2M, nextCallCountActual=2, nextTimeNanosActual=84, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=845.1K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=109.3M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=15.2K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=27.3M, avgNextNanosActual=42, filterRejectRateActual=0) + │ ║ ├── Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=14.9K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=834, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=458, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=417, indexHitRateActual=1.00) + │ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.2M, nextCallCountActual=2, nextTimeNanosActual=42, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=2, firstRowTimeNanosActual=829.4K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=109.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1097.8M, stddevActual=33.1K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=36.4M, avgNextNanosActual=21, leftRowsProbedActual=2, rightRowsScannedActual=2, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137, resultSizeActual=2, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=4, joinRightBindingsConsumedActual=2, inputRowsActual=4, rowsDroppedActual=2, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1100.1M, stddevActual=33.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=4, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.2M, nextCallCountActual=2, nextTimeNanosActual=374, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=134.1K, plannedFilterEvidenceCount=28.9M, plannedAccessRows=134.2K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=816.1K, exprEvalCountActual=134.1K, exprFalseCountActual=134.1K, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=109.2M, closeCountActual=1, exprEvalTimeNanosActual=86.9M, inputRowsActual=134.1K, rowsDroppedActual=134.1K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=36.4M, avgNextNanosActual=187, filterRejectRateActual=1.00) [left] + │ ║ ║ │ ╠══ Or (exprEvalCountActual=134.1K, exprFalseCountActual=134.1K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=78.4M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ├── Compare (=) (exprEvalCountActual=134.1K, exprFalseCountActual=134.1K, exprTrueCountActual=1, exprEvalTimeNanosActual=64.4M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── Compare (=) (exprEvalCountActual=134.1K, exprFalseCountActual=134.1K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="Component 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.1K, resultSizeActual=134.1K, hasNextCallCountActual=134.1K, hasNextTrueCountActual=134.1K, hasNextTimeNanosActual=10.9M, nextCallCountActual=134.1K, nextTimeNanosActual=4.8M, sourceRowsScannedActual=134.1K, sourceRowsMatchedActual=134.1K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=109.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=82, avgNextNanosActual=36, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=5.3K, nextCallCountActual=2, nextTimeNanosActual=833, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, name], sharedJoinVars=[component], firstRowTimeNanosActual=750, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=4.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.3K, avgNextNanosActual=417, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=2, hasNextCallCountActual=4, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.5K, nextCallCountActual=2, nextTimeNanosActual=293, sourceRowsScannedActual=4, sourceRowsMatchedActual=2, sourceRowsFilteredActual=2, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=2.7K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=385, avgNextNanosActual=147, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5147,60 +5453,60 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Exists -│ ║ │ StatementPattern (resultSizeEstimate=132.7K) -│ ║ │ s: Var (name=component) (bindingState=bound) -│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) -│ ║ │ o: Var (name=dep) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=6.9K) [left] -│ ║ ║ ├── StatementPattern (resultSizeEstimate=132.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=139.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ s: Var (name=component) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) -│ ║ ║ └── Filter (resultSizeEstimate=6.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[component], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (=) -│ ║ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="Component 1") -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=name) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="Component 2") -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) -│ ║ ║ s: Var (name=component) (bindingState=bound) -│ ║ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ ║ o: Var (name=name) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] -│ ║ s: Var (name=component) (bindingState=bound) -│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) -│ ║ o: Var (name=assembly) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=component) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=component) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=137) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=29.1M, plannedAccessRows=134.2K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=134.2K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ Or + │ ║ ║ │ ║ ├── Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Component 1") + │ ║ ║ │ ║ └── Compare (=) + │ ║ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="Component 2") + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ ║ │ s: Var (name=component) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, name], sharedJoinVars=[component]) [right] + │ ║ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + │ ║ s: Var (name=component) (bindingState=bound) + │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ o: Var (name=assembly) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=component) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=component) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?component) AS ?count) WHERE { -?component a . -?component ?name . -FILTER ((?name = "Component 1") || (?name = "Component 2")) -OPTIONAL { -?component ?assembly . -} -FILTER EXISTS { -?component ?dep . -} + ?component ?name . + FILTER ((?name = "Component 1") || (?name = "Component 2")) + ?component a . + OPTIONAL { + ?component ?assembly . + } + FILTER EXISTS { + ?component ?dep . + } } Theme: ENGINEERING z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 20 ms +Initial explain execution time: 16 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -5211,56 +5517,46 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 8 ms +Fastest execution time: 4 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=9.5K, firstRowTimeNanosActual=12.7M, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=9.5K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.3M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=2.3M, openCountActual=1, lastRowTimeNanosActual=2.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2M, avgNextNanosActual=1.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=7.4K, firstRowTimeNanosActual=12.7M, openCountActual=1, lastRowTimeNanosActual=12.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=7.4K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=12.7M, nextCallCountActual=1, nextTimeNanosActual=5.5K, firstRowTimeNanosActual=12.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=12.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=6.4M, avgNextNanosActual=5.6K, avgGroupSizeActual=0) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=12.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, openCountActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=12.7M) -│ ║ ├── Not (hasNextFalseCountActual=0) -│ ║ │ Exists (hasNextFalseCountActual=0) -│ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (<) (hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) -│ ║ │ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K, resultSizeActual=0, joinRightIteratorsCreatedActual=1.5K, inputRowsActual=1.5K, rowsDroppedActual=1.5K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=1.5K, joinType=Cartesian product, inputRowsActual=1.5K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=1.6K, joinOutputPerLeftActual=1.6K) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.4K, nextCallCountActual=1, nextTimeNanosActual=333, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.1K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2K, avgNextNanosActual=333) [left] -│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=164.6K, nextCallCountActual=1.5K, nextTimeNanosActual=152.5K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=value2) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=1.6K) -│ ║ ║ Var (name=measurement) -│ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) -│ ║ ║ Var (name=value2) -│ ║ ║ , firstRowTimeNanosActual=1.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=12.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=98, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Filter (resultSizeEstimate=78, resultSizeActual=0, hasNextCallCountActual=1.5K, hasNextTimeNanosActual=8.5M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], filterSelectivitySource=heuristic, plannedLookupComponents=[S, O, P], exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1.5K, lastRowTimeNanosActual=3.8K, closeCountActual=1.5K, exprEvalTimeNanosActual=4.1M, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=5.5K, filterRejectRateActual=1.00) [right] -│ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=4.0M, hasNextFalseCountActual=0) -│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=256.7K, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=780.8K, nextCallCountActual=1.5K, nextTimeNanosActual=67.5K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=1.5K, openCountActual=1.5K, lastRowTimeNanosActual=1.7K, closeCountActual=1.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.5K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=251, avgNextNanosActual=43, indexHitRateActual=0.50) -│ ║ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.3M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=2.3M, openCountActual=1, lastRowTimeNanosActual=2.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2M, avgNextNanosActual=1000) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.3M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=2.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2.3M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2M, avgNextNanosActual=334, avgGroupSizeActual=0) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.2M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, openCountActual=1, lastRowTimeNanosActual=2.2M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.3M) + │ ║ ├── Not (hasNextFalseCountActual=0) + │ ║ │ Exists (hasNextFalseCountActual=0) + │ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterEvidenceCount=4.2M, plannedFilterPassRatio=0, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (<) (hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) + │ ║ │ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, joinType=Cartesian product, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=1.6K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.2M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterEvidenceCount=2.8M, plannedAccessRows=1.6K, plannedFilterPassRatio=0, plannedIndexPrefixLength=1.00, plannedWorkRows=1.6K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1, lastRowTimeNanosActual=2.2M, closeCountActual=1, exprEvalTimeNanosActual=1.9M, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.3M, filterRejectRateActual=1.00) [left] + │ ║ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=1.8M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=205.5K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=229.1K, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=135.9K, nextCallCountActual=1.5K, nextTimeNanosActual=76.8K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=12.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=87, avgNextNanosActual=49, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_f682b725_uri, measurement, value], varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ ║ s: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_d63bc2f6_uri, _const_f5e5585a_uri, _const_f682b725_uri, measurement, value], varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5268,123 +5564,113 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ ├── Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (<) -│ ║ │ ║ Var (name=value2) (bindingState=bound) -│ ║ │ ║ Var (name=threshold) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) -│ ║ │ s: Var (name=measurement) (bindingState=bound) -│ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) -│ ║ │ o: Var (name=value2) (bindingState=unbound) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=121.4K) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=8.2K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=value2) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=1.6K) -│ ║ ║ Var (name=measurement) -│ ║ ║ Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) -│ ║ ║ Var (name=value2) -│ ║ ║ ) -│ ║ ║ s: Var (name=measurement) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) -│ ║ ╚══ Filter (resultSizeEstimate=78, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[measurement, threshold], filterSelectivitySource=heuristic, plannedLookupComponents=[S, O, P]) [right] -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=value) (bindingState=bound) -│ ║ │ ValueConstant (value="0.9"^^) -│ ║ │ ValueConstant (value="0.95"^^) -│ ║ └── StatementPattern (resultSizeEstimate=1.6K) -│ ║ s: Var (name=measurement) (bindingState=bound) -│ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) -│ ║ o: Var (name=value) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=measurement) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=measurement) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=4.3M, plannedFilterPassRatio=0, filterSelectivitySource=learned_pattern) + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=value2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ │ s: Var (name=measurement) (bindingState=bound) + │ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ │ o: Var (name=value2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.6K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=1.6K, plannedFilterEvidenceCount=2.8M, plannedAccessRows=1.6K, plannedFilterPassRatio=0, plannedIndexPrefixLength=1.00, plannedWorkRows=1.6K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ o: Var (name=value) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=1.6K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_f682b725_uri, measurement, value]) [right] + │ ║ ║ s: Var (name=measurement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_d63bc2f6_uri, value=http://example.com/theme/engineering/Measurement, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="0.85"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_d63bc2f6_uri, _const_f5e5585a_uri, _const_f682b725_uri, measurement, value]) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=measurement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=measurement) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { -VALUES ?threshold { 0.85 } -?measurement a . -?measurement ?value . -FILTER (?value IN (0.9, 0.95)) -FILTER NOT EXISTS { -?measurement ?value2 . -FILTER (?value2 < ?threshold) -} + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } } Theme: ENGINEERING z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 441 ms +Initial explain execution time: 480 ms Warmup execution 1/4 Warmup execution 2/4 Warmup execution 3/4 Warmup execution 4/4 -Fastest execution time: 262 ms +Fastest execution time: 299 ms -Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=120.4K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.2K, avgNextNanosActual=232) +Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=447.5M, nextCallCountActual=520, nextTimeNanosActual=102.7K, firstRowTimeNanosActual=404.7M, openCountActual=1, lastRowTimeNanosActual=447.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=859.1K, avgNextNanosActual=198) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "component" (hasNextFalseCountActual=0) ║ ProjectionElem "reqCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=73.5K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.2K, avgNextNanosActual=141) -├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.4M, nextCallCountActual=520, nextTimeNanosActual=44.5K, firstRowTimeNanosActual=391.7M, openCountActual=1, lastRowTimeNanosActual=430.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.1K, avgNextNanosActual=86) -│ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=430.3M, nextCallCountActual=520, nextTimeNanosActual=9.5K, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=132.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=391.7M, exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=430.6M, closeCountActual=1, exprEvalTimeNanosActual=27.0M, inputRowsActual=132.6K, rowsDroppedActual=132.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=826.1K, avgNextNanosActual=18, filterRejectRateActual=1.00) -│ ║ ├── Compare (>) (exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, exprTrueCountActual=520, exprEvalTimeNanosActual=7.7M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=4.5K, hasNextFalseCountActual=0) -│ ║ └── Group (component) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=392.6M, nextCallCountActual=132.6K, nextTimeNanosActual=4.2M, aggregateEvalCountActual=266.3K, firstRowTimeNanosActual=391.7M, groupsCreatedActual=132.6K, openCountActual=1, lastRowTimeNanosActual=430.6M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=133.1K, rowsDroppedActual=520, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=32) -│ ║ Filter (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=241.1M, nextCallCountActual=133.1K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=133.1K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=35.9K, exprEvalCountActual=133.1K, predicateErrorCountActual=1, openCountActual=1, exprTrueCountActual=133.1K, lastRowTimeNanosActual=347.7M, closeCountActual=1, exprEvalTimeNanosActual=15.5M, inputRowsActual=133.1K, rowsDroppedActual=1, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, filterRejectRateActual=0.00) -│ ║ ├── Compare (!=) (exprEvalCountActual=133.1K, exprTrueCountActual=133.1K, exprErrorCountActual=1, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=215.3M, nextCallCountActual=133.1K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=133.1K, joinLeftBindingsConsumedActual=133.1K, joinRightBindingsConsumedActual=133.1K, firstRowTimeNanosActual=30.0K, leftRowsWithMatchActual=133.1K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=266.3K, rowsDroppedActual=133.1K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=8.62, leftRowsProbedActual=133.1K, rightRowsScannedActual=133.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) -│ ║ ╠══ Union (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=25.7M, nextCallCountActual=133.1K, nextTimeNanosActual=2.5M, firstRowTimeNanosActual=24.3K, openCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=193, avgNextNanosActual=19, leftRowsConsumedActual=520, rightRowsConsumedActual=132.6K, leftRowsOutputContributionActual=520, rightRowsOutputContributionActual=132.6K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=63.2K, nextCallCountActual=520, nextTimeNanosActual=25.9K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=17.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=121, avgNextNanosActual=50, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=258.4K, nextCallCountActual=520, nextTimeNanosActual=29.8K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=791, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.1K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=57, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.3M, nextCallCountActual=132.6K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=3.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=335.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=45, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=97.5M, nextCallCountActual=133.1K, nextTimeNanosActual=20.7M, firstRowTimeNanosActual=583, openCountActual=133.1K, lastRowTimeNanosActual=2.0K, closeCountActual=133.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=366, avgNextNanosActual=156) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=62.9M, nextCallCountActual=133.1K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=266.3K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=133.1K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=133.1K, openCountActual=133.1K, lastRowTimeNanosActual=1.7K, closeCountActual=133.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=69, indexHitRateActual=0.50) -│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) -│ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_22913f2fe36952f541b08a42a7b8ce15e70d01) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (reqCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=447.5M, nextCallCountActual=520, nextTimeNanosActual=60.7K, firstRowTimeNanosActual=404.7M, openCountActual=1, lastRowTimeNanosActual=447.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=859.0K, avgNextNanosActual=117) + ├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=447.5M, nextCallCountActual=520, nextTimeNanosActual=36.5K, firstRowTimeNanosActual=404.7M, openCountActual=1, lastRowTimeNanosActual=447.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=859.0K, avgNextNanosActual=70) + │ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=447.5M, nextCallCountActual=520, nextTimeNanosActual=5.0K, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=132.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=404.7M, exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=447.7M, closeCountActual=1, exprEvalTimeNanosActual=30.2M, inputRowsActual=132.6K, rowsDroppedActual=132.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=858.9K, avgNextNanosActual=9.70, filterRejectRateActual=1.00) + │ ║ ├── Compare (>) (exprEvalCountActual=132.6K, exprFalseCountActual=132.1K, exprTrueCountActual=520, exprEvalTimeNanosActual=8.5M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_0491e226babdcc344c88a5a61806b6a8e7f3, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=19.6K, hasNextFalseCountActual=0) + │ ║ └── Group (component) (resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=406.1M, nextCallCountActual=132.6K, nextTimeNanosActual=4.1M, aggregateEvalCountActual=266.3K, firstRowTimeNanosActual=404.7M, groupsCreatedActual=132.6K, openCountActual=1, lastRowTimeNanosActual=447.7M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=133.1K, rowsDroppedActual=520, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.1K, avgNextNanosActual=31) + │ ║ Filter (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=265.7M, nextCallCountActual=133.1K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=133.1K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=45.0K, exprEvalCountActual=133.1K, predicateErrorCountActual=1, openCountActual=1, exprTrueCountActual=133.1K, lastRowTimeNanosActual=385.0M, closeCountActual=1, exprEvalTimeNanosActual=17.9M, inputRowsActual=133.1K, rowsDroppedActual=1, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=14, filterRejectRateActual=0.00) + │ ║ ├── Compare (!=) (exprEvalCountActual=133.1K, exprTrueCountActual=133.1K, exprErrorCountActual=1, exprEvalTimeNanosActual=5.6M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=237.2M, nextCallCountActual=133.1K, nextTimeNanosActual=1.3M, joinRightIteratorsCreatedActual=133.1K, joinLeftBindingsConsumedActual=133.1K, joinRightBindingsConsumedActual=133.1K, firstRowTimeNanosActual=32.0K, leftRowsWithMatchActual=133.1K, openCountActual=1, emptyRightProbeCountActual=1, lastRowTimeNanosActual=370.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=266.3K, rowsDroppedActual=133.1K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=10, leftRowsProbedActual=133.1K, rightRowsScannedActual=133.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=1) + │ ║ ╠══ Union (resultSizeActual=133.1K, hasNextCallCountActual=133.1K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=27.3M, nextCallCountActual=133.1K, nextTimeNanosActual=2.8M, firstRowTimeNanosActual=25.1K, openCountActual=1, lastRowTimeNanosActual=370.1M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=205, avgNextNanosActual=22, leftRowsConsumedActual=520, rightRowsConsumedActual=132.6K, leftRowsOutputContributionActual=520, rightRowsOutputContributionActual=132.6K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=62.0K, nextCallCountActual=520, nextTimeNanosActual=29.1K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=19.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=119, avgNextNanosActual=56, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=286.1K, nextCallCountActual=520, nextTimeNanosActual=27.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[requirement], firstRowTimeNanosActual=834, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=6.4K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=275, avgNextNanosActual=53, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, resultSizeActual=132.6K, hasNextCallCountActual=132.6K, hasNextTrueCountActual=132.6K, hasNextTimeNanosActual=12.6M, nextCallCountActual=132.6K, nextTimeNanosActual=6.4M, sourceRowsScannedActual=132.6K, sourceRowsMatchedActual=132.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=3.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=370.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=96, avgNextNanosActual=49, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=102.4M, nextCallCountActual=133.1K, nextTimeNanosActual=20.8M, firstRowTimeNanosActual=584, openCountActual=133.1K, lastRowTimeNanosActual=2.0K, closeCountActual=133.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=385, avgNextNanosActual=157) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=133.1K, hasNextCallCountActual=266.3K, hasNextTrueCountActual=133.1K, hasNextTimeNanosActual=66.6M, nextCallCountActual=133.1K, nextTimeNanosActual=8.7M, sourceRowsScannedActual=266.3K, sourceRowsMatchedActual=133.1K, sourceRowsFilteredActual=133.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=133.1K, openCountActual=133.1K, lastRowTimeNanosActual=1.7K, closeCountActual=133.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=133.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=250, avgNextNanosActual=66, indexHitRateActual=0.50) + │ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) + │ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_0491e226babdcc344c88a5a61806b6a8e7f3) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_0491e226babdcc344c88a5a61806b6a8e7f3) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (reqCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5393,67 +5679,67 @@ Projection ║ ProjectionElem "component" ║ ProjectionElem "reqCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (component) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optDep) (bindingState=bound) -│ ║ │ Var (name=component) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ s: Var (name=requirement) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) -│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) -│ ║ ║ s: Var (name=component) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) -│ ║ │ s: Var (name=component) (bindingState=bound) -│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) -│ ║ │ o: Var (name=dep) (bindingState=unbound) -│ ║ └── ExtensionElem (optDep) -│ ║ Var (name=dep) (bindingState=bound) -│ ║ GroupElem (_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456) -│ ║ Count -│ ║ Var (name=requirement) (bindingState=bound) -│ ║ GroupElem (reqCount) -│ ║ Count (Distinct) -│ ║ Var (name=requirement) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_72913f2fe36952f541b08a42a7b8ce15e70d0123456) -│ Count -│ Var (name=requirement) (bindingState=unbound) -└── ExtensionElem (reqCount) -Count (Distinct) -Var (name=requirement) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5491e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (component) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=520) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[requirement]) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=132.7K) + │ ║ ║ s: Var (name=component) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_5491e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5491e226babdcc344c88a5a61806b6a8e7f301234) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { -{ -?requirement ?component . -?requirement a . -} -UNION -{ -?component a . -} -OPTIONAL { -?component ?dep . -BIND(?dep AS ?optDep) -} -FILTER (?optDep != ?component) + { + ?requirement ?component . + ?requirement a . + } + UNION + { + ?component a . + } + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) } GROUP BY ?component HAVING (COUNT(?requirement) > 0) @@ -5472,57 +5758,57 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 8 ms +Fastest execution time: 7 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=666) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.1M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=9.1M, openCountActual=1, lastRowTimeNanosActual=9.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.6M, avgNextNanosActual=1.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=334) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=8.5M, nextCallCountActual=1, nextTimeNanosActual=209, firstRowTimeNanosActual=8.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.3M, avgNextNanosActual=209, avgGroupSizeActual=0) -│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=8.5M, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsDroppedActual=3, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=8.5M, leftRowsConsumedActual=2, rightRowsConsumedActual=1.5K, overlapRowsActual=2) -│ ║ ├── Filter (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.2M, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=14.7K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=8.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.1M, avgNextNanosActual=21, filterRejectRateActual=0) -│ ║ │ ╠══ Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=8.3K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=874, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=542, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=437, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27, resultSizeActual=2, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=2, inputRowsActual=522, rowsDroppedActual=520, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=39, stddevActual=6.25, confidenceScoreActual=0.22, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=47.0K, nextCallCountActual=520, nextTimeNanosActual=19.0K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=520) -│ ║ │ │ Var (name=requirement) -│ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ │ │ Var (name=component) -│ ║ │ │ , firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=8.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=37, indexHitRateActual=1.00) -│ ║ │ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=27, resultSizeActual=2, hasNextCallCountActual=522, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.9M, nextCallCountActual=2, sourceRowsScannedActual=520, sourceRowsMatchedActual=2, sourceRowsFilteredActual=518, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=4.1K, exprEvalCountActual=520, exprFalseCountActual=518, openCountActual=520, exprTrueCountActual=2, lastRowTimeNanosActual=3.4K, closeCountActual=520, exprEvalTimeNanosActual=379.6K, inputRowsActual=520, rowsDroppedActual=518, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=0, filterRejectRateActual=1.00) [right] -│ ║ │ ╠══ Or (exprEvalCountActual=520, exprFalseCountActual=518, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=350.3K, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=520, exprFalseCountActual=519, exprTrueCountActual=1, exprEvalTimeNanosActual=290.0K, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="REQ-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=791, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=519, exprFalseCountActual=518, exprTrueCountActual=1, exprEvalTimeNanosActual=22.2K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="REQ-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=244.9K, nextCallCountActual=520, nextTimeNanosActual=19.7K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.3K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=235, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=3.1K, joinLeftBindingsConsumedActual=3.1K, joinRightBindingsConsumedActual=1.5K, inputRowsActual=4.6K, rowsDroppedActual=3.1K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=3.1K, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) -│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=3.1K, resultSizeActual=3.1K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=3.1K, hasNextTimeNanosActual=209.7K, nextCallCountActual=3.1K, nextTimeNanosActual=122.3K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=3.1K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=1.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=4.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=67, avgNextNanosActual=39, indexHitRateActual=1.00) [left] -│ ║ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.6K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.1M, nextCallCountActual=1.5K, nextTimeNanosActual=81.7K, sourceRowsScannedActual=4.6K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=3.1K, openCountActual=3.1K, lastRowTimeNanosActual=333, closeCountActual=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.1K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=239, avgNextNanosActual=53, indexHitRateActual=0.33) [right] -│ ║ s: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.1M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=9.1M, openCountActual=1, lastRowTimeNanosActual=9.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.6M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.1M, nextCallCountActual=1, nextTimeNanosActual=417, firstRowTimeNanosActual=9.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.6M, avgNextNanosActual=417, avgGroupSizeActual=0) + │ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.0M, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, varsDroppedActual=3, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.1M, leftRowsConsumedActual=2, rightRowsConsumedActual=1.5K, overlapRowsActual=2) + │ ║ ├── Filter (resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.5M, nextCallCountActual=2, nextTimeNanosActual=83, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=20.8K, exprEvalCountActual=2, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=9.0M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=6.6K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=1.2M, avgNextNanosActual=42, filterRejectRateActual=0) + │ ║ │ ╠══ Exists (exprEvalCountActual=2, exprTrueCountActual=2, exprEvalTimeNanosActual=6.4K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=520, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=2, hasNextTimeNanosActual=874, sourceRowsScannedActual=2, sourceRowsMatchedActual=2, plannedIndexName=spoc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=584, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=437, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.00, resultSizeActual=2, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=2, inputRowsActual=522, rowsDroppedActual=520, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=55.2K, nextCallCountActual=520, nextTimeNanosActual=22.1K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedAccessRows=6.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ │ Var (name=requirement) + │ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ Var (name=component) + │ ║ │ │ source=unknown, firstRowTimeNanosActual=11.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=9.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=43, indexHitRateActual=1.00) + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Filter (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=522, hasNextTrueCountActual=2, hasNextTimeNanosActual=2.1M, nextCallCountActual=2, nextTimeNanosActual=459, sourceRowsScannedActual=520, sourceRowsMatchedActual=2, sourceRowsFilteredActual=518, plannedFilterEvidenceCount=916.7K, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, sharedJoinVars=[requirement], firstRowTimeNanosActual=9.7K, exprEvalCountActual=520, exprFalseCountActual=518, openCountActual=520, exprTrueCountActual=2, lastRowTimeNanosActual=3.8K, closeCountActual=520, exprEvalTimeNanosActual=425.1K, inputRowsActual=520, rowsDroppedActual=518, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=230, filterRejectRateActual=1.00) [right] + │ ║ │ ╠══ Or (exprEvalCountActual=520, exprFalseCountActual=518, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=384.0K, hasNextFalseCountActual=0) + │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=520, exprFalseCountActual=519, exprTrueCountActual=1, exprEvalTimeNanosActual=322.1K, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.0K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Compare (=) (exprEvalCountActual=519, exprFalseCountActual=518, exprTrueCountActual=1, exprEvalTimeNanosActual=26.5K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="REQ-1001") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=281.7K, nextCallCountActual=520, nextTimeNanosActual=22.0K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=1.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=42, indexHitRateActual=0.50) + │ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K, resultSizeActual=1.5K, joinRightIteratorsCreatedActual=3.1K, joinLeftBindingsConsumedActual=3.1K, joinRightBindingsConsumedActual=1.5K, inputRowsActual=4.6K, rowsDroppedActual=3.1K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=3.1K, rightRowsScannedActual=1.5K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) + │ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=3.1K, resultSizeActual=3.1K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=3.1K, hasNextTimeNanosActual=226.8K, nextCallCountActual=3.1K, nextTimeNanosActual=142.7K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=3.1K, sourceRowsFilteredActual=1, plannedAccessRows=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=4.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=73, avgNextNanosActual=46, indexHitRateActual=1.00) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=1.5K, hasNextCallCountActual=4.6K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=1.2M, nextCallCountActual=1.5K, nextTimeNanosActual=86.7K, sourceRowsScannedActual=4.6K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[requirement, test], sharedJoinVars=[test], firstRowTimeNanosActual=500, indexLookupCountActual=3.1K, openCountActual=3.1K, lastRowTimeNanosActual=417, closeCountActual=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3.1K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=259, avgNextNanosActual=56, indexHitRateActual=0.33) [right] + │ ║ s: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5530,71 +5816,71 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) -│ ║ │ ╠══ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=520) -│ ║ │ ║ s: Var (name=requirement) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ │ ║ o: Var (name=component) (bindingState=unbound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=27) -│ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=520) -│ ║ │ │ Var (name=requirement) -│ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ │ │ Var (name=component) -│ ║ │ │ ) -│ ║ │ │ s: Var (name=requirement) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) -│ ║ │ └── Filter (resultSizeEstimate=27, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="REQ-1000") -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="REQ-1001") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) -│ ║ │ s: Var (name=requirement) (bindingState=bound) -│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) -│ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ s: Var (name=requirement) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) -│ ║ ║ o: Var (name=test) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[requirement, test], plannedLookupComponents=[S, P]) [right] -│ ║ s: Var (name=test) (bindingState=bound) -│ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) -│ ║ o: Var (name=measurement) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=requirement) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=requirement) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=520) + │ ║ │ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ ║ o: Var (name=component) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.00) + │ ║ │ ├── StatementPattern (resultSizeEstimate=520, plannedAccessRows=6.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=6.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ │ Var (name=requirement) + │ ║ │ │ Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ │ Var (name=component) + │ ║ │ │ source=unknown) + │ ║ │ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=917.2K, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[requirement], filterSelectivitySource=learned_filter, sharedJoinVars=[requirement]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="REQ-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="REQ-1001") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.1K) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=2.3K) + │ ║ ╠══ StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=3.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=3.1K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ o: Var (name=test) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[requirement, test], sharedJoinVars=[test]) [right] + │ ║ s: Var (name=test) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=measurement) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { -?requirement a . -?requirement ?name . -FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) -FILTER EXISTS { -?requirement ?component . -} -MINUS { -?requirement ?test . -?test ?measurement . -} + ?requirement a . + ?requirement ?name . + FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) + FILTER EXISTS { + ?requirement ?component . + } + MINUS { + ?requirement ?test . + ?test ?measurement . + } } Theme: ENGINEERING z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 11 ms +Initial explain execution time: 10 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -5605,62 +5891,62 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 7 ms +Fastest execution time: 5 ms -Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=85.0K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=164) +Projection (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=4.2M, nextCallCountActual=520, nextTimeNanosActual=83.4K, firstRowTimeNanosActual=4.0M, openCountActual=1, lastRowTimeNanosActual=4.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.2K, avgNextNanosActual=161) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "component" (hasNextFalseCountActual=0) ║ ProjectionElem "reqCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=61.6K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=119) -├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=30.4K, firstRowTimeNanosActual=3.7M, openCountActual=1, lastRowTimeNanosActual=4.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=59) -│ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.8M, nextCallCountActual=520, nextTimeNanosActual=4.9K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3.7M, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=4.0M, closeCountActual=1, exprEvalTimeNanosActual=82.0K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.4K, avgNextNanosActual=9.54, filterRejectRateActual=0) -│ ║ ├── Compare (>=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=49.2K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.9K, hasNextFalseCountActual=0) -│ ║ └── Group (component) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=3.7M, nextCallCountActual=520, nextTimeNanosActual=9.0K, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=3.7M, groupsCreatedActual=520, openCountActual=1, lastRowTimeNanosActual=4.0M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.1K, avgNextNanosActual=17) -│ ║ Filter (resultSizeActual=520, hasNextCallCountActual=522, hasNextTrueCountActual=521, hasNextTimeNanosActual=2.7M, nextCallCountActual=520, nextTimeNanosActual=8.6K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.0K, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=3.6M, closeCountActual=1, exprEvalTimeNanosActual=68.6K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3K, avgNextNanosActual=17, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=22.9K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=2.6M, nextCallCountActual=520, nextTimeNanosActual=6.8K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, firstRowTimeNanosActual=16.6K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=3.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.1K, avgNextNanosActual=13, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=520) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=57.3K, nextCallCountActual=520, nextTimeNanosActual=29.1K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=5.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=110, avgNextNanosActual=56, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=469.8K, nextCallCountActual=520, nextTimeNanosActual=27.4K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.8K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=452, avgNextNanosActual=53, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=236.5K, nextCallCountActual=520, nextTimeNanosActual=31.1K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, P], firstRowTimeNanosActual=459, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=60, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=656, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=243.7K, nextCallCountActual=520, nextTimeNanosActual=27.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=3.6K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=234, avgNextNanosActual=53, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=371.4K, nextCallCountActual=520, nextTimeNanosActual=67.2K, firstRowTimeNanosActual=667, openCountActual=520, lastRowTimeNanosActual=2.7K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=357, avgNextNanosActual=129) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=236.6K, nextCallCountActual=520, nextTimeNanosActual=24.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=2.5K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=228, avgNextNanosActual=47, indexHitRateActual=0.50) -│ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) -│ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_46023f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (reqCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=4.2M, nextCallCountActual=520, nextTimeNanosActual=51.6K, firstRowTimeNanosActual=4.0M, openCountActual=1, lastRowTimeNanosActual=4.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.2K, avgNextNanosActual=99) + ├── Extension (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=4.2M, nextCallCountActual=520, nextTimeNanosActual=31.0K, firstRowTimeNanosActual=4.0M, openCountActual=1, lastRowTimeNanosActual=4.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.1K, avgNextNanosActual=60) + │ ╠══ Filter (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=4.2M, nextCallCountActual=520, nextTimeNanosActual=6.4K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=4.0M, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=4.4M, closeCountActual=1, exprEvalTimeNanosActual=83.2K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.1K, avgNextNanosActual=12, filterRejectRateActual=0) + │ ║ ├── Compare (>=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=42.4K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_2802e226babdcc344c88a5a61806b6a8e7f301, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.8K, hasNextFalseCountActual=0) + │ ║ └── Group (component) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=4.0M, nextCallCountActual=520, nextTimeNanosActual=7.2K, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=4.0M, groupsCreatedActual=520, openCountActual=1, lastRowTimeNanosActual=4.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.8K, avgNextNanosActual=14) + │ ║ Filter (resultSizeActual=520, hasNextCallCountActual=522, hasNextTrueCountActual=521, hasNextTimeNanosActual=3.0M, nextCallCountActual=520, nextTimeNanosActual=8.0K, sourceRowsScannedActual=520, sourceRowsMatchedActual=520, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=32.0K, exprEvalCountActual=520, openCountActual=1, exprTrueCountActual=520, lastRowTimeNanosActual=3.9M, closeCountActual=1, exprEvalTimeNanosActual=78.1K, inputRowsActual=520, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.8K, avgNextNanosActual=16, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=520, exprTrueCountActual=520, exprEvalTimeNanosActual=22.7K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optDep) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=2.9M, nextCallCountActual=520, nextTimeNanosActual=6.1K, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, firstRowTimeNanosActual=25.6K, leftRowsWithMatchActual=520, openCountActual=1, lastRowTimeNanosActual=3.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=12, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=520) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656, resultSizeActual=520, joinRightIteratorsCreatedActual=520, joinLeftBindingsConsumedActual=520, joinRightBindingsConsumedActual=520, inputRowsActual=1.0K, rowsDroppedActual=520, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=16.1K, stddevActual=127, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=520, rightRowsScannedActual=520, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=60.1K, nextCallCountActual=520, nextTimeNanosActual=29.8K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=8.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=115, avgNextNanosActual=57, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=651.4K, nextCallCountActual=520, nextTimeNanosActual=29.1K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[component], firstRowTimeNanosActual=1.2K, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=7.0K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=626, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=234.4K, nextCallCountActual=520, nextTimeNanosActual=32.7K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[component, requirement], sharedJoinVars=[component], firstRowTimeNanosActual=625, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=5.3K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=63, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=656, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=273.4K, nextCallCountActual=520, nextTimeNanosActual=28.5K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[assembly, component, requirement], sharedJoinVars=[requirement], firstRowTimeNanosActual=625, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=4.1K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=263, avgNextNanosActual=55, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=372.1K, nextCallCountActual=520, nextTimeNanosActual=76.8K, firstRowTimeNanosActual=625, openCountActual=520, lastRowTimeNanosActual=2.9K, closeCountActual=520, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=358, avgNextNanosActual=148) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=132.7K, resultSizeActual=520, hasNextCallCountActual=1.0K, hasNextTrueCountActual=520, hasNextTimeNanosActual=238.2K, nextCallCountActual=520, nextTimeNanosActual=29.9K, sourceRowsScannedActual=1.0K, sourceRowsMatchedActual=520, sourceRowsFilteredActual=520, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=520, openCountActual=520, lastRowTimeNanosActual=2.7K, closeCountActual=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=520, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=229, avgNextNanosActual=58, indexHitRateActual=0.50) + │ ║ │ s: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=dep) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optDep) (hasNextFalseCountActual=0) + │ ║ Var (name=dep) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_2802e226babdcc344c88a5a61806b6a8e7f301) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (reqCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_2802e226babdcc344c88a5a61806b6a8e7f301) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (reqCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5669,68 +5955,68 @@ Projection ║ ProjectionElem "component" ║ ProjectionElem "reqCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>=) -│ ║ │ Var (name=_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="1"^^) -│ ║ └── Group (component) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optDep) (bindingState=bound) -│ ║ │ Var (name=component) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] -│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[component, requirement], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=component) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) -│ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly, component, requirement], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=requirement) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=132.7K) -│ ║ │ s: Var (name=component) (bindingState=bound) -│ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) -│ ║ │ o: Var (name=dep) (bindingState=unbound) -│ ║ └── ExtensionElem (optDep) -│ ║ Var (name=dep) (bindingState=bound) -│ ║ GroupElem (_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d) -│ ║ Count -│ ║ Var (name=requirement) (bindingState=bound) -│ ║ GroupElem (reqCount) -│ ║ Count (Distinct) -│ ║ Var (name=requirement) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_07023f2fe36952f541b08a42a7b8ce15e70d) -│ Count -│ Var (name=requirement) (bindingState=unbound) -└── ExtensionElem (reqCount) -Count (Distinct) -Var (name=requirement) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_8802e226babdcc344c88a5a61806b6a8e7f301234567, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (component) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optDep) (bindingState=bound) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=656) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=520, plannedAccessRows=520, plannedIndexPrefixLength=1.00, plannedWorkRows=520, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ ║ │ ║ │ o: Var (name=component) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=132.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[component, requirement], sharedJoinVars=[component]) [right] + │ ║ ║ │ ║ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=132.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[component, requirement], sharedJoinVars=[component]) [right] + │ ║ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ ║ │ o: Var (name=assembly) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=656, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[assembly, component, requirement], sharedJoinVars=[requirement]) [right] + │ ║ ║ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ s: Var (name=component) (bindingState=bound) + │ ║ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + │ ║ │ o: Var (name=dep) (bindingState=unbound) + │ ║ └── ExtensionElem (optDep) + │ ║ Var (name=dep) (bindingState=bound) + │ ║ GroupElem (_anon_having_8802e226babdcc344c88a5a61806b6a8e7f301234567) + │ ║ Count + │ ║ Var (name=requirement) (bindingState=bound) + │ ║ GroupElem (reqCount) + │ ║ Count (Distinct) + │ ║ Var (name=requirement) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_8802e226babdcc344c88a5a61806b6a8e7f301234567) + │ Count + │ Var (name=requirement) (bindingState=unbound) + └── ExtensionElem (reqCount) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { -?requirement ?component . -?component a . -?component ?assembly . -?requirement a . -OPTIONAL { -?component ?dep . -BIND(?dep AS ?optDep) -} -FILTER (?optDep != ?component) + ?requirement ?component . + ?component a . + ?component ?assembly . + ?requirement a . + OPTIONAL { + ?component ?dep . + BIND(?dep AS ?optDep) + } + FILTER (?optDep != ?component) } GROUP BY ?component HAVING (COUNT(?requirement) >= 1) @@ -5738,7 +6024,7 @@ HAVING (COUNT(?requirement) >= 1) Theme: ENGINEERING z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 15 ms +Initial explain execution time: 14 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -5751,59 +6037,134 @@ Warmup execution 9/10 Warmup execution 10/10 Fastest execution time: 11 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=2.1M, openCountActual=1, lastRowTimeNanosActual=2.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=584) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.4M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=2.4M, openCountActual=1, lastRowTimeNanosActual=2.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2M, avgNextNanosActual=2.5K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=334, firstRowTimeNanosActual=2.1M, openCountActual=1, lastRowTimeNanosActual=2.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=334) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.1M, nextCallCountActual=1, nextTimeNanosActual=125, firstRowTimeNanosActual=2.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2.1M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.1M, avgNextNanosActual=125, avgGroupSizeActual=0) -│ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.9K, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (hasNextFalseCountActual=0) -│ ║ │ StatementPattern (resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) -│ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.0M, openCountActual=1, lastRowTimeNanosActual=2.0M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1M, leftRowsProbedActual=0, rightRowsScannedActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) [left] -│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.0M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterPassRatio=0.05, filterSelectivitySource=heuristic, exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1, lastRowTimeNanosActual=2.0M, optimizer.candidateCount=16, closeCountActual=1, exprEvalTimeNanosActual=1.8M, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1M, filterRejectRateActual=1.00) [left] -│ ║ ║ │ ║ │ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=1.7M, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=85.0K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=92.0K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=83.5K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=124.0K, nextCallCountActual=1.5K, nextTimeNanosActual=49.4K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=32, indexHitRateActual=1.00) -│ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.4M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=2.4M, openCountActual=1, lastRowTimeNanosActual=2.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2.4M, nextCallCountActual=1, nextTimeNanosActual=541, firstRowTimeNanosActual=2.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=12, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1.2M, avgNextNanosActual=541, avgGroupSizeActual=0) + │ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=583, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (hasNextFalseCountActual=0) + │ ║ │ StatementPattern (resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) + │ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.4M, openCountActual=1, lastRowTimeNanosActual=2.4M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.4M, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=520, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=0, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=40, resultSizeEstimate=1.6K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=2.4M, sourceRowsScannedActual=1.5K, sourceRowsFilteredActual=1.5K, plannedFilterEvidenceCount=1.4M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, openCountActual=1, lastRowTimeNanosActual=2.4M, optimizer.candidateCount=16, closeCountActual=1, exprEvalTimeNanosActual=2.1M, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.5K, rowsDroppedActual=1.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.4M, filterRejectRateActual=1.00) + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator (exprEvalCountActual=1.5K, exprFalseCountActual=1.5K, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=118.7K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=125.6K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) (exprEvalCountActual=1.5K, exprTrueCountActual=1.5K, exprEvalTimeNanosActual=104.0K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=1.6K, resultSizeActual=1.5K, hasNextCallCountActual=1.5K, hasNextTrueCountActual=1.5K, hasNextTimeNanosActual=156.1K, nextCallCountActual=1.5K, nextTimeNanosActual=64.9K, sourceRowsScannedActual=1.5K, sourceRowsMatchedActual=1.5K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=6.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=100, avgNextNanosActual=42, indexHitRateActual=1.00) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.6K, resultSizeEstimate=520, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=requirement) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5811,69 +6172,144 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="") -│ ║ │ ╚══ Exists -│ ║ │ StatementPattern (resultSizeEstimate=520) -│ ║ │ s: Var (name=requirement) (bindingState=bound) -│ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ │ o: Var (name=component) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=78, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ │ ╠══ Filter (costEstimate=249, resultSizeEstimate=78, plannedFilterPassRatio=0.05, filterSelectivitySource=heuristic, optimizer.candidateCount=16, optimizer.score=74.3M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31140.0 rawRows=3114.0 effectiveRows=3114.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=5200.0 rawRows=520.0 effectiveRows=520.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?test verifiedBy ?measurement) score=45.88235294117647 rawRows=78.0 effectiveRows=78.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=Filter right=SP(?requirement verifiedBy ?test) score=2428920.0 rawRows=242892.0 effectiveRows=242892.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=Filter right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement verifiedBy ?test) score=1372.9411764705883 rawRows=2334.0 effectiveRows=2334.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=SP(?requirement type Requirement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?requirement type Requirement) score=458.8235294117647 rawRows=780.0 effectiveRows=780.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=780.0 rawRows=78.0 effectiveRows=78.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=915.8823529411765 rawRows=1557.0 effectiveRows=1557.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=142877.64705882352 rawRows=242892.0 effectiveRows=242892.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?requirement type Requirement) score=405600.0 rawRows=40560.0 effectiveRows=40560.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=7.429637647058824E7 rawRows=1.2630384E8 effectiveRows=1.2630384E8 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?requirement type Requirement), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=1.2630384E8, effectiveRows=1.2630384E8, adjustedCost=7.429637647058824E7, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ │ ║ ├── ListMemberOperator -│ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) -│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) -│ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) -│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) -│ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) -│ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] -│ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) -│ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) -│ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] -│ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) -│ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) -│ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=520) [right] -│ ║ ║ │ s: Var (name=requirement) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) -│ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] -│ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] -│ ║ s: Var (name=component) (bindingState=unbound) -│ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=requirement) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=requirement) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=520) + │ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ │ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ │ o: Var (name=component) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=520, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ Var (name=value) + │ ║ ║ ValueConstant (value="0.85"^^) + │ ║ ║ ValueConstant (value="0.9"^^) + │ ║ ║ ValueConstant (value="0.95"^^) + │ ║ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=520, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ Var (name=value) + │ ║ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.6K, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ Var (name=value) + │ ║ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ │ ╠══ Filter (costEstimate=40, resultSizeEstimate=1.6K, plannedFilterEvidenceCount=1.4M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, optimizer.candidateCount=16, optimizer.score=520, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator [left] + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )] promotedPrefixes=[] plannedOrder=[BSA(names=[threshold], rows=1), SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[threshold], rows=1), 1:SP(?requirement http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/engineering/Requirement), 2:SP(?requirement http://example.com/theme/engineering/verifiedBy ?test), 3:SP(?test http://example.com/theme/engineering/verifiedBy ?measurement), 4:Filter(SP(?measurement http://example.com/theme/engineering/measuredValue ?value); ListMemberOperator + │ ║ ║ │ ║ │ ║ Var (name=value) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ )], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement type Requirement) score=65590.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=6559.0 factorWorkRows=6559.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?requirement verifiedBy ?test) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=SP(?test verifiedBy ?measurement) score=31150.0 rawRows=3114.0 effectiveRows=3114.0 baseCostRows=3115.0 factorWorkRows=3115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[threshold="0.85"^^]]) right=Filter score=15580.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1558.0 factorWorkRows=1558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?requirement verifiedBy ?test) score=5689.411764705883 rawRows=780.0 effectiveRows=780.0 baseCostRows=9672.0 factorWorkRows=9672.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=SP(?test verifiedBy ?measurement) score=1.61928E7 rawRows=1619280.0 effectiveRows=1619280.0 baseCostRows=1619280.0 factorWorkRows=9672.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement type Requirement) right=Filter score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=8115.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=SP(?test verifiedBy ?measurement) score=3663.529411764706 rawRows=2334.0 effectiveRows=2334.0 baseCostRows=6228.0 factorWorkRows=6228.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?requirement verifiedBy ?test) right=Filter score=4.848498E7 rawRows=4848498.0 effectiveRows=4848498.0 baseCostRows=4848498.0 factorWorkRows=4671.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?test verifiedBy ?measurement) right=Filter score=2747.6470588235293 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=4671.0 factorWorkRows=4671.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=8096400.0 rawRows=809640.0 effectiveRows=809640.0 baseCostRows=809640.0 factorWorkRows=6558.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement verifiedBy ?test) score=1831.764705882353 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=3114.0 factorWorkRows=3114.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=15570.0 rawRows=1557.0 effectiveRows=1557.0 baseCostRows=1557.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?requirement type Requirement) score=305.88235294117646 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[threshold="0.85"^^]]) score=520.0 rawRows=520.0 effectiveRows=520.0 baseCostRows=520.0 factorWorkRows=1.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[threshold="0.85"^^]]), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[threshold="0.85"^^]]), SP(?requirement type Requirement), SP(?requirement verifiedBy ?test), SP(?test verifiedBy ?measurement), Filter], optimizer.chosenOrder=[Filter, SP(?test verifiedBy ?measurement), SP(?requirement verifiedBy ?test), SP(?requirement type Requirement), BindingSetAssignment ([[threshold="0.85"^^]])], optimizer.scoreComponents=rawRows=520.0, effectiveRows=520.0, baseCostRows=520.0, factorWorkRows=1.0, adjustedCost=520.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ │ ║ ├── ListMemberOperator + │ ║ ║ │ ║ │ ║ │ Var (name=value) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.85"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.9"^^) + │ ║ ║ │ ║ │ ║ │ ValueConstant (value="0.95"^^) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=1.6K) + │ ║ ║ │ ║ │ ║ s: Var (name=measurement) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ │ s: Var (name=test) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ │ o: Var (name=measurement) (bindingState=bound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=28, resultSizeEstimate=3.1K) [right] + │ ║ ║ │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ ║ │ ║ o: Var (name=test) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [right] + │ ║ ║ │ s: Var (name=requirement) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + │ ║ ║ └── BindingSetAssignment ([[threshold="0.85"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=requirement) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=requirement) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { -?measurement ?value . -FILTER (?value IN (0.85, 0.9, 0.95)) -?test ?measurement . -?requirement ?test . -?requirement a . -VALUES ?threshold { 0.85 } -OPTIONAL { -?component ?optName . -} -FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) } @@ -5892,58 +6328,58 @@ Warmup execution 9/10 Warmup execution 10/10 Fastest execution time: 6 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=7.5M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=1.2K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.4M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=7.4M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=708) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=7.5M, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=708) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.5M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=283, firstRowTimeNanosActual=7.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=7.5M, maxGroupSizeActual=283, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=283, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=283, rowsDroppedActual=282, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.8M, avgNextNanosActual=416) -│ ╠══ Difference (resultSizeActual=283, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=7.4M, nextCallCountActual=283, nextTimeNanosActual=3.7K, firstRowTimeNanosActual=959.2K, openCountActual=1, lastRowTimeNanosActual=7.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=804, rowsDroppedActual=521, selectivityActual=0.35, expansionFactorActual=0.35, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=26.2K, avgNextNanosActual=13, leftRowsConsumedActual=284, rightRowsConsumedActual=520, overlapRowsActual=1) -│ ║ ├── Filter (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=4.1K, sourceRowsScannedActual=284, sourceRowsMatchedActual=284, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=42.7K, exprEvalCountActual=284, openCountActual=1, exprTrueCountActual=284, lastRowTimeNanosActual=7.4M, closeCountActual=1, exprEvalTimeNanosActual=34.4K, inputRowsActual=284, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.0K, avgNextNanosActual=15, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=284, exprTrueCountActual=284, exprEvalTimeNanosActual=15.6K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optComponent) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=5.5K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=284, firstRowTimeNanosActual=42.0K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=286, rowsDroppedActual=2, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=21.8K, avgNextNanosActual=20, leftRowsProbedActual=2, rightRowsScannedActual=284, avgRightRowsPerLeftActual=142, joinMatchRateActual=1.00, joinOutputPerLeftActual=142, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=2, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=923, joinRightBindingsConsumedActual=2, inputRowsActual=923, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=923, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] -│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=100.2K, nextCallCountActual=921, nextTimeNanosActual=36.1K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=39, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Filter (resultSizeActual=2, hasNextCallCountActual=923, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.5M, nextCallCountActual=2, nextTimeNanosActual=42, sourceRowsScannedActual=921, sourceRowsMatchedActual=2, sourceRowsFilteredActual=919, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=3.7K, exprEvalCountActual=921, exprFalseCountActual=919, openCountActual=921, exprTrueCountActual=2, lastRowTimeNanosActual=3.5K, closeCountActual=921, exprEvalTimeNanosActual=712.1K, inputRowsActual=921, rowsDroppedActual=919, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=21, filterRejectRateActual=1.00) [right] -│ ║ │ │ ├── Or (exprEvalCountActual=921, exprFalseCountActual=919, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=658.2K, hasNextFalseCountActual=0) -│ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=921, exprFalseCountActual=920, exprTrueCountActual=1, exprEvalTimeNanosActual=545.5K, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) -│ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=920, exprFalseCountActual=919, exprTrueCountActual=1, exprEvalTimeNanosActual=39.6K, hasNextFalseCountActual=0) -│ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=477.5K, nextCallCountActual=921, nextTimeNanosActual=34.5K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=Or -│ ║ │ │ Compare (=) -│ ║ │ │ Var (name=name) -│ ║ │ │ ValueConstant (value="Assembly 1") -│ ║ │ │ Compare (=) -│ ║ │ │ Var (name=name) -│ ║ │ │ ValueConstant (value="Assembly 2") -│ ║ │ │ , firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.2K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=259, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ │ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=57.4K, nextCallCountActual=284, nextTimeNanosActual=30.0K, firstRowTimeNanosActual=1.1K, openCountActual=2, lastRowTimeNanosActual=201.5K, closeCountActual=2, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=106) [right] -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=33.1K, nextCallCountActual=284, nextTimeNanosActual=10.0K, sourceRowsScannedActual=286, sourceRowsMatchedActual=284, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=200.9K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=39, avgNextNanosActual=35, indexHitRateActual=0.99) -│ ║ │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optComponent) (hasNextFalseCountActual=0) -│ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=43.1K, nextCallCountActual=520, nextTimeNanosActual=20.0K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=714.4K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=39, indexHitRateActual=1.00) -│ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.4M, nextCallCountActual=1, nextTimeNanosActual=375, firstRowTimeNanosActual=7.4M, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=375) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.4M, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=283, firstRowTimeNanosActual=7.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=7.4M, maxGroupSizeActual=283, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=283, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=283, rowsDroppedActual=282, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=250) + │ ╠══ Difference (resultSizeActual=283, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=7.4M, nextCallCountActual=283, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=881.4K, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=804, rowsDroppedActual=521, selectivityActual=0.35, expansionFactorActual=0.35, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=26.1K, avgNextNanosActual=9.68, leftRowsConsumedActual=284, rightRowsConsumedActual=520, overlapRowsActual=1) + │ ║ ├── Filter (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=4.3K, sourceRowsScannedActual=284, sourceRowsMatchedActual=284, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=29.2K, exprEvalCountActual=284, openCountActual=1, exprTrueCountActual=284, lastRowTimeNanosActual=7.4M, closeCountActual=1, exprEvalTimeNanosActual=42.6K, inputRowsActual=284, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.0K, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=284, exprTrueCountActual=284, exprEvalTimeNanosActual=14.4K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=284, hasNextCallCountActual=285, hasNextTrueCountActual=284, hasNextTimeNanosActual=6.2M, nextCallCountActual=284, nextTimeNanosActual=4.7K, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=284, firstRowTimeNanosActual=28.6K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, maxRightRowsPerLeftActual=148, inputRowsActual=286, rowsDroppedActual=2, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=21.8K, avgNextNanosActual=17, leftRowsProbedActual=2, rightRowsScannedActual=284, avgRightRowsPerLeftActual=142, joinMatchRateActual=1.00, joinOutputPerLeftActual=142, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=2.00, resultSizeActual=2, joinRightIteratorsCreatedActual=921, joinLeftBindingsConsumedActual=923, joinRightBindingsConsumedActual=2, inputRowsActual=923, rowsDroppedActual=921, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=923, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=921, resultSizeActual=921, hasNextCallCountActual=922, hasNextTrueCountActual=921, hasNextTimeNanosActual=81.1K, nextCallCountActual=921, nextTimeNanosActual=34.4K, sourceRowsScannedActual=922, sourceRowsMatchedActual=921, sourceRowsFilteredActual=1, plannedAccessRows=15.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=88, avgNextNanosActual=37, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Filter (resultSizeActual=2, hasNextCallCountActual=923, hasNextTrueCountActual=2, hasNextTimeNanosActual=3.6M, nextCallCountActual=2, nextTimeNanosActual=84, sourceRowsScannedActual=921, sourceRowsMatchedActual=2, sourceRowsFilteredActual=919, plannedFilterEvidenceCount=2.1M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=3.9K, exprEvalCountActual=921, exprFalseCountActual=919, openCountActual=921, exprTrueCountActual=2, lastRowTimeNanosActual=3.8K, closeCountActual=921, exprEvalTimeNanosActual=759.0K, inputRowsActual=921, rowsDroppedActual=919, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=42, filterRejectRateActual=1.00) [right] + │ ║ │ │ ├── Or (exprEvalCountActual=921, exprFalseCountActual=919, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=685.7K, hasNextFalseCountActual=0) + │ ║ │ │ │ ╠══ Compare (=) (exprEvalCountActual=921, exprFalseCountActual=920, exprTrueCountActual=1, exprEvalTimeNanosActual=579.9K, hasNextFalseCountActual=0) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) + │ ║ │ │ │ ╚══ Compare (=) (exprEvalCountActual=920, exprFalseCountActual=919, exprTrueCountActual=1, exprEvalTimeNanosActual=43.0K, hasNextFalseCountActual=0) + │ ║ │ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ │ ValueConstant (value="Assembly 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) + │ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=134.1K, resultSizeActual=921, hasNextCallCountActual=1.8K, hasNextTrueCountActual=921, hasNextTimeNanosActual=454.0K, nextCallCountActual=921, nextTimeNanosActual=36.3K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=921, sourceRowsFilteredActual=921, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[assembly], unlockedFilters=Or + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ passRatio=0.002171552660152009 source=learned_filter evidence=2133036, sharedJoinVars=[assembly], firstRowTimeNanosActual=500, indexLookupCountActual=921, openCountActual=921, lastRowTimeNanosActual=1.3K, closeCountActual=921, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=921, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=39, indexHitRateActual=0.50) + │ ║ │ │ s: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=57.7K, nextCallCountActual=284, nextTimeNanosActual=35.5K, firstRowTimeNanosActual=1.0K, openCountActual=2, lastRowTimeNanosActual=263.1K, closeCountActual=2, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=68, avgNextNanosActual=125) [right] + │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=132.7K, resultSizeActual=284, hasNextCallCountActual=850, hasNextTrueCountActual=848, hasNextTimeNanosActual=34.8K, nextCallCountActual=284, nextTimeNanosActual=16.3K, sourceRowsScannedActual=286, sourceRowsMatchedActual=284, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1000, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=262.7K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=41, avgNextNanosActual=57, indexHitRateActual=0.99) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optComponent) (hasNextFalseCountActual=0) + │ ║ │ Var (name=component) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=520, resultSizeActual=520, hasNextCallCountActual=521, hasNextTrueCountActual=520, hasNextTimeNanosActual=40.2K, nextCallCountActual=520, nextTimeNanosActual=20.4K, sourceRowsScannedActual=521, sourceRowsMatchedActual=520, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=651.5K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=77, avgNextNanosActual=39, indexHitRateActual=1.00) + │ ║ s: Var (name=requirement) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=component) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=assembly) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=assembly) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -5951,111 +6387,111 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optComponent) (bindingState=bound) -│ ║ │ ║ Var (name=assembly) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=48) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) -│ ║ │ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] -│ ║ │ │ ├── Or -│ ║ │ │ │ ╠══ Compare (=) -│ ║ │ │ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ │ │ ║ ValueConstant (value="Assembly 1") -│ ║ │ │ │ ╚══ Compare (=) -│ ║ │ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ │ ValueConstant (value="Assembly 2") -│ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[assembly], plannedLookupComponents=[S, P], unlockedFilters=Or -│ ║ │ │ Compare (=) -│ ║ │ │ Var (name=name) -│ ║ │ │ ValueConstant (value="Assembly 1") -│ ║ │ │ Compare (=) -│ ║ │ │ Var (name=name) -│ ║ │ │ ValueConstant (value="Assembly 2") -│ ║ │ │ ) -│ ║ │ │ s: Var (name=assembly) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) -│ ║ │ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) -│ ║ │ ║ s: Var (name=component) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) -│ ║ │ ║ o: Var (name=assembly) (bindingState=bound) -│ ║ │ ╚══ ExtensionElem (optComponent) -│ ║ │ Var (name=component) (bindingState=bound) -│ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) -│ ║ s: Var (name=requirement) (bindingState=unbound) -│ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) -│ ║ o: Var (name=component) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=assembly) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=assembly) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optComponent) (bindingState=bound) + │ ║ │ ║ Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=2.00) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=921, plannedAccessRows=15.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.3K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=assembly) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_27ef30ec_uri, value=http://example.com/theme/engineering/Assembly, anonymous) + │ ║ │ │ ╚══ Filter (plannedFilterEvidenceCount=2.1M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ │ ├── Or + │ ║ │ │ │ ╠══ Compare (=) + │ ║ │ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ║ ValueConstant (value="Assembly 1") + │ ║ │ │ │ ╚══ Compare (=) + │ ║ │ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ └── StatementPattern (resultSizeEstimate=134.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[assembly], unlockedFilters=Or + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 1") + │ ║ │ │ Compare (=) + │ ║ │ │ Var (name=name) + │ ║ │ │ ValueConstant (value="Assembly 2") + │ ║ │ │ passRatio=0.002171552660152009 source=learned_filter evidence=2133957, sharedJoinVars=[assembly]) + │ ║ │ │ s: Var (name=assembly) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=132.7K) + │ ║ │ ║ s: Var (name=component) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + │ ║ │ ║ o: Var (name=assembly) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optComponent) + │ ║ │ Var (name=component) (bindingState=bound) + │ ║ └── StatementPattern (new scope) (resultSizeEstimate=520) + │ ║ s: Var (name=requirement) (bindingState=unbound) + │ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + │ ║ o: Var (name=component) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=assembly) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=assembly) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?assembly) AS ?count) WHERE { -?assembly a . -?assembly ?name . -FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) -OPTIONAL { -?component ?assembly . -BIND(?component AS ?optComponent) -} -FILTER (?optComponent != ?assembly) -MINUS { -?requirement ?component . -} + ?assembly a . + ?assembly ?name . + FILTER ((?name = "Assembly 1") || (?name = "Assembly 2")) + OPTIONAL { + ?component ?assembly . + BIND(?component AS ?optComponent) + } + FILTER (?optComponent != ?assembly) + MINUS { + ?requirement ?component . + } } Theme: HIGHLY_CONNECTED z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 958 ms +Initial explain execution time: 977 ms Warmup execution 1/2 Warmup execution 2/2 -Fastest execution time: 424 ms +Fastest execution time: 464 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=935.3M, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=2.5K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=980.7M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=980.7M, openCountActual=1, lastRowTimeNanosActual=980.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=490.4M, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=935.3M, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=1.3K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=935.3M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=1.5M, firstRowTimeNanosActual=935.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=935.3M, maxGroupSizeActual=1.5M, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.6M, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5M, rowsDroppedActual=1.5M, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=467.7M, avgNextNanosActual=1.1K) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5M, hasNextCallCountActual=1.5M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=779.3M, nextCallCountActual=1.5M, nextTimeNanosActual=20.4M, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=267.2K, joinRightBindingsConsumedActual=1.5M, firstRowTimeNanosActual=22.7K, leftRowsWithMatchActual=267.2K, openCountActual=1, lastRowTimeNanosActual=935.3M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=1.8M, rowsDroppedActual=267.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=497, avgNextNanosActual=13, leftRowsProbedActual=267.2K, rightRowsScannedActual=1.5M, avgRightRowsPerLeftActual=5.86, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.86, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Filter (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=193.1M, nextCallCountActual=267.2K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.8K, exprEvalCountActual=267.2K, openCountActual=1, exprTrueCountActual=267.2K, lastRowTimeNanosActual=935.2M, closeCountActual=1, exprEvalTimeNanosActual=28.4M, inputRowsActual=267.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=722, avgNextNanosActual=14, filterRejectRateActual=0) [left] -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=267.2K, exprTrueCountActual=267.2K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optNeighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=143.9M, nextCallCountActual=267.2K, nextTimeNanosActual=3.4M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, firstRowTimeNanosActual=17.7K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=935.2M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=538, avgNextNanosActual=13, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinMatchRateActual=1.00, joinOutputPerLeftActual=6.64, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.3M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=935.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=73, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=71.5M, nextCallCountActual=267.2K, nextTimeNanosActual=25.2M, firstRowTimeNanosActual=666, openCountActual=40.2K, lastRowTimeNanosActual=28.9K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=94, avgNextNanosActual=94) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=41.9M, nextCallCountActual=267.2K, nextTimeNanosActual=11.3M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=28.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=55, avgNextNanosActual=42, indexHitRateActual=0.87) -│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optNeighbor) (hasNextFalseCountActual=0) -│ ║ │ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=4.4M, hasNextTrueCountActual=4.1M, hasNextTimeNanosActual=242.8M, nextCallCountActual=1.5M, nextTimeNanosActual=75.7M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=2.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=55, avgNextNanosActual=48, indexHitRateActual=0.85) [right] -│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=980.7M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=980.7M, openCountActual=1, lastRowTimeNanosActual=980.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=490.4M, avgNextNanosActual=1.2K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=980.7M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=1.5M, firstRowTimeNanosActual=980.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=980.7M, maxGroupSizeActual=1.5M, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=1.6M, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.5M, rowsDroppedActual=1.5M, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=490.4M, avgNextNanosActual=625) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=1.5M, hasNextCallCountActual=1.5M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=813.9M, nextCallCountActual=1.5M, nextTimeNanosActual=24.9M, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=267.2K, joinRightBindingsConsumedActual=1.5M, firstRowTimeNanosActual=23.0K, leftRowsWithMatchActual=267.2K, openCountActual=1, lastRowTimeNanosActual=980.7M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=1.8M, rowsDroppedActual=267.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=520, avgNextNanosActual=16, leftRowsProbedActual=267.2K, rightRowsScannedActual=1.5M, avgRightRowsPerLeftActual=5.86, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.86, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Filter (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=207.9M, nextCallCountActual=267.2K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.3K, exprEvalCountActual=267.2K, openCountActual=1, exprTrueCountActual=267.2K, lastRowTimeNanosActual=980.6M, closeCountActual=1, exprEvalTimeNanosActual=34.4M, inputRowsActual=267.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=778, avgNextNanosActual=15, filterRejectRateActual=0) [left] + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=267.2K, exprTrueCountActual=267.2K, exprEvalTimeNanosActual=11.8M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=151.7M, nextCallCountActual=267.2K, nextTimeNanosActual=4.0M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, firstRowTimeNanosActual=16.5K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=980.6M, closeCountActual=1, maxRightRowsPerLeftActual=12, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=568, avgNextNanosActual=15, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinMatchRateActual=1.00, joinOutputPerLeftActual=6.64, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.5M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=980.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=73, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=74.1M, nextCallCountActual=267.2K, nextTimeNanosActual=28.5M, firstRowTimeNanosActual=667, openCountActual=40.2K, lastRowTimeNanosActual=29.3K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=97, avgNextNanosActual=107) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=761.6K, hasNextTrueCountActual=721.3K, hasNextTimeNanosActual=43.1M, nextCallCountActual=267.2K, nextTimeNanosActual=11.6M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=29.1K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=57, avgNextNanosActual=44, indexHitRateActual=0.87) + │ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optNeighbor) (hasNextFalseCountActual=0) + │ ║ │ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=4.4M, hasNextTrueCountActual=4.1M, hasNextTimeNanosActual=253.9M, nextCallCountActual=1.5M, nextTimeNanosActual=80.5M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=2.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=57, avgNextNanosActual=51, indexHitRateActual=0.85) [right] + │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6063,94 +6499,94 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) -│ ║ │ ║ Var (name=node) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] -│ ║ │ │ s: Var (name=node) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ ║ s: Var (name=node) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optNeighbor) -│ ║ │ Var (name=neighbor) (bindingState=bound) -│ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] -│ ║ s: Var (name=node) (bindingState=bound) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ o: Var (name=w) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optNeighbor) (bindingState=bound) + │ ║ │ ║ Var (name=node) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optNeighbor) + │ ║ │ Var (name=neighbor) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -?node a . -OPTIONAL { -?node ?neighbor . -BIND(?neighbor AS ?optNeighbor) -} -FILTER (?optNeighbor != ?node) -OPTIONAL { -?node ?w . -} + ?node a . + OPTIONAL { + ?node ?neighbor . + BIND(?neighbor AS ?optNeighbor) + } + FILTER (?optNeighbor != ?node) + OPTIONAL { + ?node ?w . + } } Theme: HIGHLY_CONNECTED z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 3024 ms +Initial explain execution time: 3205 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.7M, nextCallCountActual=1, nextTimeNanosActual=5.2K, firstRowTimeNanosActual=3021.7M, openCountActual=1, lastRowTimeNanosActual=3021.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.9M, avgNextNanosActual=5.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3202.3M, nextCallCountActual=1, nextTimeNanosActual=2.3K, firstRowTimeNanosActual=3202.3M, openCountActual=1, lastRowTimeNanosActual=3202.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1601.2M, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.7M, nextCallCountActual=1, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=3021.7M, openCountActual=1, lastRowTimeNanosActual=3021.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.9M, avgNextNanosActual=3.0K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3021.6M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=716.1K, firstRowTimeNanosActual=3021.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3021.7M, maxGroupSizeActual=716.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=716.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=716.1K, rowsDroppedActual=716.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1510.8M, avgNextNanosActual=1.1K) -│ ╠══ Filter (resultSizeActual=716.1K, hasNextCallCountActual=716.1K, hasNextTrueCountActual=716.1K, hasNextTimeNanosActual=2861.0M, nextCallCountActual=716.1K, nextTimeNanosActual=9.5M, sourceRowsScannedActual=3.5M, sourceRowsMatchedActual=716.1K, sourceRowsFilteredActual=2.8M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=108.6K, exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, openCountActual=1, exprTrueCountActual=716.1K, lastRowTimeNanosActual=3021.6M, closeCountActual=1, exprEvalTimeNanosActual=1010.8M, inputRowsActual=3.5M, rowsDroppedActual=2.8M, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=13, filterRejectRateActual=0.80) -│ ║ ├── Or (exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, exprTrueCountActual=716.1K, shortCircuitCountActual=358.5K, exprEvalTimeNanosActual=743.7M, hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (=) (exprEvalCountActual=3.5M, exprFalseCountActual=3.2M, exprTrueCountActual=358.5K, exprEvalTimeNanosActual=313.7M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Compare (=) (exprEvalCountActual=3.2M, exprFalseCountActual=2.8M, exprTrueCountActual=357.6K, exprEvalTimeNanosActual=242.9M, hasNextFalseCountActual=0) -│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=7.1K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=3.5M, hasNextCallCountActual=3.5M, hasNextTrueCountActual=3.5M, hasNextTimeNanosActual=1564.1M, nextCallCountActual=3.5M, nextTimeNanosActual=44.2M, joinRightIteratorsCreatedActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinRightBindingsConsumedActual=3.5M, firstRowTimeNanosActual=52.9K, leftRowsWithMatchActual=615.0K, openCountActual=1, lastRowTimeNanosActual=3021.5M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=4.1M, rowsDroppedActual=615.0K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=437, avgNextNanosActual=12, leftRowsProbedActual=615.0K, rightRowsScannedActual=3.5M, avgRightRowsPerLeftActual=5.82, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.82, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinType=Cartesian product, inputRowsActual=615.0K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=615.0K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=6.9K, nextCallCountActual=2, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=10.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=3021.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=2.3K, avgNextNanosActual=1.5K) [left] -│ ║ ║ └── Union (resultSizeActual=615.0K, sampleCountActual=2, varianceActual=2.91, stddevActual=1.71, confidenceScoreActual=0.42, hasNextFalseCountActual=0, leftRowsConsumedActual=534.5K, rightRowsConsumedActual=80.5K, leftRowsOutputContributionActual=534.5K, rightRowsOutputContributionActual=80.5K) [right] -│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=534.5K, joinRightIteratorsCreatedActual=80.5K, joinLeftBindingsConsumedActual=80.5K, joinRightBindingsConsumedActual=534.5K, inputRowsActual=615.0K, rowsDroppedActual=80.5K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=80.5K, rightRowsScannedActual=534.5K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) -│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=9.0M, nextCallCountActual=80.5K, nextTimeNanosActual=8.0M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.5K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1315.8M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=100, indexHitRateActual=1.00) [left] -│ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=534.5K, hasNextCallCountActual=615.0K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=71.8M, nextCallCountActual=534.5K, nextTimeNanosActual=37.9M, sourceRowsScannedActual=615.0K, sourceRowsMatchedActual=534.5K, sourceRowsFilteredActual=80.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=80.5K, openCountActual=80.5K, lastRowTimeNanosActual=40.2K, closeCountActual=80.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=80.5K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=117, avgNextNanosActual=71, indexHitRateActual=0.87) [right] -│ ║ ║ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=8.1M, nextCallCountActual=80.5K, nextTimeNanosActual=7.0M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1315.8M, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1520.6M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=87, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=3.5M, hasNextCallCountActual=10.1M, hasNextTrueCountActual=9.5M, hasNextTimeNanosActual=601.3M, nextCallCountActual=3.5M, nextTimeNanosActual=167.4M, sourceRowsScannedActual=4.1M, sourceRowsMatchedActual=3.5M, sourceRowsFilteredActual=615.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=615.0K, openCountActual=615.0K, lastRowTimeNanosActual=4.2K, closeCountActual=615.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=615.0K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=59, avgNextNanosActual=47, indexHitRateActual=0.85) [right] -│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3202.3M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=3202.3M, openCountActual=1, lastRowTimeNanosActual=3202.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1601.2M, avgNextNanosActual=1.3K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=3202.3M, nextCallCountActual=1, nextTimeNanosActual=666, aggregateEvalCountActual=716.1K, firstRowTimeNanosActual=3202.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=3202.3M, maxGroupSizeActual=716.1K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=716.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=716.1K, rowsDroppedActual=716.1K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1601.2M, avgNextNanosActual=666) + │ ╠══ Filter (resultSizeActual=716.1K, hasNextCallCountActual=716.1K, hasNextTrueCountActual=716.1K, hasNextTimeNanosActual=3032.5M, nextCallCountActual=716.1K, nextTimeNanosActual=10.0M, sourceRowsScannedActual=3.5M, sourceRowsMatchedActual=716.1K, sourceRowsFilteredActual=2.8M, plannedFilterEvidenceCount=39.3M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=152.6K, exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, openCountActual=1, exprTrueCountActual=716.1K, lastRowTimeNanosActual=3202.3M, closeCountActual=1, exprEvalTimeNanosActual=1117.5M, inputRowsActual=3.5M, rowsDroppedActual=2.8M, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.2K, avgNextNanosActual=14, filterRejectRateActual=0.80) + │ ║ ├── Or (exprEvalCountActual=3.5M, exprFalseCountActual=2.8M, exprTrueCountActual=716.1K, shortCircuitCountActual=358.5K, exprEvalTimeNanosActual=801.9M, hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (=) (exprEvalCountActual=3.5M, exprFalseCountActual=3.2M, exprTrueCountActual=358.5K, exprEvalTimeNanosActual=325.7M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Compare (=) (exprEvalCountActual=3.2M, exprFalseCountActual=2.8M, exprTrueCountActual=357.6K, exprEvalTimeNanosActual=231.3M, hasNextFalseCountActual=0) + │ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=8.6K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=3.5M, hasNextCallCountActual=3.5M, hasNextTrueCountActual=3.5M, hasNextTimeNanosActual=1643.4M, nextCallCountActual=3.5M, nextTimeNanosActual=56.5M, joinRightIteratorsCreatedActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinRightBindingsConsumedActual=3.5M, firstRowTimeNanosActual=98.8K, leftRowsWithMatchActual=615.0K, openCountActual=1, lastRowTimeNanosActual=3202.2M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=4.1M, rowsDroppedActual=615.0K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=459, avgNextNanosActual=16, leftRowsProbedActual=615.0K, rightRowsScannedActual=3.5M, avgRightRowsPerLeftActual=5.82, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.82, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeActual=615.0K, joinLeftBindingsConsumedActual=615.0K, joinType=Cartesian product, inputRowsActual=615.0K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=615.0K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=8.2K, nextCallCountActual=2, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=6.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=3202.2M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=2.7K, avgNextNanosActual=1.7K) [left] + │ ║ ║ └── Union (resultSizeActual=615.0K, sampleCountActual=2, varianceActual=2.84, stddevActual=1.69, confidenceScoreActual=0.43, hasNextFalseCountActual=0, leftRowsConsumedActual=534.5K, rightRowsConsumedActual=80.5K, leftRowsOutputContributionActual=534.5K, rightRowsOutputContributionActual=80.5K) [right] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=99.5K, resultSizeActual=534.5K, joinRightIteratorsCreatedActual=80.5K, joinLeftBindingsConsumedActual=80.5K, joinRightBindingsConsumedActual=534.5K, inputRowsActual=615.0K, rowsDroppedActual=80.5K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=80.5K, rightRowsScannedActual=534.5K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) + │ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=9.0M, nextCallCountActual=80.5K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=27.5K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1383.4M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=113, avgNextNanosActual=114, indexHitRateActual=1.00) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=534.5K, hasNextCallCountActual=615.0K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=73.6M, nextCallCountActual=534.5K, nextTimeNanosActual=38.9M, sourceRowsScannedActual=615.0K, sourceRowsMatchedActual=534.5K, sourceRowsFilteredActual=80.5K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=417, indexLookupCountActual=80.5K, openCountActual=80.5K, lastRowTimeNanosActual=42.1K, closeCountActual=80.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=80.5K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=120, avgNextNanosActual=73, indexHitRateActual=0.87) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=40.3K, resultSizeActual=80.5K, hasNextCallCountActual=80.5K, hasNextTrueCountActual=80.5K, hasNextTimeNanosActual=7.9M, nextCallCountActual=80.5K, nextTimeNanosActual=7.7M, sourceRowsScannedActual=80.5K, sourceRowsMatchedActual=80.5K, sourceRowsFilteredActual=2, plannedIndexName=ospc, firstRowTimeNanosActual=1383.4M, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=1596.4M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=98, avgNextNanosActual=96, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=3.5M, hasNextCallCountActual=10.1M, hasNextTrueCountActual=9.5M, hasNextTimeNanosActual=608.2M, nextCallCountActual=3.5M, nextTimeNanosActual=184.5M, sourceRowsScannedActual=4.1M, sourceRowsMatchedActual=3.5M, sourceRowsFilteredActual=615.0K, plannedIndexName=spoc, firstRowTimeNanosActual=708, indexLookupCountActual=615.0K, openCountActual=615.0K, lastRowTimeNanosActual=5.3K, closeCountActual=615.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=615.0K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=60, avgNextNanosActual=52, indexHitRateActual=0.85) [right] + │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6158,114 +6594,121 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) -│ ║ ├── Or -│ ║ │ ╠══ Compare (=) -│ ║ │ ║ Var (name=w) (bindingState=bound) -│ ║ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ ╚══ Compare (=) -│ ║ │ Var (name=w) (bindingState=bound) -│ ║ │ ValueConstant (value="3"^^) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] -│ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ ║ └── Union [right] -│ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) -│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) -│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] -│ ║ ║ ║ s: Var (name=entity) (bindingState=bound) -│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) -│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) -│ ║ ║ s: Var (name=entity) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] -│ ║ s: Var (name=entity) (bindingState=bound) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ o: Var (name=w) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=entity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=entity) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=42.9M, plannedFilterPassRatio=0.20, filterSelectivitySource=learned_filter) + │ ║ ├── Or + │ ║ │ ╠══ Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ╚══ Compare (=) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (joinType=Cartesian product) [left] + │ ║ ║ ├── BindingSetAssignment ([[target="1"^^], [target="2"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ Join (new scope) (JoinIterator) (resultSizeEstimate=99.5K) + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ ║ ║ s: Var (name=entity) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=targetNode) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=40.3K) + │ ║ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=w) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { -VALUES ?target { 1 2 } -{ -?entity a . -?entity ?targetNode . -} -UNION -{ -?entity a . -} -OPTIONAL { -?entity ?w . -} -FILTER ((?w = ?target) || (?w = 3)) + VALUES ?target { 1 2 } + { + ?entity a . + ?entity ?targetNode . + } + UNION + { + ?entity a . + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) } Theme: HIGHLY_CONNECTED z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 3321 ms +Initial explain execution time: 1404 ms +Warmup execution 1/1 +Fastest execution time: 822 ms -Projection (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3305.1M, nextCallCountActual=36.7K, nextTimeNanosActual=5.6M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.9K, avgNextNanosActual=154) +Projection (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=1322.8M, nextCallCountActual=36.7K, nextTimeNanosActual=5.4M, firstRowTimeNanosActual=1304.5M, openCountActual=1, lastRowTimeNanosActual=1332.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=36.0K, avgNextNanosActual=148) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "node" (hasNextFalseCountActual=0) ║ ProjectionElem "neighborCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3304.4M, nextCallCountActual=36.7K, nextTimeNanosActual=3.9M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.9K, avgNextNanosActual=107) -├── Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3303.4M, nextCallCountActual=36.7K, nextTimeNanosActual=2.1M, firstRowTimeNanosActual=3290.1M, openCountActual=1, lastRowTimeNanosActual=3314.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.8K, avgNextNanosActual=59) -│ ╠══ Filter (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3302.3M, nextCallCountActual=36.7K, nextTimeNanosActual=445.5K, sourceRowsScannedActual=36.7K, sourceRowsMatchedActual=36.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3290.1M, exprEvalCountActual=36.7K, openCountActual=1, exprTrueCountActual=36.7K, lastRowTimeNanosActual=3314.9M, closeCountActual=1, exprEvalTimeNanosActual=8.6M, inputRowsActual=36.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.8K, avgNextNanosActual=12, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=36.7K, exprTrueCountActual=36.7K, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=18.3K, hasNextFalseCountActual=0) -│ ║ └── Group (node) (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=3290.5M, nextCallCountActual=36.7K, nextTimeNanosActual=985.0K, aggregateEvalCountActual=941.0K, firstRowTimeNanosActual=3290.1M, groupsCreatedActual=36.7K, openCountActual=1, lastRowTimeNanosActual=3314.8M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=470.5K, rowsDroppedActual=433.7K, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.5K, avgNextNanosActual=27) -│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=470.5K, hasNextCallCountActual=470.5K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=3085.4M, nextCallCountActual=470.5K, nextTimeNanosActual=6.4M, joinRightIteratorsCreatedActual=470.5K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=66, firstRowTimeNanosActual=50.0K, leftRowsWithMatchActual=66, openCountActual=1, emptyRightProbeCountActual=470.4K, lastRowTimeNanosActual=3281.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=470.5K, rowsDroppedActual=66, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=4.1M, stddevActual=2.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=14, leftRowsProbedActual=470.5K, rightRowsScannedActual=66, avgRightRowsPerLeftActual=0.00, joinMatchRateActual=0.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=470.4K) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K, resultSizeActual=470.5K, joinRightIteratorsCreatedActual=267.2K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=470.5K, inputRowsActual=737.8K, rowsDroppedActual=267.2K, expansionFactorActual=0.64, sampleCountActual=2, varianceActual=0.01, stddevActual=0.08, confidenceScoreActual=0.65, hasNextFalseCountActual=0, leftRowsProbedActual=470.5K, rightRowsScannedActual=470.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.5M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=15.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3277.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=138, avgNextNanosActual=39, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=44.0M, nextCallCountActual=267.2K, nextTimeNanosActual=11.1M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=114.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=143, avgNextNanosActual=42, indexHitRateActual=0.87) [right] -│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeEstimate=164.4K, resultSizeActual=470.5K, hasNextCallCountActual=737.8K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=1774.6M, nextCallCountActual=470.5K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=1.5M, sourceRowsMatchedActual=470.5K, sourceRowsFilteredActual=1.0M, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[neighbor, node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=1.5M, exprFalseCountActual=1.0M, openCountActual=267.2K, exprTrueCountActual=470.5K, lastRowTimeNanosActual=9.5K, closeCountActual=267.2K, exprEvalTimeNanosActual=637.4M, inputRowsActual=1.5M, rowsDroppedActual=1.0M, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.64, avgHasNextNanosActual=2.4K, avgNextNanosActual=12, filterRejectRateActual=0.70) [right] -│ ║ │ ├── ListMemberOperator (exprEvalCountActual=1.5M, exprFalseCountActual=1.0M, exprTrueCountActual=470.5K, exprEvalTimeNanosActual=545.8M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="1"^^) (exprEvalCountActual=1.5M, exprTrueCountActual=1.5M, exprEvalTimeNanosActual=78.2M, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="2"^^) (exprEvalCountActual=1.4M, exprTrueCountActual=1.4M, exprEvalTimeNanosActual=73.0M, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="3"^^) (exprEvalCountActual=1.2M, exprTrueCountActual=1.2M, exprEvalTimeNanosActual=59.4M, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.5M, hasNextCallCountActual=1.8M, hasNextTrueCountActual=1.5M, hasNextTimeNanosActual=232.4M, nextCallCountActual=1.5M, nextTimeNanosActual=64.9M, sourceRowsScannedActual=1.8M, sourceRowsMatchedActual=1.5M, sourceRowsFilteredActual=267.2K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=7.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=127, avgNextNanosActual=41, indexHitRateActual=0.85) -│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=66, hasNextCallCountActual=470.5K, hasNextTrueCountActual=66, hasNextTimeNanosActual=242.5M, nextCallCountActual=66, nextTimeNanosActual=3.1K, sourceRowsScannedActual=470.5K, sourceRowsMatchedActual=66, sourceRowsFilteredActual=470.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=470.5K, openCountActual=470.5K, lastRowTimeNanosActual=417, closeCountActual=470.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=470.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=515, avgNextNanosActual=47, indexHitRateActual=0.00) [right] -│ ║ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_82223f2fe36952f541b08a42a7b8ce15e70d01234567) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=1322.1M, nextCallCountActual=36.7K, nextTimeNanosActual=3.6M, firstRowTimeNanosActual=1304.5M, openCountActual=1, lastRowTimeNanosActual=1332.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=36.0K, avgNextNanosActual=99) + ├── Extension (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=1321.3M, nextCallCountActual=36.7K, nextTimeNanosActual=1.9M, firstRowTimeNanosActual=1304.5M, openCountActual=1, lastRowTimeNanosActual=1332.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=35.9K, avgNextNanosActual=53) + │ ╠══ Filter (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=1320.1M, nextCallCountActual=36.7K, nextTimeNanosActual=547.6K, sourceRowsScannedActual=36.7K, sourceRowsMatchedActual=36.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality, firstRowTimeNanosActual=1304.5M, exprEvalCountActual=36.7K, openCountActual=1, exprTrueCountActual=36.7K, lastRowTimeNanosActual=1332.2M, closeCountActual=1, exprEvalTimeNanosActual=11.3M, inputRowsActual=36.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=35.9K, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=36.7K, exprTrueCountActual=36.7K, exprEvalTimeNanosActual=4.3M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_6522e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) + │ ║ └── Group (node) (resultSizeActual=36.7K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=36.7K, hasNextTimeNanosActual=1304.9M, nextCallCountActual=36.7K, nextTimeNanosActual=1.6M, aggregateEvalCountActual=941.0K, firstRowTimeNanosActual=1304.5M, groupsCreatedActual=36.7K, openCountActual=1, lastRowTimeNanosActual=1332.2M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=470.5K, rowsDroppedActual=433.7K, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=35.5K, avgNextNanosActual=46) + │ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=470.5K, hasNextCallCountActual=470.5K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=1073.1M, nextCallCountActual=470.5K, nextTimeNanosActual=5.9M, joinRightIteratorsCreatedActual=470.5K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=66, firstRowTimeNanosActual=47.4K, leftRowsWithMatchActual=66, openCountActual=1, emptyRightProbeCountActual=470.4K, lastRowTimeNanosActual=1286.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=470.5K, rowsDroppedActual=66, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=4.1M, stddevActual=2.0K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.3K, avgNextNanosActual=13, leftRowsProbedActual=470.5K, rightRowsScannedActual=66, avgRightRowsPerLeftActual=0.00, joinMatchRateActual=0.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=470.4K) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=166.6K, resultSizeActual=470.5K, joinRightIteratorsCreatedActual=66.8K, joinLeftBindingsConsumedActual=470.5K, joinRightBindingsConsumedActual=470.5K, inputRowsActual=537.3K, rowsDroppedActual=66.8K, expansionFactorActual=0.88, sampleCountActual=2, varianceActual=0.14, stddevActual=0.38, confidenceScoreActual=0.59, hasNextFalseCountActual=0, leftRowsProbedActual=470.5K, rightRowsScannedActual=470.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=66.8K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=66.8K, inputRowsActual=107.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.62, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=66.8K, avgRightRowsPerLeftActual=1.66, joinOutputPerLeftActual=1.66) [left] + │ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.3M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=16.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1280.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=132, avgNextNanosActual=39, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ └── Filter (resultSizeActual=66.8K, hasNextCallCountActual=107.0K, hasNextTrueCountActual=66.8K, hasNextTimeNanosActual=285.7M, nextCallCountActual=66.8K, nextTimeNanosActual=990.9K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=66.8K, sourceRowsFilteredActual=155.9K, plannedFilterEvidenceCount=5.5M, plannedFilterPassRatio=0.30, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=2.2K, exprEvalCountActual=222.7K, exprFalseCountActual=155.9K, openCountActual=40.2K, exprTrueCountActual=66.8K, lastRowTimeNanosActual=39.5K, closeCountActual=40.2K, exprEvalTimeNanosActual=102.0M, inputRowsActual=222.7K, rowsDroppedActual=155.9K, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.62, avgHasNextNanosActual=2.7K, avgNextNanosActual=15, filterRejectRateActual=0.70) [right] + │ ║ │ ║ ╠══ ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=155.9K, exprTrueCountActual=66.8K, exprEvalTimeNanosActual=87.7M, hasNextFalseCountActual=0) + │ ║ │ ║ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ║ ValueConstant (value="1"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=12.8M, hasNextFalseCountActual=0) + │ ║ │ ║ ║ ValueConstant (value="2"^^) (exprEvalCountActual=200.4K, exprTrueCountActual=200.4K, exprEvalTimeNanosActual=11.5M, hasNextFalseCountActual=0) + │ ║ │ ║ ║ ValueConstant (value="3"^^) (exprEvalCountActual=178.1K, exprTrueCountActual=178.1K, exprEvalTimeNanosActual=9.5M, hasNextFalseCountActual=0) + │ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=224.9K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=42.3M, nextCallCountActual=222.7K, nextTimeNanosActual=10.8M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedAccessRows=6.00, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], unlockedFilters=ListMemberOperator + │ ║ │ ║ Var (name=w) + │ ║ │ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ValueConstant (value="3"^^) + │ ║ │ ║ passRatio=0.30007342979922913 source=learned_filter evidence=5576755, sharedJoinVars=[node], firstRowTimeNanosActual=834, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=36.8K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=161, avgNextNanosActual=49, indexHitRateActual=0.85) + │ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=470.5K, hasNextCallCountActual=537.3K, hasNextTrueCountActual=470.5K, hasNextTimeNanosActual=67.7M, nextCallCountActual=470.5K, nextTimeNanosActual=25.2M, sourceRowsScannedActual=537.3K, sourceRowsMatchedActual=470.5K, sourceRowsFilteredActual=66.8K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node, w], sharedJoinVars=[node], firstRowTimeNanosActual=500, indexLookupCountActual=66.8K, openCountActual=66.8K, lastRowTimeNanosActual=11.1K, closeCountActual=66.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.8K, nextPerHasNextRatioActual=0.88, avgHasNextNanosActual=126, avgNextNanosActual=54, indexHitRateActual=0.88) [right] + │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=66, hasNextCallCountActual=470.5K, hasNextTrueCountActual=66, hasNextTimeNanosActual=294.7M, nextCallCountActual=66, nextTimeNanosActual=4.2K, sourceRowsScannedActual=470.5K, sourceRowsMatchedActual=66, sourceRowsFilteredActual=470.5K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=470.5K, openCountActual=470.5K, lastRowTimeNanosActual=417, closeCountActual=470.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=470.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=626, avgNextNanosActual=64, indexHitRateActual=0.00) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_6522e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_6522e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6274,60 +6717,65 @@ Projection ║ ProjectionElem "node" ║ ProjectionElem "neighborCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (node) -│ ║ LeftJoin -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=164.4K) [left] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.1K) [left] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ │ ║ └── Filter (resultSizeEstimate=67.1K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ║ ╠══ ListMemberOperator -│ ║ │ ║ ║ Var (name=w) (bindingState=bound) -│ ║ │ ║ ║ ValueConstant (value="1"^^) -│ ║ │ ║ ║ ValueConstant (value="2"^^) -│ ║ │ ║ ║ ValueConstant (value="3"^^) -│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ ║ s: Var (name=node) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ ║ o: Var (name=w) (bindingState=unbound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node, w], plannedLookupComponents=[S, P]) [right] -│ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ o: Var (name=neighbor) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] -│ ║ s: Var (name=neighbor) (bindingState=bound) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ o: Var (name=node) (bindingState=bound) -│ ║ GroupElem (_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012) -│ ║ Count -│ ║ Var (name=neighbor) (bindingState=bound) -│ ║ GroupElem (neighborCount) -│ ║ Count (Distinct) -│ ║ Var (name=neighbor) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_33223f2fe36952f541b08a42a7b8ce15e70d012) -│ Count -│ Var (name=neighbor) (bindingState=unbound) -└── ExtensionElem (neighborCount) -Count (Distinct) -Var (name=neighbor) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=0.43, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_1622e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=166.6K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=5.7M, plannedFilterPassRatio=0.30, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ ╠══ ListMemberOperator + │ ║ │ ║ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ║ ValueConstant (value="3"^^) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=224.9K, plannedAccessRows=6.00, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], unlockedFilters=ListMemberOperator + │ ║ │ ║ Var (name=w) + │ ║ │ ║ ValueConstant (value="1"^^) + │ ║ │ ║ ValueConstant (value="2"^^) + │ ║ │ ║ ValueConstant (value="3"^^) + │ ║ │ ║ passRatio=0.3000694193227116 source=learned_filter evidence=5799538, sharedJoinVars=[node]) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node, w], sharedJoinVars=[node]) [right] + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=bound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ║ GroupElem (_anon_having_1622e226babdcc344c88a5a61806b6a8e7f30) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_1622e226babdcc344c88a5a61806b6a8e7f30) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { -?node a . -?node ?w . -FILTER (?w IN (1, 2, 3)) -?node ?neighbor . -OPTIONAL { -?neighbor ?node . -} + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } } GROUP BY ?node HAVING (COUNT(?neighbor) > 0) @@ -6335,51 +6783,51 @@ HAVING (COUNT(?neighbor) > 0) Theme: HIGHLY_CONNECTED z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 320 ms +Initial explain execution time: 322 ms Warmup execution 1/6 Warmup execution 2/6 Warmup execution 3/6 Warmup execution 4/6 Warmup execution 5/6 Warmup execution 6/6 -Fastest execution time: 136 ms +Fastest execution time: 150 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=304.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=1.6K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=321.0M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=321.0M, openCountActual=1, lastRowTimeNanosActual=321.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=160.5M, avgNextNanosActual=2.0K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=304.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=304.2M, nextCallCountActual=1, nextTimeNanosActual=750, aggregateEvalCountActual=111.5K, firstRowTimeNanosActual=304.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=304.2M, maxGroupSizeActual=111.5K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=111.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=111.5K, rowsDroppedActual=111.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=152.1M, avgNextNanosActual=750) -│ ╠══ Difference (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=271.9M, nextCallCountActual=111.5K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=13, leftRowsConsumedActual=111.5K, rightRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── Filter (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=190.0M, nextCallCountActual=111.5K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=111.5K, sourceRowsFilteredActual=111.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.6K, exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, openCountActual=1, exprTrueCountActual=111.5K, lastRowTimeNanosActual=304.2M, closeCountActual=1, exprEvalTimeNanosActual=40.4M, inputRowsActual=222.7K, rowsDroppedActual=111.2K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.50) -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, exprTrueCountActual=111.5K, exprEvalTimeNanosActual=26.5M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=222.7K, hasNextCallCountActual=222.7K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=132.3M, nextCallCountActual=222.7K, nextTimeNanosActual=2.2M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=222.7K, firstRowTimeNanosActual=15.4K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=263.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=594, avgNextNanosActual=10, leftRowsProbedActual=40.2K, rightRowsScannedActual=222.7K, avgRightRowsPerLeftActual=5.53, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.53, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3.8M, nextCallCountActual=40.2K, nextTimeNanosActual=2.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=8.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=304.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=74, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=67.6M, nextCallCountActual=222.7K, nextTimeNanosActual=22.1M, firstRowTimeNanosActual=666, openCountActual=40.2K, lastRowTimeNanosActual=5.6K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=108, avgNextNanosActual=99) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=42.9M, nextCallCountActual=222.7K, nextTimeNanosActual=10.3M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=5.3K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=68, avgNextNanosActual=47, indexHitRateActual=0.85) -│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optWeight) (hasNextFalseCountActual=0) -│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=65.2M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, exprEvalTimeNanosActual=24.4M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=65.2M, filterRejectRateActual=1.00) -│ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=9.4M, hasNextFalseCountActual=0) -│ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=17.0M, nextCallCountActual=267.2K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=37, indexHitRateActual=1.00) -│ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=321.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=321.0M, openCountActual=1, lastRowTimeNanosActual=321.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=160.5M, avgNextNanosActual=1.0K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=321.0M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=111.5K, firstRowTimeNanosActual=321.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=321.0M, maxGroupSizeActual=111.5K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=111.5K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=111.5K, rowsDroppedActual=111.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=160.5M, avgNextNanosActual=708) + │ ╠══ Difference (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=286.4M, nextCallCountActual=111.5K, nextTimeNanosActual=1.3M, firstRowTimeNanosActual=72.3M, openCountActual=1, lastRowTimeNanosActual=320.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=12, leftRowsConsumedActual=111.5K, rightRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── Filter (resultSizeActual=111.5K, hasNextCallCountActual=111.5K, hasNextTrueCountActual=111.5K, hasNextTimeNanosActual=197.0M, nextCallCountActual=111.5K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=111.5K, sourceRowsFilteredActual=111.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=29.2K, exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, openCountActual=1, exprTrueCountActual=111.5K, lastRowTimeNanosActual=320.9M, closeCountActual=1, exprEvalTimeNanosActual=44.4M, inputRowsActual=222.7K, rowsDroppedActual=111.2K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=14, filterRejectRateActual=0.50) + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=222.7K, exprFalseCountActual=111.2K, exprTrueCountActual=111.5K, exprEvalTimeNanosActual=25.5M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="5"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=222.7K, hasNextCallCountActual=222.7K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=136.0M, nextCallCountActual=222.7K, nextTimeNanosActual=2.7M, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=222.7K, firstRowTimeNanosActual=21.8K, leftRowsWithMatchActual=40.2K, openCountActual=1, lastRowTimeNanosActual=320.9M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=263.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=611, avgNextNanosActual=12, leftRowsProbedActual=40.2K, rightRowsScannedActual=222.7K, avgRightRowsPerLeftActual=5.53, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.53, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3.8M, nextCallCountActual=40.2K, nextTimeNanosActual=3.1M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=12.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=320.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=96, avgNextNanosActual=78, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=69.7M, nextCallCountActual=222.7K, nextTimeNanosActual=23.3M, firstRowTimeNanosActual=834, openCountActual=40.2K, lastRowTimeNanosActual=5.3K, closeCountActual=40.2K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=111, avgNextNanosActual=105) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=628.0K, hasNextTrueCountActual=587.8K, hasNextTimeNanosActual=44.0M, nextCallCountActual=222.7K, nextTimeNanosActual=10.2M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=709, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=5.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=70, avgNextNanosActual=46, indexHitRateActual=0.85) + │ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optWeight) (hasNextFalseCountActual=0) + │ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=72.2M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterEvidenceCount=40.3M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=72.2M, closeCountActual=1, exprEvalTimeNanosActual=27.5M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=72.3M, filterRejectRateActual=1.00) + │ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=11.8M, hasNextFalseCountActual=0) + │ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=18.5M, nextCallCountActual=267.2K, nextTimeNanosActual=11.4M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=7.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=72.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=69, avgNextNanosActual=43, indexHitRateActual=1.00) + │ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6387,101 +6835,101 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optWeight) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="5"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] -│ ║ │ │ s: Var (name=node) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ ║ s: Var (name=node) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ ║ o: Var (name=w) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optWeight) -│ ║ │ Var (name=w) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ╠══ Compare (=) -│ ║ ║ Var (name=neighbor) (bindingState=bound) -│ ║ ║ Var (name=node) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) -│ ║ s: Var (name=node) (bindingState=unbound) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ o: Var (name=neighbor) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optWeight) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="5"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optWeight) + │ ║ │ Var (name=w) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=40.6M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -?node a . -OPTIONAL { -?node ?w . -BIND(?w AS ?optWeight) -} -FILTER (?optWeight > 5) -MINUS { -?node ?neighbor . -FILTER (?neighbor = ?node) -} + ?node a . + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight > 5) + MINUS { + ?node ?neighbor . + FILTER (?neighbor = ?node) + } } Theme: HIGHLY_CONNECTED z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 669 ms +Initial explain execution time: 739 ms Warmup execution 1/2 Warmup execution 2/2 -Fastest execution time: 345 ms +Fastest execution time: 372 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=653.8M, openCountActual=1, lastRowTimeNanosActual=653.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=327.0M, avgNextNanosActual=1.7K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=698.2M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=698.2M, openCountActual=1, lastRowTimeNanosActual=698.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=349.1M, avgNextNanosActual=2.0K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.9M, nextCallCountActual=1, nextTimeNanosActual=916, firstRowTimeNanosActual=653.8M, openCountActual=1, lastRowTimeNanosActual=653.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=327.0M, avgNextNanosActual=916) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=653.8M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=653.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=653.8M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=326.9M, avgNextNanosActual=583) -│ ╠══ Filter (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=652.7M, nextCallCountActual=1.0K, nextTimeNanosActual=15.2K, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=25.1K, exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, openCountActual=1, exprTrueCountActual=1.0K, lastRowTimeNanosActual=653.8M, closeCountActual=1, exprEvalTimeNanosActual=190.6M, inputRowsActual=238.7K, rowsDroppedActual=237.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=602.2K, avgNextNanosActual=14, filterRejectRateActual=1.00) -│ ║ ├── Exists (exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, exprTrueCountActual=1.0K, exprEvalTimeNanosActual=176.6M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=238.7K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=70.3M, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedIndexName=spoc, indexLookupCountActual=238.7K, openCountActual=238.7K, lastRowTimeNanosActual=333, closeCountActual=238.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=237.6K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=295, indexHitRateActual=0.00) -│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=238.7K, hasNextCallCountActual=238.7K, hasNextTrueCountActual=238.7K, hasNextTimeNanosActual=445.6M, nextCallCountActual=238.7K, nextTimeNanosActual=3.2M, joinRightIteratorsCreatedActual=44.6K, joinLeftBindingsConsumedActual=44.6K, joinRightBindingsConsumedActual=237.7K, firstRowTimeNanosActual=19.9K, leftRowsWithMatchActual=43.5K, openCountActual=1, emptyRightProbeCountActual=1.0K, lastRowTimeNanosActual=653.8M, closeCountActual=1, maxRightRowsPerLeftActual=23.2K, inputRowsActual=282.3K, rowsDroppedActual=43.5K, expansionFactorActual=0.85, sampleCountActual=2, varianceActual=0.00, stddevActual=0.06, confidenceScoreActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.9K, avgNextNanosActual=14, leftRowsProbedActual=44.6K, rightRowsScannedActual=237.7K, avgRightRowsPerLeftActual=5.33, joinMatchRateActual=0.98, joinOutputPerLeftActual=5.35, leftJoinNullExtendedRowsActual=1.0K) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K, resultSizeActual=44.6K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=84.8K, joinRightBindingsConsumedActual=44.6K, inputRowsActual=84.8K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=84.8K, rightRowsScannedActual=44.6K, avgRightRowsPerLeftActual=0.53, joinOutputPerLeftActual=0.53) [left] -│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.2M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=5.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=653.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=41, indexHitRateActual=1.00) [left] -│ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=44.8K, resultSizeActual=44.6K, hasNextCallCountActual=84.8K, hasNextTrueCountActual=44.6K, hasNextTimeNanosActual=233.7M, nextCallCountActual=44.6K, nextTimeNanosActual=694.9K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.6K, sourceRowsFilteredActual=178.1K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.6K, exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, openCountActual=40.2K, exprTrueCountActual=44.6K, lastRowTimeNanosActual=16.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=60.3M, inputRowsActual=222.7K, rowsDroppedActual=178.1K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=16, filterRejectRateActual=0.80) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, exprTrueCountActual=44.6K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=46.7M, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.4K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=19.6M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=200.4K, exprFalseCountActual=178.1K, exprTrueCountActual=22.3K, exprEvalTimeNanosActual=15.5M, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=37.1M, nextCallCountActual=222.7K, nextTimeNanosActual=9.4M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=14.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=141, avgNextNanosActual=43, indexHitRateActual=0.85) -│ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=267.3K, resultSizeActual=237.7K, hasNextCallCountActual=670.5K, hasNextTrueCountActual=625.9K, hasNextTimeNanosActual=46.8M, nextCallCountActual=237.7K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=282.3K, sourceRowsMatchedActual=237.7K, sourceRowsFilteredActual=44.6K, plannedIndexName=ospc, firstRowTimeNanosActual=542, indexLookupCountActual=44.6K, openCountActual=44.6K, lastRowTimeNanosActual=4.7K, closeCountActual=44.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44.6K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=70, avgNextNanosActual=42, indexHitRateActual=0.84) [right] -│ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=698.2M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=698.2M, openCountActual=1, lastRowTimeNanosActual=698.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=349.1M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=698.2M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=1.0K, firstRowTimeNanosActual=698.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=698.2M, maxGroupSizeActual=1.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=1.0K, rowsDroppedActual=1.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=349.1M, avgNextNanosActual=625) + │ ╠══ Filter (resultSizeActual=1.0K, hasNextCallCountActual=1.0K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=696.4M, nextCallCountActual=1.0K, nextTimeNanosActual=20.4K, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=40.4K, exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, openCountActual=1, exprTrueCountActual=1.0K, lastRowTimeNanosActual=698.2M, closeCountActual=1, exprEvalTimeNanosActual=202.0M, inputRowsActual=238.7K, rowsDroppedActual=237.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=642.5K, avgNextNanosActual=19, filterRejectRateActual=1.00) + │ ║ ├── Exists (exprEvalCountActual=238.7K, exprFalseCountActual=237.6K, exprTrueCountActual=1.0K, exprEvalTimeNanosActual=183.6M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=238.7K, hasNextTrueCountActual=1.0K, hasNextTimeNanosActual=76.0M, sourceRowsScannedActual=238.7K, sourceRowsMatchedActual=1.0K, sourceRowsFilteredActual=237.6K, plannedIndexName=spoc, indexLookupCountActual=238.7K, openCountActual=238.7K, lastRowTimeNanosActual=333, closeCountActual=238.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=237.6K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=319, indexHitRateActual=0.00) + │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=238.7K, hasNextCallCountActual=238.7K, hasNextTrueCountActual=238.7K, hasNextTimeNanosActual=477.0M, nextCallCountActual=238.7K, nextTimeNanosActual=3.8M, joinRightIteratorsCreatedActual=44.6K, joinLeftBindingsConsumedActual=44.6K, joinRightBindingsConsumedActual=237.7K, firstRowTimeNanosActual=27.6K, leftRowsWithMatchActual=43.5K, openCountActual=1, emptyRightProbeCountActual=1.0K, lastRowTimeNanosActual=698.2M, closeCountActual=1, maxRightRowsPerLeftActual=23.2K, inputRowsActual=282.3K, rowsDroppedActual=43.5K, expansionFactorActual=0.85, sampleCountActual=2, varianceActual=0.00, stddevActual=0.06, confidenceScoreActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=16, leftRowsProbedActual=44.6K, rightRowsScannedActual=237.7K, avgRightRowsPerLeftActual=5.33, joinMatchRateActual=0.98, joinOutputPerLeftActual=5.35, leftJoinNullExtendedRowsActual=1.0K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=45.0K, resultSizeActual=44.6K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=84.8K, joinRightBindingsConsumedActual=44.6K, inputRowsActual=84.8K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=84.8K, rightRowsScannedActual=44.6K, avgRightRowsPerLeftActual=0.53, joinOutputPerLeftActual=0.53) [left] + │ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.9M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=10.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=698.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=122, avgNextNanosActual=38, indexHitRateActual=1.00) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── Filter (resultSizeEstimate=45.0K, resultSizeActual=44.6K, hasNextCallCountActual=84.8K, hasNextTrueCountActual=44.6K, hasNextTimeNanosActual=250.8M, nextCallCountActual=44.6K, nextTimeNanosActual=608.9K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.6K, sourceRowsFilteredActual=178.1K, plannedFilterEvidenceCount=9.8M, plannedAccessRows=6.00, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=2.00, plannedWorkRows=45.0K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[node], filterSelectivitySource=learned_filter, sharedJoinVars=[node], firstRowTimeNanosActual=1.8K, exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, openCountActual=40.2K, exprTrueCountActual=44.6K, lastRowTimeNanosActual=17.0K, closeCountActual=40.2K, exprEvalTimeNanosActual=65.0M, inputRowsActual=222.7K, rowsDroppedActual=178.1K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=3.0K, avgNextNanosActual=14, filterRejectRateActual=0.80) [right] + │ ║ ║ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=178.1K, exprTrueCountActual=44.6K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=51.2M, hasNextFalseCountActual=0) + │ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.4K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=21.3M, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.7K, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Compare (=) (exprEvalCountActual=200.4K, exprFalseCountActual=178.1K, exprTrueCountActual=22.3K, exprEvalTimeNanosActual=15.2M, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=39.4M, nextCallCountActual=222.7K, nextTimeNanosActual=9.2M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=13.8K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=150, avgNextNanosActual=42, indexHitRateActual=0.85) + │ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=267.3K, resultSizeActual=237.7K, hasNextCallCountActual=670.5K, hasNextTrueCountActual=625.9K, hasNextTimeNanosActual=48.8M, nextCallCountActual=237.7K, nextTimeNanosActual=10.6M, sourceRowsScannedActual=282.3K, sourceRowsMatchedActual=237.7K, sourceRowsFilteredActual=44.6K, plannedIndexName=ospc, firstRowTimeNanosActual=500, indexLookupCountActual=44.6K, openCountActual=44.6K, lastRowTimeNanosActual=4.5K, closeCountActual=44.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44.6K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=73, avgNextNanosActual=45, indexHitRateActual=0.84) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6489,113 +6937,103 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Exists -│ ║ │ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ o: Var (name=neighbor) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=44.8K) [left] -│ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ s: Var (name=node) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ ║ └── Filter (resultSizeEstimate=44.8K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.20, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (=) -│ ║ ║ ║ │ Var (name=w) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="1"^^) -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=w) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="2"^^) -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) -│ ║ ║ s: Var (name=node) (bindingState=bound) -│ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ ║ o: Var (name=w) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] -│ ║ s: Var (name=neighbor) (bindingState=unbound) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ o: Var (name=node) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ o: Var (name=neighbor) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=45.0K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=45.0K, plannedFilterEvidenceCount=10.0M, plannedAccessRows=6.00, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=2.00, plannedWorkRows=45.0K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[node], filterSelectivitySource=learned_filter, sharedJoinVars=[node]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=w) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="1"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="2"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) [right] + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -?node a . -?node ?w . -FILTER ((?w = 1) || (?w = 2)) -OPTIONAL { -?neighbor ?node . -} -FILTER EXISTS { -?node ?neighbor . -} + ?node a . + ?node ?w . + FILTER ((?w = 1) || (?w = 2)) + OPTIONAL { + ?neighbor ?node . + } + FILTER EXISTS { + ?node ?neighbor . + } } Theme: HIGHLY_CONNECTED z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 670 ms +Initial explain execution time: 747 ms Warmup execution 1/2 Warmup execution 2/2 -Fastest execution time: 309 ms +Fastest execution time: 338 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=665.0M, openCountActual=1, lastRowTimeNanosActual=665.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=2.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=756.9M, nextCallCountActual=1, nextTimeNanosActual=4.9K, firstRowTimeNanosActual=756.9M, openCountActual=1, lastRowTimeNanosActual=756.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=378.5M, avgNextNanosActual=5.0K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=665.0M, openCountActual=1, lastRowTimeNanosActual=665.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=1.0K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=665.0M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=6.0K, firstRowTimeNanosActual=665.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=665.0M, maxGroupSizeActual=6.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6.0K, rowsDroppedActual=6.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=332.5M, avgNextNanosActual=583) -│ ╠══ Filter (resultSizeActual=6.0K, hasNextCallCountActual=6.0K, hasNextTrueCountActual=6.0K, hasNextTimeNanosActual=661.0M, nextCallCountActual=6.0K, nextTimeNanosActual=83.7K, sourceRowsScannedActual=66.7K, sourceRowsMatchedActual=6.0K, sourceRowsFilteredActual=60.6K, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=78.2K, exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, openCountActual=1, exprTrueCountActual=6.0K, lastRowTimeNanosActual=664.9M, closeCountActual=1, exprEvalTimeNanosActual=274.2M, inputRowsActual=66.7K, rowsDroppedActual=60.6K, selectivityActual=0.09, expansionFactorActual=0.09, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109.0K, avgNextNanosActual=14, filterRejectRateActual=0.91) -│ ║ ├── Not (exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, exprTrueCountActual=6.0K, exprEvalTimeNanosActual=269.8M, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=66.7K, exprFalseCountActual=6.0K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=266.2M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=66.7K, hasNextTrueCountActual=60.6K, hasNextTimeNanosActual=85.0M, sourceRowsScannedActual=172.5K, sourceRowsMatchedActual=60.6K, sourceRowsFilteredActual=111.8K, plannedFilterPassRatio=0.26, filterSelectivitySource=learned_filter, exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, openCountActual=66.7K, lastRowTimeNanosActual=1.2K, exprTrueCountActual=60.6K, closeCountActual=66.7K, exprEvalTimeNanosActual=23.8M, inputRowsActual=172.5K, rowsDroppedActual=172.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.3K, filterRejectRateActual=0.65) -│ ║ │ ╠══ Compare (<) (exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=17.2M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=172.5K, hasNextCallCountActual=178.5K, hasNextTrueCountActual=172.5K, hasNextTimeNanosActual=33.4M, nextCallCountActual=172.5K, nextTimeNanosActual=7.7M, sourceRowsScannedActual=178.5K, sourceRowsMatchedActual=172.5K, sourceRowsFilteredActual=6.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=66.7K, openCountActual=66.7K, lastRowTimeNanosActual=2.2K, closeCountActual=66.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=188, avgNextNanosActual=45, indexHitRateActual=0.97) -│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M, resultSizeActual=66.7K, joinRightIteratorsCreatedActual=40.2K, joinRightBindingsConsumedActual=66.7K, inputRowsActual=106.9K, rowsDroppedActual=40.2K, expansionFactorActual=0.62, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=66.7K) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, resultSizeActual=40.2K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=40.2K, joinType=Cartesian product, inputRowsActual=40.2K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=40.2K, avgRightRowsPerLeftActual=40.3K, joinOutputPerLeftActual=40.3K) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.3K, nextCallCountActual=1, nextTimeNanosActual=500, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.8K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=664.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=667, avgNextNanosActual=500) [left] -│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.0M, nextCallCountActual=40.2K, nextTimeNanosActual=3.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=w2) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=222.8K) -│ ║ ║ Var (name=node) -│ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ ║ Var (name=w2) -│ ║ ║ , firstRowTimeNanosActual=7.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=664.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=126, avgNextNanosActual=89, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Filter (resultSizeEstimate=67.0K, resultSizeActual=66.7K, hasNextCallCountActual=106.9K, hasNextTrueCountActual=66.7K, hasNextTimeNanosActual=262.7M, nextCallCountActual=66.7K, nextTimeNanosActual=789.3K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=66.7K, sourceRowsFilteredActual=156.0K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=958, exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, openCountActual=40.2K, exprTrueCountActual=66.7K, lastRowTimeNanosActual=18.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=92.4M, inputRowsActual=222.7K, rowsDroppedActual=156.0K, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.62, avgHasNextNanosActual=2.5K, avgNextNanosActual=12, filterRejectRateActual=0.70) [right] -│ ║ ├── ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, exprTrueCountActual=66.7K, exprEvalTimeNanosActual=78.1M, hasNextFalseCountActual=0) -│ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="4"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=10.9M, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="5"^^) (exprEvalCountActual=200.5K, exprTrueCountActual=200.5K, exprEvalTimeNanosActual=10.2M, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="6"^^) (exprEvalCountActual=178.3K, exprTrueCountActual=178.3K, exprEvalTimeNanosActual=8.9M, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=41.2M, nextCallCountActual=222.7K, nextTimeNanosActual=9.1M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=16.1K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=157, avgNextNanosActual=41, indexHitRateActual=0.85) -│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=756.9M, nextCallCountActual=1, nextTimeNanosActual=2.6K, firstRowTimeNanosActual=756.9M, openCountActual=1, lastRowTimeNanosActual=756.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=378.5M, avgNextNanosActual=2.6K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=756.9M, nextCallCountActual=1, nextTimeNanosActual=917, aggregateEvalCountActual=6.0K, firstRowTimeNanosActual=756.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=756.9M, maxGroupSizeActual=6.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=6.1K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6.0K, rowsDroppedActual=6.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=378.5M, avgNextNanosActual=917) + │ ╠══ Filter (resultSizeActual=6.0K, hasNextCallCountActual=6.0K, hasNextTrueCountActual=6.0K, hasNextTimeNanosActual=750.8M, nextCallCountActual=6.0K, nextTimeNanosActual=74.0K, sourceRowsScannedActual=66.7K, sourceRowsMatchedActual=6.0K, sourceRowsFilteredActual=60.6K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=98.1K, exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, openCountActual=1, exprTrueCountActual=6.0K, lastRowTimeNanosActual=756.8M, closeCountActual=1, exprEvalTimeNanosActual=297.4M, inputRowsActual=66.7K, rowsDroppedActual=60.6K, selectivityActual=0.09, expansionFactorActual=0.09, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=123.8K, avgNextNanosActual=12, filterRejectRateActual=0.91) + │ ║ ├── Not (exprEvalCountActual=66.7K, exprFalseCountActual=60.6K, exprTrueCountActual=6.0K, exprEvalTimeNanosActual=292.2M, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=66.7K, exprFalseCountActual=6.0K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=288.2M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=66.7K, hasNextTrueCountActual=60.6K, hasNextTimeNanosActual=90.6M, sourceRowsScannedActual=172.5K, sourceRowsMatchedActual=60.6K, sourceRowsFilteredActual=111.8K, plannedFilterEvidenceCount=20.7M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, openCountActual=66.7K, lastRowTimeNanosActual=1.3K, exprTrueCountActual=60.6K, closeCountActual=66.7K, exprEvalTimeNanosActual=25.5M, inputRowsActual=172.5K, rowsDroppedActual=172.5K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=1.4K, filterRejectRateActual=0.65) + │ ║ │ ╠══ Compare (<) (exprEvalCountActual=172.5K, exprFalseCountActual=111.8K, exprTrueCountActual=60.6K, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=172.5K, hasNextCallCountActual=178.5K, hasNextTrueCountActual=172.5K, hasNextTimeNanosActual=36.3M, nextCallCountActual=172.5K, nextTimeNanosActual=8.3M, sourceRowsScannedActual=178.5K, sourceRowsMatchedActual=172.5K, sourceRowsFilteredActual=6.0K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=66.7K, openCountActual=66.7K, lastRowTimeNanosActual=2.5K, closeCountActual=66.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=6.0K, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=203, avgNextNanosActual=48, indexHitRateActual=0.97) + │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.4K, resultSizeActual=66.7K, joinRightIteratorsCreatedActual=66.7K, joinRightBindingsConsumedActual=66.7K, joinType=Cartesian product, inputRowsActual=133.4K, rowsDroppedActual=66.7K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1113.5M, stddevActual=33.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=66.7K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.4K, resultSizeActual=66.7K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=66.7K, inputRowsActual=106.9K, rowsDroppedActual=40.2K, expansionFactorActual=0.62, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=66.7K, avgRightRowsPerLeftActual=1.66, joinOutputPerLeftActual=1.66) [left] + │ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.5M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=14.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=756.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=137, avgNextNanosActual=38, indexHitRateActual=1.00) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── Filter (resultSizeEstimate=67.4K, resultSizeActual=66.7K, hasNextCallCountActual=106.9K, hasNextTrueCountActual=66.7K, hasNextTimeNanosActual=285.7M, nextCallCountActual=66.7K, nextTimeNanosActual=946.4K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=66.7K, sourceRowsFilteredActual=156.0K, plannedFilterEvidenceCount=10.2M, plannedAccessRows=6.00, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=2.00, plannedWorkRows=67.4K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_b000c52_uri, _const_f5e5585a_uri, node], filterSelectivitySource=learned_filter, firstRowTimeNanosActual=1000, exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, openCountActual=40.2K, exprTrueCountActual=66.7K, lastRowTimeNanosActual=22.3K, closeCountActual=40.2K, exprEvalTimeNanosActual=103.2M, inputRowsActual=222.7K, rowsDroppedActual=156.0K, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.62, avgHasNextNanosActual=2.7K, avgNextNanosActual=14, filterRejectRateActual=0.70) [right] + │ ║ ║ ╠══ ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=156.0K, exprTrueCountActual=66.7K, exprEvalTimeNanosActual=88.6M, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="4"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=13.7M, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="5"^^) (exprEvalCountActual=200.5K, exprTrueCountActual=200.5K, exprEvalTimeNanosActual=11.2M, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="6"^^) (exprEvalCountActual=178.3K, exprTrueCountActual=178.3K, exprEvalTimeNanosActual=10.1M, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=42.6M, nextCallCountActual=222.7K, nextTimeNanosActual=10.5M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=19.2K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=162, avgNextNanosActual=47, indexHitRateActual=0.85) + │ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, resultSizeActual=66.7K, hasNextCallCountActual=133.4K, hasNextTrueCountActual=66.7K, hasNextTimeNanosActual=8.0M, nextCallCountActual=66.7K, nextTimeNanosActual=1.1M, plannedWorkRows=1.00, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, w], firstRowTimeNanosActual=125, openCountActual=66.7K, bindingsProvidedActual=66.7K, lastRowTimeNanosActual=4.3K, closeCountActual=66.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=66.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=60, avgNextNanosActual=17) [right] + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6603,119 +7041,109 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ ├── Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=0.26, filterSelectivitySource=learned_filter) -│ ║ │ ╠══ Compare (<) -│ ║ │ ║ Var (name=w2) (bindingState=bound) -│ ║ │ ║ Var (name=threshold) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ o: Var (name=w2) (bindingState=unbound) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=2712.5M) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ └── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=w2) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=222.8K) -│ ║ ║ Var (name=node) -│ ║ ║ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ ║ Var (name=w2) -│ ║ ║ ) -│ ║ ║ s: Var (name=node) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ ╚══ Filter (resultSizeEstimate=67.0K, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=3.00, plannedWorkRows=1.80, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=w) (bindingState=bound) -│ ║ │ ValueConstant (value="4"^^) -│ ║ │ ValueConstant (value="5"^^) -│ ║ │ ValueConstant (value="6"^^) -│ ║ └── StatementPattern (resultSizeEstimate=222.8K) -│ ║ s: Var (name=node) (bindingState=bound) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ o: Var (name=w) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=20.8M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter) + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=67.4K, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.4K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=67.4K, plannedFilterEvidenceCount=10.4M, plannedAccessRows=6.00, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=2.00, plannedWorkRows=67.4K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_b000c52_uri, _const_f5e5585a_uri, node], filterSelectivitySource=learned_filter) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=w) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="4"^^) + │ ║ ║ ║ ValueConstant (value="5"^^) + │ ║ ║ ║ ValueConstant (value="6"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ ║ o: Var (name=w) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="4"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, w]) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -VALUES ?threshold { 4 } -?node a . -?node ?w . -FILTER (?w IN (4, 5, 6)) -FILTER NOT EXISTS { -?node ?w2 . -FILTER (?w2 < ?threshold) -} + ?node a . + ?node ?w . + FILTER (?w IN (4, 5, 6)) + VALUES ?threshold { 4 } + FILTER NOT EXISTS { + ?node ?w2 . + FILTER (?w2 < ?threshold) + } } Theme: HIGHLY_CONNECTED z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 3289 ms +Initial explain execution time: 3599 ms -Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3273.4M, nextCallCountActual=40.2K, nextTimeNanosActual=5.9M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=147) +Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3582.6M, nextCallCountActual=40.2K, nextTimeNanosActual=6.0M, firstRowTimeNanosActual=3562.8M, openCountActual=1, lastRowTimeNanosActual=3592.8M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.0K, avgNextNanosActual=150) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "node" (hasNextFalseCountActual=0) ║ ProjectionElem "neighborCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3272.5M, nextCallCountActual=40.2K, nextTimeNanosActual=4.0M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=101) -├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3271.6M, nextCallCountActual=40.2K, nextTimeNanosActual=2.2M, firstRowTimeNanosActual=3256.0M, openCountActual=1, lastRowTimeNanosActual=3283.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=55) -│ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3270.4M, nextCallCountActual=40.2K, nextTimeNanosActual=562.5K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3256.0M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3283.6M, closeCountActual=1, exprEvalTimeNanosActual=9.9M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.3K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=833, hasNextFalseCountActual=0) -│ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3256.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.8M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3256.0M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3283.5M, maxGroupSizeActual=138.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80.9K, avgNextNanosActual=45) -│ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2603.6M, nextCallCountActual=2.9M, nextTimeNanosActual=33.6M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=45.2K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3247.5M, closeCountActual=1, exprEvalTimeNanosActual=489.0M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=886, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=270.8M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1885.7M, nextCallCountActual=2.9M, nextTimeNanosActual=34.1M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=26.7K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=642, avgNextNanosActual=12, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=163.6M, nextCallCountActual=534.5K, nextTimeNanosActual=9.7M, firstRowTimeNanosActual=24.5K, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0.73, stddevActual=0.85, confidenceScoreActual=0.52, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=306, avgNextNanosActual=18, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) -│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.7M, nextCallCountActual=40.2K, nextTimeNanosActual=2.8M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=17.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1643.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=119, avgNextNanosActual=72, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=39.9M, nextCallCountActual=267.2K, nextTimeNanosActual=14.9M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=53.0K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=130, avgNextNanosActual=56, indexHitRateActual=0.87) [right] -│ ║ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.3M, nextCallCountActual=267.2K, nextTimeNanosActual=16.5M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1643.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3243.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=62, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=913.9M, nextCallCountActual=2.9M, nextTimeNanosActual=307.9M, firstRowTimeNanosActual=958, openCountActual=534.5K, lastRowTimeNanosActual=8.0K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=110, avgNextNanosActual=105) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=574.4M, nextCallCountActual=2.9M, nextTimeNanosActual=134.4M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=958, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=7.7K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=69, avgNextNanosActual=46, indexHitRateActual=0.85) -│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) -│ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_00323f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3581.9M, nextCallCountActual=40.2K, nextTimeNanosActual=4.0M, firstRowTimeNanosActual=3562.8M, openCountActual=1, lastRowTimeNanosActual=3592.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.0K, avgNextNanosActual=100) + ├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3580.9M, nextCallCountActual=40.2K, nextTimeNanosActual=2.2M, firstRowTimeNanosActual=3562.8M, openCountActual=1, lastRowTimeNanosActual=3592.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89.0K, avgNextNanosActual=56) + │ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3579.6M, nextCallCountActual=40.2K, nextTimeNanosActual=546.8K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3562.8M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3592.8M, closeCountActual=1, exprEvalTimeNanosActual=11.5M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=88.9K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=4.9M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_8232e226babdcc344c88a5a61806b6a8e7f301234567, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) + │ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3563.2M, nextCallCountActual=40.2K, nextTimeNanosActual=2.4M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3562.8M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3592.7M, maxGroupSizeActual=138.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=88.5K, avgNextNanosActual=62) + │ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2764.0M, nextCallCountActual=2.9M, nextTimeNanosActual=42.8M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=53.0K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3552.5M, closeCountActual=1, exprEvalTimeNanosActual=537.3M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=941, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=261.9M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1995.1M, nextCallCountActual=2.9M, nextTimeNanosActual=40.7M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=30.4K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3547.1M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=679, avgNextNanosActual=14, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=177.7M, nextCallCountActual=534.5K, nextTimeNanosActual=10.2M, firstRowTimeNanosActual=27.3K, openCountActual=1, lastRowTimeNanosActual=3547.1M, closeCountActual=1, sampleCountActual=2, varianceActual=0.71, stddevActual=0.84, confidenceScoreActual=0.52, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=332, avgNextNanosActual=19, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=99.5K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) + │ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.1M, nextCallCountActual=40.2K, nextTimeNanosActual=2.8M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=22.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1743.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=127, avgNextNanosActual=71, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=40.2M, nextCallCountActual=267.2K, nextTimeNanosActual=17.6M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], sharedJoinVars=[node], firstRowTimeNanosActual=500, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=57.2K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=131, avgNextNanosActual=66, indexHitRateActual=0.87) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=28.3M, nextCallCountActual=267.2K, nextTimeNanosActual=16.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1743.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3547.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=106, avgNextNanosActual=63, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=1011.2M, nextCallCountActual=2.9M, nextTimeNanosActual=310.2M, firstRowTimeNanosActual=1.5K, openCountActual=534.5K, lastRowTimeNanosActual=9.2K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=122, avgNextNanosActual=106) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=660.6M, nextCallCountActual=2.9M, nextTimeNanosActual=134.3M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=1.4K, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=8.9K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=80, avgNextNanosActual=46, indexHitRateActual=0.85) + │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) + │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_8232e226babdcc344c88a5a61806b6a8e7f301234567) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (neighborCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_8232e226babdcc344c88a5a61806b6a8e7f301234567) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (neighborCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6724,67 +7152,67 @@ Projection ║ ProjectionElem "node" ║ ProjectionElem "neighborCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (node) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optWeight) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=98.8K) -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) -│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) -│ ║ ║ s: Var (name=neighbor) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ o: Var (name=node) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ o: Var (name=w) (bindingState=unbound) -│ ║ └── ExtensionElem (optWeight) -│ ║ Var (name=w) (bindingState=bound) -│ ║ GroupElem (_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234) -│ ║ Count -│ ║ Var (name=neighbor) (bindingState=bound) -│ ║ GroupElem (neighborCount) -│ ║ Count (Distinct) -│ ║ Var (name=neighbor) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_50323f2fe36952f541b08a42a7b8ce15e70d01234) -│ Count -│ Var (name=neighbor) (bindingState=unbound) -└── ExtensionElem (neighborCount) -Count (Distinct) -Var (name=neighbor) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_3332e226babdcc344c88a5a61806b6a8e7f3012, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (node) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=99.5K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], sharedJoinVars=[node]) [right] + │ ║ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_3332e226babdcc344c88a5a61806b6a8e7f3012) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (neighborCount) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_3332e226babdcc344c88a5a61806b6a8e7f3012) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (neighborCount) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { -{ -?node a . -?node ?neighbor . -} -UNION -{ -?neighbor ?node . -} -OPTIONAL { -?node ?w . -BIND(?w AS ?optWeight) -} -FILTER (?optWeight != 0) + { + ?node a . + ?node ?neighbor . + } + UNION + { + ?neighbor ?node . + } + OPTIONAL { + ?node ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) } GROUP BY ?node HAVING (COUNT(?neighbor) > 0) @@ -6792,60 +7220,60 @@ HAVING (COUNT(?neighbor) > 0) Theme: HIGHLY_CONNECTED z_queryIndex: 7 === Explanation Telemetry === -Initial explain execution time: 507 ms +Initial explain execution time: 541 ms Warmup execution 1/3 Warmup execution 2/3 Warmup execution 3/3 -Fastest execution time: 254 ms +Fastest execution time: 276 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=505.7M, openCountActual=1, lastRowTimeNanosActual=505.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=5.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=520.0M, nextCallCountActual=1, nextTimeNanosActual=2.3K, firstRowTimeNanosActual=520.0M, openCountActual=1, lastRowTimeNanosActual=520.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=260.0M, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=2.7K, firstRowTimeNanosActual=505.7M, openCountActual=1, lastRowTimeNanosActual=505.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=2.8K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=505.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, aggregateEvalCountActual=44.7K, firstRowTimeNanosActual=505.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=505.8M, maxGroupSizeActual=44.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=44.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=44.7K, rowsDroppedActual=44.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252.9M, avgNextNanosActual=1.0K) -│ ╠══ Difference (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=480.5M, nextCallCountActual=44.7K, nextTimeNanosActual=609.5K, firstRowTimeNanosActual=69.2M, openCountActual=1, lastRowTimeNanosActual=505.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.7K, avgNextNanosActual=14, leftRowsConsumedActual=44.7K, rightRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── Filter (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=403.5M, nextCallCountActual=44.7K, nextTimeNanosActual=644.0K, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=61.9K, exprEvalCountActual=44.7K, openCountActual=1, exprTrueCountActual=44.7K, lastRowTimeNanosActual=505.6M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=43.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=44.7K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.0K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ │ ╠══ Exists (exprEvalCountActual=44.7K, exprTrueCountActual=44.7K, exprEvalTimeNanosActual=40.9M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=17.2M, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, plannedIndexName=spoc, indexLookupCountActual=44.7K, openCountActual=44.7K, lastRowTimeNanosActual=459, closeCountActual=44.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=385, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K, resultSizeActual=44.7K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=44.7K, inputRowsActual=85.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=44.7K, avgRightRowsPerLeftActual=1.11, joinOutputPerLeftActual=1.11) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.3M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ │ Var (name=node) -│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ │ Var (name=neighbor) -│ ║ │ │ , firstRowTimeNanosActual=8.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=505.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=108, avgNextNanosActual=41, indexHitRateActual=1.00) -│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=44.9K, resultSizeActual=44.7K, hasNextCallCountActual=85.0K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=237.3M, nextCallCountActual=44.7K, nextTimeNanosActual=631.2K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=177.9K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.5K, exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, openCountActual=40.2K, exprTrueCountActual=44.7K, lastRowTimeNanosActual=5.9K, closeCountActual=40.2K, exprEvalTimeNanosActual=60.2M, inputRowsActual=222.7K, rowsDroppedActual=177.9K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=14, filterRejectRateActual=0.80) [right] -│ ║ │ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, exprTrueCountActual=44.7K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=46.7M, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.5K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=18.9M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.8K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=200.5K, exprFalseCountActual=177.9K, exprTrueCountActual=22.5K, exprEvalTimeNanosActual=15.4M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="9"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=250, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=36.9M, nextCallCountActual=222.7K, nextTimeNanosActual=7.9M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=791, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=3.2K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=140, avgNextNanosActual=36, indexHitRateActual=0.85) -│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=69.1M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=69.1M, closeCountActual=1, exprEvalTimeNanosActual=25.4M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=69.2M, filterRejectRateActual=1.00) -│ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=9.8M, hasNextFalseCountActual=0) -│ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=16.7M, nextCallCountActual=267.2K, nextTimeNanosActual=12.3M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=69.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=63, avgNextNanosActual=46, indexHitRateActual=1.00) -│ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=520.0M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=520.0M, openCountActual=1, lastRowTimeNanosActual=520.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=260.0M, avgNextNanosActual=1.3K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=520.0M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=44.7K, firstRowTimeNanosActual=520.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=520.0M, maxGroupSizeActual=44.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=44.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=44.7K, rowsDroppedActual=44.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=260.0M, avgNextNanosActual=583) + │ ╠══ Difference (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=488.9M, nextCallCountActual=44.7K, nextTimeNanosActual=580.1K, firstRowTimeNanosActual=76.1M, openCountActual=1, lastRowTimeNanosActual=520.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.9K, avgNextNanosActual=13, leftRowsConsumedActual=44.7K, rightRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── Filter (resultSizeActual=44.7K, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=406.7M, nextCallCountActual=44.7K, nextTimeNanosActual=638.2K, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=72.9K, exprEvalCountActual=44.7K, openCountActual=1, exprTrueCountActual=44.7K, lastRowTimeNanosActual=519.9M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=44.7M, metricOrigin.varsAddedActual=derived, inputRowsActual=44.7K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.1K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ │ ╠══ Exists (exprEvalCountActual=44.7K, exprTrueCountActual=44.7K, exprEvalTimeNanosActual=41.7M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=44.7K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=17.8M, sourceRowsScannedActual=44.7K, sourceRowsMatchedActual=44.7K, plannedIndexName=spoc, indexLookupCountActual=44.7K, openCountActual=44.7K, lastRowTimeNanosActual=500, closeCountActual=44.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=398, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=45.2K, resultSizeActual=44.7K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=44.7K, inputRowsActual=85.0K, rowsDroppedActual=40.2K, expansionFactorActual=0.53, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=44.7K, avgRightRowsPerLeftActual=1.11, joinOutputPerLeftActual=1.11) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.2M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=neighbor) + │ ║ │ │ source=unknown, firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=519.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=38, indexHitRateActual=1.00) + │ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Filter (resultSizeEstimate=45.2K, resultSizeActual=44.7K, hasNextCallCountActual=85.0K, hasNextTrueCountActual=44.7K, hasNextTimeNanosActual=240.5M, nextCallCountActual=44.7K, nextTimeNanosActual=656.1K, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=44.7K, sourceRowsFilteredActual=177.9K, plannedFilterEvidenceCount=12.4M, plannedAccessRows=6.00, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=2.00, plannedWorkRows=45.2K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[node], filterSelectivitySource=learned_filter, sharedJoinVars=[node], firstRowTimeNanosActual=2.6K, exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, openCountActual=40.2K, exprTrueCountActual=44.7K, lastRowTimeNanosActual=6.6K, closeCountActual=40.2K, exprEvalTimeNanosActual=62.1M, inputRowsActual=222.7K, rowsDroppedActual=177.9K, selectivityActual=0.20, expansionFactorActual=0.20, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.53, avgHasNextNanosActual=2.8K, avgNextNanosActual=15, filterRejectRateActual=0.80) [right] + │ ║ │ ╠══ Or (exprEvalCountActual=222.7K, exprFalseCountActual=177.9K, exprTrueCountActual=44.7K, shortCircuitCountActual=22.2K, exprEvalTimeNanosActual=48.0M, hasNextFalseCountActual=0) + │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=222.7K, exprFalseCountActual=200.5K, exprTrueCountActual=22.2K, exprEvalTimeNanosActual=20.0M, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.6K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Compare (=) (exprEvalCountActual=200.5K, exprFalseCountActual=177.9K, exprTrueCountActual=22.5K, exprEvalTimeNanosActual=15.7M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="9"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=37.6M, nextCallCountActual=222.7K, nextTimeNanosActual=8.0M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=3.6K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=143, avgNextNanosActual=36, indexHitRateActual=0.85) + │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=76.0M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedFilterEvidenceCount=41.6M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, openCountActual=1, lastRowTimeNanosActual=76.0M, closeCountActual=1, exprEvalTimeNanosActual=28.8M, inputRowsActual=267.2K, rowsDroppedActual=267.2K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=76.0M, filterRejectRateActual=1.00) + │ ║ ╠══ Compare (=) (exprEvalCountActual=267.2K, exprFalseCountActual=267.2K, exprEvalTimeNanosActual=12.7M, hasNextFalseCountActual=0) + │ ║ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=18.7M, nextCallCountActual=267.2K, nextTimeNanosActual=12.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=75.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=48, indexHitRateActual=1.00) + │ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6853,118 +7281,118 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) -│ ║ │ ╠══ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ ║ s: Var (name=node) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=44.9K) -│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ │ Var (name=node) -│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ │ Var (name=neighbor) -│ ║ │ │ ) -│ ║ │ │ s: Var (name=node) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ │ └── Filter (resultSizeEstimate=44.9K, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=3.00, plannedWorkRows=1.21, plannedIndexName=spoc, plannedBoundVars=[node], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=w) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="8"^^) -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=w) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="9"^^) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ o: Var (name=w) (bindingState=unbound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ╠══ Compare (=) -│ ║ ║ Var (name=neighbor) (bindingState=bound) -│ ║ ║ Var (name=node) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) -│ ║ s: Var (name=neighbor) (bindingState=unbound) -│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ o: Var (name=node) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ ║ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ o: Var (name=neighbor) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=45.2K) + │ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ │ │ Var (name=node) + │ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ │ Var (name=neighbor) + │ ║ │ │ source=unknown) + │ ║ │ │ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=45.2K, plannedFilterEvidenceCount=12.6M, plannedAccessRows=6.00, plannedFilterPassRatio=0.20, plannedIndexPrefixLength=2.00, plannedWorkRows=45.2K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[node], filterSelectivitySource=learned_filter, sharedJoinVars=[node]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=w) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=w) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="9"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=41.9M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=neighbor) (bindingState=bound) + │ ║ ║ Var (name=node) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ o: Var (name=node) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -?node a . -?node ?w . -FILTER ((?w = 8) || (?w = 9)) -FILTER EXISTS { -?node ?neighbor . -} -MINUS { -?neighbor ?node . -FILTER (?neighbor = ?node) -} + ?node a . + ?node ?w . + FILTER ((?w = 8) || (?w = 9)) + FILTER EXISTS { + ?node ?neighbor . + } + MINUS { + ?neighbor ?node . + FILTER (?neighbor = ?node) + } } Theme: HIGHLY_CONNECTED z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 2325 ms +Initial explain execution time: 2486 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=2320.2M, openCountActual=1, lastRowTimeNanosActual=2320.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=2.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2482.2M, nextCallCountActual=1, nextTimeNanosActual=5.1K, firstRowTimeNanosActual=2482.2M, openCountActual=1, lastRowTimeNanosActual=2482.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1241.1M, avgNextNanosActual=5.2K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=2320.2M, openCountActual=1, lastRowTimeNanosActual=2320.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=1.3K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2320.2M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=432, firstRowTimeNanosActual=2320.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2320.2M, maxGroupSizeActual=432, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=432, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=432, rowsDroppedActual=431, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1160.1M, avgNextNanosActual=625) -│ ╠══ Filter (resultSizeActual=432, hasNextCallCountActual=434, hasNextTrueCountActual=433, hasNextTimeNanosActual=2319.8M, nextCallCountActual=432, nextTimeNanosActual=5.7K, sourceRowsScannedActual=1.6K, sourceRowsMatchedActual=432, sourceRowsFilteredActual=1.1K, plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=56.5K, exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=432, lastRowTimeNanosActual=2320.2M, closeCountActual=1, exprEvalTimeNanosActual=874.5K, inputRowsActual=1.6K, rowsDroppedActual=1.1K, selectivityActual=0.27, expansionFactorActual=0.27, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3M, avgNextNanosActual=13, filterRejectRateActual=0.73) -│ ║ ├── ListMemberOperator (exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, exprTrueCountActual=432, exprEvalTimeNanosActual=750.2K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="7"^^) (exprEvalCountActual=1.6K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=114.6K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1.4K, exprTrueCountActual=1.4K, exprEvalTimeNanosActual=90.3K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="9"^^) (exprEvalCountActual=1.3K, exprTrueCountActual=1.3K, exprEvalTimeNanosActual=82.9K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=2318.8M, nextCallCountActual=1.6K, nextTimeNanosActual=30.1K, joinRightIteratorsCreatedActual=294, joinLeftBindingsConsumedActual=294, joinRightBindingsConsumedActual=1.6K, firstRowTimeNanosActual=43.7K, leftRowsWithMatchActual=294, openCountActual=1, lastRowTimeNanosActual=2320.1M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=1.9K, rowsDroppedActual=294, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4M, avgNextNanosActual=19, leftRowsProbedActual=294, rightRowsScannedActual=1.6K, avgRightRowsPerLeftActual=5.54, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.54, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Filter (resultSizeActual=294, hasNextCallCountActual=295, hasNextTrueCountActual=294, hasNextTimeNanosActual=2318.1M, nextCallCountActual=294, nextTimeNanosActual=15.0K, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=42.6K, exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, openCountActual=1, exprTrueCountActual=294, lastRowTimeNanosActual=2320.1M, closeCountActual=1, exprEvalTimeNanosActual=1613.0M, inputRowsActual=1.7M, rowsDroppedActual=1.7M, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.9M, avgNextNanosActual=51, filterRejectRateActual=1.00) [left] -│ ║ ║ ├── Exists (exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, exprTrueCountActual=294, exprEvalTimeNanosActual=1487.4M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1.7M, hasNextTrueCountActual=294, hasNextTimeNanosActual=735.1M, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedIndexName=spoc, indexLookupCountActual=1.7M, openCountActual=1.7M, lastRowTimeNanosActual=375, closeCountActual=1.7M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.7M, nextPerHasNextRatioActual=0, avgHasNextNanosActual=421, indexHitRateActual=0.00) -│ ║ ║ │ s: Var (name=end) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K, resultSizeActual=1.7M, joinRightIteratorsCreatedActual=267.2K, joinRightBindingsConsumedActual=1.7M, inputRowsActual=2.0M, rowsDroppedActual=267.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=3.67, stddevActual=1.92, confidenceScoreActual=0.41, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.7M) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] -│ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=4.8M, nextCallCountActual=40.2K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2320.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=121, avgNextNanosActual=53, indexHitRateActual=1.00) [left] -│ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=42.3M, nextCallCountActual=267.2K, nextTimeNanosActual=12.9M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P], firstRowTimeNanosActual=666, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=78.4K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=138, avgNextNanosActual=49, indexHitRateActual=0.87) [right] -│ ║ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=mid) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=1.7M, hasNextCallCountActual=2.0M, hasNextTrueCountActual=1.7M, hasNextTimeNanosActual=269.0M, nextCallCountActual=1.7M, nextTimeNanosActual=75.7M, sourceRowsScannedActual=2.0M, sourceRowsMatchedActual=1.7M, sourceRowsFilteredActual=267.2K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] -│ ║ ║ StatementPattern (resultSizeEstimate=267.3K) -│ ║ ║ Var (name=end) -│ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ Var (name=node) -│ ║ ║ , firstRowTimeNanosActual=666, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=14.3K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=134, avgNextNanosActual=43, indexHitRateActual=0.87) -│ ║ ║ s: Var (name=mid) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=end) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.6K, hasNextCallCountActual=4.5K, hasNextTrueCountActual=4.2K, hasNextTimeNanosActual=291.7K, nextCallCountActual=1.6K, nextTimeNanosActual=87.1K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=294, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=294, openCountActual=294, lastRowTimeNanosActual=10.6K, closeCountActual=294, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=294, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=64, avgNextNanosActual=53, indexHitRateActual=0.85) [right] -│ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optWeight) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2482.2M, nextCallCountActual=1, nextTimeNanosActual=2.6K, firstRowTimeNanosActual=2482.2M, openCountActual=1, lastRowTimeNanosActual=2482.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1241.1M, avgNextNanosActual=2.6K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=2482.2M, nextCallCountActual=1, nextTimeNanosActual=833, aggregateEvalCountActual=432, firstRowTimeNanosActual=2482.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=2482.2M, maxGroupSizeActual=432, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=432, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=432, rowsDroppedActual=431, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=1241.1M, avgNextNanosActual=833) + │ ╠══ Filter (resultSizeActual=432, hasNextCallCountActual=434, hasNextTrueCountActual=433, hasNextTimeNanosActual=2481.5M, nextCallCountActual=432, nextTimeNanosActual=7.1K, sourceRowsScannedActual=1.6K, sourceRowsMatchedActual=432, sourceRowsFilteredActual=1.1K, plannedFilterEvidenceCount=16.2K, plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=43.9K, exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, openCountActual=1, exprTrueCountActual=432, lastRowTimeNanosActual=2482.2M, closeCountActual=1, exprEvalTimeNanosActual=1.1M, inputRowsActual=1.6K, rowsDroppedActual=1.1K, selectivityActual=0.27, expansionFactorActual=0.27, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.7M, avgNextNanosActual=17, filterRejectRateActual=0.73) + │ ║ ├── ListMemberOperator (exprEvalCountActual=1.6K, exprFalseCountActual=1.1K, exprTrueCountActual=432, exprEvalTimeNanosActual=949.8K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="7"^^) (exprEvalCountActual=1.6K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=177.2K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="8"^^) (exprEvalCountActual=1.4K, exprTrueCountActual=1.4K, exprEvalTimeNanosActual=94.8K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="9"^^) (exprEvalCountActual=1.3K, exprTrueCountActual=1.3K, exprEvalTimeNanosActual=84.2K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=2480.3M, nextCallCountActual=1.6K, nextTimeNanosActual=42.0K, joinRightIteratorsCreatedActual=294, joinLeftBindingsConsumedActual=294, joinRightBindingsConsumedActual=1.6K, firstRowTimeNanosActual=33.8K, leftRowsWithMatchActual=294, openCountActual=1, lastRowTimeNanosActual=2482.1M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=1.9K, rowsDroppedActual=294, expansionFactorActual=0.85, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5M, avgNextNanosActual=26, leftRowsProbedActual=294, rightRowsScannedActual=1.6K, avgRightRowsPerLeftActual=5.54, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.54, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Filter (resultSizeActual=294, hasNextCallCountActual=295, hasNextTrueCountActual=294, hasNextTimeNanosActual=2479.4M, nextCallCountActual=294, nextTimeNanosActual=26.7K, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=32.4K, exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, openCountActual=1, exprTrueCountActual=294, lastRowTimeNanosActual=2482.1M, closeCountActual=1, exprEvalTimeNanosActual=1745.5M, inputRowsActual=1.7M, rowsDroppedActual=1.7M, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.4M, avgNextNanosActual=91, filterRejectRateActual=1.00) [left] + │ ║ ║ ├── Exists (exprEvalCountActual=1.7M, exprFalseCountActual=1.7M, exprTrueCountActual=294, exprEvalTimeNanosActual=1605.3M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1.7M, hasNextTrueCountActual=294, hasNextTimeNanosActual=849.8M, sourceRowsScannedActual=1.7M, sourceRowsMatchedActual=294, sourceRowsFilteredActual=1.7M, plannedIndexName=spoc, indexLookupCountActual=1.7M, openCountActual=1.7M, lastRowTimeNanosActual=750, closeCountActual=1.7M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.7M, nextPerHasNextRatioActual=0, avgHasNextNanosActual=486, indexHitRateActual=0.00) + │ ║ ║ │ s: Var (name=end) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.9K, resultSizeActual=1.7M, joinRightIteratorsCreatedActual=267.2K, joinRightBindingsConsumedActual=1.7M, inputRowsActual=2.0M, rowsDroppedActual=267.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=3.71, stddevActual=1.93, confidenceScoreActual=0.41, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.7M) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=99.5K, resultSizeActual=267.2K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=267.2K, inputRowsActual=307.5K, rowsDroppedActual=40.2K, expansionFactorActual=0.87, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=267.2K, avgRightRowsPerLeftActual=6.64, joinOutputPerLeftActual=6.64) [left] + │ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.1M, nextCallCountActual=40.2K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2482.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=129, avgNextNanosActual=54, indexHitRateActual=1.00) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=307.5K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=43.7M, nextCallCountActual=267.2K, nextTimeNanosActual=12.7M, sourceRowsScannedActual=307.5K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=40.2K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], sharedJoinVars=[node], firstRowTimeNanosActual=625, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=91.3K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=142, avgNextNanosActual=48, indexHitRateActual=0.87) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=1.7M, hasNextCallCountActual=2.0M, hasNextTrueCountActual=1.7M, hasNextTimeNanosActual=300.9M, nextCallCountActual=1.7M, nextTimeNanosActual=75.3M, sourceRowsScannedActual=2.0M, sourceRowsMatchedActual=1.7M, sourceRowsFilteredActual=267.2K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[mid, node], unlockedFilters=Exists [right] + │ ║ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ Var (name=end) + │ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ Var (name=node) + │ ║ ║ source=unknown, sharedJoinVars=[mid], firstRowTimeNanosActual=875, indexLookupCountActual=267.2K, openCountActual=267.2K, lastRowTimeNanosActual=17.0K, closeCountActual=267.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=267.2K, nextPerHasNextRatioActual=0.87, avgHasNextNanosActual=149, avgNextNanosActual=43, indexHitRateActual=0.87) + │ ║ ║ s: Var (name=mid) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=end) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=1.6K, hasNextCallCountActual=4.5K, hasNextTrueCountActual=4.2K, hasNextTimeNanosActual=299.2K, nextCallCountActual=1.6K, nextTimeNanosActual=90.3K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=294, plannedIndexName=spoc, firstRowTimeNanosActual=1000, indexLookupCountActual=294, openCountActual=294, lastRowTimeNanosActual=12.7K, closeCountActual=294, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=294, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=65, avgNextNanosActual=55, indexHitRateActual=0.85) [right] + │ ║ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optWeight) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -6972,114 +7400,114 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optWeight) (bindingState=bound) -│ ║ │ ValueConstant (value="7"^^) -│ ║ │ ValueConstant (value="8"^^) -│ ║ │ ValueConstant (value="9"^^) -│ ║ └── LeftJoin -│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] -│ ║ ║ ├── Exists -│ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) -│ ║ ║ │ s: Var (name=end) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ │ o: Var (name=node) (bindingState=bound) -│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.1K) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.8K) [left] -│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) -│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[node], plannedLookupComponents=[S, P]) [right] -│ ║ ║ ║ s: Var (name=node) (bindingState=bound) -│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[mid, node], plannedLookupComponents=[S, P], unlockedFilters=Exists [right] -│ ║ ║ StatementPattern (resultSizeEstimate=267.3K) -│ ║ ║ Var (name=end) -│ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ Var (name=node) -│ ║ ║ ) -│ ║ ║ s: Var (name=mid) (bindingState=bound) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ o: Var (name=end) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] -│ ║ s: Var (name=node) (bindingState=bound) -│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ o: Var (name=optWeight) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterEvidenceCount=17.9K, plannedFilterPassRatio=0.27, filterSelectivitySource=learned_filter) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="7"^^) + │ ║ │ ValueConstant (value="8"^^) + │ ║ │ ValueConstant (value="9"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] + │ ║ ║ ├── Exists + │ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=end) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=node) (bindingState=bound) + │ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=96.9K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=99.5K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[node], sharedJoinVars=[node]) [right] + │ ║ ║ ║ s: Var (name=node) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ ║ o: Var (name=mid) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[mid, node], unlockedFilters=Exists [right] + │ ║ ║ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ Var (name=end) + │ ║ ║ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ Var (name=node) + │ ║ ║ source=unknown, sharedJoinVars=[mid]) + │ ║ ║ s: Var (name=mid) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=end) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] + │ ║ s: Var (name=node) (bindingState=bound) + │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ o: Var (name=optWeight) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -?node a . -?node ?mid . -?mid ?end . -FILTER EXISTS { -?end ?node . -} -OPTIONAL { -?node ?optWeight . -} -FILTER (?optWeight IN (7, 8, 9)) + ?node a . + ?node ?mid . + ?mid ?end . + FILTER EXISTS { + ?end ?node . + } + OPTIONAL { + ?node ?optWeight . + } + FILTER (?optWeight IN (7, 8, 9)) } Theme: HIGHLY_CONNECTED z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 3282 ms +Initial explain execution time: 3450 ms -Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3270.3M, nextCallCountActual=40.2K, nextTimeNanosActual=5.4M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=135) +Projection (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3438.4M, nextCallCountActual=40.2K, nextTimeNanosActual=5.5M, firstRowTimeNanosActual=3419.5M, openCountActual=1, lastRowTimeNanosActual=3447.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85.4K, avgNextNanosActual=138) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "node" (hasNextFalseCountActual=0) ║ ProjectionElem "degree" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3269.5M, nextCallCountActual=40.2K, nextTimeNanosActual=3.6M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=90) -├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3268.6M, nextCallCountActual=40.2K, nextTimeNanosActual=2.0M, firstRowTimeNanosActual=3252.0M, openCountActual=1, lastRowTimeNanosActual=3279.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=51) -│ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3267.3M, nextCallCountActual=40.2K, nextTimeNanosActual=566.1K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3252.0M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3279.6M, closeCountActual=1, exprEvalTimeNanosActual=11.0M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81.2K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=6.2M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) -│ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3252.4M, nextCallCountActual=40.2K, nextTimeNanosActual=1.6M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3252.0M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3279.6M, maxGroupSizeActual=134.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80.8K, avgNextNanosActual=41) -│ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2579.0M, nextCallCountActual=2.9M, nextTimeNanosActual=32.8M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=40.7K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3243.6M, closeCountActual=1, exprEvalTimeNanosActual=481.3M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=878, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=269.7M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1865.7M, nextCallCountActual=2.9M, nextTimeNanosActual=34.9M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=23.4K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=635, avgNextNanosActual=12, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=114.1M, nextCallCountActual=534.5K, nextTimeNanosActual=10.7M, firstRowTimeNanosActual=17.1K, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=213, avgNextNanosActual=20, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] -│ ║ ║ ├── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=26.9M, nextCallCountActual=267.2K, nextTimeNanosActual=15.7M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=20.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1519.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=59, indexHitRateActual=1.00) -│ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.4M, nextCallCountActual=267.2K, nextTimeNanosActual=17.4M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1519.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3239.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=65, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=942.9M, nextCallCountActual=2.9M, nextTimeNanosActual=310.0M, firstRowTimeNanosActual=625, openCountActual=534.5K, lastRowTimeNanosActual=5.9K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=114, avgNextNanosActual=106) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=596.8M, nextCallCountActual=2.9M, nextTimeNanosActual=139.4M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=5.6K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=72, avgNextNanosActual=47, indexHitRateActual=0.85) -│ ║ │ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) -│ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (degree) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_34323f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (degree) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3437.6M, nextCallCountActual=40.2K, nextTimeNanosActual=3.5M, firstRowTimeNanosActual=3419.5M, openCountActual=1, lastRowTimeNanosActual=3447.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85.4K, avgNextNanosActual=88) + ├── Extension (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3436.7M, nextCallCountActual=40.2K, nextTimeNanosActual=1.9M, firstRowTimeNanosActual=3419.5M, openCountActual=1, lastRowTimeNanosActual=3447.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85.4K, avgNextNanosActual=49) + │ ╠══ Filter (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3435.4M, nextCallCountActual=40.2K, nextTimeNanosActual=523.6K, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=3419.5M, exprEvalCountActual=40.2K, openCountActual=1, exprTrueCountActual=40.2K, lastRowTimeNanosActual=3447.7M, closeCountActual=1, exprEvalTimeNanosActual=11.2M, inputRowsActual=40.2K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85.3K, avgNextNanosActual=13, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=40.2K, exprTrueCountActual=40.2K, exprEvalTimeNanosActual=4.8M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_1732e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) + │ ║ └── Group (node) (resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=3420.0M, nextCallCountActual=40.2K, nextTimeNanosActual=2.0M, aggregateEvalCountActual=5.8M, firstRowTimeNanosActual=3419.5M, groupsCreatedActual=40.2K, openCountActual=1, lastRowTimeNanosActual=3447.6M, maxGroupSizeActual=134.3K, closeCountActual=1, varsAddedActual=2, varsDroppedActual=5, avgGroupSizeActual=73, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.9M, rowsDroppedActual=2.8M, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85.0K, avgNextNanosActual=51) + │ ║ Filter (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=2683.2M, nextCallCountActual=2.9M, nextTimeNanosActual=40.1M, sourceRowsScannedActual=2.9M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=40.9K, exprEvalCountActual=2.9M, openCountActual=1, exprTrueCountActual=2.9M, lastRowTimeNanosActual=3409.3M, closeCountActual=1, exprEvalTimeNanosActual=526.6M, inputRowsActual=2.9M, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=913, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=2.9M, exprTrueCountActual=2.9M, exprEvalTimeNanosActual=253.5M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optWeight) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.9M, hasNextCallCountActual=2.9M, hasNextTrueCountActual=2.9M, hasNextTimeNanosActual=1929.3M, nextCallCountActual=2.9M, nextTimeNanosActual=38.7M, joinRightIteratorsCreatedActual=534.5K, joinLeftBindingsConsumedActual=534.5K, joinRightBindingsConsumedActual=2.9M, firstRowTimeNanosActual=24.2K, leftRowsWithMatchActual=534.5K, openCountActual=1, lastRowTimeNanosActual=3404.6M, closeCountActual=1, maxRightRowsPerLeftActual=10, inputRowsActual=3.4M, rowsDroppedActual=534.5K, expansionFactorActual=0.85, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=657, avgNextNanosActual=13, leftRowsProbedActual=534.5K, rightRowsScannedActual=2.9M, avgRightRowsPerLeftActual=5.50, joinMatchRateActual=1.00, joinOutputPerLeftActual=5.50, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=534.5K, hasNextCallCountActual=534.5K, hasNextTrueCountActual=534.5K, hasNextTimeNanosActual=119.4M, nextCallCountActual=534.5K, nextTimeNanosActual=11.0M, firstRowTimeNanosActual=14.4K, openCountActual=1, lastRowTimeNanosActual=3404.6M, closeCountActual=1, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=223, avgNextNanosActual=21, leftRowsConsumedActual=267.2K, rightRowsConsumedActual=267.2K, leftRowsOutputContributionActual=267.2K, rightRowsOutputContributionActual=267.2K) [left] + │ ║ ║ ├── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=31.1M, nextCallCountActual=267.2K, nextTimeNanosActual=17.0M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=15.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1632.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=64, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: psoc] (new scope) (resultSizeEstimate=267.3K, resultSizeActual=267.2K, hasNextCallCountActual=267.2K, hasNextTrueCountActual=267.2K, hasNextTimeNanosActual=27.9M, nextCallCountActual=267.2K, nextTimeNanosActual=17.4M, sourceRowsScannedActual=267.2K, sourceRowsMatchedActual=267.2K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1632.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3404.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=65, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=1003.5M, nextCallCountActual=2.9M, nextTimeNanosActual=315.6M, firstRowTimeNanosActual=625, openCountActual=534.5K, lastRowTimeNanosActual=6.0K, closeCountActual=534.5K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=121, avgNextNanosActual=107) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=2.9M, hasNextCallCountActual=8.2M, hasNextTrueCountActual=7.7M, hasNextTimeNanosActual=648.5M, nextCallCountActual=2.9M, nextTimeNanosActual=147.3M, sourceRowsScannedActual=3.4M, sourceRowsMatchedActual=2.9M, sourceRowsFilteredActual=534.5K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=534.5K, openCountActual=534.5K, lastRowTimeNanosActual=5.8K, closeCountActual=534.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=534.5K, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=78, avgNextNanosActual=50, indexHitRateActual=0.85) + │ ║ │ s: Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optWeight) (hasNextFalseCountActual=0) + │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_1732e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (degree) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=neighbor) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_1732e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (degree) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=neighbor) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7088,55 +7516,55 @@ Projection ║ ProjectionElem "node" ║ ProjectionElem "degree" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="1"^^) -│ ║ └── Group (node) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optWeight) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) -│ ║ ║ │ s: Var (name=node) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) -│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) -│ ║ ║ s: Var (name=neighbor) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ o: Var (name=node) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ s: Var (name=neighbor) (bindingState=bound) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ o: Var (name=w) (bindingState=unbound) -│ ║ └── ExtensionElem (optWeight) -│ ║ Var (name=w) (bindingState=bound) -│ ║ GroupElem (_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456) -│ ║ Count -│ ║ Var (name=neighbor) (bindingState=bound) -│ ║ GroupElem (degree) -│ ║ Count (Distinct) -│ ║ Var (name=neighbor) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_74323f2fe36952f541b08a42a7b8ce15e70d0123456) -│ Count -│ Var (name=neighbor) (bindingState=unbound) -└── ExtensionElem (degree) -Count (Distinct) -Var (name=neighbor) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5732e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (node) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optWeight) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ │ s: Var (name=node) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=neighbor) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ s: Var (name=neighbor) (bindingState=bound) + │ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ o: Var (name=w) (bindingState=unbound) + │ ║ └── ExtensionElem (optWeight) + │ ║ Var (name=w) (bindingState=bound) + │ ║ GroupElem (_anon_having_5732e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ Count + │ ║ Var (name=neighbor) (bindingState=bound) + │ ║ GroupElem (degree) + │ ║ Count (Distinct) + │ ║ Var (name=neighbor) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5732e226babdcc344c88a5a61806b6a8e7f301234) + │ Count + │ Var (name=neighbor) (bindingState=unbound) + └── ExtensionElem (degree) + Count (Distinct) + Var (name=neighbor) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?degree) WHERE { -?node (|^) ?neighbor . -OPTIONAL { -?neighbor ?w . -BIND(?w AS ?optWeight) -} -FILTER (?optWeight != 0) + ?node (|^) ?neighbor . + OPTIONAL { + ?neighbor ?w . + BIND(?w AS ?optWeight) + } + FILTER (?optWeight != 0) } GROUP BY ?node HAVING (COUNT(?neighbor) > 1) @@ -7144,81 +7572,66 @@ HAVING (COUNT(?neighbor) > 1) Theme: HIGHLY_CONNECTED z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 1159 ms +Initial explain execution time: 1220 ms Warmup execution 1/1 -Fastest execution time: 537 ms +Fastest execution time: 562 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=5.0K, firstRowTimeNanosActual=1120.7M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=5.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1179.5M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=1179.6M, openCountActual=1, lastRowTimeNanosActual=1179.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=589.8M, avgNextNanosActual=2.6K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=1120.7M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=3.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1120.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, aggregateEvalCountActual=95, firstRowTimeNanosActual=1120.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1120.7M, maxGroupSizeActual=95, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=95, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=95, rowsDroppedActual=94, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=560.4M, avgNextNanosActual=1.1K) -│ ╠══ Difference (resultSizeActual=95, hasNextCallCountActual=97, hasNextTrueCountActual=96, hasNextTimeNanosActual=1120.5M, nextCallCountActual=95, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=32.0M, openCountActual=1, lastRowTimeNanosActual=1120.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=11.6M, avgNextNanosActual=18, leftRowsConsumedActual=95, rightRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── Filter (resultSizeActual=95, hasNextCallCountActual=96, hasNextTrueCountActual=95, hasNextTimeNanosActual=1105.7M, nextCallCountActual=95, nextTimeNanosActual=1.7K, sourceRowsScannedActual=89.1K, sourceRowsMatchedActual=95, sourceRowsFilteredActual=89.0K, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=17.3M, exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, openCountActual=1, exprTrueCountActual=95, lastRowTimeNanosActual=1120.6M, closeCountActual=1, exprEvalTimeNanosActual=654.8M, inputRowsActual=89.1K, rowsDroppedActual=89.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=11.5M, avgNextNanosActual=18, filterRejectRateActual=1.00) -│ ║ │ ╠══ Not (exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, exprTrueCountActual=95, exprEvalTimeNanosActual=649.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Exists (exprEvalCountActual=89.1K, exprFalseCountActual=95, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=643.3M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.4K, resultSizeActual=0, joinRightIteratorsCreatedActual=115.3K, joinLeftBindingsConsumedActual=115.3K, joinRightBindingsConsumedActual=89.0K, inputRowsActual=204.3K, rowsDroppedActual=204.3K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=115.3K, rightRowsScannedActual=89.0K, avgRightRowsPerLeftActual=0.77, joinOutputPerLeftActual=0) -│ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=115.3K, hasNextCallCountActual=115.4K, hasNextTrueCountActual=115.3K, hasNextTimeNanosActual=39.0M, nextCallCountActual=115.3K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=115.4K, sourceRowsMatchedActual=115.3K, sourceRowsFilteredActual=95, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=834, indexLookupCountActual=89.1K, openCountActual=89.1K, lastRowTimeNanosActual=2.6K, closeCountActual=89.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=95, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=338, avgNextNanosActual=52, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── Filter (resultSizeActual=89.0K, hasNextCallCountActual=115.3K, hasNextTrueCountActual=89.0K, hasNextTimeNanosActual=247.6M, nextCallCountActual=89.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=511.1K, sourceRowsMatchedActual=89.0K, sourceRowsFilteredActual=422.1K, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.4K, exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, openCountActual=115.3K, exprTrueCountActual=89.0K, lastRowTimeNanosActual=1.8K, closeCountActual=115.3K, exprEvalTimeNanosActual=69.6M, inputRowsActual=511.1K, rowsDroppedActual=422.1K, selectivityActual=0.17, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.77, avgHasNextNanosActual=2.1K, avgNextNanosActual=17, filterRejectRateActual=0.83) [right] -│ ║ │ ║ ╠══ Compare (<) (exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=51.1M, hasNextFalseCountActual=0) -│ ║ │ ║ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=511.1K, hasNextCallCountActual=537.5K, hasNextTrueCountActual=511.1K, hasNextTimeNanosActual=80.3M, nextCallCountActual=511.1K, nextTimeNanosActual=25.8M, sourceRowsScannedActual=537.5K, sourceRowsMatchedActual=511.1K, sourceRowsFilteredActual=26.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) -│ ║ │ ║ Var (name=w2) -│ ║ │ ║ Var (name=threshold) -│ ║ │ ║ , plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=115.3K, openCountActual=115.3K, lastRowTimeNanosActual=3.1K, closeCountActual=115.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=149, avgNextNanosActual=51, indexHitRateActual=0.95) -│ ║ │ ║ s: Var (name=n2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M, resultSizeActual=89.1K, joinRightIteratorsCreatedActual=40.2K, joinRightBindingsConsumedActual=89.1K, inputRowsActual=129.3K, rowsDroppedActual=40.2K, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=89.1K) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, resultSizeActual=40.2K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=40.2K, joinType=Cartesian product, inputRowsActual=40.2K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=40.2K, avgRightRowsPerLeftActual=40.3K, joinOutputPerLeftActual=40.3K) [left] -│ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=4.6K, nextCallCountActual=1, nextTimeNanosActual=750, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.6K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=1120.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.3K, avgNextNanosActual=750) [left] -│ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.2M, nextCallCountActual=40.2K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ │ │ Exists -│ ║ │ │ Join (resultSizeEstimate=127.4K) -│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ │ Var (name=node) -│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ │ Var (name=n2) -│ ║ │ │ Filter -│ ║ │ │ Compare (<) -│ ║ │ │ Var (name=w2) -│ ║ │ │ Var (name=threshold) -│ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ │ Var (name=n2) -│ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ │ Var (name=w2) -│ ║ │ │ , firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1120.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=130, avgNextNanosActual=99, indexHitRateActual=1.00) -│ ║ │ │ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=89.4K, resultSizeActual=89.1K, hasNextCallCountActual=129.3K, hasNextTrueCountActual=89.1K, hasNextTimeNanosActual=301.7M, nextCallCountActual=89.1K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=89.1K, sourceRowsFilteredActual=133.6K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, openCountActual=40.2K, exprTrueCountActual=89.1K, lastRowTimeNanosActual=24.1K, closeCountActual=40.2K, exprEvalTimeNanosActual=111.1M, inputRowsActual=222.7K, rowsDroppedActual=133.6K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.69, avgHasNextNanosActual=2.3K, avgNextNanosActual=12, filterRejectRateActual=0.60) [right] -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, exprTrueCountActual=89.1K, exprEvalTimeNanosActual=97.3M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="1"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=11.3M, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="2"^^) (exprEvalCountActual=200.4K, exprTrueCountActual=200.4K, exprEvalTimeNanosActual=10.7M, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="3"^^) (exprEvalCountActual=178.1K, exprTrueCountActual=178.1K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="4"^^) (exprEvalCountActual=155.9K, exprTrueCountActual=155.9K, exprEvalTimeNanosActual=8.0M, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=41.2M, nextCallCountActual=222.7K, nextTimeNanosActual=8.8M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=20.7K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=157, avgNextNanosActual=40, indexHitRateActual=0.85) -│ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=14.6M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=14.6M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=14.6M, indexHitRateActual=0) -│ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ ExtensionElem (_anon_path_56323f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1179.5M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=1179.6M, openCountActual=1, lastRowTimeNanosActual=1179.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=589.8M, avgNextNanosActual=1.4K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1179.5M, nextCallCountActual=1, nextTimeNanosActual=584, aggregateEvalCountActual=95, firstRowTimeNanosActual=1179.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1179.6M, maxGroupSizeActual=95, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=95, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=95, rowsDroppedActual=94, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=589.8M, avgNextNanosActual=584) + │ ╠══ Difference (resultSizeActual=95, hasNextCallCountActual=97, hasNextTrueCountActual=96, hasNextTimeNanosActual=1179.4M, nextCallCountActual=95, nextTimeNanosActual=3.1K, firstRowTimeNanosActual=33.2M, openCountActual=1, lastRowTimeNanosActual=1179.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=12.2M, avgNextNanosActual=33, leftRowsConsumedActual=95, rightRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── Filter (resultSizeActual=95, hasNextCallCountActual=96, hasNextTrueCountActual=95, hasNextTimeNanosActual=1164.4M, nextCallCountActual=95, nextTimeNanosActual=1.6K, sourceRowsScannedActual=89.1K, sourceRowsMatchedActual=95, sourceRowsFilteredActual=89.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=18.3M, exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, openCountActual=1, exprTrueCountActual=95, lastRowTimeNanosActual=1179.5M, closeCountActual=1, exprEvalTimeNanosActual=657.3M, inputRowsActual=89.1K, rowsDroppedActual=89.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=12.1M, avgNextNanosActual=17, filterRejectRateActual=1.00) + │ ║ │ ╠══ Not (exprEvalCountActual=89.1K, exprFalseCountActual=89.0K, exprTrueCountActual=95, exprEvalTimeNanosActual=650.7M, hasNextFalseCountActual=0) + │ ║ │ ║ Exists (exprEvalCountActual=89.1K, exprFalseCountActual=95, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=645.3M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=128.2K, resultSizeActual=0, joinRightIteratorsCreatedActual=115.3K, joinLeftBindingsConsumedActual=115.3K, joinRightBindingsConsumedActual=89.0K, inputRowsActual=204.3K, rowsDroppedActual=204.3K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=115.3K, rightRowsScannedActual=89.0K, avgRightRowsPerLeftActual=0.77, joinOutputPerLeftActual=0) + │ ║ │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=267.3K, resultSizeActual=115.3K, hasNextCallCountActual=115.4K, hasNextTrueCountActual=115.3K, hasNextTimeNanosActual=40.8M, nextCallCountActual=115.3K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=115.4K, sourceRowsMatchedActual=115.3K, sourceRowsFilteredActual=95, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[node], firstRowTimeNanosActual=625, indexLookupCountActual=89.1K, openCountActual=89.1K, lastRowTimeNanosActual=2.1K, closeCountActual=89.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=95, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=354, avgNextNanosActual=51, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── Filter (resultSizeActual=89.0K, hasNextCallCountActual=115.3K, hasNextTrueCountActual=89.0K, hasNextTimeNanosActual=248.7M, nextCallCountActual=89.0K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=511.1K, sourceRowsMatchedActual=89.0K, sourceRowsFilteredActual=422.1K, plannedFilterEvidenceCount=21.9M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.2K, exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, openCountActual=115.3K, exprTrueCountActual=89.0K, lastRowTimeNanosActual=1.5K, closeCountActual=115.3K, exprEvalTimeNanosActual=69.4M, inputRowsActual=511.1K, rowsDroppedActual=422.1K, selectivityActual=0.17, expansionFactorActual=0.17, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.77, avgHasNextNanosActual=2.2K, avgNextNanosActual=15, filterRejectRateActual=0.83) [right] + │ ║ │ ║ ╠══ Compare (<) (exprEvalCountActual=511.1K, exprFalseCountActual=422.1K, exprTrueCountActual=89.0K, exprEvalTimeNanosActual=51.5M, hasNextFalseCountActual=0) + │ ║ │ ║ ║ Var (name=w2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=511.1K, hasNextCallCountActual=537.5K, hasNextTrueCountActual=511.1K, hasNextTimeNanosActual=83.2M, nextCallCountActual=511.1K, nextTimeNanosActual=24.8M, sourceRowsScannedActual=537.5K, sourceRowsMatchedActual=511.1K, sourceRowsFilteredActual=26.3K, plannedAccessRows=6.00, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ║ passRatio=0.23984111350170106 source=learned_filter evidence=21909980, sharedJoinVars=[n2], firstRowTimeNanosActual=542, indexLookupCountActual=115.3K, openCountActual=115.3K, lastRowTimeNanosActual=2.8K, closeCountActual=115.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26.3K, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=155, avgNextNanosActual=49, indexHitRateActual=0.95) + │ ║ │ ║ s: Var (name=n2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=90.0K, resultSizeActual=89.1K, joinRightIteratorsCreatedActual=89.1K, joinRightBindingsConsumedActual=89.1K, joinType=Cartesian product, inputRowsActual=178.2K, rowsDroppedActual=89.1K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1984.7M, stddevActual=44.6K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=89.1K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=90.0K, resultSizeActual=89.1K, joinRightIteratorsCreatedActual=40.2K, joinLeftBindingsConsumedActual=40.2K, joinRightBindingsConsumedActual=89.1K, inputRowsActual=129.3K, rowsDroppedActual=40.2K, expansionFactorActual=0.69, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=40.2K, rightRowsScannedActual=89.1K, avgRightRowsPerLeftActual=2.21, joinOutputPerLeftActual=2.21) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=40.3K, resultSizeActual=40.2K, hasNextCallCountActual=40.2K, hasNextTrueCountActual=40.2K, hasNextTimeNanosActual=5.1M, nextCallCountActual=40.2K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=40.2K, sourceRowsMatchedActual=40.2K, sourceRowsFilteredActual=1, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=13.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=1179.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=128, avgNextNanosActual=38, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Filter (resultSizeEstimate=90.0K, resultSizeActual=89.1K, hasNextCallCountActual=129.3K, hasNextTrueCountActual=89.1K, hasNextTimeNanosActual=314.2M, nextCallCountActual=89.1K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=222.7K, sourceRowsMatchedActual=89.1K, sourceRowsFilteredActual=133.6K, plannedFilterEvidenceCount=6.0M, plannedAccessRows=6.00, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=2.00, plannedWorkRows=90.0K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_b000c52_uri, _const_f5e5585a_uri, node], filterSelectivitySource=learned_filter, firstRowTimeNanosActual=1.7K, exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, openCountActual=40.2K, exprTrueCountActual=89.1K, lastRowTimeNanosActual=25.4K, closeCountActual=40.2K, exprEvalTimeNanosActual=115.9M, inputRowsActual=222.7K, rowsDroppedActual=133.6K, selectivityActual=0.40, expansionFactorActual=0.40, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.69, avgHasNextNanosActual=2.4K, avgNextNanosActual=13, filterRejectRateActual=0.60) [right] + │ ║ │ │ ├── ListMemberOperator (exprEvalCountActual=222.7K, exprFalseCountActual=133.6K, exprTrueCountActual=89.1K, exprEvalTimeNanosActual=101.3M, hasNextFalseCountActual=0) + │ ║ │ │ │ Var (name=w) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ │ ValueConstant (value="1"^^) (exprEvalCountActual=222.7K, exprTrueCountActual=222.7K, exprEvalTimeNanosActual=12.8M, hasNextFalseCountActual=0) + │ ║ │ │ │ ValueConstant (value="2"^^) (exprEvalCountActual=200.4K, exprTrueCountActual=200.4K, exprEvalTimeNanosActual=11.2M, hasNextFalseCountActual=0) + │ ║ │ │ │ ValueConstant (value="3"^^) (exprEvalCountActual=178.1K, exprTrueCountActual=178.1K, exprEvalTimeNanosActual=9.3M, hasNextFalseCountActual=0) + │ ║ │ │ │ ValueConstant (value="4"^^) (exprEvalCountActual=155.9K, exprTrueCountActual=155.9K, exprEvalTimeNanosActual=8.4M, hasNextFalseCountActual=0) + │ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=222.8K, resultSizeActual=222.7K, hasNextCallCountActual=263.0K, hasNextTrueCountActual=222.7K, hasNextTimeNanosActual=42.2M, nextCallCountActual=222.7K, nextTimeNanosActual=9.7M, sourceRowsScannedActual=263.0K, sourceRowsMatchedActual=222.7K, sourceRowsFilteredActual=40.2K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=40.2K, openCountActual=40.2K, lastRowTimeNanosActual=22.2K, closeCountActual=40.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=40.2K, nextPerHasNextRatioActual=0.85, avgHasNextNanosActual=161, avgNextNanosActual=44, indexHitRateActual=0.85) + │ ║ │ │ s: Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=w) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, resultSizeActual=89.1K, hasNextCallCountActual=178.2K, hasNextTrueCountActual=89.1K, hasNextTimeNanosActual=10.4M, nextCallCountActual=89.1K, nextTimeNanosActual=1.2M, plannedWorkRows=1.00, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, w], firstRowTimeNanosActual=208, openCountActual=89.1K, bindingsProvidedActual=89.1K, lastRowTimeNanosActual=5.5K, closeCountActual=89.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=89.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=59, avgNextNanosActual=15) [right] + │ ║ └── Extension (resultSizeActual=0, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=267.3K, resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=14.7M, sourceRowsScannedActual=267.2K, sourceRowsFilteredActual=267.2K, plannedIndexName=psoc, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=14.7M, closeCountActual=1, varsAddedActual=2, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=14.8M, indexHitRateActual=0) + │ ║ ║ s: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ ExtensionElem (_anon_path_3932e226babdcc344c88a5a61806b6a8e7f3012) (hasNextFalseCountActual=0) + │ ║ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=node) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=node) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7226,96 +7639,81 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ │ ╠══ Not -│ ║ │ ║ Exists -│ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=123.5K) -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) -│ ║ │ ║ └── Filter (plannedFilterPassRatio=0.23, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] -│ ║ │ ║ ╠══ Compare (<) -│ ║ │ ║ ║ Var (name=w2) (bindingState=bound) -│ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) -│ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) -│ ║ │ ║ Var (name=w2) -│ ║ │ ║ Var (name=threshold) -│ ║ │ ║ , plannedLookupComponents=[S, P]) -│ ║ │ ║ s: Var (name=n2) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ ║ o: Var (name=w2) (bindingState=unbound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=3621.3M) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=40.3K, joinType=Cartesian product) [left] -│ ║ │ │ ╠══ BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=40.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ │ │ Exists -│ ║ │ │ Join (resultSizeEstimate=123.5K) -│ ║ │ │ StatementPattern (resultSizeEstimate=267.3K) -│ ║ │ │ Var (name=node) -│ ║ │ │ Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ │ │ Var (name=n2) -│ ║ │ │ Filter -│ ║ │ │ Compare (<) -│ ║ │ │ Var (name=w2) -│ ║ │ │ Var (name=threshold) -│ ║ │ │ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ │ Var (name=n2) -│ ║ │ │ Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ │ Var (name=w2) -│ ║ │ │ ) -│ ║ │ │ s: Var (name=node) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) -│ ║ │ └── Filter (resultSizeEstimate=89.4K, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=3.00, plannedWorkRows=2.40, plannedIndexName=spoc, plannedBoundVars=[node, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=w) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="1"^^) -│ ║ │ ║ ValueConstant (value="2"^^) -│ ║ │ ║ ValueConstant (value="3"^^) -│ ║ │ ║ ValueConstant (value="4"^^) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) -│ ║ │ s: Var (name=node) (bindingState=bound) -│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) -│ ║ │ o: Var (name=w) (bindingState=unbound) -│ ║ └── Extension -│ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) -│ ║ ║ s: Var (name=node) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) -│ ║ ║ o: Var (name=node) (bindingState=unbound) -│ ║ ╚══ ExtensionElem (_anon_path_17323f2fe36952f541b08a42a7b8ce15e70d0) -│ ║ Var (name=node) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=node) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=node) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) + │ ║ │ ╠══ Not + │ ║ │ ║ Exists + │ ║ │ ║ Join (JoinIterator) (resultSizeEstimate=127.4K) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=267.3K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, threshold, w], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[node]) [left] + │ ║ │ ║ │ s: Var (name=node) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ │ ║ │ o: Var (name=n2) (bindingState=unbound) + │ ║ │ ║ └── Filter (plannedFilterEvidenceCount=22.4M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ║ ╠══ Compare (<) + │ ║ │ ║ ║ Var (name=w2) (bindingState=bound) + │ ║ │ ║ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K, plannedAccessRows=6.00, plannedIndexPrefixLength=2.00, plannedWorkRows=6.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, n2, node, threshold, w], unlockedFilters=Compare (<) + │ ║ │ ║ Var (name=w2) + │ ║ │ ║ Var (name=threshold) + │ ║ │ ║ passRatio=0.23834308254504044 source=learned_filter evidence=22421129, sharedJoinVars=[n2]) + │ ║ │ ║ s: Var (name=n2) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ ║ o: Var (name=w2) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=90.0K, joinType=Cartesian product) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=90.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=40.3K, plannedAccessRows=49.5K, plannedIndexPrefixLength=1.00, plannedWorkRows=49.5K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=node) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) + │ ║ │ │ ╚══ Filter (resultSizeEstimate=90.0K, plannedFilterEvidenceCount=6.2M, plannedAccessRows=6.00, plannedFilterPassRatio=0.40, plannedIndexPrefixLength=2.00, plannedWorkRows=90.0K, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_b000c52_uri, _const_f5e5585a_uri, node], filterSelectivitySource=learned_filter) [right] + │ ║ │ │ ├── ListMemberOperator + │ ║ │ │ │ Var (name=w) (bindingState=bound) + │ ║ │ │ │ ValueConstant (value="1"^^) + │ ║ │ │ │ ValueConstant (value="2"^^) + │ ║ │ │ │ ValueConstant (value="3"^^) + │ ║ │ │ │ ValueConstant (value="4"^^) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=222.8K) + │ ║ │ │ s: Var (name=node) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) + │ ║ │ │ o: Var (name=w) (bindingState=unbound) + │ ║ │ └── BindingSetAssignment ([[threshold="3"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_909a60a8_uri, _const_b000c52_uri, _const_f5e5585a_uri, node, w]) [right] + │ ║ └── Extension + │ ║ ╠══ StatementPattern (resultSizeEstimate=267.3K) + │ ║ ║ s: Var (name=node) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) + │ ║ ║ o: Var (name=node) (bindingState=unbound) + │ ║ ╚══ ExtensionElem (_anon_path_9932e226babdcc344c88a5a61806b6a8e7f3012345678) + │ ║ Var (name=node) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=node) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=node) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { -VALUES ?threshold { 3 } -?node a . -?node ?w . -FILTER (?w IN (1, 2, 3, 4)) -FILTER NOT EXISTS { -?node ?n2 . -?n2 ?w2 . -FILTER (?w2 < ?threshold) -} -MINUS { -?node ?node . -BIND(?node AS ?_anon_path_17323f2fe36952f541b08a42a7b8ce15e70d0) -} + ?node a . + ?node ?w . + FILTER (?w IN (1, 2, 3, 4)) + VALUES ?threshold { 3 } + FILTER NOT EXISTS { + ?node ?n2 . + ?n2 ?w2 . + FILTER (?w2 < ?threshold) + } + MINUS { + ?node ?node . + BIND(?node AS ?_anon_path_9932e226babdcc344c88a5a61806b6a8e7f3012345678) + } } Theme: TRAIN z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 77 ms +Initial explain execution time: 78 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -7326,40 +7724,40 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 41 ms +Fastest execution time: 44 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.1M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=66.0M, openCountActual=1, lastRowTimeNanosActual=66.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.1M, avgNextNanosActual=1.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=67.7M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=67.7M, openCountActual=1, lastRowTimeNanosActual=67.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.9M, avgNextNanosActual=1.7K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.1M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=66.1M, openCountActual=1, lastRowTimeNanosActual=66.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.1M, avgNextNanosActual=667) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=66.0M, nextCallCountActual=1, nextTimeNanosActual=333, aggregateEvalCountActual=18.0K, firstRowTimeNanosActual=66.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=66.1M, maxGroupSizeActual=18.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=18.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18.0K, rowsDroppedActual=18.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.0M, avgNextNanosActual=333) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=60.3M, nextCallCountActual=18.0K, nextTimeNanosActual=195.8K, joinRightIteratorsCreatedActual=18.0K, joinLeftBindingsConsumedActual=18.0K, joinRightBindingsConsumedActual=18.0K, firstRowTimeNanosActual=14.5K, leftRowsWithMatchActual=18.0K, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36.0K, rowsDroppedActual=18.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=11, leftRowsProbedActual=18.0K, rightRowsScannedActual=18.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Filter (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=41.6M, nextCallCountActual=18.0K, nextTimeNanosActual=258.6K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=7.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=12.6K, exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, openCountActual=1, exprTrueCountActual=18.0K, lastRowTimeNanosActual=66.0M, closeCountActual=1, exprEvalTimeNanosActual=19.9M, inputRowsActual=25.8K, rowsDroppedActual=7.8K, selectivityActual=0.70, expansionFactorActual=0.70, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.3K, avgNextNanosActual=14, filterRejectRateActual=0.30) [left] -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, exprTrueCountActual=18.0K, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optTime) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=1, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=19.7M, nextCallCountActual=25.8K, nextTimeNanosActual=283.6K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=7.7K, leftRowsWithMatchActual=8.6K, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=34.4K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=762, avgNextNanosActual=11, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=791.7K, nextCallCountActual=8.6K, nextTimeNanosActual=512.4K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=4.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=66.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=92, avgNextNanosActual=59, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=9.9M, nextCallCountActual=25.8K, nextTimeNanosActual=2.6M, firstRowTimeNanosActual=584, openCountActual=8.6K, lastRowTimeNanosActual=9.8K, closeCountActual=8.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=144, avgNextNanosActual=104) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=6.3M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=9.6K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=93, avgNextNanosActual=45, indexHitRateActual=0.75) -│ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optTime) (hasNextFalseCountActual=0) -│ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=18.0K, hasNextCallCountActual=36.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=7.6M, nextCallCountActual=18.0K, nextTimeNanosActual=886.0K, sourceRowsScannedActual=36.0K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=18.0K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=18.0K, openCountActual=18.0K, lastRowTimeNanosActual=584, closeCountActual=18.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=213, avgNextNanosActual=49, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=67.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=67.7M, openCountActual=1, lastRowTimeNanosActual=67.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.9M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=67.7M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=18.0K, firstRowTimeNanosActual=67.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=67.7M, maxGroupSizeActual=18.0K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=18.0K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18.0K, rowsDroppedActual=18.0K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=33.9M, avgNextNanosActual=583) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=61.6M, nextCallCountActual=18.0K, nextTimeNanosActual=193.7K, joinRightIteratorsCreatedActual=18.0K, joinLeftBindingsConsumedActual=18.0K, joinRightBindingsConsumedActual=18.0K, firstRowTimeNanosActual=27.7K, leftRowsWithMatchActual=18.0K, openCountActual=1, lastRowTimeNanosActual=67.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36.0K, rowsDroppedActual=18.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=11, leftRowsProbedActual=18.0K, rightRowsScannedActual=18.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Filter (resultSizeActual=18.0K, hasNextCallCountActual=18.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=42.7M, nextCallCountActual=18.0K, nextTimeNanosActual=281.0K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=7.8K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.4K, exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, openCountActual=1, exprTrueCountActual=18.0K, lastRowTimeNanosActual=67.6M, closeCountActual=1, exprEvalTimeNanosActual=20.9M, inputRowsActual=25.8K, rowsDroppedActual=7.8K, selectivityActual=0.70, expansionFactorActual=0.70, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=16, filterRejectRateActual=0.30) [left] + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=25.8K, exprFalseCountActual=7.8K, exprTrueCountActual=18.0K, exprEvalTimeNanosActual=18.9M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optTime) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=1, exprEvalTimeNanosActual=2.1K, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=19.8M, nextCallCountActual=25.8K, nextTimeNanosActual=309.3K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=16.7K, leftRowsWithMatchActual=8.6K, openCountActual=1, lastRowTimeNanosActual=67.6M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=34.4K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=768, avgNextNanosActual=12, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=869.2K, nextCallCountActual=8.6K, nextTimeNanosActual=526.3K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=67.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=61, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=10.2M, nextCallCountActual=25.8K, nextTimeNanosActual=2.5M, firstRowTimeNanosActual=625, openCountActual=8.6K, lastRowTimeNanosActual=10.3K, closeCountActual=8.6K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=149, avgNextNanosActual=100) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=68.9K, hasNextTrueCountActual=60.2K, hasNextTimeNanosActual=6.6M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=10.1K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.38, avgHasNextNanosActual=96, avgNextNanosActual=43, indexHitRateActual=0.75) + │ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optTime) (hasNextFalseCountActual=0) + │ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=18.0K, hasNextCallCountActual=36.0K, hasNextTrueCountActual=18.0K, hasNextTimeNanosActual=7.7M, nextCallCountActual=18.0K, nextTimeNanosActual=918.1K, sourceRowsScannedActual=36.0K, sourceRowsMatchedActual=18.0K, sourceRowsFilteredActual=18.0K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=18.0K, openCountActual=18.0K, lastRowTimeNanosActual=834, closeCountActual=18.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=216, avgNextNanosActual=51, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7367,53 +7765,53 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optTime) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="08:00:00"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] -│ ║ │ │ s: Var (name=service) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) -│ ║ │ ║ s: Var (name=service) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) -│ ║ │ ║ o: Var (name=time) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optTime) -│ ║ │ Var (name=time) (bindingState=bound) -│ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] -│ ║ s: Var (name=service) (bindingState=bound) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ o: Var (name=name) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=service) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=service) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optTime) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="08:00:00"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K) [left] + │ ║ │ │ s: Var (name=service) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ ║ o: Var (name=time) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTime) + │ ║ │ Var (name=time) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=service) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { -?service a . -OPTIONAL { -?service ?time . -BIND(?time AS ?optTime) -} -FILTER (?optTime > "08:00:00"^^) -OPTIONAL { -?service ?name . -} + ?service a . + OPTIONAL { + ?service ?time . + BIND(?time AS ?optTime) + } + FILTER (?optTime > "08:00:00"^^) + OPTIONAL { + ?service ?name . + } } Theme: TRAIN z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 96 ms +Initial explain execution time: 100 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -7424,63 +7822,63 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 57 ms +Fastest execution time: 56 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=86.8M, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=88.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=88.8M, openCountActual=1, lastRowTimeNanosActual=88.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=44.4M, avgNextNanosActual=2.0K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=86.8M, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=1.0K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=86.8M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=4, firstRowTimeNanosActual=86.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=86.8M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.4M, avgNextNanosActual=375) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=86.8M, nextCallCountActual=4, nextTimeNanosActual=124, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=54.1K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=86.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=14.5M, avgNextNanosActual=31, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) -│ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] -│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=67.9M, nextCallCountActual=4, nextTimeNanosActual=208, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=59.7K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=52.2K, exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=86.8M, closeCountActual=1, exprEvalTimeNanosActual=28.0M, inputRowsActual=59.7K, rowsDroppedActual=59.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=13.6M, avgNextNanosActual=52, filterRejectRateActual=1.00) -│ ║ │ ║ ├── Or (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=23.8M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=18.0M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, resultSizeActual=59.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=29.9K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=29.9K) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=667, nextCallCountActual=2, nextTimeNanosActual=209, firstRowTimeNanosActual=16.9K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=38.3K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=222, avgNextNanosActual=105) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.5M, nextCallCountActual=29.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=67.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=46, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=13.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.6K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=56, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=16.9K, rowsDroppedActual=16.9K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ │ ├── Or (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=6.9M, hasNextFalseCountActual=0) -│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=5.1M, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=672.9K, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, resultSizeActual=16.9K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=8.4K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=8.5K) -│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=541, nextCallCountActual=2, nextTimeNanosActual=292, firstRowTimeNanosActual=67.9M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=67.9M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=180, avgNextNanosActual=146) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K, resultSizeActual=8.4K, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=8.4K, inputRowsActual=16.9K, rowsDroppedActual=8.4K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=5.16, stddevActual=2.27, confidenceScoreActual=0.38, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=8.4K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=700.6K, nextCallCountActual=8.4K, nextTimeNanosActual=391.0K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=67.9M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=86.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=83, avgNextNanosActual=46, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.7M, nextCallCountActual=8.4K, nextTimeNanosActual=455.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P], firstRowTimeNanosActual=459, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.5K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=219, avgNextNanosActual=54, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.4K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=334, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=365, indexHitRateActual=0) [right] -│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=88.8M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=88.8M, openCountActual=1, lastRowTimeNanosActual=88.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=44.4M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=88.8M, nextCallCountActual=1, nextTimeNanosActual=584, aggregateEvalCountActual=4, firstRowTimeNanosActual=88.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=88.9M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=4.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=4, rowsDroppedActual=3, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=44.4M, avgNextNanosActual=584) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=4, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=88.8M, nextCallCountActual=4, nextTimeNanosActual=83, joinRightIteratorsCreatedActual=4, joinLeftBindingsConsumedActual=4, firstRowTimeNanosActual=41.4K, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=88.8M, closeCountActual=1, inputRowsActual=4, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=14.8M, avgNextNanosActual=21, leftRowsProbedActual=4, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) + │ ║ ├── Union (resultSizeActual=4, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=0, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=0) [left] + │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=69.5M, nextCallCountActual=4, nextTimeNanosActual=207, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=59.7K, plannedFilterEvidenceCount=20.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=39.3K, exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=88.8M, closeCountActual=1, exprEvalTimeNanosActual=29.6M, inputRowsActual=59.7K, rowsDroppedActual=59.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=13.9M, avgNextNanosActual=52, filterRejectRateActual=1.00) + │ ║ │ ║ ├── Or (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=24.5M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=18.4M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=59.7K, exprFalseCountActual=59.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=2.5M, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, resultSizeActual=59.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=29.9K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=29.9K) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=792, nextCallCountActual=2, nextTimeNanosActual=375, firstRowTimeNanosActual=21.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=28.4K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=264, avgNextNanosActual=188) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.3M, nextCallCountActual=29.8K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=69.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=79, avgNextNanosActual=51, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=13.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=416, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.6K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=58, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=20.6M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=16.9K, rowsDroppedActual=16.9K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ │ ├── Or (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=7.2M, hasNextFalseCountActual=0) + │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=5.4M, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=16.9K, exprFalseCountActual=16.9K, exprEvalTimeNanosActual=639.0K, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="OP 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, resultSizeActual=16.9K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=8.4K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.23, stddevActual=0.48, confidenceScoreActual=0.58, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=8.5K) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=750, nextCallCountActual=2, nextTimeNanosActual=625, firstRowTimeNanosActual=69.5M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=69.5M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=250, avgNextNanosActual=313) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K, resultSizeActual=8.4K, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=8.4K, inputRowsActual=16.9K, rowsDroppedActual=8.4K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=5.16, stddevActual=2.27, confidenceScoreActual=0.38, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=8.4K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=728.7K, nextCallCountActual=8.4K, nextTimeNanosActual=394.9K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=69.5M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=88.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=47, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.7M, nextCallCountActual=8.4K, nextTimeNanosActual=468.5K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=542, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.7K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=219, avgNextNanosActual=55, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=0, hasNextCallCountActual=4, hasNextTimeNanosActual=1.7K, sourceRowsScannedActual=4, sourceRowsFilteredActual=4, plannedIndexName=spoc, indexLookupCountActual=4, openCountActual=4, lastRowTimeNanosActual=375, closeCountActual=4, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=4, nextPerHasNextRatioActual=0, avgHasNextNanosActual=437, indexHitRateActual=0) [right] + │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7488,91 +7886,91 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Union [left] -│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ║ ├── Or -│ ║ │ ║ │ ╠══ Compare (=) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ ║ │ ╚══ Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="OP 3") -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ │ ║ o: Var (name=name) (bindingState=unbound) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ├── Or -│ ║ │ │ ╠══ Compare (=) -│ ║ │ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ │ ╚══ Compare (=) -│ ║ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ ValueConstant (value="OP 3") -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) -│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] -│ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) -│ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, target], plannedLookupComponents=[S, P]) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound) -│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] -│ ║ s: Var (name=entity) (bindingState=bound) -│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) -│ ║ o: Var (name=op) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=entity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=entity) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=20.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=29.9K, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=47.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=20.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="OP 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { -{ -VALUES ?target { "OP 1" "OP 2" } -{ -{ -?entity a . -?entity ?name . -} -} -FILTER ((?name = ?target) || (?name = "OP 3")) -} -UNION -{ -VALUES ?target { "OP 1" "OP 2" } -{ -{ -?entity a . -?entity ?name . -} -} -FILTER ((?name = ?target) || (?name = "OP 3")) -} -OPTIONAL { -?entity ?op . -} + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + UNION + { + VALUES ?target { "OP 1" "OP 2" } + { + { + ?entity a . + ?entity ?name . + } + } + FILTER ((?name = ?target) || (?name = "OP 3")) + } + OPTIONAL { + ?entity ?op . + } } Theme: TRAIN z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 54 ms +Initial explain execution time: 53 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -7583,51 +7981,56 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 27 ms +Fastest execution time: 25 ms -Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=583) +Projection (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=47.7M, nextCallCountActual=3, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=47.7M, openCountActual=1, lastRowTimeNanosActual=47.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.9M, avgNextNanosActual=681) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "line" (hasNextFalseCountActual=0) ║ ProjectionElem "sectionCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=916, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=305) -├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=584, firstRowTimeNanosActual=46.7M, openCountActual=1, lastRowTimeNanosActual=46.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=195) -│ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.7M, nextCallCountActual=3, nextTimeNanosActual=41, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=46.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=46.7M, closeCountActual=1, exprEvalTimeNanosActual=2.9K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=2.4K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) -│ ║ └── Group (line) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=46.6M, nextCallCountActual=3, nextTimeNanosActual=334, aggregateEvalCountActual=52, firstRowTimeNanosActual=46.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=46.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=8.67, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=26, rowsDroppedActual=23, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.7M, avgNextNanosActual=111) -│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=26, hasNextCallCountActual=28, hasNextTrueCountActual=27, hasNextTimeNanosActual=46.6M, nextCallCountActual=26, nextTimeNanosActual=416, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=26, firstRowTimeNanosActual=27.1K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=46.6M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=29, rowsDroppedActual=3, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=1.5M, stddevActual=1.2K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.7M, avgNextNanosActual=16, leftRowsProbedActual=3, rightRowsScannedActual=26, avgRightRowsPerLeftActual=8.67, joinMatchRateActual=1.00, joinOutputPerLeftActual=8.67, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444, resultSizeActual=3, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=3, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=5.4K, stddevActual=73, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=816.8K, nextCallCountActual=8.4K, nextTimeNanosActual=298.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=46.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=35, indexHitRateActual=1.00) [left] -│ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeEstimate=444, resultSizeActual=3, hasNextCallCountActual=8.4K, hasNextTrueCountActual=3, hasNextTimeNanosActual=27.6M, nextCallCountActual=3, nextTimeNanosActual=250, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=8.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.9K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=3, lastRowTimeNanosActual=3.1K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.5M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=83, filterRejectRateActual=1.00) [right] -│ ║ │ ├── ListMemberOperator (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=3, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=lineName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Line 0") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=234.8K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Line 1") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=231.3K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Line 2") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=333.0K, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=322.3K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=lineName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=67.4K, resultSizeActual=26, hasNextCallCountActual=75, hasNextTrueCountActual=72, hasNextTimeNanosActual=6.6K, nextCallCountActual=26, nextTimeNanosActual=2.5K, sourceRowsScannedActual=29, sourceRowsMatchedActual=26, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=791, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.0K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=88, avgNextNanosActual=98, indexHitRateActual=0.90) [right] -│ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (sectionCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_32523f2fe36952f541b08a42a7b8ce15e70d012) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (sectionCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=47.7M, nextCallCountActual=3, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=47.7M, openCountActual=1, lastRowTimeNanosActual=47.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.9M, avgNextNanosActual=417) + ├── Extension (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=47.7M, nextCallCountActual=3, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=47.7M, openCountActual=1, lastRowTimeNanosActual=47.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.9M, avgNextNanosActual=361) + │ ╠══ Filter (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=47.7M, nextCallCountActual=3, nextTimeNanosActual=417, sourceRowsScannedActual=3, sourceRowsMatchedActual=3, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=47.7M, exprEvalCountActual=3, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=47.7M, closeCountActual=1, exprEvalTimeNanosActual=3.0K, inputRowsActual=3, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.9M, avgNextNanosActual=139, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=3, exprTrueCountActual=3, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_1552e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) + │ ║ └── Group (line) (resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=47.7M, nextCallCountActual=3, nextTimeNanosActual=251, aggregateEvalCountActual=52, firstRowTimeNanosActual=47.7M, groupsCreatedActual=3, openCountActual=1, lastRowTimeNanosActual=47.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=8.67, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=26, rowsDroppedActual=23, selectivityActual=0.12, expansionFactorActual=0.12, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=11.9M, avgNextNanosActual=84) + │ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=26, hasNextCallCountActual=28, hasNextTrueCountActual=27, hasNextTimeNanosActual=47.7M, nextCallCountActual=26, nextTimeNanosActual=666, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=26, firstRowTimeNanosActual=21.5K, leftRowsWithMatchActual=3, openCountActual=1, lastRowTimeNanosActual=47.7M, closeCountActual=1, maxRightRowsPerLeftActual=9, inputRowsActual=29, rowsDroppedActual=3, expansionFactorActual=0.90, sampleCountActual=2, varianceActual=1.7M, stddevActual=1.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=1.7M, avgNextNanosActual=26, leftRowsProbedActual=3, rightRowsScannedActual=26, avgRightRowsPerLeftActual=8.67, joinMatchRateActual=1.00, joinOutputPerLeftActual=8.67, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.00, resultSizeActual=3, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=3, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=3, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] + │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=812.0K, nextCallCountActual=8.4K, nextTimeNanosActual=307.5K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=6.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=47.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=96, avgNextNanosActual=36, indexHitRateActual=1.00) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=3, hasNextCallCountActual=8.4K, hasNextTrueCountActual=3, hasNextTimeNanosActual=28.4M, nextCallCountActual=3, nextTimeNanosActual=126, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=8.4K, plannedFilterEvidenceCount=4.8M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=1.8K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=3, lastRowTimeNanosActual=3.2K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.8M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=42, filterRejectRateActual=1.00) [right] + │ ║ │ ├── ListMemberOperator (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=3, exprEvalTimeNanosActual=6.3M, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=lineName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Line 0") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=256.5K, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Line 1") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=239.5K, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Line 2") (exprEvalCountActual=8.4K, exprTrueCountActual=8.4K, exprEvalTimeNanosActual=340.2K, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=319.3K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[line], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=lineName) + │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ValueConstant (value="Line 2") + │ ║ │ passRatio=3.546099290780142E-4 source=learned_filter evidence=4847580, sharedJoinVars=[line], firstRowTimeNanosActual=542, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.4K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=38, indexHitRateActual=0.50) + │ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=lineName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=67.4K, resultSizeActual=26, hasNextCallCountActual=75, hasNextTrueCountActual=72, hasNextTimeNanosActual=5.1K, nextCallCountActual=26, nextTimeNanosActual=2.1K, sourceRowsScannedActual=29, sourceRowsMatchedActual=26, sourceRowsFilteredActual=3, plannedIndexName=ospc, firstRowTimeNanosActual=542, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=5.3K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.35, avgHasNextNanosActual=69, avgNextNanosActual=82, indexHitRateActual=0.90) [right] + │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_1552e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (sectionCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_1552e226babdcc344c88a5a61806b6a8e7f30) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (sectionCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7636,54 +8039,59 @@ Projection ║ ProjectionElem "line" ║ ProjectionElem "sectionCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (line) -│ ║ LeftJoin -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=444) [left] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ s: Var (name=line) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) -│ ║ │ ╚══ Filter (resultSizeEstimate=444, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ├── ListMemberOperator -│ ║ │ │ Var (name=lineName) (bindingState=bound) -│ ║ │ │ ValueConstant (value="Line 0") -│ ║ │ │ ValueConstant (value="Line 1") -│ ║ │ │ ValueConstant (value="Line 2") -│ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) -│ ║ │ s: Var (name=line) (bindingState=bound) -│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ │ o: Var (name=lineName) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] -│ ║ s: Var (name=section) (bindingState=unbound) -│ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) -│ ║ o: Var (name=line) (bindingState=bound) -│ ║ GroupElem (_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456) -│ ║ Count -│ ║ Var (name=section) (bindingState=bound) -│ ║ GroupElem (sectionCount) -│ ║ Count (Distinct) -│ ║ Var (name=section) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_72523f2fe36952f541b08a42a7b8ce15e70d0123456) -│ Count -│ Var (name=section) (bindingState=unbound) -└── ExtensionElem (sectionCount) -Count (Distinct) -Var (name=section) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_5552e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=9.00) [left] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=4.8M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [right] + │ ║ │ ├── ListMemberOperator + │ ║ │ │ Var (name=lineName) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Line 0") + │ ║ │ │ ValueConstant (value="Line 1") + │ ║ │ │ ValueConstant (value="Line 2") + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[line], unlockedFilters=ListMemberOperator + │ ║ │ Var (name=lineName) + │ ║ │ ValueConstant (value="Line 0") + │ ║ │ ValueConstant (value="Line 1") + │ ║ │ ValueConstant (value="Line 2") + │ ║ │ passRatio=3.546099290780142E-4 source=learned_filter evidence=4856040, sharedJoinVars=[line]) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=lineName) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=67.4K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ o: Var (name=line) (bindingState=bound) + │ ║ GroupElem (_anon_having_5552e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ Count + │ ║ Var (name=section) (bindingState=bound) + │ ║ GroupElem (sectionCount) + │ ║ Count (Distinct) + │ ║ Var (name=section) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_5552e226babdcc344c88a5a61806b6a8e7f301234) + │ Count + │ Var (name=section) (bindingState=unbound) + └── ExtensionElem (sectionCount) + Count (Distinct) + Var (name=section) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { -?line a . -?line ?lineName . -FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) -OPTIONAL { -?section ?line . -} + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } } GROUP BY ?line HAVING (COUNT(?section) > 0) @@ -7691,57 +8099,57 @@ HAVING (COUNT(?section) > 0) Theme: TRAIN z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 297 ms +Initial explain execution time: 312 ms Warmup execution 1/6 Warmup execution 2/6 Warmup execution 3/6 Warmup execution 4/6 Warmup execution 5/6 Warmup execution 6/6 -Fastest execution time: 169 ms +Fastest execution time: 175 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=2.6K, firstRowTimeNanosActual=290.9M, openCountActual=1, lastRowTimeNanosActual=291.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=2.6K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=289.0M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=289.0M, openCountActual=1, lastRowTimeNanosActual=289.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=144.5M, avgNextNanosActual=1.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=290.9M, openCountActual=1, lastRowTimeNanosActual=291.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=1.5K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=290.9M, nextCallCountActual=1, nextTimeNanosActual=1000, aggregateEvalCountActual=67.3K, firstRowTimeNanosActual=290.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=291.0M, maxGroupSizeActual=67.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=67.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=67.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=145.5M, avgNextNanosActual=1000) -│ ╠══ Difference (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=246.9M, nextCallCountActual=67.3K, nextTimeNanosActual=742.1K, firstRowTimeNanosActual=35.7M, openCountActual=1, lastRowTimeNanosActual=290.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=9, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=11, leftRowsConsumedActual=67.3K, rightRowsConsumedActual=1, overlapRowsActual=8) -│ ║ ├── Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=189.1M, nextCallCountActual=67.3K, nextTimeNanosActual=925.0K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=19.4K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=290.8M, closeCountActual=1, exprEvalTimeNanosActual=7.4M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optTrack) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=176.6M, nextCallCountActual=67.3K, nextTimeNanosActual=587.2K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=67.3K, firstRowTimeNanosActual=17.4K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=290.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=8.71, leftRowsProbedActual=67.3K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] -│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=6.8M, nextCallCountActual=67.3K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=8.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=290.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=60, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.5K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.6M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=709, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.1K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=56, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=49.5M, nextCallCountActual=67.3K, nextTimeNanosActual=10.2M, firstRowTimeNanosActual=500, openCountActual=67.3K, lastRowTimeNanosActual=2.0K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=368, avgNextNanosActual=152) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=31.1M, nextCallCountActual=67.3K, nextTimeNanosActual=4.3M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=1.7K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=231, avgNextNanosActual=65, indexHitRateActual=0.50) -│ ║ │ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optTrack) (hasNextFalseCountActual=0) -│ ║ │ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=35.6M, nextCallCountActual=1, nextTimeNanosActual=83, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=22.5M, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=35.6M, closeCountActual=1, exprEvalTimeNanosActual=28.5M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=17.8M, avgNextNanosActual=83, filterRejectRateActual=1.00) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=25.7M, hasNextFalseCountActual=0) -│ ║ ║ ├── Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=20.9M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="Line 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.3M, nextCallCountActual=46.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=35.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=71, avgNextNanosActual=31, indexHitRateActual=1.00) -│ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=289.0M, nextCallCountActual=1, nextTimeNanosActual=667, firstRowTimeNanosActual=289.0M, openCountActual=1, lastRowTimeNanosActual=289.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=144.5M, avgNextNanosActual=667) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=289.0M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=67.3K, firstRowTimeNanosActual=289.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=289.0M, maxGroupSizeActual=67.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=67.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=67.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=144.5M, avgNextNanosActual=500) + │ ╠══ Difference (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=246.4M, nextCallCountActual=67.3K, nextTimeNanosActual=753.0K, firstRowTimeNanosActual=37.1M, openCountActual=1, lastRowTimeNanosActual=289.0M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=67.3K, rowsDroppedActual=9, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=11, leftRowsConsumedActual=67.3K, rightRowsConsumedActual=1, overlapRowsActual=8) + │ ║ ├── Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=189.0M, nextCallCountActual=67.3K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=27.7K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=289.0M, closeCountActual=1, exprEvalTimeNanosActual=8.8M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=2.7M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=175.4M, nextCallCountActual=67.3K, nextTimeNanosActual=647.9K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=67.3K, firstRowTimeNanosActual=24.2K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=289.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=9.62, leftRowsProbedActual=67.3K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=68.0K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=6.4M, nextCallCountActual=67.3K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedAccessRows=67.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=10.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=289.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=68.0K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=31.8M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[line, section], sharedJoinVars=[section], firstRowTimeNanosActual=667, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.4K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=48.9M, nextCallCountActual=67.3K, nextTimeNanosActual=10.4M, firstRowTimeNanosActual=750, openCountActual=67.3K, lastRowTimeNanosActual=2.2K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=363, avgNextNanosActual=155) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.4M, nextCallCountActual=67.3K, nextTimeNanosActual=4.8M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=2.0K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=72, indexHitRateActual=0.50) + │ ║ │ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optTrack) (hasNextFalseCountActual=0) + │ ║ │ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=37.0M, nextCallCountActual=1, nextTimeNanosActual=83, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterEvidenceCount=3.8M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=23.3M, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=37.0M, closeCountActual=1, exprEvalTimeNanosActual=29.6M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=18.5M, avgNextNanosActual=83, filterRejectRateActual=1.00) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=26.8M, hasNextFalseCountActual=0) + │ ║ ║ ├── Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=21.5M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="Line 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.1M, nextCallCountActual=46.9K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=37.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=67, avgNextNanosActual=34, indexHitRateActual=1.00) + │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7749,111 +8157,111 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optTrack) (bindingState=bound) -│ ║ │ ║ Var (name=section) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) -│ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[line, section], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ │ s: Var (name=section) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) -│ ║ │ ║ s: Var (name=section) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) -│ ║ │ ║ o: Var (name=track) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optTrack) -│ ║ │ Var (name=track) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── Str -│ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="Line 0") -│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) -│ ║ s: Var (name=line) (bindingState=unbound) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ o: Var (name=name) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=section) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=section) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrack) (bindingState=bound) + │ ║ │ ║ Var (name=section) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=68.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=67.4K, plannedAccessRows=67.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=67.0K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=68.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[line, section], sharedJoinVars=[section]) [right] + │ ║ │ │ s: Var (name=section) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ ║ s: Var (name=section) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ │ ║ o: Var (name=track) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optTrack) + │ ║ │ Var (name=track) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=3.8M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── Str + │ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="Line 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=section) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=section) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { -?section ?line . -?section a . -OPTIONAL { -?section ?track . -BIND(?track AS ?optTrack) -} -FILTER (?optTrack != ?section) -MINUS { -?line ?name . -FILTER (CONTAINS(STR(?name), "Line 0")) -} + ?section ?line . + ?section a . + OPTIONAL { + ?section ?track . + BIND(?track AS ?optTrack) + } + FILTER (?optTrack != ?section) + MINUS { + ?line ?name . + FILTER (CONTAINS(STR(?name), "Line 0")) + } } Theme: TRAIN z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 337 ms +Initial explain execution time: 357 ms Warmup execution 1/5 Warmup execution 2/5 Warmup execution 3/5 Warmup execution 4/5 Warmup execution 5/5 -Fastest execution time: 178 ms +Fastest execution time: 185 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=335.7M, openCountActual=1, lastRowTimeNanosActual=335.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=333.1M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=333.1M, openCountActual=1, lastRowTimeNanosActual=333.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=166.6M, avgNextNanosActual=1.7K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=335.7M, openCountActual=1, lastRowTimeNanosActual=335.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=335.7M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=36, firstRowTimeNanosActual=335.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=335.7M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=36, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=36, rowsDroppedActual=35, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=167.9M, avgNextNanosActual=542) -│ ╠══ Filter (resultSizeActual=36, hasNextCallCountActual=38, hasNextTrueCountActual=37, hasNextTimeNanosActual=335.7M, nextCallCountActual=36, nextTimeNanosActual=585, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=58.9K, exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, openCountActual=1, exprTrueCountActual=36, lastRowTimeNanosActual=335.7M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=209.8M, metricOrigin.varsAddedActual=derived, inputRowsActual=269.5K, rowsDroppedActual=269.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=8.8M, avgNextNanosActual=16, filterRejectRateActual=1.00) -│ ║ ├── Exists (exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, exprTrueCountActual=36, exprEvalTimeNanosActual=192.1M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=269.5K, hasNextTrueCountActual=36, hasNextTimeNanosActual=77.7M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedIndexName=spoc, indexLookupCountActual=269.5K, openCountActual=269.5K, lastRowTimeNanosActual=333, closeCountActual=269.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=269.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=288, indexHitRateActual=0.00) -│ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=106.9M, nextCallCountActual=269.5K, nextTimeNanosActual=4.2M, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=34.9K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=335.6M, closeCountActual=1, maxRightRowsPerLeftActual=134.7K, inputRowsActual=269.5K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=12.1K, stddevActual=110, confidenceScoreActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=397, avgNextNanosActual=16, leftRowsProbedActual=2, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=134.8K, joinMatchRateActual=1.00, joinOutputPerLeftActual=134.8K, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444, resultSizeActual=2, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=2, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=12.2K, stddevActual=110, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] -│ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=886.8K, nextCallCountActual=8.4K, nextTimeNanosActual=327.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=4.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=335.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=39, indexHitRateActual=1.00) [left] -│ ║ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=444, resultSizeActual=2, hasNextCallCountActual=8.4K, hasNextTrueCountActual=2, hasNextTimeNanosActual=31.3M, nextCallCountActual=2, nextTimeNanosActual=209, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=8.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=11.9K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=2, lastRowTimeNanosActual=3.8K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.4M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=105, filterRejectRateActual=1.00) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=5.9M, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="Line 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=365.0K, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="Line 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=351.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=42, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=808.6K, hasNextTrueCountActual=808.6K, hasNextTimeNanosActual=27.5M, nextCallCountActual=269.5K, nextTimeNanosActual=9.9M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=2, plannedIndexName=psoc, firstRowTimeNanosActual=3.6K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=142.1M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=34, avgNextNanosActual=37, indexHitRateActual=1.00) [right] -│ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=333.1M, nextCallCountActual=1, nextTimeNanosActual=917, firstRowTimeNanosActual=333.1M, openCountActual=1, lastRowTimeNanosActual=333.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=166.6M, avgNextNanosActual=917) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=333.1M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=36, firstRowTimeNanosActual=333.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=333.1M, maxGroupSizeActual=36, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=36, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=36, rowsDroppedActual=35, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=166.6M, avgNextNanosActual=542) + │ ╠══ Filter (resultSizeActual=36, hasNextCallCountActual=38, hasNextTrueCountActual=37, hasNextTimeNanosActual=333.1M, nextCallCountActual=36, nextTimeNanosActual=625, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=63.3K, exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, openCountActual=1, exprTrueCountActual=36, lastRowTimeNanosActual=333.1M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=207.7M, metricOrigin.varsAddedActual=derived, inputRowsActual=269.5K, rowsDroppedActual=269.5K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=8.8M, avgNextNanosActual=17, filterRejectRateActual=1.00) + │ ║ ├── Exists (exprEvalCountActual=269.5K, exprFalseCountActual=269.5K, exprTrueCountActual=36, exprEvalTimeNanosActual=188.3M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=269.5K, hasNextTrueCountActual=36, hasNextTimeNanosActual=78.9M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=36, sourceRowsFilteredActual=269.5K, plannedIndexName=spoc, indexLookupCountActual=269.5K, openCountActual=269.5K, lastRowTimeNanosActual=333, closeCountActual=269.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=269.5K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=293, indexHitRateActual=0.00) + │ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=106.5M, nextCallCountActual=269.5K, nextTimeNanosActual=4.8M, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=38.7K, leftRowsWithMatchActual=2, openCountActual=1, lastRowTimeNanosActual=333.1M, closeCountActual=1, maxRightRowsPerLeftActual=134.7K, inputRowsActual=269.5K, rowsDroppedActual=2, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=395, avgNextNanosActual=18, leftRowsProbedActual=2, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=134.8K, joinMatchRateActual=1.00, joinOutputPerLeftActual=134.8K, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.00, resultSizeActual=2, joinRightIteratorsCreatedActual=8.4K, joinLeftBindingsConsumedActual=8.4K, joinRightBindingsConsumedActual=2, inputRowsActual=8.4K, rowsDroppedActual=8.4K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.4K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) [left] + │ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=806.0K, nextCallCountActual=8.4K, nextTimeNanosActual=328.3K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=5.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=333.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=39, indexHitRateActual=1.00) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── Filter (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=8.4K, hasNextTrueCountActual=2, hasNextTimeNanosActual=31.5M, nextCallCountActual=2, nextTimeNanosActual=417, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=8.4K, plannedFilterEvidenceCount=651.4K, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[line], filterSelectivitySource=learned_filter, sharedJoinVars=[line], firstRowTimeNanosActual=11.5K, exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, openCountActual=8.4K, exprTrueCountActual=2, lastRowTimeNanosActual=3.9K, closeCountActual=8.4K, exprEvalTimeNanosActual=6.7M, inputRowsActual=8.4K, rowsDroppedActual=8.4K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=209, filterRejectRateActual=1.00) [right] + │ ║ ║ ╠══ Or (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) + │ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=5.1M, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ValueConstant (value="Line 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=959, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Compare (=) (exprEvalCountActual=8.4K, exprFalseCountActual=8.4K, exprTrueCountActual=1, exprEvalTimeNanosActual=366.9K, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="Line 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=8.4K, hasNextCallCountActual=16.9K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=3.8M, nextCallCountActual=8.4K, nextTimeNanosActual=333.8K, sourceRowsScannedActual=16.9K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=8.4K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=8.4K, openCountActual=8.4K, lastRowTimeNanosActual=1.3K, closeCountActual=8.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.4K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=39, indexHitRateActual=0.50) + │ ║ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=808.6K, hasNextTrueCountActual=808.6K, hasNextTimeNanosActual=25.6M, nextCallCountActual=269.5K, nextTimeNanosActual=10.6M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=2, plannedIndexName=psoc, firstRowTimeNanosActual=3.9K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=139.9M, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=32, avgNextNanosActual=40, indexHitRateActual=1.00) [right] + │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7861,54 +8269,54 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Exists -│ ║ │ StatementPattern (resultSizeEstimate=67.4K) -│ ║ │ s: Var (name=section) (bindingState=bound) -│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) -│ ║ │ o: Var (name=line) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=444) [left] -│ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ s: Var (name=line) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) -│ ║ ║ └── Filter (resultSizeEstimate=444, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (=) -│ ║ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="Line 1") -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=name) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="Line 2") -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) -│ ║ ║ s: Var (name=line) (bindingState=bound) -│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ ║ o: Var (name=name) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] -│ ║ s: Var (name=section) (bindingState=unbound) -│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) -│ ║ o: Var (name=op) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=line) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=line) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=67.4K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ o: Var (name=line) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.00) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=659.8K, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[line], filterSelectivitySource=learned_filter, sharedJoinVars=[line]) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (=) + │ ║ ║ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="Line 1") + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=name) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="Line 2") + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] + │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ o: Var (name=op) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { -?line a . -?line ?name . -FILTER ((?name = "Line 1") || (?name = "Line 2")) -OPTIONAL { -?section ?op . -} -FILTER EXISTS { -?section ?line . -} + ?line a . + ?line ?name . + FILTER ((?name = "Line 1") || (?name = "Line 2")) + OPTIONAL { + ?section ?op . + } + FILTER EXISTS { + ?section ?line . + } } @@ -7927,54 +8335,54 @@ Warmup execution 9/10 Warmup execution 10/10 Fastest execution time: 43 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=68.1M, openCountActual=1, lastRowTimeNanosActual=68.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=1.5K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=69.9M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=69.9M, openCountActual=1, lastRowTimeNanosActual=69.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=35.0M, avgNextNanosActual=1.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=68.1M, openCountActual=1, lastRowTimeNanosActual=68.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=792) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.1M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=24, firstRowTimeNanosActual=68.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=68.1M, maxGroupSizeActual=24, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=24, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24, rowsDroppedActual=23, selectivityActual=0.04, expansionFactorActual=0.04, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=500) -│ ╠══ Filter (resultSizeActual=24, hasNextCallCountActual=26, hasNextTrueCountActual=25, hasNextTimeNanosActual=68.0M, nextCallCountActual=24, nextTimeNanosActual=416, sourceRowsScannedActual=94, sourceRowsMatchedActual=24, sourceRowsFilteredActual=70, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=3.3M, exprEvalCountActual=94, exprFalseCountActual=70, openCountActual=1, exprTrueCountActual=24, lastRowTimeNanosActual=68.1M, closeCountActual=1, exprEvalTimeNanosActual=476.2K, inputRowsActual=94, rowsDroppedActual=70, selectivityActual=0.26, expansionFactorActual=0.26, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=2.6M, avgNextNanosActual=17, filterRejectRateActual=0.74) -│ ║ ├── Not (exprEvalCountActual=94, exprFalseCountActual=70, exprTrueCountActual=24, exprEvalTimeNanosActual=468.3K, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=94, exprFalseCountActual=24, exprTrueCountActual=70, exprEvalTimeNanosActual=461.8K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=94, hasNextTrueCountActual=70, hasNextTimeNanosActual=201.6K, sourceRowsScannedActual=213, sourceRowsMatchedActual=70, sourceRowsFilteredActual=143, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, exprEvalCountActual=213, exprFalseCountActual=143, openCountActual=94, lastRowTimeNanosActual=875, exprTrueCountActual=70, closeCountActual=94, exprEvalTimeNanosActual=93.9K, inputRowsActual=213, rowsDroppedActual=213, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, filterRejectRateActual=0.67) -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=213, exprFalseCountActual=143, exprTrueCountActual=70, exprEvalTimeNanosActual=86.1K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=late) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=213, hasNextCallCountActual=237, hasNextTrueCountActual=213, hasNextTimeNanosActual=46.3K, nextCallCountActual=213, nextTimeNanosActual=8.1K, sourceRowsScannedActual=237, sourceRowsMatchedActual=213, sourceRowsFilteredActual=24, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=94, openCountActual=94, lastRowTimeNanosActual=2.1K, closeCountActual=94, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=196, avgNextNanosActual=38, indexHitRateActual=0.90) -│ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=late) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M, resultSizeActual=94, joinRightIteratorsCreatedActual=8.6K, joinRightBindingsConsumedActual=94, inputRowsActual=8.7K, rowsDroppedActual=8.6K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=42, stddevActual=6.47, confidenceScoreActual=0.21, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=94) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, resultSizeActual=8.6K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=8.6K, joinType=Cartesian product, inputRowsActual=8.6K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=8.6K, avgRightRowsPerLeftActual=8.6K, joinOutputPerLeftActual=8.6K) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=833, nextCallCountActual=1, nextTimeNanosActual=417, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.1K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=68.0M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=417, avgNextNanosActual=417) [left] -│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=902.7K, nextCallCountActual=8.6K, nextTimeNanosActual=737.8K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (>) -│ ║ ║ Var (name=late) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=25.8K) -│ ║ ║ Var (name=service) -│ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) -│ ║ ║ Var (name=late) -│ ║ ║ , firstRowTimeNanosActual=4.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=68.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=86, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Filter (resultSizeEstimate=1.3K, resultSizeActual=94, hasNextCallCountActual=8.7K, hasNextTrueCountActual=94, hasNextTimeNanosActual=46.6M, nextCallCountActual=94, nextTimeNanosActual=1.6K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=94, sourceRowsFilteredActual=25.7K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=4.3K, exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, openCountActual=8.6K, exprTrueCountActual=94, lastRowTimeNanosActual=6.4K, closeCountActual=8.6K, exprEvalTimeNanosActual=20.4M, inputRowsActual=25.8K, rowsDroppedActual=25.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=5.4K, avgNextNanosActual=18, filterRejectRateActual=1.00) [right] -│ ║ ├── ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, exprTrueCountActual=94, exprEvalTimeNanosActual=18.8M, hasNextFalseCountActual=0) -│ ║ │ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=618.1K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="09:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=550.0K, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=34.4K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.3M, nextCallCountActual=25.8K, nextTimeNanosActual=929.8K, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=4.5K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=183, avgNextNanosActual=36, indexHitRateActual=0.75) -│ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=69.9M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=69.9M, openCountActual=1, lastRowTimeNanosActual=69.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=35.0M, avgNextNanosActual=625) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=69.9M, nextCallCountActual=1, nextTimeNanosActual=292, aggregateEvalCountActual=24, firstRowTimeNanosActual=69.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=69.9M, maxGroupSizeActual=24, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=24, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=24, rowsDroppedActual=23, selectivityActual=0.04, expansionFactorActual=0.04, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=35.0M, avgNextNanosActual=292) + │ ╠══ Filter (resultSizeActual=24, hasNextCallCountActual=26, hasNextTrueCountActual=25, hasNextTimeNanosActual=69.8M, nextCallCountActual=24, nextTimeNanosActual=415, sourceRowsScannedActual=94, sourceRowsMatchedActual=24, sourceRowsFilteredActual=70, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=3.5M, exprEvalCountActual=94, exprFalseCountActual=70, openCountActual=1, exprTrueCountActual=24, lastRowTimeNanosActual=69.8M, closeCountActual=1, exprEvalTimeNanosActual=502.8K, inputRowsActual=94, rowsDroppedActual=70, selectivityActual=0.26, expansionFactorActual=0.26, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.92, avgHasNextNanosActual=2.7M, avgNextNanosActual=17, filterRejectRateActual=0.74) + │ ║ ├── Not (exprEvalCountActual=94, exprFalseCountActual=70, exprTrueCountActual=24, exprEvalTimeNanosActual=494.0K, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=94, exprFalseCountActual=24, exprTrueCountActual=70, exprEvalTimeNanosActual=487.7K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=94, hasNextTrueCountActual=70, hasNextTimeNanosActual=212.6K, sourceRowsScannedActual=213, sourceRowsMatchedActual=70, sourceRowsFilteredActual=143, plannedFilterEvidenceCount=128.8K, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter, exprEvalCountActual=213, exprFalseCountActual=143, openCountActual=94, lastRowTimeNanosActual=1.2K, exprTrueCountActual=70, closeCountActual=94, exprEvalTimeNanosActual=103.3K, inputRowsActual=213, rowsDroppedActual=213, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.3K, filterRejectRateActual=0.67) + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=213, exprFalseCountActual=143, exprTrueCountActual=70, exprEvalTimeNanosActual=95.2K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=late) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=213, hasNextCallCountActual=237, hasNextTrueCountActual=213, hasNextTimeNanosActual=50.0K, nextCallCountActual=213, nextTimeNanosActual=9.4K, sourceRowsScannedActual=237, sourceRowsMatchedActual=213, sourceRowsFilteredActual=24, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=94, openCountActual=94, lastRowTimeNanosActual=2.5K, closeCountActual=94, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=24, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=211, avgNextNanosActual=44, indexHitRateActual=0.90) + │ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=late) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=95, resultSizeActual=94, joinRightIteratorsCreatedActual=94, joinRightBindingsConsumedActual=94, joinType=Cartesian product, inputRowsActual=188, rowsDroppedActual=94, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=94) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=95, resultSizeActual=94, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=94, inputRowsActual=8.7K, rowsDroppedActual=8.6K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.6K, rightRowsScannedActual=94, avgRightRowsPerLeftActual=0.01, joinOutputPerLeftActual=0.01) [left] + │ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=809.6K, nextCallCountActual=8.6K, nextTimeNanosActual=332.1K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedAccessRows=15.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=5.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=69.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=39, indexHitRateActual=1.00) [left] + │ ║ ║ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── Filter (resultSizeEstimate=95, resultSizeActual=94, hasNextCallCountActual=8.7K, hasNextTrueCountActual=94, hasNextTimeNanosActual=49.1M, nextCallCountActual=94, nextTimeNanosActual=1.7K, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=94, sourceRowsFilteredActual=25.7K, plannedFilterEvidenceCount=15.6M, plannedAccessRows=3.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=95, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[service], filterSelectivitySource=learned_filter, sharedJoinVars=[service], firstRowTimeNanosActual=4.4K, exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, openCountActual=8.6K, exprTrueCountActual=94, lastRowTimeNanosActual=7.7K, closeCountActual=8.6K, exprEvalTimeNanosActual=22.0M, inputRowsActual=25.8K, rowsDroppedActual=25.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=5.6K, avgNextNanosActual=18, filterRejectRateActual=1.00) [right] + │ ║ ║ ╠══ ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.7K, exprTrueCountActual=94, exprEvalTimeNanosActual=20.4M, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=time) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="08:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=779.7K, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="09:00:00"^^) (exprEvalCountActual=25.8K, exprEvalTimeNanosActual=645.2K, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=25.8K, resultSizeActual=25.8K, hasNextCallCountActual=34.4K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.1M, nextCallCountActual=25.8K, nextTimeNanosActual=921.0K, sourceRowsScannedActual=34.4K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=5.1K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=178, avgNextNanosActual=36, indexHitRateActual=0.75) + │ ║ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=time) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=95, resultSizeActual=94, hasNextCallCountActual=188, hasNextTrueCountActual=94, hasNextTimeNanosActual=14.1K, nextCallCountActual=94, nextTimeNanosActual=1.4K, plannedWorkRows=1.5K, plannedBoundVars=[service, time], unlockedFilters=Not [right] + │ ║ Exists + │ ║ Filter + │ ║ Compare (>) + │ ║ Var (name=late) + │ ║ Var (name=threshold) + │ ║ StatementPattern (resultSizeEstimate=25.8K) + │ ║ Var (name=service) + │ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ Var (name=late) + │ ║ source=unknown, firstRowTimeNanosActual=125, openCountActual=94, bindingsProvidedActual=94, lastRowTimeNanosActual=4.9K, closeCountActual=94, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=94, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=75, avgNextNanosActual=15) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -7982,68 +8390,68 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ ├── Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=late) (bindingState=bound) -│ ║ │ ║ Var (name=threshold) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) -│ ║ │ s: Var (name=service) (bindingState=bound) -│ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) -│ ║ │ o: Var (name=late) (bindingState=unbound) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=11.2M) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.6K, joinType=Cartesian product) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ └── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (>) -│ ║ ║ Var (name=late) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=25.8K) -│ ║ ║ Var (name=service) -│ ║ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) -│ ║ ║ Var (name=late) -│ ║ ║ ) -│ ║ ║ s: Var (name=service) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) -│ ║ ╚══ Filter (resultSizeEstimate=1.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.15, plannedIndexName=spoc, plannedBoundVars=[service, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=time) (bindingState=bound) -│ ║ │ ValueConstant (value="08:00:00"^^) -│ ║ │ ValueConstant (value="09:00:00"^^) -│ ║ └── StatementPattern (resultSizeEstimate=25.8K) -│ ║ s: Var (name=service) (bindingState=bound) -│ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) -│ ║ o: Var (name=time) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=service) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=service) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=129.0K, plannedFilterPassRatio=0.33, filterSelectivitySource=learned_filter) + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=late) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ │ o: Var (name=late) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=95, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=95) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ └── Filter (resultSizeEstimate=95, plannedFilterEvidenceCount=15.6M, plannedAccessRows=3.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=95, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[service], filterSelectivitySource=learned_filter, sharedJoinVars=[service]) [right] + │ ║ ║ ╠══ ListMemberOperator + │ ║ ║ ║ Var (name=time) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="08:00:00"^^) + │ ║ ║ ║ ValueConstant (value="09:00:00"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=25.8K) + │ ║ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ ║ o: Var (name=time) (bindingState=unbound) + │ ║ ╚══ BindingSetAssignment ([[threshold="10:00:00"^^]]) (resultSizeEstimate=95, plannedWorkRows=1.5K, plannedBoundVars=[service, time], unlockedFilters=Not [right] + │ ║ Exists + │ ║ Filter + │ ║ Compare (>) + │ ║ Var (name=late) + │ ║ Var (name=threshold) + │ ║ StatementPattern (resultSizeEstimate=25.8K) + │ ║ Var (name=service) + │ ║ Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ ║ Var (name=late) + │ ║ source=unknown) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { -VALUES ?threshold { "10:00:00"^^ } -?service a . -?service ?time . -FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) -FILTER NOT EXISTS { -?service ?late . -FILTER (?late > ?threshold) -} + ?service a . + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } } Theme: TRAIN z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 167 ms +Initial explain execution time: 162 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -8054,59 +8462,59 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 109 ms +Fastest execution time: 107 ms -Projection (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=149.2M, nextCallCountActual=7.8K, nextTimeNanosActual=1.1M, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=149) +Projection (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=156.0M, nextCallCountActual=7.8K, nextTimeNanosActual=1.0M, firstRowTimeNanosActual=153.1M, openCountActual=1, lastRowTimeNanosActual=157.8M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.9K, avgNextNanosActual=140) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "line" (hasNextFalseCountActual=0) ║ ProjectionElem "serviceCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=149.0M, nextCallCountActual=7.8K, nextTimeNanosActual=759.3K, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=97) -├── Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=148.9M, nextCallCountActual=7.8K, nextTimeNanosActual=418.1K, firstRowTimeNanosActual=146.2M, openCountActual=1, lastRowTimeNanosActual=151.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=53) -│ ╠══ Filter (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=148.6M, nextCallCountActual=7.8K, nextTimeNanosActual=103.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=7.8K, sourceRowsFilteredActual=624, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=146.2M, exprEvalCountActual=8.4K, exprFalseCountActual=624, openCountActual=1, exprTrueCountActual=7.8K, lastRowTimeNanosActual=151.1M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=8.4K, rowsDroppedActual=624, selectivityActual=0.93, expansionFactorActual=0.93, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.0K, avgNextNanosActual=13, filterRejectRateActual=0.07) -│ ║ ├── Compare (>) (exprEvalCountActual=8.4K, exprFalseCountActual=624, exprTrueCountActual=7.8K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) -│ ║ └── Group (line) (resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=146.3M, nextCallCountActual=8.4K, nextTimeNanosActual=222.8K, aggregateEvalCountActual=68.6K, firstRowTimeNanosActual=146.2M, groupsCreatedActual=8.4K, openCountActual=1, lastRowTimeNanosActual=151.1M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=9, avgGroupSizeActual=4.06, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=34.3K, rowsDroppedActual=25.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=17.3K, avgNextNanosActual=26) -│ ║ Filter (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=116.7M, nextCallCountActual=34.3K, nextTimeNanosActual=469.5K, sourceRowsScannedActual=34.3K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=29.2K, exprEvalCountActual=34.3K, openCountActual=1, exprTrueCountActual=34.3K, lastRowTimeNanosActual=144.2M, closeCountActual=1, exprEvalTimeNanosActual=21.8M, inputRowsActual=34.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=34.3K, exprTrueCountActual=34.3K, exprEvalTimeNanosActual=19.3M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=92.0M, nextCallCountActual=34.3K, nextTimeNanosActual=278.7K, joinRightIteratorsCreatedActual=34.3K, joinLeftBindingsConsumedActual=34.3K, joinRightBindingsConsumedActual=34.3K, firstRowTimeNanosActual=20.0K, leftRowsWithMatchActual=34.3K, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=68.6K, rowsDroppedActual=34.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.7K, avgNextNanosActual=8.12, leftRowsProbedActual=34.3K, rightRowsScannedActual=34.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=53.1M, nextCallCountActual=34.3K, nextTimeNanosActual=771.9K, firstRowTimeNanosActual=16.5K, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.5K, avgNextNanosActual=22, leftRowsConsumedActual=25.8K, rightRowsConsumedActual=8.4K, leftRowsOutputContributionActual=25.8K, rightRowsOutputContributionActual=8.4K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=34.5K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] -│ ║ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.6K, nextTimeNanosActual=501.4K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=122.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=124, avgNextNanosActual=58, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=26.0K, resultSizeActual=25.8K, hasNextCallCountActual=34.5K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=34.5K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[S, P], firstRowTimeNanosActual=833, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=18.9K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=195, avgNextNanosActual=53, indexHitRateActual=0.75) [right] -│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=20.8M, nextCallCountActual=25.8K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[S, P], firstRowTimeNanosActual=916, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=3.8K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=402, avgNextNanosActual=60, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=807.7K, nextCallCountActual=8.4K, nextTimeNanosActual=369.2K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=122.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=44, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=34.3K, hasNextCallCountActual=68.6K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=17.8M, nextCallCountActual=34.3K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=68.6K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=34.3K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=34.3K, openCountActual=34.3K, lastRowTimeNanosActual=1.7K, closeCountActual=34.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=34.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=259, avgNextNanosActual=59, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (serviceCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_60723f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (serviceCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=155.9M, nextCallCountActual=7.8K, nextTimeNanosActual=712.7K, firstRowTimeNanosActual=153.1M, openCountActual=1, lastRowTimeNanosActual=157.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.9K, avgNextNanosActual=91) + ├── Extension (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=155.7M, nextCallCountActual=7.8K, nextTimeNanosActual=372.8K, firstRowTimeNanosActual=153.1M, openCountActual=1, lastRowTimeNanosActual=157.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.9K, avgNextNanosActual=48) + │ ╠══ Filter (resultSizeActual=7.8K, hasNextCallCountActual=7.8K, hasNextTrueCountActual=7.8K, hasNextTimeNanosActual=155.4M, nextCallCountActual=7.8K, nextTimeNanosActual=111.3K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=7.8K, sourceRowsFilteredActual=624, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=153.1M, exprEvalCountActual=8.4K, exprFalseCountActual=624, openCountActual=1, exprTrueCountActual=7.8K, lastRowTimeNanosActual=157.8M, closeCountActual=1, exprEvalTimeNanosActual=1.7M, inputRowsActual=8.4K, rowsDroppedActual=624, selectivityActual=0.93, expansionFactorActual=0.93, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=19.8K, avgNextNanosActual=14, filterRejectRateActual=0.07) + │ ║ ├── Compare (>) (exprEvalCountActual=8.4K, exprFalseCountActual=624, exprTrueCountActual=7.8K, exprEvalTimeNanosActual=991.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_4372e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) + │ ║ └── Group (line) (resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=153.1M, nextCallCountActual=8.4K, nextTimeNanosActual=269.0K, aggregateEvalCountActual=68.6K, firstRowTimeNanosActual=153.1M, groupsCreatedActual=8.4K, openCountActual=1, lastRowTimeNanosActual=157.8M, maxGroupSizeActual=15, closeCountActual=1, varsAddedActual=2, varsDroppedActual=9, avgGroupSizeActual=4.06, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=34.3K, rowsDroppedActual=25.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=18.1K, avgNextNanosActual=32) + │ ║ Filter (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=120.5M, nextCallCountActual=34.3K, nextTimeNanosActual=446.8K, sourceRowsScannedActual=34.3K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=3.9M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.7K, exprEvalCountActual=34.3K, openCountActual=1, exprTrueCountActual=34.3K, lastRowTimeNanosActual=151.3M, closeCountActual=1, exprEvalTimeNanosActual=22.8M, inputRowsActual=34.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.5K, avgNextNanosActual=13, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=34.3K, exprTrueCountActual=34.3K, exprEvalTimeNanosActual=19.7M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=94.6M, nextCallCountActual=34.3K, nextTimeNanosActual=353.5K, joinRightIteratorsCreatedActual=34.3K, joinLeftBindingsConsumedActual=34.3K, joinRightBindingsConsumedActual=34.3K, firstRowTimeNanosActual=18.8K, leftRowsWithMatchActual=34.3K, openCountActual=1, lastRowTimeNanosActual=151.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=68.6K, rowsDroppedActual=34.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=10, leftRowsProbedActual=34.3K, rightRowsScannedActual=34.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=34.3K, hasNextCallCountActual=34.3K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=54.5M, nextCallCountActual=34.3K, nextTimeNanosActual=658.6K, firstRowTimeNanosActual=15.7K, openCountActual=1, lastRowTimeNanosActual=151.0M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=19, leftRowsConsumedActual=25.8K, rightRowsConsumedActual=8.4K, leftRowsOutputContributionActual=25.8K, rightRowsOutputContributionActual=8.4K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.5K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, inputRowsActual=34.5K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] + │ ║ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=1.0M, nextCallCountActual=8.6K, nextTimeNanosActual=534.9K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedAccessRows=15.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=129.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=62, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=25.9K, resultSizeActual=25.8K, hasNextCallCountActual=34.5K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.8M, nextCallCountActual=25.8K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=34.5K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[service], sharedJoinVars=[service], firstRowTimeNanosActual=959, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=18.0K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=199, avgNextNanosActual=55, indexHitRateActual=0.75) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=21.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[section, service], sharedJoinVars=[section], firstRowTimeNanosActual=667, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=3.4K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=411, avgNextNanosActual=62, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, resultSizeActual=8.4K, hasNextCallCountActual=8.4K, hasNextTrueCountActual=8.4K, hasNextTimeNanosActual=770.9K, nextCallCountActual=8.4K, nextTimeNanosActual=384.0K, sourceRowsScannedActual=8.4K, sourceRowsMatchedActual=8.4K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=129.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=151.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=45, indexHitRateActual=1.00) + │ ║ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=34.3K, hasNextCallCountActual=68.6K, hasNextTrueCountActual=34.3K, hasNextTimeNanosActual=17.7M, nextCallCountActual=34.3K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=68.6K, sourceRowsMatchedActual=34.3K, sourceRowsFilteredActual=34.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=34.3K, openCountActual=34.3K, lastRowTimeNanosActual=1.7K, closeCountActual=34.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=34.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=258, avgNextNanosActual=62, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_4372e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (serviceCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_4372e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (serviceCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8115,69 +8523,69 @@ Projection ║ ProjectionElem "line" ║ ProjectionElem "serviceCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (line) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ │ ValueConstant (value="") -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.9K) -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.0K) [left] -│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=26.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[service], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) -│ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, service], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=section) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) -│ ║ ║ │ o: Var (name=line) (bindingState=unbound) -│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) -│ ║ ║ s: Var (name=line) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) -│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] -│ ║ s: Var (name=line) (bindingState=bound) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ║ GroupElem (_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01) -│ ║ Count -│ ║ Var (name=service) (bindingState=bound) -│ ║ GroupElem (serviceCount) -│ ║ Count (Distinct) -│ ║ Var (name=service) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_21723f2fe36952f541b08a42a7b8ce15e70d01) -│ Count -│ Var (name=service) (bindingState=unbound) -└── ExtensionElem (serviceCount) -Count (Distinct) -Var (name=service) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0472e226babdcc344c88a5a61806b6a8e7f3, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (line) + │ ║ Filter (plannedFilterEvidenceCount=4.0M, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ │ ValueConstant (value="") + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=25.5K) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=8.6K, plannedAccessRows=15.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.0K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=25.9K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[service], sharedJoinVars=[service]) [right] + │ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ o: Var (name=section) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[section, service], sharedJoinVars=[section]) [right] + │ ║ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ o: Var (name=line) (bindingState=unbound) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=8.5K) + │ ║ ║ s: Var (name=line) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ GroupElem (_anon_having_0472e226babdcc344c88a5a61806b6a8e7f3) + │ ║ Count + │ ║ Var (name=service) (bindingState=bound) + │ ║ GroupElem (serviceCount) + │ ║ Count (Distinct) + │ ║ Var (name=service) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0472e226babdcc344c88a5a61806b6a8e7f3) + │ Count + │ Var (name=service) (bindingState=unbound) + └── ExtensionElem (serviceCount) + Count (Distinct) + Var (name=service) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { -{ -?service a . -?service ?section . -?section ?line . -} -UNION -{ -?line a . -} -OPTIONAL { -?line ?optName . -} -FILTER (?optName != "") + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") } GROUP BY ?line HAVING (COUNT(?service) > 0) @@ -8185,7 +8593,7 @@ HAVING (COUNT(?service) > 0) Theme: TRAIN z_queryIndex: 7 === Explanation Telemetry === -Initial explain execution time: 235 ms +Initial explain execution time: 234 ms Warmup execution 1/8 Warmup execution 2/8 Warmup execution 3/8 @@ -8196,56 +8604,56 @@ Warmup execution 7/8 Warmup execution 8/8 Fastest execution time: 124 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=2.0K, firstRowTimeNanosActual=223.8M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=2.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=239.7M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=239.7M, openCountActual=1, lastRowTimeNanosActual=239.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=119.9M, avgNextNanosActual=2.5K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=223.8M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=1.1K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=1, firstRowTimeNanosActual=223.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=223.8M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=111.9M, avgNextNanosActual=583) -│ ╠══ Difference (resultSizeActual=1, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=223.8M, nextCallCountActual=1, firstRowTimeNanosActual=38.7M, openCountActual=1, lastRowTimeNanosActual=223.8M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=74.6M, avgNextNanosActual=0, leftRowsConsumedActual=1, rightRowsConsumedActual=1, overlapRowsActual=0) -│ ║ ├── Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=185.1M, nextCallCountActual=1, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=65.7K, exprEvalCountActual=2, exprFalseCountActual=1, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=223.7M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=9.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=92.6M, avgNextNanosActual=42, filterRejectRateActual=0.50) -│ ║ │ ╠══ Exists (exprEvalCountActual=2, exprFalseCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=9.0K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=25.9K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=4.1K, sourceRowsScannedActual=14, sourceRowsMatchedActual=1, sourceRowsFilteredActual=13, plannedIndexName=ospc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=2.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.1K, indexHitRateActual=0.07) -│ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K, resultSizeActual=2, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=2, inputRowsActual=29.9K, rowsDroppedActual=29.8K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=147.1K, stddevActual=384, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=3.1M, nextCallCountActual=29.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) -│ ║ │ │ Var (name=service) -│ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) -│ ║ │ │ Var (name=op) -│ ║ │ │ , firstRowTimeNanosActual=12.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=223.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=107, avgNextNanosActual=39, indexHitRateActual=1.00) -│ ║ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=1.5K, resultSizeActual=2, hasNextCallCountActual=29.9K, hasNextTrueCountActual=2, hasNextTimeNanosActual=109.8M, nextCallCountActual=2, nextTimeNanosActual=250, sourceRowsScannedActual=29.8K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=29.8K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=8.4K, exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, openCountActual=29.8K, exprTrueCountActual=2, lastRowTimeNanosActual=3.3K, closeCountActual=29.8K, exprEvalTimeNanosActual=22.4M, inputRowsActual=29.8K, rowsDroppedActual=29.8K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=125, filterRejectRateActual=1.00) [right] -│ ║ │ ╠══ Or (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=20.6M, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=17.2M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="OP 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.3K, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="OP 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.3K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=41, indexHitRateActual=0.50) -│ ║ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=38.6M, nextCallCountActual=1, nextTimeNanosActual=41, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=12.0K, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=38.6M, closeCountActual=1, exprEvalTimeNanosActual=31.6M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=19.3M, avgNextNanosActual=41, filterRejectRateActual=1.00) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=29.0M, hasNextFalseCountActual=0) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=24.5M, hasNextFalseCountActual=0) -│ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=21.0M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="op 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.4M, nextCallCountActual=46.9K, nextTimeNanosActual=1.4M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=38.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=31, indexHitRateActual=1.00) -│ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=239.7M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=239.7M, openCountActual=1, lastRowTimeNanosActual=239.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=119.9M, avgNextNanosActual=1.4K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=239.7M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=1, firstRowTimeNanosActual=239.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=239.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=119.9M, avgNextNanosActual=625) + │ ╠══ Difference (resultSizeActual=1, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=239.6M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=43.4M, openCountActual=1, lastRowTimeNanosActual=239.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=79.9M, avgNextNanosActual=584, leftRowsConsumedActual=1, rightRowsConsumedActual=1, overlapRowsActual=0) + │ ║ ├── Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=196.2M, nextCallCountActual=1, nextTimeNanosActual=42, sourceRowsScannedActual=2, sourceRowsMatchedActual=1, sourceRowsFilteredActual=1, plannedFilterPassRatio=0.06, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=60.1K, exprEvalCountActual=2, exprFalseCountActual=1, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=239.6M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=13.3K, metricOrigin.varsAddedActual=derived, inputRowsActual=2, rowsDroppedActual=1, selectivityActual=0.50, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=98.1M, avgNextNanosActual=42, filterRejectRateActual=0.50) + │ ║ │ ╠══ Exists (exprEvalCountActual=2, exprFalseCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=13.0K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ StatementPattern [index: ospc] (resultSizeEstimate=25.9K, resultSizeActual=0, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=6.2K, sourceRowsScannedActual=14, sourceRowsMatchedActual=1, sourceRowsFilteredActual=13, plannedIndexName=ospc, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=4.2K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.1K, indexHitRateActual=0.07) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.00, resultSizeActual=2, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=2, inputRowsActual=29.9K, rowsDroppedActual=29.8K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=2, avgRightRowsPerLeftActual=0.00, joinOutputPerLeftActual=0.00) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=3.0M, nextCallCountActual=29.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ │ Var (name=service) + │ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ │ Var (name=op) + │ ║ │ │ source=unknown, firstRowTimeNanosActual=10.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=239.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=41, indexHitRateActual=1.00) + │ ║ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Filter (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=29.9K, hasNextTrueCountActual=2, hasNextTimeNanosActual=116.5M, nextCallCountActual=2, nextTimeNanosActual=375, sourceRowsScannedActual=29.8K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=29.8K, plannedFilterEvidenceCount=3.4M, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[op], filterSelectivitySource=learned_filter, sharedJoinVars=[op], firstRowTimeNanosActual=13.1K, exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, openCountActual=29.8K, exprTrueCountActual=2, lastRowTimeNanosActual=4.2K, closeCountActual=29.8K, exprEvalTimeNanosActual=24.5M, inputRowsActual=29.8K, rowsDroppedActual=29.8K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=188, filterRejectRateActual=1.00) [right] + │ ║ │ ╠══ Or (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=22.2M, hasNextFalseCountActual=0) + │ ║ │ ║ ├── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=18.7M, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="OP 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Compare (=) (exprEvalCountActual=29.8K, exprFalseCountActual=29.8K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.4M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="OP 2") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.8M, nextCallCountActual=29.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=1.4K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=248, avgNextNanosActual=42, indexHitRateActual=0.50) + │ ║ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=43.3M, nextCallCountActual=1, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=1, sourceRowsFilteredActual=46.9K, plannedFilterEvidenceCount=5.4M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=9.2K, exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=43.3M, closeCountActual=1, exprEvalTimeNanosActual=35.5M, inputRowsActual=46.9K, rowsDroppedActual=46.9K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=21.7M, avgNextNanosActual=0, filterRejectRateActual=1.00) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=46.9K, exprTrueCountActual=1, exprEvalTimeNanosActual=32.4M, hasNextFalseCountActual=0) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=27.3M, hasNextFalseCountActual=0) + │ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=23.0M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="op 0") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.5M, nextCallCountActual=46.9K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=43.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=76, avgNextNanosActual=37, indexHitRateActual=1.00) + │ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8253,138 +8661,137 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) -│ ║ │ ╠══ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) -│ ║ │ ║ s: Var (name=service) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) -│ ║ │ ║ o: Var (name=op) (bindingState=bound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=1.5K) -│ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) -│ ║ │ │ Var (name=service) -│ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) -│ ║ │ │ Var (name=op) -│ ║ │ │ ) -│ ║ │ │ s: Var (name=op) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) -│ ║ │ └── Filter (resultSizeEstimate=1.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[op], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="OP 1") -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="OP 2") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) -│ ║ │ s: Var (name=op) (bindingState=bound) -│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) -│ ║ ║ │ Str -│ ║ ║ │ Var (name=name2) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="op 0") -│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) -│ ║ s: Var (name=op) (bindingState=unbound) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ o: Var (name=name2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=op) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=op) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=0.06, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=2.00) + │ ║ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, unlockedFilters=Exists [left] + │ ║ │ │ StatementPattern (resultSizeEstimate=25.9K) + │ ║ │ │ Var (name=service) + │ ║ │ │ Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ ║ │ │ Var (name=op) + │ ║ │ │ source=unknown) + │ ║ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ └── Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=3.5M, plannedAccessRows=1.00, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[op], filterSelectivitySource=learned_filter, sharedJoinVars=[op]) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="OP 1") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="OP 2") + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ s: Var (name=op) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=5.5M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 0") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { -?op a . -?op ?name . -FILTER ((?name = "OP 1") || (?name = "OP 2")) -FILTER EXISTS { -?service ?op . -} -MINUS { -?op ?name2 . -FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) -} + ?op a . + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } } Theme: TRAIN z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 248 ms -Warmup execution 1/8 -Warmup execution 2/8 -Warmup execution 3/8 -Warmup execution 4/8 -Warmup execution 5/8 -Warmup execution 6/8 -Warmup execution 7/8 -Warmup execution 8/8 -Fastest execution time: 165 ms +Initial explain execution time: 254 ms +Warmup execution 1/7 +Warmup execution 2/7 +Warmup execution 3/7 +Warmup execution 4/7 +Warmup execution 5/7 +Warmup execution 6/7 +Warmup execution 7/7 +Fastest execution time: 158 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.3M, nextCallCountActual=1, nextTimeNanosActual=1.6K, firstRowTimeNanosActual=221.3M, openCountActual=1, lastRowTimeNanosActual=221.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.7M, avgNextNanosActual=1.7K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=2.2K, firstRowTimeNanosActual=221.2M, openCountActual=1, lastRowTimeNanosActual=221.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=2.3K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=917, firstRowTimeNanosActual=221.3M, openCountActual=1, lastRowTimeNanosActual=221.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=917) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=9, firstRowTimeNanosActual=221.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=221.3M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=500) -│ ╠══ Filter (resultSizeActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=25.8K, rowsDroppedActual=25.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.8K, exprTrueCountActual=9, exprEvalTimeNanosActual=19.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="Line 0") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="Line 1") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=653.2K, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=30.5K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K, resultSizeActual=0, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, inputRowsActual=18, rowsDroppedActual=18, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.6K, nextCallCountActual=9, nextTimeNanosActual=458, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.5K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=403, avgNextNanosActual=51, indexHitRateActual=1.00) [left] -│ ║ │ ║ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.4K, nextCallCountActual=9, nextTimeNanosActual=374, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.9K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=389, avgNextNanosActual=42, indexHitRateActual=1.00) [right] -│ ║ │ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=198.9M, nextCallCountActual=25.8K, nextTimeNanosActual=186.8K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=31.5K, leftRowsWithMatchActual=25.8K, openCountActual=1, lastRowTimeNanosActual=221.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=10187.2M, stddevActual=100.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.7K, avgNextNanosActual=7.21, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=83.4K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=83.4K, expansionFactorActual=0.24, sampleCountActual=2, varianceActual=0.58, stddevActual=0.76, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, resultSizeActual=83.4K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=83.4K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=25.8K, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=1.24, stddevActual=1.11, confidenceScoreActual=0.49, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=83.4K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.00, stddevActual=1.00, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=2.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=25.8K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=221.2M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=49, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=130, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=14.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=9.2K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=51, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=2.9K, resultSizeEstimate=8.6K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=12.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=8.2K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=44, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=83.4K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=83.4K, hasNextTimeNanosActual=15.6M, nextCallCountActual=83.4K, nextTimeNanosActual=3.6M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=83.4K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=7.3K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=143, avgNextNanosActual=43, indexHitRateActual=0.76) [right] -│ ║ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=s2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=37.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=83.4K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=83.4K, openCountActual=83.4K, lastRowTimeNanosActual=3.0K, closeCountActual=83.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=83.4K, nextPerHasNextRatioActual=0.24, avgHasNextNanosActual=347, avgNextNanosActual=43, indexHitRateActual=0.24) [right] -│ ║ ║ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=14.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=1.9K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=276, avgNextNanosActual=47, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=221.2M, openCountActual=1, lastRowTimeNanosActual=221.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=1.3K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=221.2M, nextCallCountActual=1, nextTimeNanosActual=708, aggregateEvalCountActual=9, firstRowTimeNanosActual=221.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=221.2M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=9.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=9, rowsDroppedActual=8, selectivityActual=0.11, expansionFactorActual=0.11, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=110.6M, avgNextNanosActual=708) + │ ╠══ Filter (resultSizeActual=9, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, inputRowsActual=25.8K, rowsDroppedActual=25.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=25.8K, exprFalseCountActual=25.8K, exprTrueCountActual=9, exprEvalTimeNanosActual=21.4M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="Line 0") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="Line 1") (exprEvalCountActual=25.8K, exprTrueCountActual=25.8K, exprEvalTimeNanosActual=741.2K, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=9, exprTrueCountActual=9, exprEvalTimeNanosActual=48.2K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.00, resultSizeActual=0, joinRightIteratorsCreatedActual=9, joinLeftBindingsConsumedActual=9, joinRightBindingsConsumedActual=9, inputRowsActual=18, rowsDroppedActual=18, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9, rightRowsScannedActual=9, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=4.4K, nextCallCountActual=9, nextTimeNanosActual=584, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[s1], firstRowTimeNanosActual=500, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=1.7K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=495, avgNextNanosActual=65, indexHitRateActual=1.00) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=9, hasNextCallCountActual=9, hasNextTrueCountActual=9, hasNextTimeNanosActual=3.5K, nextCallCountActual=9, nextTimeNanosActual=498, sourceRowsScannedActual=9, sourceRowsMatchedActual=9, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], sharedJoinVars=[op, s2], firstRowTimeNanosActual=416, indexLookupCountActual=9, openCountActual=9, lastRowTimeNanosActual=2.0K, closeCountActual=9, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=393, avgNextNanosActual=55, indexHitRateActual=1.00) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=25.8K, hasNextCallCountActual=25.8K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=195.9M, nextCallCountActual=25.8K, nextTimeNanosActual=239.7K, joinRightIteratorsCreatedActual=25.8K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, firstRowTimeNanosActual=24.5K, leftRowsWithMatchActual=25.8K, openCountActual=1, lastRowTimeNanosActual=221.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9822.2M, stddevActual=99.1K, confidenceScoreActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=7.6K, avgNextNanosActual=9.26, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5132.6M, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=83.4K, joinLeftBindingsConsumedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=83.4K, expansionFactorActual=0.24, sampleCountActual=2, varianceActual=0.57, stddevActual=0.75, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=25.8K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=76.2K, resultSizeActual=83.4K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=83.4K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=109.3K, rowsDroppedActual=25.8K, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=1.22, stddevActual=1.11, confidenceScoreActual=0.49, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=83.4K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.5K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=25.8K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=51.7K, rowsDroppedActual=25.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.64, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=25.8K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K, resultSizeActual=25.8K, joinRightIteratorsCreatedActual=8.6K, joinLeftBindingsConsumedActual=8.6K, joinRightBindingsConsumedActual=25.8K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=34.5K, rowsDroppedActual=8.6K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8.6K, rightRowsScannedActual=25.8K, avgRightRowsPerLeftActual=3.00, joinOutputPerLeftActual=3.00) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (costEstimate=2.9K, resultSizeEstimate=8.6K, resultSizeActual=8.6K, hasNextCallCountActual=8.6K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=1.1M, nextCallCountActual=8.6K, nextTimeNanosActual=424.5K, sourceRowsScannedActual=8.6K, sourceRowsMatchedActual=8.6K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=10.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=221.1M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=130, avgNextNanosActual=49, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=25.8K, hasNextCallCountActual=34.5K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=6.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=34.5K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=8.6K, plannedIndexName=spoc, firstRowTimeNanosActual=834, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=35.8K, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=194, avgNextNanosActual=50, indexHitRateActual=0.75) [right] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=s1) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=130, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=17.9M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=7.8K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=347, avgNextNanosActual=51, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ s: Var (name=s1) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=80, resultSizeEstimate=25.9K, resultSizeActual=83.4K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=83.4K, hasNextTimeNanosActual=16.7M, nextCallCountActual=83.4K, nextTimeNanosActual=3.6M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=83.4K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=6.9K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=153, avgNextNanosActual=44, indexHitRateActual=0.76) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=67.4K, resultSizeActual=25.8K, hasNextCallCountActual=109.3K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=44.2M, nextCallCountActual=25.8K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=109.3K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=83.4K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=83.4K, openCountActual=83.4K, lastRowTimeNanosActual=2.9K, closeCountActual=83.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=83.4K, nextPerHasNextRatioActual=0.24, avgHasNextNanosActual=404, avgNextNanosActual=44, indexHitRateActual=0.24) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=25.8K, hasNextCallCountActual=51.7K, hasNextTrueCountActual=25.8K, hasNextTimeNanosActual=15.7M, nextCallCountActual=25.8K, nextTimeNanosActual=1.3M, sourceRowsScannedActual=51.7K, sourceRowsMatchedActual=25.8K, sourceRowsFilteredActual=25.8K, plannedIndexName=spoc, firstRowTimeNanosActual=708, indexLookupCountActual=25.8K, openCountActual=25.8K, lastRowTimeNanosActual=1.8K, closeCountActual=25.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=25.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=304, avgNextNanosActual=51, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=service) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=service) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8392,133 +8799,133 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=optName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="Line 0") -│ ║ │ ║ ValueConstant (value="Line 1") -│ ║ │ ╚══ Exists -│ ║ │ Join (JoinIterator) (resultSizeEstimate=599.6K) -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ s: Var (name=s1) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) -│ ║ │ ║ o: Var (name=op) (bindingState=unbound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ s: Var (name=s2) (bindingState=bound) -│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) -│ ║ │ o: Var (name=op) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5227.1M, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=77.6K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2178.0M, optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=15291.176470588236 rawRows=25995.0 effectiveRows=25995.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45857.05882352941 rawRows=77957.0 effectiveRows=77957.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=15130.0 rawRows=25721.0 effectiveRows=25721.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=later tie-breaker index; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=314112.3529411765 rawRows=533991.0 effectiveRows=533991.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service type TrainService) score=15214.705882352942 rawRows=25865.0 effectiveRows=25865.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45628.23529411765 rawRows=77568.0 effectiveRows=77568.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=120627.64705882354 rawRows=205067.0 effectiveRows=205067.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45627.64705882353 rawRows=77567.0 effectiveRows=77567.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=121302.94117647059 rawRows=206215.0 effectiveRows=206215.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.177952081666667E9 rawRows=5.227084996E9 effectiveRows=5.227084996E9 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service type TrainService), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=5.227084996E9, effectiveRows=5.227084996E9, adjustedCost=2.177952081666667E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) -│ ║ ║ │ ║ │ ║ o: Var (name=s1) (bindingState=unbound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] -│ ║ ║ │ ║ │ s: Var (name=s1) (bindingState=bound) -│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) -│ ║ ║ │ ║ │ o: Var (name=line) (bindingState=unbound) -│ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] -│ ║ ║ │ ║ s: Var (name=service) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) -│ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] -│ ║ ║ │ s: Var (name=service) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) -│ ║ ║ │ o: Var (name=s2) (bindingState=unbound) -│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] -│ ║ ║ s: Var (name=s2) (bindingState=bound) -│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) -│ ║ ║ o: Var (name=line) (bindingState=bound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] -│ ║ s: Var (name=line) (bindingState=bound) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ o: Var (name=optName) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=service) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=service) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="Line 0") + │ ║ │ ║ ValueConstant (value="Line 1") + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=2.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, s1, s2, service], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[s1]) [left] + │ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=134.8K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_8ba830f_uri, _const_9993352d_uri, _const_a703e3e_uri, _const_f5e5585a_uri, line, op, s1, s2, service], sharedJoinVars=[op, s2]) [right] + │ ║ │ s: Var (name=s2) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5132.6M, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=76.2K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.5K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.9K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K, optimizer.candidateCount=16, optimizer.score=2138.6M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] promotedPrefixes=[] plannedOrder=[SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), SP(?service http://example.com/theme/train/runsOnSection ?s1), SP(?service http://example.com/theme/train/runsOnSection ?s2), SP(?s1 http://example.com/theme/train/partOfLine ?line), SP(?s2 http://example.com/theme/train/partOfLine ?line)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?service http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/train/TrainService), 1:SP(?service http://example.com/theme/train/runsOnSection ?s1), 2:SP(?service http://example.com/theme/train/runsOnSection ?s2), 3:SP(?s1 http://example.com/theme/train/partOfLine ?line), 4:SP(?s2 http://example.com/theme/train/partOfLine ?line)], optimizer.decisionTrace=initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s1) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?service type TrainService) right=SP(?service runsOnSection ?s2) score=24020.0 rawRows=25850.0 effectiveRows=25850.0 baseCostRows=40834.0 factorWorkRows=40834.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?service type TrainService) right=SP(?s1 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service type TrainService) right=SP(?s2 partOfLine ?line) score=5.81086724E9 rawRows=5.81086724E8 effectiveRows=5.81086724E8 baseCostRows=5.81086724E8 factorWorkRows=81961.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=51700.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s1 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s1) right=SP(?s2 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s1 partOfLine ?line) score=1.744405768E10 rawRows=1.744405768E9 effectiveRows=1.744405768E9 baseCostRows=1.744405768E9 factorWorkRows=92827.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?service runsOnSection ?s2) right=SP(?s2 partOfLine ?line) score=54604.117647058825 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=92827.0 factorWorkRows=92827.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?s1 partOfLine ?line) right=SP(?s2 partOfLine ?line) score=303937.0588235294 rawRows=516693.0 effectiveRows=516693.0 baseCostRows=516693.0 factorWorkRows=133954.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=45346.470588235294 rawRows=77089.0 effectiveRows=77089.0 baseCostRows=77089.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s1 partOfLine ?line) score=15023.529411764706 rawRows=25540.0 effectiveRows=25540.0 baseCostRows=25540.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=1.7419798E10 rawRows=1.7419798E9 effectiveRows=1.7419798E9 baseCostRows=1.7419798E9 factorWorkRows=66977.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?service runsOnSection ?s2) score=44802.94117647059 rawRows=76165.0 effectiveRows=76165.0 baseCostRows=76165.0 factorWorkRows=3.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=115898.82352941176 rawRows=197028.0 effectiveRows=197028.0 baseCostRows=197028.0 factorWorkRows=67388.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?s2 partOfLine ?line) score=2.1385862583333335E9 rawRows=5.13260702E9 effectiveRows=5.13260702E9 baseCostRows=5.13260702E9 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?s2 partOfLine ?line), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=later secondary tie-breaker index, optimizer.originalOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?service runsOnSection ?s2), SP(?s1 partOfLine ?line), SP(?s2 partOfLine ?line)], optimizer.chosenOrder=[SP(?service type TrainService), SP(?service runsOnSection ?s1), SP(?s1 partOfLine ?line), SP(?service runsOnSection ?s2), SP(?s2 partOfLine ?line)], optimizer.scoreComponents=rawRows=5.13260702E9, effectiveRows=5.13260702E9, baseCostRows=5.13260702E9, factorWorkRows=0.0, adjustedCost=2.1385862583333335E9, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ │ ║ s: Var (name=service) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) + │ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ ║ │ o: Var (name=s1) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] + │ ║ ║ │ ║ s: Var (name=s1) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ │ ║ o: Var (name=line) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] + │ ║ ║ │ s: Var (name=service) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ ║ ║ │ o: Var (name=s2) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=s2) (bindingState=bound) + │ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ ║ o: Var (name=line) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optName) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=service) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=service) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { -?service ?s1 . -?s1 ?line . -?service a . -?service ?s2 . -?s2 ?line . -OPTIONAL { -?line ?optName . -} -FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) + ?service a . + ?service ?s1 . + ?s1 ?line . + ?service ?s2 . + ?s2 ?line . + OPTIONAL { + ?line ?optName . + } + FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) } Theme: TRAIN z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 443 ms +Initial explain execution time: 485 ms Warmup execution 1/4 Warmup execution 2/4 Warmup execution 3/4 Warmup execution 4/4 -Fastest execution time: 272 ms +Fastest execution time: 284 ms -Projection (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=449.6M, nextCallCountActual=67.3K, nextTimeNanosActual=9.9M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=147) +Projection (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=456.7M, nextCallCountActual=67.3K, nextTimeNanosActual=9.7M, firstRowTimeNanosActual=427.5M, openCountActual=1, lastRowTimeNanosActual=473.2M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.8K, avgNextNanosActual=145) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "section" (hasNextFalseCountActual=0) ║ ProjectionElem "trackCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=448.3M, nextCallCountActual=67.3K, nextTimeNanosActual=6.4M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=96) -├── Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=446.8M, nextCallCountActual=67.3K, nextTimeNanosActual=3.7M, firstRowTimeNanosActual=420.0M, openCountActual=1, lastRowTimeNanosActual=466.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=55) -│ ╠══ Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=444.7M, nextCallCountActual=67.3K, nextTimeNanosActual=917.7K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=420.0M, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=466.0M, closeCountActual=1, exprEvalTimeNanosActual=18.4M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.6K, avgNextNanosActual=14, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=9.0M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.1K, hasNextFalseCountActual=0) -│ ║ └── Group (section) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=420.7M, nextCallCountActual=67.3K, nextTimeNanosActual=1.8M, aggregateEvalCountActual=269.5K, firstRowTimeNanosActual=420.0M, groupsCreatedActual=67.3K, openCountActual=1, lastRowTimeNanosActual=465.9M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=134.7K, rowsDroppedActual=67.3K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.2K, avgNextNanosActual=27) -│ ║ Filter (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=302.7M, nextCallCountActual=134.7K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=30.3K, exprEvalCountActual=134.7K, openCountActual=1, exprTrueCountActual=134.7K, lastRowTimeNanosActual=394.4M, closeCountActual=1, exprEvalTimeNanosActual=16.1M, inputRowsActual=134.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=13, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=134.7K, exprTrueCountActual=134.7K, exprEvalTimeNanosActual=6.3M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optOp) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=276.2M, nextCallCountActual=134.7K, nextTimeNanosActual=1.4M, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=134.7K, firstRowTimeNanosActual=24.9K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=388.2M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=202.1K, rowsDroppedActual=67.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=11, leftRowsProbedActual=67.3K, rightRowsScannedActual=134.7K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] -│ ║ ║ ├── Filter (resultSizeEstimate=66.3K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=87.6M, nextCallCountActual=67.3K, nextTimeNanosActual=970.7K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, plannedLookupComponents=[P], firstRowTimeNanosActual=20.4K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=388.2M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=71.6M, metricOrigin.varsAddedActual=derived, inputRowsActual=67.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=14, filterRejectRateActual=0) [left] -│ ║ ║ │ ╠══ Exists (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=67.1M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=30.3M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, plannedIndexName=spoc, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=375, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=450, indexHitRateActual=1.00) -│ ║ ║ │ ║ s: Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=7.5M, nextCallCountActual=67.3K, nextTimeNanosActual=3.8M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=9.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=388.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=58, indexHitRateActual=1.00) -│ ║ ║ │ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=67.5K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=27.0M, nextCallCountActual=67.3K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=417, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.4K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=201, avgNextNanosActual=61, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=61.6M, nextCallCountActual=134.7K, nextTimeNanosActual=16.4M, firstRowTimeNanosActual=583, openCountActual=67.3K, lastRowTimeNanosActual=2.5K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=183, avgNextNanosActual=122) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=38.3M, nextCallCountActual=134.7K, nextTimeNanosActual=7.3M, sourceRowsScannedActual=202.1K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=2.3K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=114, avgNextNanosActual=54, indexHitRateActual=0.67) -│ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optOp) (hasNextFalseCountActual=0) -│ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (trackCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_47823f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (trackCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=455.4M, nextCallCountActual=67.3K, nextTimeNanosActual=6.3M, firstRowTimeNanosActual=427.5M, openCountActual=1, lastRowTimeNanosActual=473.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.8K, avgNextNanosActual=95) + ├── Extension (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=453.9M, nextCallCountActual=67.3K, nextTimeNanosActual=3.5M, firstRowTimeNanosActual=427.5M, openCountActual=1, lastRowTimeNanosActual=473.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=53) + │ ╠══ Filter (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=451.9M, nextCallCountActual=67.3K, nextTimeNanosActual=961.4K, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=427.5M, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=473.2M, closeCountActual=1, exprEvalTimeNanosActual=17.6M, inputRowsActual=67.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.7K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=7.3M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_4982e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) + │ ║ └── Group (section) (resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=428.2M, nextCallCountActual=67.3K, nextTimeNanosActual=2.0M, aggregateEvalCountActual=269.5K, firstRowTimeNanosActual=427.5M, groupsCreatedActual=67.3K, openCountActual=1, lastRowTimeNanosActual=473.2M, maxGroupSizeActual=2, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=2.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=134.7K, rowsDroppedActual=67.3K, selectivityActual=0.50, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.4K, avgNextNanosActual=30) + │ ║ Filter (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=301.6M, nextCallCountActual=134.7K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=41.6K, exprEvalCountActual=134.7K, openCountActual=1, exprTrueCountActual=134.7K, lastRowTimeNanosActual=398.0M, closeCountActual=1, exprEvalTimeNanosActual=17.9M, inputRowsActual=134.7K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=134.7K, exprTrueCountActual=134.7K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optOp) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=134.7K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=134.7K, hasNextTimeNanosActual=273.1M, nextCallCountActual=134.7K, nextTimeNanosActual=1.8M, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=67.3K, joinRightBindingsConsumedActual=134.7K, firstRowTimeNanosActual=33.9K, leftRowsWithMatchActual=67.3K, openCountActual=1, lastRowTimeNanosActual=390.2M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=202.1K, rowsDroppedActual=67.3K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.0K, avgNextNanosActual=14, leftRowsProbedActual=67.3K, rightRowsScannedActual=134.7K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=68.0K, resultSizeActual=67.3K, joinRightIteratorsCreatedActual=67.3K, joinLeftBindingsConsumedActual=134.7K, joinRightBindingsConsumedActual=67.3K, inputRowsActual=134.7K, rowsDroppedActual=67.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=134.7K, rightRowsScannedActual=67.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=87.3M, nextCallCountActual=67.3K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=3.5M, plannedAccessRows=66.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, firstRowTimeNanosActual=25.8K, exprEvalCountActual=67.3K, openCountActual=1, exprTrueCountActual=67.3K, lastRowTimeNanosActual=390.2M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=71.4M, metricOrigin.varsAddedActual=derived, inputRowsActual=67.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.3K, avgNextNanosActual=16, filterRejectRateActual=0) [left] + │ ║ ║ │ ╠══ Exists (exprEvalCountActual=67.3K, exprTrueCountActual=67.3K, exprEvalTimeNanosActual=67.0M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=67.4K, resultSizeActual=0, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=32.6M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, plannedIndexName=spoc, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=459, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=485, indexHitRateActual=1.00) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=67.4K, resultSizeActual=67.3K, hasNextCallCountActual=67.3K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=7.9M, nextCallCountActual=67.3K, nextTimeNanosActual=3.5M, sourceRowsScannedActual=67.3K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=11.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=390.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=119, avgNextNanosActual=52, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=68.0K, resultSizeActual=67.3K, hasNextCallCountActual=134.7K, hasNextTrueCountActual=67.3K, hasNextTimeNanosActual=28.6M, nextCallCountActual=67.3K, nextTimeNanosActual=3.5M, sourceRowsScannedActual=134.7K, sourceRowsMatchedActual=67.3K, sourceRowsFilteredActual=67.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[section, track], sharedJoinVars=[section], firstRowTimeNanosActual=458, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=3.7K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212, avgNextNanosActual=53, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=60.3M, nextCallCountActual=134.7K, nextTimeNanosActual=15.4M, firstRowTimeNanosActual=542, openCountActual=67.3K, lastRowTimeNanosActual=2.8K, closeCountActual=67.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=179, avgNextNanosActual=115) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=134.8K, resultSizeActual=134.7K, hasNextCallCountActual=336.9K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=36.8M, nextCallCountActual=134.7K, nextTimeNanosActual=6.4M, sourceRowsScannedActual=202.1K, sourceRowsMatchedActual=134.7K, sourceRowsFilteredActual=67.3K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=67.3K, openCountActual=67.3K, lastRowTimeNanosActual=2.5K, closeCountActual=67.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=67.3K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=109, avgNextNanosActual=48, indexHitRateActual=0.67) + │ ║ │ s: Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optOp) (hasNextFalseCountActual=0) + │ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_4982e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (trackCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=track) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_4982e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (trackCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=track) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8527,65 +8934,65 @@ Projection ║ ProjectionElem "section" ║ ProjectionElem "trackCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (section) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optOp) (bindingState=bound) -│ ║ │ Var (name=section) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] -│ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ╠══ Exists -│ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) -│ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) -│ ║ ║ │ s: Var (name=section) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) -│ ║ ║ │ o: Var (name=track) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=67.5K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[section, track], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=section) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=134.8K) -│ ║ │ s: Var (name=section) (bindingState=bound) -│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) -│ ║ │ o: Var (name=op) (bindingState=unbound) -│ ║ └── ExtensionElem (optOp) -│ ║ Var (name=op) (bindingState=bound) -│ ║ GroupElem (_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678) -│ ║ Count -│ ║ Var (name=track) (bindingState=bound) -│ ║ GroupElem (trackCount) -│ ║ Count (Distinct) -│ ║ Var (name=track) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_97823f2fe36952f541b08a42a7b8ce15e70d012345678) -│ Count -│ Var (name=track) (bindingState=unbound) -└── ExtensionElem (trackCount) -Count (Distinct) -Var (name=track) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_9982e226babdcc344c88a5a61806b6a8e7f3012345678, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) (bindingState=bound) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=68.0K) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=66.3K, plannedFilterEvidenceCount=3.6M, plannedAccessRows=66.3K, plannedFilterPassRatio=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=66.3K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_pattern) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=68.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[section, track], sharedJoinVars=[section]) [right] + │ ║ ║ s: Var (name=section) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) (bindingState=bound) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) (bindingState=unbound) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) (bindingState=bound) + │ ║ GroupElem (_anon_having_9982e226babdcc344c88a5a61806b6a8e7f3012345678) + │ ║ Count + │ ║ Var (name=track) (bindingState=bound) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_9982e226babdcc344c88a5a61806b6a8e7f3012345678) + │ Count + │ Var (name=track) (bindingState=unbound) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { -?section ?track . -FILTER EXISTS { -?track a . -} -?section a . -OPTIONAL { -?section ?op . -BIND(?op AS ?optOp) -} -FILTER (?optOp != ?section) + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) } GROUP BY ?section HAVING (COUNT(?track) > 0) @@ -8593,61 +9000,61 @@ HAVING (COUNT(?track) > 0) Theme: TRAIN z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 439 ms +Initial explain execution time: 478 ms Warmup execution 1/4 Warmup execution 2/4 Warmup execution 3/4 Warmup execution 4/4 -Fastest execution time: 233 ms +Fastest execution time: 253 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=442.6M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=1.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=467.4M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=467.4M, openCountActual=1, lastRowTimeNanosActual=467.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233.7M, avgNextNanosActual=1.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=442.6M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=792) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=442.6M, nextCallCountActual=1, nextTimeNanosActual=583, aggregateEvalCountActual=176.2K, firstRowTimeNanosActual=442.6M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=442.6M, maxGroupSizeActual=176.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=176.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=176.2K, rowsDroppedActual=176.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221.3M, avgNextNanosActual=583) -│ ╠══ Difference (resultSizeActual=176.2K, hasNextCallCountActual=176.2K, hasNextTrueCountActual=176.2K, hasNextTimeNanosActual=420.1M, nextCallCountActual=176.2K, nextTimeNanosActual=1.7M, firstRowTimeNanosActual=58.3M, openCountActual=1, lastRowTimeNanosActual=442.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=280.6K, rowsDroppedActual=104.4K, selectivityActual=0.63, expansionFactorActual=0.63, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=10, leftRowsConsumedActual=269.5K, rightRowsConsumedActual=11.1K, overlapRowsActual=93.3K) -│ ║ ├── Filter (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=262.1M, nextCallCountActual=269.5K, nextTimeNanosActual=3.0M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.2K, exprEvalCountActual=269.5K, openCountActual=1, exprTrueCountActual=269.5K, lastRowTimeNanosActual=442.6M, closeCountActual=1, exprEvalTimeNanosActual=29.4M, inputRowsActual=269.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=973, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=269.5K, exprTrueCountActual=269.5K, exprEvalTimeNanosActual=11.5M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optSection) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=212.0M, nextCallCountActual=269.5K, nextTimeNanosActual=3.0M, joinRightIteratorsCreatedActual=59.7K, joinLeftBindingsConsumedActual=59.7K, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=12.6K, leftRowsWithMatchActual=59.7K, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=329.3K, rowsDroppedActual=59.7K, expansionFactorActual=0.82, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=787, avgNextNanosActual=11, leftRowsProbedActual=59.7K, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=4.51, joinMatchRateActual=1.00, joinOutputPerLeftActual=4.51, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Union (resultSizeActual=59.7K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=59.7K, hasNextTimeNanosActual=45.4M, nextCallCountActual=59.7K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=8.3K, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=761, avgNextNanosActual=20, leftRowsConsumedActual=29.8K, rightRowsConsumedActual=29.8K, leftRowsOutputContributionActual=29.8K, rightRowsOutputContributionActual=29.8K) [left] -│ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=29.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=232.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=63, indexHitRateActual=1.00) -│ ║ │ │ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.7M, nextCallCountActual=29.8K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=232.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=442.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=93, avgNextNanosActual=61, indexHitRateActual=1.00) [left] -│ ║ │ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.7M, nextCallCountActual=29.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=5.5K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=247, avgNextNanosActual=64, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=91.4M, nextCallCountActual=269.5K, nextTimeNanosActual=26.3M, firstRowTimeNanosActual=542, openCountActual=59.7K, lastRowTimeNanosActual=4.5K, closeCountActual=59.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=122, avgNextNanosActual=98) [right] -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=59.6M, nextCallCountActual=269.5K, nextTimeNanosActual=12.2M, sourceRowsScannedActual=381.1K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=111.5K, plannedIndexName=ospc, firstRowTimeNanosActual=500, indexLookupCountActual=59.7K, openCountActual=59.7K, lastRowTimeNanosActual=4.2K, closeCountActual=59.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=80, avgNextNanosActual=45, indexHitRateActual=0.71) -│ ║ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optSection) (hasNextFalseCountActual=0) -│ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=11.1K, hasNextCallCountActual=11.1K, hasNextTrueCountActual=11.1K, hasNextTimeNanosActual=43.0M, nextCallCountActual=11.1K, nextTimeNanosActual=143.0K, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=11.1K, sourceRowsFilteredActual=35.8K, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=14.6K, exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, openCountActual=1, exprTrueCountActual=11.1K, lastRowTimeNanosActual=51.8M, closeCountActual=1, exprEvalTimeNanosActual=34.8M, inputRowsActual=46.9K, rowsDroppedActual=35.8K, selectivityActual=0.24, expansionFactorActual=0.24, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=13, filterRejectRateActual=0.76) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, exprTrueCountActual=11.1K, exprEvalTimeNanosActual=31.9M, hasNextFalseCountActual=0) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=26.9M, hasNextFalseCountActual=0) -│ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=23.0M, hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── ValueConstant (value="op 1") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.9M, nextCallCountActual=46.9K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=51.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=85, avgNextNanosActual=39, indexHitRateActual=1.00) -│ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=467.4M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=467.4M, openCountActual=1, lastRowTimeNanosActual=467.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233.7M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=467.4M, nextCallCountActual=1, nextTimeNanosActual=625, aggregateEvalCountActual=176.2K, firstRowTimeNanosActual=467.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=467.4M, maxGroupSizeActual=176.2K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=176.2K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=176.2K, rowsDroppedActual=176.2K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233.7M, avgNextNanosActual=625) + │ ╠══ Difference (resultSizeActual=176.2K, hasNextCallCountActual=176.2K, hasNextTrueCountActual=176.2K, hasNextTimeNanosActual=440.4M, nextCallCountActual=176.2K, nextTimeNanosActual=2.1M, firstRowTimeNanosActual=62.5M, openCountActual=1, lastRowTimeNanosActual=467.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, inputRowsActual=280.6K, rowsDroppedActual=104.4K, selectivityActual=0.63, expansionFactorActual=0.63, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.5K, avgNextNanosActual=12, leftRowsConsumedActual=269.5K, rightRowsConsumedActual=11.1K, overlapRowsActual=93.3K) + │ ║ ├── Filter (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=279.2M, nextCallCountActual=269.5K, nextTimeNanosActual=4.1M, sourceRowsScannedActual=269.5K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=27.0K, exprEvalCountActual=269.5K, openCountActual=1, exprTrueCountActual=269.5K, lastRowTimeNanosActual=467.3M, closeCountActual=1, exprEvalTimeNanosActual=34.3M, inputRowsActual=269.5K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.0K, avgNextNanosActual=15, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=269.5K, exprTrueCountActual=269.5K, exprEvalTimeNanosActual=11.5M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optSection) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=269.5K, hasNextCallCountActual=269.5K, hasNextTrueCountActual=269.5K, hasNextTimeNanosActual=223.5M, nextCallCountActual=269.5K, nextTimeNanosActual=4.1M, joinRightIteratorsCreatedActual=59.7K, joinLeftBindingsConsumedActual=59.7K, joinRightBindingsConsumedActual=269.5K, firstRowTimeNanosActual=23.2K, leftRowsWithMatchActual=59.7K, openCountActual=1, lastRowTimeNanosActual=467.3M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=329.3K, rowsDroppedActual=59.7K, expansionFactorActual=0.82, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=829, avgNextNanosActual=15, leftRowsProbedActual=59.7K, rightRowsScannedActual=269.5K, avgRightRowsPerLeftActual=4.51, joinMatchRateActual=1.00, joinOutputPerLeftActual=4.51, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Union (resultSizeActual=59.7K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=59.7K, hasNextTimeNanosActual=46.8M, nextCallCountActual=59.7K, nextTimeNanosActual=1.2M, firstRowTimeNanosActual=15.1K, openCountActual=1, lastRowTimeNanosActual=467.3M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=784, avgNextNanosActual=21, leftRowsConsumedActual=29.8K, rightRowsConsumedActual=29.8K, leftRowsOutputContributionActual=29.8K, rightRowsOutputContributionActual=29.8K) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=29.8K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=17.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=243.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=96, avgNextNanosActual=54, indexHitRateActual=1.00) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K, resultSizeActual=29.8K, joinRightIteratorsCreatedActual=29.8K, joinLeftBindingsConsumedActual=29.8K, joinRightBindingsConsumedActual=29.8K, inputRowsActual=59.7K, rowsDroppedActual=29.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.08, stddevActual=0.29, confidenceScoreActual=0.61, hasNextFalseCountActual=0, leftRowsProbedActual=29.8K, rightRowsScannedActual=29.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ │ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=29.9K, resultSizeActual=29.8K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=29.8K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=1, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=243.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=467.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=97, avgNextNanosActual=65, indexHitRateActual=1.00) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ └── StatementPattern [index: spoc] (resultSizeEstimate=47.0K, resultSizeActual=29.8K, hasNextCallCountActual=59.7K, hasNextTrueCountActual=29.8K, hasNextTimeNanosActual=14.9M, nextCallCountActual=29.8K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=59.7K, sourceRowsMatchedActual=29.8K, sourceRowsFilteredActual=29.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[op], sharedJoinVars=[op], firstRowTimeNanosActual=583, indexLookupCountActual=29.8K, openCountActual=29.8K, lastRowTimeNanosActual=6.3K, closeCountActual=29.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=29.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=249, avgNextNanosActual=69, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=96.0M, nextCallCountActual=269.5K, nextTimeNanosActual=29.6M, firstRowTimeNanosActual=583, openCountActual=59.7K, lastRowTimeNanosActual=5.1K, closeCountActual=59.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=128, avgNextNanosActual=110) [right] + │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=134.8K, resultSizeActual=269.5K, hasNextCallCountActual=748.8K, hasNextTrueCountActual=689.0K, hasNextTimeNanosActual=62.5M, nextCallCountActual=269.5K, nextTimeNanosActual=12.5M, sourceRowsScannedActual=381.1K, sourceRowsMatchedActual=269.5K, sourceRowsFilteredActual=111.5K, plannedIndexName=ospc, firstRowTimeNanosActual=625, indexLookupCountActual=59.7K, openCountActual=59.7K, lastRowTimeNanosActual=4.9K, closeCountActual=59.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=59.7K, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=84, avgNextNanosActual=47, indexHitRateActual=0.71) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optSection) (hasNextFalseCountActual=0) + │ ║ │ Var (name=section) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=11.1K, hasNextCallCountActual=11.1K, hasNextTrueCountActual=11.1K, hasNextTimeNanosActual=44.3M, nextCallCountActual=11.1K, nextTimeNanosActual=164.3K, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=11.1K, sourceRowsFilteredActual=35.8K, plannedFilterEvidenceCount=2.9M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=26.7K, exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, openCountActual=1, exprTrueCountActual=11.1K, lastRowTimeNanosActual=53.3M, closeCountActual=1, exprEvalTimeNanosActual=36.0M, inputRowsActual=46.9K, rowsDroppedActual=35.8K, selectivityActual=0.24, expansionFactorActual=0.24, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, filterRejectRateActual=0.76) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) (exprEvalCountActual=46.9K, exprFalseCountActual=35.8K, exprTrueCountActual=11.1K, exprEvalTimeNanosActual=32.9M, hasNextFalseCountActual=0) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=27.8M, hasNextFalseCountActual=0) + │ ║ ║ │ Str (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=23.3M, hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=name2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── ValueConstant (value="op 1") (exprEvalCountActual=46.9K, exprTrueCountActual=46.9K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=47.0K, resultSizeActual=46.9K, hasNextCallCountActual=46.9K, hasNextTrueCountActual=46.9K, hasNextTimeNanosActual=3.7M, nextCallCountActual=46.9K, nextTimeNanosActual=1.8M, sourceRowsScannedActual=46.9K, sourceRowsMatchedActual=46.9K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=53.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=40, indexHitRateActual=1.00) + │ ║ s: Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=op) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=op) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8655,77 +9062,77 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optSection) (bindingState=bound) -│ ║ │ ║ Var (name=op) (bindingState=bound) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Union [left] -│ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) -│ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) -│ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) -│ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ │ s: Var (name=op) (bindingState=unbound) -│ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) -│ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[op], plannedLookupComponents=[S, P]) [right] -│ ║ │ │ s: Var (name=op) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ │ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) -│ ║ │ ║ s: Var (name=section) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) -│ ║ │ ║ o: Var (name=op) (bindingState=bound) -│ ║ │ ╚══ ExtensionElem (optSection) -│ ║ │ Var (name=section) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter) -│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) -│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) -│ ║ ║ │ Str -│ ║ ║ │ Var (name=name2) (bindingState=bound) -│ ║ ║ └── ValueConstant (value="op 1") -│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) -│ ║ s: Var (name=op) (bindingState=unbound) -│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) -│ ║ o: Var (name=name2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=op) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=op) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSection) (bindingState=bound) + │ ║ │ ║ Var (name=op) (bindingState=bound) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=29.9K) + │ ║ │ │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) + │ ║ │ │ ├── StatementPattern (resultSizeEstimate=29.9K, plannedAccessRows=37.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=37.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ │ s: Var (name=op) (bindingState=unbound) + │ ║ │ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) + │ ║ │ │ └── StatementPattern (resultSizeEstimate=47.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[op], sharedJoinVars=[op]) [right] + │ ║ │ │ s: Var (name=op) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ ║ s: Var (name=section) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ ║ o: Var (name=op) (bindingState=bound) + │ ║ │ ╚══ ExtensionElem (optSection) + │ ║ │ Var (name=section) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=2.9M, plannedFilterPassRatio=0.24, filterSelectivitySource=learned_filter) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=name2) (bindingState=bound) + │ ║ ║ └── ValueConstant (value="op 1") + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ s: Var (name=op) (bindingState=unbound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=name2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=op) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=op) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { -{ -?op a . -} -UNION -{ -?op a . -?op ?name . -} -OPTIONAL { -?section ?op . -BIND(?section AS ?optSection) -} -FILTER (?optSection != ?op) -MINUS { -?op ?name2 . -FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) -} + { + ?op a . + } + UNION + { + ?op a . + ?op ?name . + } + OPTIONAL { + ?section ?op . + BIND(?section AS ?optSection) + } + FILTER (?optSection != ?op) + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) + } } Theme: ELECTRICAL_GRID z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 102 ms +Initial explain execution time: 107 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -8736,45 +9143,45 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 49 ms +Fastest execution time: 54 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=77.9M, openCountActual=1, lastRowTimeNanosActual=78.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=81.9M, nextCallCountActual=1, nextTimeNanosActual=1.4K, firstRowTimeNanosActual=81.9M, openCountActual=1, lastRowTimeNanosActual=81.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.0M, avgNextNanosActual=1.4K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=78.0M, openCountActual=1, lastRowTimeNanosActual=78.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=792) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=77.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.3K, firstRowTimeNanosActual=78.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=78.0M, maxGroupSizeActual=7.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=7.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.3K, rowsDroppedActual=7.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=39.0M, avgNextNanosActual=542) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=73.1M, nextCallCountActual=7.3K, nextTimeNanosActual=50.5K, joinRightIteratorsCreatedActual=7.3K, joinLeftBindingsConsumedActual=7.3K, joinRightBindingsConsumedActual=7.3K, firstRowTimeNanosActual=46.5K, leftRowsWithMatchActual=7.3K, openCountActual=1, lastRowTimeNanosActual=77.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=14.7K, rowsDroppedActual=7.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.9K, avgNextNanosActual=6.84, leftRowsProbedActual=7.3K, rightRowsScannedActual=7.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Filter (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=64.8M, nextCallCountActual=7.3K, nextTimeNanosActual=114.2K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=1.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=42.9K, exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, openCountActual=1, exprTrueCountActual=7.3K, lastRowTimeNanosActual=77.9M, closeCountActual=1, exprEvalTimeNanosActual=6.7M, inputRowsActual=9.3K, rowsDroppedActual=1.9K, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.8K, avgNextNanosActual=15, filterRejectRateActual=0.21) [left] -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, exprTrueCountActual=7.3K, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optCap) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=4.8K, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=57.3M, nextCallCountActual=9.3K, nextTimeNanosActual=105.9K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, firstRowTimeNanosActual=35.3K, leftRowsWithMatchActual=9.3K, openCountActual=1, lastRowTimeNanosActual=77.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.1K, avgNextNanosActual=11, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=956.2K, nextCallCountActual=9.3K, nextTimeNanosActual=568.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=77.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=61, indexHitRateActual=1.00) [left] -│ ║ │ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=49.8M, nextCallCountActual=9.3K, nextTimeNanosActual=392.2K, firstRowTimeNanosActual=6.1K, openCountActual=9.3K, lastRowTimeNanosActual=7.5K, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.7K, avgNextNanosActual=42) [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=37.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.25, joinOutputPerLeftActual=0.25) -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=8.8M, nextCallCountActual=37.3K, nextTimeNanosActual=2.0M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=750, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.4K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=190, avgNextNanosActual=54, indexHitRateActual=0.44) [left] -│ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=18.3M, nextCallCountActual=9.3K, nextTimeNanosActual=488.1K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[S, P], firstRowTimeNanosActual=833, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=1.9K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=393, avgNextNanosActual=52, indexHitRateActual=0.20) [right] -│ ║ │ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optCap) (hasNextFalseCountActual=0) -│ ║ │ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=7.3K, hasNextCallCountActual=14.7K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=3.7M, nextCallCountActual=7.3K, nextTimeNanosActual=402.6K, sourceRowsScannedActual=14.7K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=7.3K, plannedIndexName=spoc, firstRowTimeNanosActual=541, indexLookupCountActual=7.3K, openCountActual=7.3K, lastRowTimeNanosActual=1.2K, closeCountActual=7.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=7.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=255, avgNextNanosActual=54, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=81.9M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=81.9M, openCountActual=1, lastRowTimeNanosActual=81.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.0M, avgNextNanosActual=875) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=81.9M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=7.3K, firstRowTimeNanosActual=81.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=81.9M, maxGroupSizeActual=7.3K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=7.4K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=7.3K, rowsDroppedActual=7.3K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=41.0M, avgNextNanosActual=542) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=76.6M, nextCallCountActual=7.3K, nextTimeNanosActual=72.4K, joinRightIteratorsCreatedActual=7.3K, joinLeftBindingsConsumedActual=7.3K, joinRightBindingsConsumedActual=7.3K, firstRowTimeNanosActual=44.5K, leftRowsWithMatchActual=7.3K, openCountActual=1, lastRowTimeNanosActual=81.9M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=14.7K, rowsDroppedActual=7.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.4K, avgNextNanosActual=9.79, leftRowsProbedActual=7.3K, rightRowsScannedActual=7.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Filter (resultSizeActual=7.3K, hasNextCallCountActual=7.3K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=67.7M, nextCallCountActual=7.3K, nextTimeNanosActual=141.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=1.9K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=39.9K, exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, openCountActual=1, exprTrueCountActual=7.3K, lastRowTimeNanosActual=81.8M, closeCountActual=1, exprEvalTimeNanosActual=8.0M, inputRowsActual=9.3K, rowsDroppedActual=1.9K, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.2K, avgNextNanosActual=19, filterRejectRateActual=0.21) [left] + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=9.3K, exprFalseCountActual=1.9K, exprTrueCountActual=7.3K, exprEvalTimeNanosActual=7.0M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optCap) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.0K, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=59.0M, nextCallCountActual=9.3K, nextTimeNanosActual=113.6K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, firstRowTimeNanosActual=30.7K, leftRowsWithMatchActual=9.3K, openCountActual=1, lastRowTimeNanosActual=81.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=6.3K, avgNextNanosActual=12, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=943.9K, nextCallCountActual=9.3K, nextTimeNanosActual=570.8K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=9.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=81.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=101, avgNextNanosActual=61, indexHitRateActual=1.00) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=51.5M, nextCallCountActual=9.3K, nextTimeNanosActual=436.8K, firstRowTimeNanosActual=6.0K, openCountActual=9.3K, lastRowTimeNanosActual=7.5K, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=2.8K, avgNextNanosActual=47) [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=37.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.25, joinOutputPerLeftActual=0.25) + │ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=9.3M, nextCallCountActual=37.3K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=4.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[substation], firstRowTimeNanosActual=666, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.3K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=199, avgNextNanosActual=58, indexHitRateActual=0.44) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=18.7M, nextCallCountActual=9.3K, nextTimeNanosActual=516.2K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], sharedJoinVars=[generator], firstRowTimeNanosActual=959, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.0K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=400, avgNextNanosActual=55, indexHitRateActual=0.20) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optCap) (hasNextFalseCountActual=0) + │ ║ │ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=7.3K, hasNextCallCountActual=14.7K, hasNextTrueCountActual=7.3K, hasNextTimeNanosActual=3.9M, nextCallCountActual=7.3K, nextTimeNanosActual=416.1K, sourceRowsScannedActual=14.7K, sourceRowsMatchedActual=7.3K, sourceRowsFilteredActual=7.3K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=7.3K, openCountActual=7.3K, lastRowTimeNanosActual=1.2K, closeCountActual=7.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=7.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=268, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8782,59 +9189,59 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optCap) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="600"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] -│ ║ │ │ s: Var (name=substation) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.2K) -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=generator) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ │ ║ o: Var (name=cap) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optCap) -│ ║ │ Var (name=cap) (bindingState=bound) -│ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] -│ ║ s: Var (name=substation) (bindingState=bound) -│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ o: Var (name=name) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=substation) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=substation) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) [left] + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optCap) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=4.00) + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=4.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, substation], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[substation]) [left] + │ ║ │ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_ac9f03d3_uri, _const_f5e5585a_uri, generator, substation], sharedJoinVars=[generator]) [right] + │ ║ │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optCap) + │ ║ │ Var (name=cap) (bindingState=bound) + │ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=substation) (bindingState=bound) + │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ o: Var (name=name) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=substation) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=substation) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { -?substation a . -OPTIONAL { -?generator ?substation . -?generator ?cap . -BIND(?cap AS ?optCap) -} -FILTER (?optCap > 600) -OPTIONAL { -?substation ?name . -} + ?substation a . + OPTIONAL { + ?generator ?substation . + ?generator ?cap . + BIND(?cap AS ?optCap) + } + FILTER (?optCap > 600) + OPTIONAL { + ?substation ?name . + } } Theme: ELECTRICAL_GRID z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 93 ms +Initial explain execution time: 67 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -8845,68 +9252,68 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 57 ms +Fastest execution time: 40 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=87.4M, openCountActual=1, lastRowTimeNanosActual=87.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=56.5M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=56.5M, openCountActual=1, lastRowTimeNanosActual=56.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=28.3M, avgNextNanosActual=1.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=87.4M, openCountActual=1, lastRowTimeNanosActual=87.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=1000) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=87.4M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=8, firstRowTimeNanosActual=87.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=87.4M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=43.7M, avgNextNanosActual=500) -│ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=87.4M, nextCallCountActual=8, nextTimeNanosActual=208, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, firstRowTimeNanosActual=32.1K, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=87.4M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=8.7M, avgNextNanosActual=26, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) -│ ║ ├── Union (resultSizeActual=8, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left] -│ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=21.8M, nextCallCountActual=4, nextTimeNanosActual=208, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=29.9K, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=21.8M, closeCountActual=1, exprEvalTimeNanosActual=8.8M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=4.4M, avgNextNanosActual=52, filterRejectRateActual=1.00) -│ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=7.6M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=775.5K, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=709, hasNextFalseCountActual=0) -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=626, nextCallCountActual=2, nextTimeNanosActual=542, firstRowTimeNanosActual=17.5K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=23.9K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=271) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] -│ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=973.6K, nextCallCountActual=9.3K, nextTimeNanosActual=491.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=53, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=431.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=458, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=1.7K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=46, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=8.2M, hasNextFalseCountActual=0) -│ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=6.1M, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=791.5K, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) -│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=541, nextCallCountActual=2, nextTimeNanosActual=292, firstRowTimeNanosActual=21.8M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=21.8M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=180, avgNextNanosActual=146) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=37.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=46.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.20, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.3K) [right] -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K, resultSizeActual=37.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=37.3K, inputRowsActual=46.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=3.99, joinOutputPerLeftActual=3.99) [left] -│ ║ │ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=1.0M, nextCallCountActual=9.3K, nextTimeNanosActual=488.5K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=21.8M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=87.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=117, avgNextNanosActual=52, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=9.3M, nextCallCountActual=37.3K, nextTimeNanosActual=1.9M, sourceRowsScannedActual=84.2K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=46.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O], firstRowTimeNanosActual=583, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=7.1K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=199, avgNextNanosActual=53, indexHitRateActual=0.44) [right] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=46.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=16.4M, nextCallCountActual=9.3K, nextTimeNanosActual=453.3K, sourceRowsScannedActual=46.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=37.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=958, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.1K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.20, avgHasNextNanosActual=351, avgNextNanosActual=48, indexHitRateActual=0.20) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=4.3K, nextCallCountActual=4, nextTimeNanosActual=499, sourceRowsScannedActual=12, sourceRowsMatchedActual=4, sourceRowsFilteredActual=8, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=875, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=365, avgNextNanosActual=125, indexHitRateActual=0.33) [right] -│ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=substation2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=56.5M, nextCallCountActual=1, nextTimeNanosActual=959, firstRowTimeNanosActual=56.5M, openCountActual=1, lastRowTimeNanosActual=56.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=28.3M, avgNextNanosActual=959) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=56.5M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=8, firstRowTimeNanosActual=56.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=56.5M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=1, varsDroppedActual=10, avgGroupSizeActual=8.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=8, rowsDroppedActual=7, selectivityActual=0.13, expansionFactorActual=0.13, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=28.3M, avgNextNanosActual=500) + │ ╠══ LeftJoin (LeftJoinIterator) (resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=9, hasNextTimeNanosActual=56.5M, nextCallCountActual=8, nextTimeNanosActual=167, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=4, firstRowTimeNanosActual=55.6K, leftRowsWithMatchActual=4, openCountActual=1, emptyRightProbeCountActual=4, lastRowTimeNanosActual=56.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=12, rowsDroppedActual=4, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=5.7M, avgNextNanosActual=21, leftRowsProbedActual=8, rightRowsScannedActual=4, avgRightRowsPerLeftActual=0.50, joinMatchRateActual=0.50, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=4) + │ ║ ├── Union (resultSizeActual=8, hasNextFalseCountActual=0, leftRowsConsumedActual=4, rightRowsConsumedActual=4, leftRowsOutputContributionActual=4, rightRowsOutputContributionActual=4) [left] + │ ║ │ ╠══ Filter (resultSizeActual=4, hasNextCallCountActual=5, hasNextTrueCountActual=4, hasNextTimeNanosActual=21.6M, nextCallCountActual=4, nextTimeNanosActual=168, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=4, sourceRowsFilteredActual=18.7K, plannedFilterEvidenceCount=12.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, firstRowTimeNanosActual=53.6K, exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, openCountActual=1, exprTrueCountActual=4, lastRowTimeNanosActual=21.6M, closeCountActual=1, exprEvalTimeNanosActual=9.2M, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=4.3M, avgNextNanosActual=42, filterRejectRateActual=1.00) + │ ║ │ ║ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=7.7M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=836.4K, hasNextFalseCountActual=0) + │ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.1K, hasNextFalseCountActual=0) + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=1.0K, nextCallCountActual=2, nextTimeNanosActual=541, firstRowTimeNanosActual=23.4K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=40.6K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=347, avgNextNanosActual=271) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [right] + │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=787.8K, nextCallCountActual=9.3K, nextTimeNanosActual=462.6K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedAccessRows=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=13.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=21.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=84, avgNextNanosActual=49, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=428.2K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity], firstRowTimeNanosActual=667, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.3K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=46, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ╚══ Filter (resultSizeActual=4, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=12.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root, inputRowsActual=18.7K, rowsDroppedActual=18.7K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ │ ├── Or (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=4, shortCircuitCountActual=2, exprEvalTimeNanosActual=8.0M, hasNextFalseCountActual=0) + │ ║ │ │ ╠══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Compare (=) (exprEvalCountActual=18.7K, exprFalseCountActual=18.7K, exprTrueCountActual=2, exprEvalTimeNanosActual=764.1K, hasNextFalseCountActual=0) + │ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="Substation 3") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.5K, resultSizeActual=18.7K, joinLeftBindingsConsumedActual=2, joinType=Cartesian product, inputRowsActual=9.3K, expansionFactorActual=2.00, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=9.4K) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=500, nextCallCountActual=2, nextTimeNanosActual=209, firstRowTimeNanosActual=21.6M, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=21.6M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=167, avgNextNanosActual=105) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.5K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.3K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=921.4K, nextCallCountActual=9.3K, nextTimeNanosActual=452.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=21.6M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=56.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=98, avgNextNanosActual=48, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=7.9M, nextCallCountActual=9.3K, nextTimeNanosActual=519.7K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity], firstRowTimeNanosActual=1.0K, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=3.2K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=425, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.5K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.3M, nextCallCountActual=9.3K, nextTimeNanosActual=506.5K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, substation, target], sharedJoinVars=[substation], firstRowTimeNanosActual=458, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=1.7K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=233, avgNextNanosActual=54, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=4, hasNextCallCountActual=12, hasNextTrueCountActual=4, hasNextTimeNanosActual=3.9K, nextCallCountActual=4, nextTimeNanosActual=292, sourceRowsScannedActual=12, sourceRowsMatchedActual=4, sourceRowsFilteredActual=8, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=709, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=326, avgNextNanosActual=73, indexHitRateActual=0.33) [right] + │ ║ s: Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=substation2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=entity) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=entity) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -8914,97 +9321,97 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ LeftJoin -│ ║ ├── Union [left] -│ ║ │ ╠══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ║ ├── Or -│ ║ │ ║ │ ╠══ Compare (=) -│ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ ║ │ ╚══ Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="Substation 3") -│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) -│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ║ s: Var (name=entity) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) -│ ║ │ ╚══ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=root) -│ ║ │ ├── Or -│ ║ │ │ ╠══ Compare (=) -│ ║ │ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ │ ║ Var (name=target) (bindingState=bound) -│ ║ │ │ ╚══ Compare (=) -│ ║ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ ValueConstant (value="Substation 3") -│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.2K, joinType=Cartesian product) -│ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] -│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) [right] -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=36.6K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[name, substation, target], plannedLookupComponents=[O]) [right] -│ ║ │ │ s: Var (name=entity) (bindingState=unbound) -│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ │ │ o: Var (name=substation) (bindingState=bound) -│ ║ │ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[entity, name, substation, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ s: Var (name=entity) (bindingState=bound) -│ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) -│ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] -│ ║ s: Var (name=entity) (bindingState=bound) -│ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ o: Var (name=substation2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=entity) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=entity) (bindingState=unbound) + ├── Group () + │ ╠══ LeftJoin + │ ║ ├── Union [left] + │ ║ │ ╠══ Filter (plannedFilterEvidenceCount=12.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ║ ├── Or + │ ║ │ ║ │ ╠══ Compare (=) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ ║ │ ╚══ Compare (=) + │ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ValueConstant (value="Substation 3") + │ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=9.4K, joinType=Cartesian product) + │ ║ │ ║ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.4K) [right] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=entity) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[entity, name, target], sharedJoinVars=[entity]) [right] + │ ║ │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ╚══ Filter (plannedFilterEvidenceCount=12.7M, plannedFilterPassRatio=0.00, filterSelectivitySource=learned_filter, deferredFilterScope=root) + │ ║ │ ├── Or + │ ║ │ │ ╠══ Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ Var (name=target) (bindingState=bound) + │ ║ │ │ ╚══ Compare (=) + │ ║ │ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ValueConstant (value="Substation 3") + │ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=9.5K, joinType=Cartesian product) + │ ║ │ ╠══ BindingSetAssignment ([[target="Substation 1"], [target="Substation 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] + │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=9.5K) [right] + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=9.2K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=entity) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, target], sharedJoinVars=[entity]) [right] + │ ║ │ │ s: Var (name=entity) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=9.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[entity, substation, target], sharedJoinVars=[substation]) [right] + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=37.4K) [right] + │ ║ s: Var (name=entity) (bindingState=bound) + │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ o: Var (name=substation2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=entity) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=entity) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { -{ -VALUES ?target { "Substation 1" "Substation 2" } -{ -{ -?entity ?name . -?entity a . -} -} -FILTER ((?name = ?target) || (?name = "Substation 3")) -} -UNION -{ -VALUES ?target { "Substation 1" "Substation 2" } -{ -{ -?substation ?name . -?entity ?substation . -?entity a . -} -} -FILTER ((?name = ?target) || (?name = "Substation 3")) -} -OPTIONAL { -?entity ?substation2 . -} + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity ?name . + ?entity a . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + VALUES ?target { "Substation 1" "Substation 2" } + { + { + ?entity a . + ?entity ?substation . + ?substation ?name . + } + } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } } Theme: ELECTRICAL_GRID z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 199 ms +Initial explain execution time: 17 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -9015,56 +9422,56 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 99 ms +Fastest execution time: 8 ms -Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=185.4M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=333) +Projection (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.8M, nextCallCountActual=10, nextTimeNanosActual=3.8K, firstRowTimeNanosActual=7.8M, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=715.1K, avgNextNanosActual=383) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "transformer" (hasNextFalseCountActual=0) ║ ProjectionElem "meterCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=185.5M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=175) -├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=1.3K, firstRowTimeNanosActual=185.5M, openCountActual=1, lastRowTimeNanosActual=185.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=138) -│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.5M, nextCallCountActual=10, nextTimeNanosActual=376, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=185.5M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=185.5M, closeCountActual=1, exprEvalTimeNanosActual=5.5K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=38, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=4.4K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=5.1K, hasNextFalseCountActual=0) -│ ║ └── Group (transformer) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=185.4M, nextCallCountActual=10, nextTimeNanosActual=877, aggregateEvalCountActual=76, firstRowTimeNanosActual=185.4M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=185.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=3.80, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38, rowsDroppedActual=28, selectivityActual=0.26, expansionFactorActual=0.26, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=16.9M, avgNextNanosActual=88) -│ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=38, hasNextCallCountActual=40, hasNextTrueCountActual=39, hasNextTimeNanosActual=185.4M, nextCallCountActual=38, nextTimeNanosActual=499, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=38, firstRowTimeNanosActual=30.5K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=185.4M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=48, rowsDroppedActual=10, expansionFactorActual=0.79, sampleCountActual=2, varianceActual=1.7K, stddevActual=41, confidenceScoreActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=4.6M, avgNextNanosActual=13, leftRowsProbedActual=10, rightRowsScannedActual=38, avgRightRowsPerLeftActual=3.80, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.80, leftJoinNullExtendedRowsActual=0) -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=10, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=10, inputRowsActual=28.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=5.0K, stddevActual=71, confidenceScoreActual=0.03, hasNextFalseCountActual=0, leftRowsProbedActual=10, rightRowsScannedActual=10, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.8M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=8.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=185.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=40, indexHitRateActual=1.00) [left] -│ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=18.7M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P], firstRowTimeNanosActual=834, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=5.6K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=335, avgNextNanosActual=41, indexHitRateActual=0.50) [right] -│ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, resultSizeActual=10, hasNextCallCountActual=28.0K, hasNextTrueCountActual=10, hasNextTimeNanosActual=86.6M, nextCallCountActual=10, nextTimeNanosActual=292, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=10, sourceRowsFilteredActual=28.0K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=917, exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, openCountActual=28.0K, exprTrueCountActual=10, lastRowTimeNanosActual=2.7K, closeCountActual=28.0K, exprEvalTimeNanosActual=13.5M, inputRowsActual=28.0K, rowsDroppedActual=28.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.1K, avgNextNanosActual=29, filterRejectRateActual=1.00) [right] -│ ║ │ ├── ListMemberOperator (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=10, exprEvalTimeNanosActual=11.9M, hasNextFalseCountActual=0) -│ ║ │ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Substation 0") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=836.9K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Substation 1") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=919.6K, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="Substation 2") (exprEvalCountActual=28.0K, exprTrueCountActual=28.0K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=12.2M, nextCallCountActual=28.0K, nextTimeNanosActual=994.8K, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=833, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=36, indexHitRateActual=0.50) -│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=38, hasNextCallCountActual=104, hasNextTrueCountActual=94, hasNextTimeNanosActual=8.4K, nextCallCountActual=38, nextTimeNanosActual=2.5K, sourceRowsScannedActual=48, sourceRowsMatchedActual=38, sourceRowsFilteredActual=10, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=2.6K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.37, avgHasNextNanosActual=81, avgNextNanosActual=67, indexHitRateActual=0.79) [right] -│ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (meterCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_40133f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (meterCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.8M, nextCallCountActual=10, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=7.8M, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=715.1K, avgNextNanosActual=183) + ├── Extension (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.8M, nextCallCountActual=10, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=7.8M, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=715.0K, avgNextNanosActual=117) + │ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.8M, nextCallCountActual=10, nextTimeNanosActual=209, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=7.8M, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=7.8M, closeCountActual=1, exprEvalTimeNanosActual=5.5K, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=714.3K, avgNextNanosActual=21, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=4.3K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_4213e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) + │ ║ └── Group (transformer) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.8M, nextCallCountActual=10, nextTimeNanosActual=583, aggregateEvalCountActual=76, firstRowTimeNanosActual=7.8M, groupsCreatedActual=10, openCountActual=1, lastRowTimeNanosActual=7.8M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=2, varsDroppedActual=8, avgGroupSizeActual=3.80, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=38, rowsDroppedActual=28, selectivityActual=0.26, expansionFactorActual=0.26, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=713.2K, avgNextNanosActual=58) + │ ║ LeftJoin (LeftJoinIterator) (resultSizeActual=38, hasNextCallCountActual=40, hasNextTrueCountActual=39, hasNextTimeNanosActual=7.7M, nextCallCountActual=38, nextTimeNanosActual=831, joinRightIteratorsCreatedActual=10, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=38, firstRowTimeNanosActual=30.7K, leftRowsWithMatchActual=10, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, maxRightRowsPerLeftActual=6, inputRowsActual=48, rowsDroppedActual=10, expansionFactorActual=0.79, sampleCountActual=2, varianceActual=1.4K, stddevActual=37, confidenceScoreActual=0.05, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=195.0K, avgNextNanosActual=22, leftRowsProbedActual=10, rightRowsScannedActual=38, avgRightRowsPerLeftActual=3.80, joinMatchRateActual=1.00, joinOutputPerLeftActual=3.80, leftJoinNullExtendedRowsActual=0) + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=10, joinRightIteratorsCreatedActual=13, joinLeftBindingsConsumedActual=10, joinRightBindingsConsumedActual=10, inputRowsActual=23, rowsDroppedActual=13, expansionFactorActual=0.43, sampleCountActual=2, varianceActual=2.1M, stddevActual=1.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=10, rightRowsScannedActual=10, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=37, resultSizeActual=13, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=13, inputRowsActual=16, rowsDroppedActual=3, expansionFactorActual=0.81, sampleCountActual=2, varianceActual=2.1M, stddevActual=1.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=13, avgRightRowsPerLeftActual=4.33, joinOutputPerLeftActual=4.33) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=7.7M, nextCallCountActual=3, nextTimeNanosActual=457, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=3, sourceRowsFilteredActual=9.3K, plannedFilterEvidenceCount=14.9M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=13.7K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=3, lastRowTimeNanosActual=7.8M, closeCountActual=1, exprEvalTimeNanosActual=6.3M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=1.9M, avgNextNanosActual=152, filterRejectRateActual=1.00) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=3, exprEvalTimeNanosActual=5.7M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=382.6K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=263.0K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=374.1K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=704.6K, nextCallCountActual=9.3K, nextTimeNanosActual=294.5K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=6.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=75, avgNextNanosActual=31, indexHitRateActual=1.00) + │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=13, hasNextCallCountActual=16, hasNextTrueCountActual=13, hasNextTimeNanosActual=7.5K, nextCallCountActual=13, nextTimeNanosActual=1.4K, sourceRowsScannedActual=23, sourceRowsMatchedActual=13, sourceRowsFilteredActual=10, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], sharedJoinVars=[substation], firstRowTimeNanosActual=750, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=21.3K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.81, avgHasNextNanosActual=471, avgNextNanosActual=109, indexHitRateActual=0.57) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=28.7K, resultSizeActual=10, hasNextCallCountActual=23, hasNextTrueCountActual=10, hasNextTimeNanosActual=9.0K, nextCallCountActual=10, nextTimeNanosActual=709, sourceRowsScannedActual=23, sourceRowsMatchedActual=10, sourceRowsFilteredActual=13, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[name, substation, transformer], sharedJoinVars=[transformer], firstRowTimeNanosActual=667, indexLookupCountActual=13, openCountActual=13, lastRowTimeNanosActual=500, closeCountActual=13, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=13, nextPerHasNextRatioActual=0.43, avgHasNextNanosActual=393, avgNextNanosActual=71, indexHitRateActual=0.43) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=38, hasNextCallCountActual=104, hasNextTrueCountActual=94, hasNextTimeNanosActual=8.9K, nextCallCountActual=38, nextTimeNanosActual=2.1K, sourceRowsScannedActual=48, sourceRowsMatchedActual=38, sourceRowsFilteredActual=10, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=3.7K, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10, nextPerHasNextRatioActual=0.37, avgHasNextNanosActual=86, avgNextNanosActual=56, indexHitRateActual=0.79) [right] + │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_4213e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (meterCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_4213e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (meterCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9073,60 +9480,60 @@ Projection ║ ProjectionElem "transformer" ║ ProjectionElem "meterCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (transformer) -│ ║ LeftJoin -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=28.7K) [left] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=transformer) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] -│ ║ │ ║ s: Var (name=transformer) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ │ ║ o: Var (name=substation) (bindingState=unbound) -│ ║ │ ╚══ Filter (resultSizeEstimate=1.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ├── ListMemberOperator -│ ║ │ │ Var (name=name) (bindingState=bound) -│ ║ │ │ ValueConstant (value="Substation 0") -│ ║ │ │ ValueConstant (value="Substation 1") -│ ║ │ │ ValueConstant (value="Substation 2") -│ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) -│ ║ │ s: Var (name=substation) (bindingState=bound) -│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] -│ ║ s: Var (name=transformer) (bindingState=bound) -│ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) -│ ║ o: Var (name=meter) (bindingState=unbound) -│ ║ GroupElem (_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678) -│ ║ Count -│ ║ Var (name=meter) (bindingState=bound) -│ ║ GroupElem (meterCount) -│ ║ Count (Distinct) -│ ║ Var (name=meter) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_90133f2fe36952f541b08a42a7b8ce15e70d012345678) -│ Count -│ Var (name=meter) (bindingState=unbound) -└── ExtensionElem (meterCount) -Count (Distinct) -Var (name=meter) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_9213e226babdcc344c88a5a61806b6a8e7f3012345678, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (transformer) + │ ║ LeftJoin + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=37) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=3.00, plannedFilterEvidenceCount=14.9M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 1") + │ ║ │ ║ │ ║ ValueConstant (value="Substation 2") + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], sharedJoinVars=[substation]) [right] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=28.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[name, substation, transformer], sharedJoinVars=[transformer]) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ GroupElem (_anon_having_9213e226babdcc344c88a5a61806b6a8e7f3012345678) + │ ║ Count + │ ║ Var (name=meter) (bindingState=bound) + │ ║ GroupElem (meterCount) + │ ║ Count (Distinct) + │ ║ Var (name=meter) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_9213e226babdcc344c88a5a61806b6a8e7f3012345678) + │ Count + │ Var (name=meter) (bindingState=unbound) + └── ExtensionElem (meterCount) + Count (Distinct) + Var (name=meter) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?transformer (COUNT(DISTINCT ?meter) AS ?meterCount) WHERE { -?transformer a . -?transformer ?substation . -?substation ?name . -FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) -OPTIONAL { -?transformer ?meter . -} + ?substation ?name . + FILTER (?name IN ("Substation 0", "Substation 1", "Substation 2")) + ?transformer ?substation . + ?transformer a . + OPTIONAL { + ?transformer ?meter . + } } GROUP BY ?transformer HAVING (COUNT(?meter) > 0) @@ -9134,58 +9541,58 @@ HAVING (COUNT(?meter) > 0) Theme: ELECTRICAL_GRID z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 608 ms +Initial explain execution time: 633 ms Warmup execution 1/3 Warmup execution 2/3 Warmup execution 3/3 -Fastest execution time: 379 ms +Fastest execution time: 383 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=568.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=7.0K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=579.5M, nextCallCountActual=1, nextTimeNanosActual=6.2K, firstRowTimeNanosActual=579.5M, openCountActual=1, lastRowTimeNanosActual=579.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289.8M, avgNextNanosActual=6.2K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=568.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=1.0K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=568.7M, nextCallCountActual=1, nextTimeNanosActual=791, aggregateEvalCountActual=59.6K, firstRowTimeNanosActual=568.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=568.7M, maxGroupSizeActual=59.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=59.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=59.6K, rowsDroppedActual=59.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=284.4M, avgNextNanosActual=791) -│ ╠══ Difference (resultSizeActual=59.6K, hasNextCallCountActual=59.6K, hasNextTrueCountActual=59.6K, hasNextTimeNanosActual=557.3M, nextCallCountActual=59.6K, nextTimeNanosActual=701.1K, firstRowTimeNanosActual=153.7M, openCountActual=1, lastRowTimeNanosActual=568.7M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=88.2K, rowsDroppedActual=28.6K, selectivityActual=0.68, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.3K, avgNextNanosActual=12, leftRowsConsumedActual=73.9K, rightRowsConsumedActual=14.3K, overlapRowsActual=14.3K) -│ ║ ├── Filter (resultSizeActual=73.9K, hasNextCallCountActual=73.9K, hasNextTrueCountActual=73.9K, hasNextTimeNanosActual=346.1M, nextCallCountActual=73.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=73.9K, sourceRowsFilteredActual=38.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=18.2K, exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, openCountActual=1, exprTrueCountActual=73.9K, lastRowTimeNanosActual=568.6M, closeCountActual=1, exprEvalTimeNanosActual=52.0M, inputRowsActual=112.0K, rowsDroppedActual=38.1K, selectivityActual=0.66, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.7K, avgNextNanosActual=14, filterRejectRateActual=0.34) -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, exprTrueCountActual=73.9K, exprEvalTimeNanosActual=44.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="100"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=285.9M, nextCallCountActual=112.0K, nextTimeNanosActual=859.8K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, firstRowTimeNanosActual=16.6K, leftRowsWithMatchActual=112.0K, openCountActual=1, lastRowTimeNanosActual=568.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=7.67, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.54, stddevActual=0.73, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=224.1K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] -│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=10.1M, nextCallCountActual=112.0K, nextTimeNanosActual=6.1M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=568.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=55, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=276.7K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=50.7M, nextCallCountActual=112.0K, nextTimeNanosActual=6.6M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.5K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=59, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=77.3M, nextCallCountActual=112.0K, nextTimeNanosActual=17.2M, firstRowTimeNanosActual=1.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.6K, closeCountActual=112.0K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=345, avgNextNanosActual=154) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=48.2M, nextCallCountActual=112.0K, nextTimeNanosActual=7.6M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.4K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=68, indexHitRateActual=0.50) -│ ║ │ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) -│ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K, resultSizeActual=14.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=14.3K, inputRowsActual=126.3K, rowsDroppedActual=112.0K, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=14.3K, avgRightRowsPerLeftActual=0.13, joinOutputPerLeftActual=0.13) -│ ║ ╠══ StatementPattern [index: psoc] (costEstimate=112.1K, resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.4M, nextCallCountActual=112.0K, nextTimeNanosActual=3.8M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=26.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=143.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=35, indexHitRateActual=1.00) [left] -│ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Filter (new scope) (resultSizeActual=14.3K, hasNextCallCountActual=14.3K, hasNextTrueCountActual=14.3K, hasNextTimeNanosActual=62.7M, nextCallCountActual=14.3K, nextTimeNanosActual=228.8K, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=14.3K, sourceRowsFilteredActual=97.7K, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=27.4K, exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, openCountActual=1, exprTrueCountActual=14.3K, lastRowTimeNanosActual=65.5M, closeCountActual=1, exprEvalTimeNanosActual=42.4M, inputRowsActual=112.0K, rowsDroppedActual=97.7K, selectivityActual=0.13, expansionFactorActual=0.13, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=16, filterRejectRateActual=0.87) [right] -│ ║ ├── Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, exprTrueCountActual=14.3K, exprEvalTimeNanosActual=35.2M, hasNextFalseCountActual=0) -│ ║ │ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="180"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=8.1M, nextCallCountActual=112.0K, nextTimeNanosActual=4.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=19.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=73, avgNextNanosActual=44, indexHitRateActual=1.00) -│ ║ s: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=579.5M, nextCallCountActual=1, nextTimeNanosActual=4.9K, firstRowTimeNanosActual=579.5M, openCountActual=1, lastRowTimeNanosActual=579.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289.8M, avgNextNanosActual=4.9K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=579.5M, nextCallCountActual=1, nextTimeNanosActual=4.2K, aggregateEvalCountActual=59.6K, firstRowTimeNanosActual=579.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=579.5M, maxGroupSizeActual=59.6K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, avgGroupSizeActual=59.6K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=59.6K, rowsDroppedActual=59.6K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289.8M, avgNextNanosActual=4.2K) + │ ╠══ Difference (resultSizeActual=59.6K, hasNextCallCountActual=59.6K, hasNextTrueCountActual=59.6K, hasNextTimeNanosActual=568.2M, nextCallCountActual=59.6K, nextTimeNanosActual=680.7K, firstRowTimeNanosActual=151.5M, openCountActual=1, lastRowTimeNanosActual=579.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=88.2K, rowsDroppedActual=28.6K, selectivityActual=0.68, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=9.5K, avgNextNanosActual=11, leftRowsConsumedActual=73.9K, rightRowsConsumedActual=14.3K, overlapRowsActual=14.3K) + │ ║ ├── Filter (resultSizeActual=73.9K, hasNextCallCountActual=73.9K, hasNextTrueCountActual=73.9K, hasNextTimeNanosActual=357.5M, nextCallCountActual=73.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=73.9K, sourceRowsFilteredActual=38.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=22.9K, exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, openCountActual=1, exprTrueCountActual=73.9K, lastRowTimeNanosActual=579.4M, closeCountActual=1, exprEvalTimeNanosActual=54.5M, inputRowsActual=112.0K, rowsDroppedActual=38.1K, selectivityActual=0.66, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.8K, avgNextNanosActual=14, filterRejectRateActual=0.34) + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=38.1K, exprTrueCountActual=73.9K, exprEvalTimeNanosActual=44.0M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="100"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.4K, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=295.1M, nextCallCountActual=112.0K, nextTimeNanosActual=1.1M, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, firstRowTimeNanosActual=20.5K, leftRowsWithMatchActual=112.0K, openCountActual=1, lastRowTimeNanosActual=579.3M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.6K, avgNextNanosActual=10, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=278.9K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.55, stddevActual=0.74, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=224.1K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=12.9M, nextCallCountActual=112.0K, nextTimeNanosActual=6.6M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=579.3M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=116, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=278.9K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=53.1M, nextCallCountActual=112.0K, nextTimeNanosActual=6.8M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter], firstRowTimeNanosActual=583, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.6K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=61, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=79.4M, nextCallCountActual=112.0K, nextTimeNanosActual=17.2M, firstRowTimeNanosActual=1.1K, openCountActual=112.0K, lastRowTimeNanosActual=2.5K, closeCountActual=112.0K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=355, avgNextNanosActual=154) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=50.1M, nextCallCountActual=112.0K, nextTimeNanosActual=7.7M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.4K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=69, indexHitRateActual=0.50) + │ ║ │ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optValue) (hasNextFalseCountActual=0) + │ ║ │ Var (name=value) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=36.1K, resultSizeActual=14.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=14.3K, inputRowsActual=126.3K, rowsDroppedActual=112.0K, expansionFactorActual=0.11, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=14.3K, avgRightRowsPerLeftActual=0.13, joinOutputPerLeftActual=0.13) + │ ║ ╠══ StatementPattern [index: psoc] (costEstimate=112.1K, resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.3M, nextCallCountActual=112.0K, nextTimeNanosActual=3.7M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=27.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=140.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=65, avgNextNanosActual=34, indexHitRateActual=1.00) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Filter (new scope) (resultSizeActual=14.3K, hasNextCallCountActual=14.3K, hasNextTrueCountActual=14.3K, hasNextTimeNanosActual=59.9M, nextCallCountActual=14.3K, nextTimeNanosActual=181.5K, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=14.3K, sourceRowsFilteredActual=97.7K, plannedFilterEvidenceCount=4.2M, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=28.4K, exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, openCountActual=1, exprTrueCountActual=14.3K, lastRowTimeNanosActual=62.5M, closeCountActual=1, exprEvalTimeNanosActual=40.9M, inputRowsActual=112.0K, rowsDroppedActual=97.7K, selectivityActual=0.13, expansionFactorActual=0.13, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.2K, avgNextNanosActual=13, filterRejectRateActual=0.87) [right] + │ ║ ├── Compare (>) (exprEvalCountActual=112.0K, exprFalseCountActual=97.7K, exprTrueCountActual=14.3K, exprEvalTimeNanosActual=33.6M, hasNextFalseCountActual=0) + │ ║ │ Var (name=value2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="180"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=6.9M, nextCallCountActual=112.0K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=20.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=62.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=62, avgNextNanosActual=45, indexHitRateActual=1.00) + │ ║ s: Var (name=load2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=value2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9193,127 +9600,130 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optValue) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="100"^^) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=276.7K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] -│ ║ │ │ s: Var (name=meter) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) -│ ║ │ │ o: Var (name=load) (bindingState=unbound) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) -│ ║ │ ║ s: Var (name=load) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) -│ ║ │ ║ o: Var (name=value) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optValue) -│ ║ │ Var (name=value) (bindingState=bound) -│ ║ └── Join (HashJoinIteration) (resultSizeEstimate=35.9K) -│ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] -│ ║ ║ s: Var (name=meter) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) -│ ║ ║ o: Var (name=load2) (bindingState=unbound) -│ ║ ╚══ Filter (new scope) (plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter) [right] -│ ║ ├── Compare (>) -│ ║ │ Var (name=value2) (bindingState=bound) -│ ║ │ ValueConstant (value="180"^^) -│ ║ └── StatementPattern (resultSizeEstimate=112.1K) -│ ║ s: Var (name=load2) (bindingState=unbound) -│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) -│ ║ o: Var (name=value2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=meter) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=meter) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="100"^^) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=278.9K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=278.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter]) [right] + │ ║ │ │ s: Var (name=meter) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ │ │ o: Var (name=load) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=load) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ ║ o: Var (name=value) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optValue) + │ ║ │ Var (name=value) (bindingState=bound) + │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=36.1K) + │ ║ ╠══ StatementPattern (costEstimate=112.1K, resultSizeEstimate=112.1K) [left] + │ ║ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ o: Var (name=load2) (bindingState=unbound) + │ ║ ╚══ Filter (new scope) (plannedFilterEvidenceCount=4.3M, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_filter) [right] + │ ║ ├── Compare (>) + │ ║ │ Var (name=value2) (bindingState=bound) + │ ║ │ ValueConstant (value="180"^^) + │ ║ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=load2) (bindingState=unbound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=value2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { -?meter a . -?meter ?load . -OPTIONAL { -?load ?value . -BIND(?value AS ?optValue) -} -FILTER (?optValue > 100) -MINUS { -?meter ?load2 . -{ -{ -?load2 ?value2 . -FILTER (?value2 > 180) -} -} -} + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + ?meter ?load2 . + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + } } Theme: ELECTRICAL_GRID z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 278 ms -Warmup execution 1/7 -Warmup execution 2/7 -Warmup execution 3/7 -Warmup execution 4/7 -Warmup execution 5/7 -Warmup execution 6/7 -Warmup execution 7/7 -Fastest execution time: 149 ms +Initial explain execution time: 15 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 7 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=1.9K, firstRowTimeNanosActual=267.1M, openCountActual=1, lastRowTimeNanosActual=267.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=1.9K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.1M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=7.1M, openCountActual=1, lastRowTimeNanosActual=7.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.6M, avgNextNanosActual=625) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=959, firstRowTimeNanosActual=267.1M, openCountActual=1, lastRowTimeNanosActual=267.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=959) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=267.1M, nextCallCountActual=1, nextTimeNanosActual=542, aggregateEvalCountActual=10, firstRowTimeNanosActual=267.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=267.1M, maxGroupSizeActual=10, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=10, rowsDroppedActual=9, selectivityActual=0.10, expansionFactorActual=0.10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=133.6M, avgNextNanosActual=542) -│ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=267.0M, nextCallCountActual=10, nextTimeNanosActual=250, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=53.7K, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=267.0M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=26.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=22.3M, avgNextNanosActual=25, filterRejectRateActual=0) -│ ║ ├── Exists (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=25.3K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=0, hasNextCallCountActual=10, hasNextTrueCountActual=10, hasNextTimeNanosActual=3.5K, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, plannedIndexName=spoc, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=458, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=354, indexHitRateActual=1.00) -│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=other) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=267.0M, nextCallCountActual=10, nextTimeNanosActual=418, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=10, firstRowTimeNanosActual=36.0K, leftRowsWithMatchActual=5, openCountActual=1, lastRowTimeNanosActual=267.0M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=15, rowsDroppedActual=5, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.49, stddevActual=0.70, confidenceScoreActual=0.54, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=24.3M, avgNextNanosActual=42, leftRowsProbedActual=5, rightRowsScannedActual=10, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K, resultSizeActual=5, joinRightIteratorsCreatedActual=37.5K, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=37.5K, rowsDroppedActual=37.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=34.7K, stddevActual=186, confidenceScoreActual=0.01, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K, resultSizeActual=37.5K, joinRightIteratorsCreatedActual=18.7K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=37.5K, inputRowsActual=56.3K, rowsDroppedActual=18.7K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=37.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] -│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=18.8K, resultSizeActual=18.7K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=18.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=18.7K, nextTimeNanosActual=720.6K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=18.7K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=267.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=128, avgNextNanosActual=38, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=37.5K, hasNextCallCountActual=56.3K, hasNextTrueCountActual=37.5K, hasNextTimeNanosActual=16.0M, nextCallCountActual=37.5K, nextTimeNanosActual=1.6M, sourceRowsScannedActual=56.3K, sourceRowsMatchedActual=37.5K, sourceRowsFilteredActual=18.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=18.7K, openCountActual=18.7K, lastRowTimeNanosActual=12.8K, closeCountActual=18.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18.7K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=285, avgNextNanosActual=43, indexHitRateActual=0.67) [right] -│ ║ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=1.9K, resultSizeActual=5, hasNextCallCountActual=37.5K, hasNextTrueCountActual=5, hasNextTimeNanosActual=141.4M, nextCallCountActual=5, nextTimeNanosActual=752, sourceRowsScannedActual=37.5K, sourceRowsMatchedActual=5, sourceRowsFilteredActual=37.5K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.5K, exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, openCountActual=37.5K, exprTrueCountActual=5, lastRowTimeNanosActual=3.4K, closeCountActual=37.5K, exprEvalTimeNanosActual=26.4M, inputRowsActual=37.5K, rowsDroppedActual=37.5K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.8K, avgNextNanosActual=150, filterRejectRateActual=1.00) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=5, shortCircuitCountActual=4, exprEvalTimeNanosActual=23.9M, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (=) (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=4, exprEvalTimeNanosActual=19.7M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=37.5K, exprFalseCountActual=37.5K, exprTrueCountActual=1, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=37.5K, hasNextCallCountActual=75.0K, hasNextTrueCountActual=37.5K, hasNextTimeNanosActual=19.9M, nextCallCountActual=37.5K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=75.0K, sourceRowsMatchedActual=37.5K, sourceRowsFilteredActual=37.5K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=37.5K, openCountActual=37.5K, lastRowTimeNanosActual=1.1K, closeCountActual=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.5K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=266, avgNextNanosActual=40, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=10, hasNextCallCountActual=25, hasNextTrueCountActual=20, hasNextTimeNanosActual=3.2K, nextCallCountActual=10, nextTimeNanosActual=413, sourceRowsScannedActual=15, sourceRowsMatchedActual=10, sourceRowsFilteredActual=5, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=6.6K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=132, avgNextNanosActual=41, indexHitRateActual=0.67) [right] -│ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=other2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.1M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=7.1M, openCountActual=1, lastRowTimeNanosActual=7.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.6M, avgNextNanosActual=250) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.1M, nextCallCountActual=1, nextTimeNanosActual=125, aggregateEvalCountActual=10, firstRowTimeNanosActual=7.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=7.1M, maxGroupSizeActual=10, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=10, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=10, rowsDroppedActual=9, selectivityActual=0.10, expansionFactorActual=0.10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.6M, avgNextNanosActual=125) + │ ╠══ Filter (resultSizeActual=10, hasNextCallCountActual=12, hasNextTrueCountActual=11, hasNextTimeNanosActual=7.1M, nextCallCountActual=10, nextTimeNanosActual=292, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=14.5K, exprEvalCountActual=10, openCountActual=1, exprTrueCountActual=10, lastRowTimeNanosActual=7.1M, closeCountActual=1, varsAddedActual=1, exprEvalTimeNanosActual=13.0K, metricOrigin.varsAddedActual=derived, inputRowsActual=10, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=596.7K, avgNextNanosActual=29, filterRejectRateActual=0) + │ ║ ├── Exists (exprEvalCountActual=10, exprTrueCountActual=10, exprEvalTimeNanosActual=12.0K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=0, hasNextCallCountActual=10, hasNextTrueCountActual=10, hasNextTimeNanosActual=3.8K, sourceRowsScannedActual=10, sourceRowsMatchedActual=10, plannedIndexName=spoc, indexLookupCountActual=10, openCountActual=10, lastRowTimeNanosActual=417, closeCountActual=10, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=388, indexHitRateActual=1.00) + │ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=other) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=10, hasNextCallCountActual=11, hasNextTrueCountActual=10, hasNextTimeNanosActual=7.1M, nextCallCountActual=10, nextTimeNanosActual=41, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=10, firstRowTimeNanosActual=10.5K, leftRowsWithMatchActual=5, openCountActual=1, lastRowTimeNanosActual=7.1M, closeCountActual=1, maxRightRowsPerLeftActual=2, inputRowsActual=15, rowsDroppedActual=5, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.49, stddevActual=0.70, confidenceScoreActual=0.54, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.91, avgHasNextNanosActual=649.2K, avgNextNanosActual=4.10, leftRowsProbedActual=5, rightRowsScannedActual=10, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K, resultSizeActual=5, joinRightIteratorsCreatedActual=5, joinLeftBindingsConsumedActual=5, joinRightBindingsConsumedActual=5, inputRowsActual=10, rowsDroppedActual=5, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=3.5M, stddevActual=1.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=5, rightRowsScannedActual=5, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37, resultSizeActual=5, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=5, inputRowsActual=7, rowsDroppedActual=2, expansionFactorActual=0.71, sampleCountActual=2, varianceActual=14.1M, stddevActual=3.8K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=5, avgRightRowsPerLeftActual=2.50, joinOutputPerLeftActual=2.50) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=7.1M, nextCallCountActual=2, nextTimeNanosActual=125, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=9.3K, plannedFilterEvidenceCount=22.8M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=4.9K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=7.1M, closeCountActual=1, exprEvalTimeNanosActual=5.7M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=2.4M, avgNextNanosActual=63, filterRejectRateActual=1.00) [left] + │ ║ ║ │ ║ ├── Or (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=5.1M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=4.2M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.0K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=405.3K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=641.1K, nextCallCountActual=9.3K, nextTimeNanosActual=305.6K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=2.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=68, avgNextNanosActual=33, indexHitRateActual=1.00) + │ ║ ║ │ ║ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=37.5K, resultSizeActual=5, hasNextCallCountActual=7, hasNextTrueCountActual=5, hasNextTimeNanosActual=2.6K, nextCallCountActual=5, nextTimeNanosActual=290, sourceRowsScannedActual=15, sourceRowsMatchedActual=5, sourceRowsFilteredActual=10, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], sharedJoinVars=[substation], firstRowTimeNanosActual=1.0K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=6.4K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.71, avgHasNextNanosActual=375, avgNextNanosActual=58, indexHitRateActual=0.33) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=18.8K, resultSizeActual=5, hasNextCallCountActual=10, hasNextTrueCountActual=5, hasNextTimeNanosActual=3.2K, nextCallCountActual=5, nextTimeNanosActual=584, sourceRowsScannedActual=10, sourceRowsMatchedActual=5, sourceRowsFilteredActual=5, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[line, name, substation], sharedJoinVars=[line], firstRowTimeNanosActual=667, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=4.6K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=321, avgNextNanosActual=117, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.5K, resultSizeActual=10, hasNextCallCountActual=25, hasNextTrueCountActual=20, hasNextTimeNanosActual=3.2K, nextCallCountActual=10, nextTimeNanosActual=1.1K, sourceRowsScannedActual=15, sourceRowsMatchedActual=10, sourceRowsFilteredActual=5, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=5, openCountActual=5, lastRowTimeNanosActual=3.4K, closeCountActual=5, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=130, avgNextNanosActual=117, indexHitRateActual=0.67) [right] + │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=other2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9321,66 +9731,66 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) -│ ║ ├── Exists -│ ║ │ StatementPattern (resultSizeEstimate=37.5K) -│ ║ │ s: Var (name=line) (bindingState=bound) -│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) -│ ║ │ o: Var (name=other) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.2K) [left] -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=1.00, plannedWorkRows=27.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ s: Var (name=line) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[line], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=line) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) -│ ║ ║ │ o: Var (name=substation) (bindingState=unbound) -│ ║ ║ └── Filter (resultSizeEstimate=1.9K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[line, substation], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (=) -│ ║ ║ ║ │ Var (name=name) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="Substation 0") -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=name) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="Substation 1") -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) -│ ║ ║ s: Var (name=substation) (bindingState=bound) -│ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ ║ o: Var (name=name) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] -│ ║ s: Var (name=line) (bindingState=bound) -│ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) -│ ║ o: Var (name=other2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=line) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=line) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality) + │ ║ ├── Exists + │ ║ │ StatementPattern (resultSizeEstimate=37.5K) + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=other) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=18.8K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=22.8M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ║ ├── Or + │ ║ ║ │ ║ │ ╠══ Compare (=) + │ ║ ║ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ ║ │ ║ │ ╚══ Compare (=) + │ ║ ║ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="Substation 1") + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], sharedJoinVars=[substation]) [right] + │ ║ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[line, name, substation], sharedJoinVars=[line]) [right] + │ ║ ║ s: Var (name=line) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ s: Var (name=line) (bindingState=bound) + │ ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ o: Var (name=other2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { -?line a . -?line ?substation . -?substation ?name . -FILTER ((?name = "Substation 0") || (?name = "Substation 1")) -OPTIONAL { -?line ?other2 . -} -FILTER EXISTS { -?line ?other . -} + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?line ?substation . + ?line a . + OPTIONAL { + ?line ?other2 . + } + FILTER EXISTS { + ?line ?other . + } } Theme: ELECTRICAL_GRID z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 73 ms +Initial explain execution time: 15 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -9391,57 +9801,47 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 39 ms +Fastest execution time: 10 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=1.5K, firstRowTimeNanosActual=68.2M, openCountActual=1, lastRowTimeNanosActual=68.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=1.5K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=10.5M, nextCallCountActual=1, nextTimeNanosActual=1.7K, firstRowTimeNanosActual=10.5M, openCountActual=1, lastRowTimeNanosActual=10.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.3M, avgNextNanosActual=1.8K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=68.3M, openCountActual=1, lastRowTimeNanosActual=68.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=625) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=68.2M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=47, firstRowTimeNanosActual=68.3M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=68.3M, maxGroupSizeActual=47, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=47, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=47, rowsDroppedActual=46, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=34.1M, avgNextNanosActual=375) -│ ╠══ Filter (resultSizeActual=47, hasNextCallCountActual=49, hasNextTrueCountActual=48, hasNextTimeNanosActual=68.2M, nextCallCountActual=47, nextTimeNanosActual=581, sourceRowsScannedActual=47, sourceRowsMatchedActual=47, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=1.2M, exprEvalCountActual=47, openCountActual=1, exprTrueCountActual=47, lastRowTimeNanosActual=68.2M, closeCountActual=1, exprEvalTimeNanosActual=191.6K, inputRowsActual=47, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=1.4M, avgNextNanosActual=12, filterRejectRateActual=0) -│ ║ ├── Not (exprEvalCountActual=47, exprTrueCountActual=47, exprEvalTimeNanosActual=188.0K, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=183.7K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=47, hasNextTimeNanosActual=108.1K, sourceRowsScannedActual=47, sourceRowsFilteredActual=47, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, exprEvalCountActual=47, exprFalseCountActual=47, openCountActual=47, lastRowTimeNanosActual=2.0K, closeCountActual=47, exprEvalTimeNanosActual=10.1K, inputRowsActual=47, rowsDroppedActual=47, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.3K, filterRejectRateActual=1.00) -│ ║ │ ╠══ Compare (<) (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=7.0K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=47, hasNextCallCountActual=94, hasNextTrueCountActual=47, hasNextTimeNanosActual=19.8K, nextCallCountActual=47, nextTimeNanosActual=1.7K, sourceRowsScannedActual=94, sourceRowsMatchedActual=47, sourceRowsFilteredActual=47, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=47, openCountActual=47, lastRowTimeNanosActual=750, closeCountActual=47, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=211, avgNextNanosActual=36, indexHitRateActual=0.50) -│ ║ │ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M, resultSizeActual=47, joinRightIteratorsCreatedActual=9.3K, joinRightBindingsConsumedActual=47, inputRowsActual=9.4K, rowsDroppedActual=9.3K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=20, stddevActual=4.50, confidenceScoreActual=0.27, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=47) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=1, joinLeftBindingsConsumedActual=1, joinRightBindingsConsumedActual=9.3K, joinType=Cartesian product, inputRowsActual=9.3K, rowsDroppedActual=1, expansionFactorActual=1.00, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=9.4K, joinOutputPerLeftActual=9.4K) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.4K, nextCallCountActual=1, nextTimeNanosActual=250, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.5K, openCountActual=1, bindingsProvidedActual=1, lastRowTimeNanosActual=68.2M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=730, avgNextNanosActual=250) [left] -│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=978.4K, nextCallCountActual=9.3K, nextTimeNanosActual=748.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=cap2) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=9.4K) -│ ║ ║ Var (name=generator) -│ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ ║ Var (name=cap2) -│ ║ ║ , firstRowTimeNanosActual=5.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=68.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=104, avgNextNanosActual=80, indexHitRateActual=1.00) -│ ║ ║ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Filter (resultSizeEstimate=470, resultSizeActual=47, hasNextCallCountActual=9.4K, hasNextTrueCountActual=47, hasNextTimeNanosActual=41.2M, nextCallCountActual=47, nextTimeNanosActual=748, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=47, sourceRowsFilteredActual=9.3K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=2.4K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=9.3K, exprTrueCountActual=47, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, exprEvalTimeNanosActual=8.6M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=16, filterRejectRateActual=0.99) [right] -│ ║ ├── ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=47, exprEvalTimeNanosActual=8.1M, hasNextFalseCountActual=0) -│ ║ │ Var (name=capacity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=474.2K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="800"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=502.0K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="900"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=499.4K, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=8.4M, nextCallCountActual=9.3K, nextTimeNanosActual=306.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, firstRowTimeNanosActual=1.0K, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.1K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=452, avgNextNanosActual=33, indexHitRateActual=0.50) -│ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=capacity) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=10.5M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=10.5M, openCountActual=1, lastRowTimeNanosActual=10.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.3M, avgNextNanosActual=1.1K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=10.5M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=47, firstRowTimeNanosActual=10.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=10.5M, maxGroupSizeActual=47, closeCountActual=1, varsAddedActual=1, varsDroppedActual=6, avgGroupSizeActual=47, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=47, rowsDroppedActual=46, selectivityActual=0.02, expansionFactorActual=0.02, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=5.3M, avgNextNanosActual=500) + │ ╠══ Filter (resultSizeActual=47, hasNextCallCountActual=49, hasNextTrueCountActual=48, hasNextTimeNanosActual=10.4M, nextCallCountActual=47, nextTimeNanosActual=791, sourceRowsScannedActual=47, sourceRowsMatchedActual=47, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root, firstRowTimeNanosActual=209.6K, exprEvalCountActual=47, openCountActual=1, exprTrueCountActual=47, lastRowTimeNanosActual=10.5M, closeCountActual=1, exprEvalTimeNanosActual=221.7K, inputRowsActual=47, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=213.5K, avgNextNanosActual=17, filterRejectRateActual=0) + │ ║ ├── Not (exprEvalCountActual=47, exprTrueCountActual=47, exprEvalTimeNanosActual=216.8K, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=213.6K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Filter (resultSizeActual=0, hasNextCallCountActual=47, hasNextTimeNanosActual=123.7K, sourceRowsScannedActual=47, sourceRowsFilteredActual=47, plannedFilterEvidenceCount=54.5K, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=47, exprFalseCountActual=47, openCountActual=47, lastRowTimeNanosActual=2.1K, closeCountActual=47, exprEvalTimeNanosActual=8.4K, inputRowsActual=47, rowsDroppedActual=47, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0, avgHasNextNanosActual=2.6K, filterRejectRateActual=1.00) + │ ║ │ ╠══ Compare (<) (exprEvalCountActual=47, exprFalseCountActual=47, exprEvalTimeNanosActual=6.1K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=threshold) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=47, hasNextCallCountActual=94, hasNextTrueCountActual=47, hasNextTimeNanosActual=24.0K, nextCallCountActual=47, nextTimeNanosActual=2.9K, sourceRowsScannedActual=94, sourceRowsMatchedActual=47, sourceRowsFilteredActual=47, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=47, openCountActual=47, lastRowTimeNanosActual=750, closeCountActual=47, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=64, indexHitRateActual=0.50) + │ ║ │ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=47, joinRightIteratorsCreatedActual=47, joinRightBindingsConsumedActual=47, joinType=Cartesian product, inputRowsActual=94, rowsDroppedActual=47, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=529, stddevActual=23, confidenceScoreActual=0.08, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=47) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=48, resultSizeActual=47, joinRightIteratorsCreatedActual=47, joinLeftBindingsConsumedActual=47, joinRightBindingsConsumedActual=47, inputRowsActual=94, rowsDroppedActual=47, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=9.8K, stddevActual=99, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=47, rightRowsScannedActual=47, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=47, resultSizeActual=47, hasNextCallCountActual=48, hasNextTrueCountActual=47, hasNextTimeNanosActual=10.0M, nextCallCountActual=47, nextTimeNanosActual=1.2K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=47, sourceRowsFilteredActual=9.3K, plannedFilterEvidenceCount=10.8M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=190.2K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=47, lastRowTimeNanosActual=10.4M, closeCountActual=1, exprEvalTimeNanosActual=8.4M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=209.7K, avgNextNanosActual=27, filterRejectRateActual=0.99) [left] + │ ║ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=47, exprEvalTimeNanosActual=7.8M, hasNextFalseCountActual=0) + │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=476.3K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="800"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=486.3K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ValueConstant (value="900"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=483.1K, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=689.7K, nextCallCountActual=9.3K, nextTimeNanosActual=378.8K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=5.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=10.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=40, indexHitRateActual=1.00) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=47, hasNextCallCountActual=94, hasNextTrueCountActual=47, hasNextTimeNanosActual=77.7K, nextCallCountActual=47, nextTimeNanosActual=2.9K, sourceRowsScannedActual=94, sourceRowsMatchedActual=47, sourceRowsFilteredActual=47, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_f300a539_uri, capacity, generator], firstRowTimeNanosActual=1.8K, indexLookupCountActual=47, openCountActual=47, lastRowTimeNanosActual=8.4K, closeCountActual=47, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=827, avgNextNanosActual=62, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, resultSizeActual=47, hasNextCallCountActual=94, hasNextTrueCountActual=47, hasNextTimeNanosActual=8.5K, nextCallCountActual=47, nextTimeNanosActual=1.0K, plannedWorkRows=1.00, plannedBoundVars=[_const_72f33a14_uri, _const_f300a539_uri, _const_f5e5585a_uri, capacity, generator], firstRowTimeNanosActual=167, openCountActual=47, bindingsProvidedActual=47, lastRowTimeNanosActual=5.8K, closeCountActual=47, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=47, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=91, avgNextNanosActual=22) [right] + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=generator) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=generator) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9449,69 +9849,59 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=0.00, filterSelectivitySource=cardinality, deferredFilterScope=root) -│ ║ ├── Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) -│ ║ │ ╠══ Compare (<) -│ ║ │ ║ Var (name=cap2) (bindingState=bound) -│ ║ │ ║ Var (name=threshold) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) -│ ║ │ s: Var (name=generator) (bindingState=bound) -│ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ │ o: Var (name=cap2) (bindingState=unbound) -│ ║ └── Join (JoinIterator) (resultSizeEstimate=4.4M) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, joinType=Cartesian product) [left] -│ ║ ║ ├── BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedBoundVars=[threshold], plannedLookupComponents=[O], unlockedFilters=Not [right] -│ ║ ║ Exists -│ ║ ║ Filter -│ ║ ║ Compare (<) -│ ║ ║ Var (name=cap2) -│ ║ ║ Var (name=threshold) -│ ║ ║ StatementPattern (resultSizeEstimate=9.4K) -│ ║ ║ Var (name=generator) -│ ║ ║ Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ ║ Var (name=cap2) -│ ║ ║ ) -│ ║ ║ s: Var (name=generator) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) -│ ║ ╚══ Filter (resultSizeEstimate=470, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[generator, threshold], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=capacity) (bindingState=bound) -│ ║ │ ValueConstant (value="700"^^) -│ ║ │ ValueConstant (value="800"^^) -│ ║ │ ValueConstant (value="900"^^) -│ ║ └── StatementPattern (resultSizeEstimate=9.4K) -│ ║ s: Var (name=generator) (bindingState=bound) -│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ o: Var (name=capacity) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=generator) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=generator) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=root) + │ ║ ├── Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=54.5K, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ │ ╠══ Compare (<) + │ ║ │ ║ Var (name=cap2) (bindingState=bound) + │ ║ │ ║ Var (name=threshold) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ s: Var (name=generator) (bindingState=bound) + │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ o: Var (name=cap2) (bindingState=unbound) + │ ║ └── Join (JoinIterator) (resultSizeEstimate=48, joinType=Cartesian product) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=48) [left] + │ ║ ║ ├── Filter (resultSizeEstimate=47, plannedFilterEvidenceCount=10.8M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ╠══ ListMemberOperator + │ ║ ║ │ ║ Var (name=capacity) (bindingState=bound) + │ ║ ║ │ ║ ValueConstant (value="700"^^) + │ ║ ║ │ ║ ValueConstant (value="800"^^) + │ ║ ║ │ ║ ValueConstant (value="900"^^) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ ║ │ o: Var (name=capacity) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_f300a539_uri, capacity, generator]) [right] + │ ║ ║ s: Var (name=generator) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ╚══ BindingSetAssignment ([[threshold="700"^^]]) (resultSizeEstimate=1.00, plannedWorkRows=1.00, plannedBoundVars=[_const_72f33a14_uri, _const_f300a539_uri, _const_f5e5585a_uri, capacity, generator]) [right] + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=generator) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=generator) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { -VALUES ?threshold { 700 } -?generator a . -?generator ?capacity . -FILTER (?capacity IN (700, 800, 900)) -FILTER NOT EXISTS { -?generator ?cap2 . -FILTER (?cap2 < ?threshold) -} + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } } Theme: ELECTRICAL_GRID z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 171 ms +Initial explain execution time: 184 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -9522,62 +9912,62 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 106 ms +Fastest execution time: 112 ms -Projection (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.6M, nextCallCountActual=9.3K, nextTimeNanosActual=1.3M, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=147) +Projection (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=172.9M, nextCallCountActual=9.3K, nextTimeNanosActual=1.4M, firstRowTimeNanosActual=169.4M, openCountActual=1, lastRowTimeNanosActual=175.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=18.5K, avgNextNanosActual=158) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "substation" (hasNextFalseCountActual=0) ║ ProjectionElem "assetCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.4M, nextCallCountActual=9.3K, nextTimeNanosActual=878.7K, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=94) -├── Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=157.2M, nextCallCountActual=9.3K, nextTimeNanosActual=506.0K, firstRowTimeNanosActual=154.4M, openCountActual=1, lastRowTimeNanosActual=159.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=54) -│ ╠══ Filter (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=156.9M, nextCallCountActual=9.3K, nextTimeNanosActual=104.7K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=154.4M, exprEvalCountActual=9.3K, openCountActual=1, exprTrueCountActual=9.3K, lastRowTimeNanosActual=159.8M, closeCountActual=1, exprEvalTimeNanosActual=1.7M, inputRowsActual=9.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.8K, avgNextNanosActual=11, filterRejectRateActual=0) -│ ║ ├── Compare (>) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=5.3K, hasNextFalseCountActual=0) -│ ║ └── Group (substation) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=154.5M, nextCallCountActual=9.3K, nextTimeNanosActual=236.2K, aggregateEvalCountActual=74.7K, firstRowTimeNanosActual=154.4M, groupsCreatedActual=9.3K, openCountActual=1, lastRowTimeNanosActual=159.8M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=3.99, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=37.3K, rowsDroppedActual=28.0K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=16.5K, avgNextNanosActual=25) -│ ║ Filter (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=113.3M, nextCallCountActual=37.3K, nextTimeNanosActual=370.4K, sourceRowsScannedActual=37.3K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=33.2K, exprEvalCountActual=37.3K, openCountActual=1, exprTrueCountActual=37.3K, lastRowTimeNanosActual=152.1M, closeCountActual=1, exprEvalTimeNanosActual=4.0M, inputRowsActual=37.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=9.91, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=37.3K, exprTrueCountActual=37.3K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) -│ ║ │ Var (name=optSub) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=106.5M, nextCallCountActual=37.3K, nextTimeNanosActual=301.8K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=37.3K, firstRowTimeNanosActual=25.8K, leftRowsWithMatchActual=37.3K, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=74.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=8.08, leftRowsProbedActual=37.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=53.3M, nextCallCountActual=37.3K, nextTimeNanosActual=813.9K, firstRowTimeNanosActual=23.0K, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.4K, avgNextNanosActual=22, leftRowsConsumedActual=28.0K, rightRowsConsumedActual=9.3K, leftRowsOutputContributionActual=28.0K, rightRowsOutputContributionActual=9.3K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.6M, nextCallCountActual=28.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=16.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=108.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=56, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=17.4M, nextCallCountActual=28.0K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=2.5K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=311, avgNextNanosActual=62, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=855.0K, nextCallCountActual=9.3K, nextTimeNanosActual=496.0K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=108.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=151.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=91, avgNextNanosActual=53, indexHitRateActual=1.00) [left] -│ ║ ║ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=6.5M, nextCallCountActual=9.3K, nextTimeNanosActual=594.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P], firstRowTimeNanosActual=959, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=348, avgNextNanosActual=63, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=27.0M, nextCallCountActual=37.3K, nextTimeNanosActual=5.5M, firstRowTimeNanosActual=666, openCountActual=37.3K, lastRowTimeNanosActual=3.0K, closeCountActual=37.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=362, avgNextNanosActual=149) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=17.1M, nextCallCountActual=37.3K, nextTimeNanosActual=2.3M, sourceRowsScannedActual=74.7K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=37.3K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.8K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=62, indexHitRateActual=0.50) -│ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optSub) (hasNextFalseCountActual=0) -│ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (assetCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_00333f2fe36952f541b08a42a7b8ce15e70d) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (assetCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=172.7M, nextCallCountActual=9.3K, nextTimeNanosActual=954.4K, firstRowTimeNanosActual=169.4M, openCountActual=1, lastRowTimeNanosActual=175.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=18.4K, avgNextNanosActual=102) + ├── Extension (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=172.5M, nextCallCountActual=9.3K, nextTimeNanosActual=557.8K, firstRowTimeNanosActual=169.4M, openCountActual=1, lastRowTimeNanosActual=175.3M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=18.4K, avgNextNanosActual=60) + │ ╠══ Filter (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=172.2M, nextCallCountActual=9.3K, nextTimeNanosActual=126.1K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=169.4M, exprEvalCountActual=9.3K, openCountActual=1, exprTrueCountActual=9.3K, lastRowTimeNanosActual=175.3M, closeCountActual=1, exprEvalTimeNanosActual=1.9M, inputRowsActual=9.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=18.4K, avgNextNanosActual=13, filterRejectRateActual=0) + │ ║ ├── Compare (>) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_5333e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ └── Group (substation) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=169.5M, nextCallCountActual=9.3K, nextTimeNanosActual=265.7K, aggregateEvalCountActual=74.7K, firstRowTimeNanosActual=169.4M, groupsCreatedActual=9.3K, openCountActual=1, lastRowTimeNanosActual=175.3M, maxGroupSizeActual=5, closeCountActual=1, varsAddedActual=2, varsDroppedActual=6, avgGroupSizeActual=3.99, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=37.3K, rowsDroppedActual=28.0K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=18.1K, avgNextNanosActual=28) + │ ║ Filter (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=120.7M, nextCallCountActual=37.3K, nextTimeNanosActual=534.9K, sourceRowsScannedActual=37.3K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.3K, exprEvalCountActual=37.3K, openCountActual=1, exprTrueCountActual=37.3K, lastRowTimeNanosActual=166.2M, closeCountActual=1, exprEvalTimeNanosActual=4.8M, inputRowsActual=37.3K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.2K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=37.3K, exprTrueCountActual=37.3K, exprEvalTimeNanosActual=1.6M, hasNextFalseCountActual=0) + │ ║ │ Var (name=optSub) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=112.9M, nextCallCountActual=37.3K, nextTimeNanosActual=368.9K, joinRightIteratorsCreatedActual=37.3K, joinLeftBindingsConsumedActual=37.3K, joinRightBindingsConsumedActual=37.3K, firstRowTimeNanosActual=13.2K, leftRowsWithMatchActual=37.3K, openCountActual=1, lastRowTimeNanosActual=165.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=74.7K, rowsDroppedActual=37.3K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=9.87, leftRowsProbedActual=37.3K, rightRowsScannedActual=37.3K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=37.3K, hasNextCallCountActual=37.3K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=58.4M, nextCallCountActual=37.3K, nextTimeNanosActual=841.8K, firstRowTimeNanosActual=11.1K, openCountActual=1, lastRowTimeNanosActual=165.1M, closeCountActual=1, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.6K, avgNextNanosActual=23, leftRowsConsumedActual=28.0K, rightRowsConsumedActual=9.3K, leftRowsOutputContributionActual=28.0K, rightRowsOutputContributionActual=9.3K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=2.6M, nextCallCountActual=28.0K, nextTimeNanosActual=1.5M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedAccessRows=33.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=8.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=116.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=94, avgNextNanosActual=55, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=19.9M, nextCallCountActual=28.0K, nextTimeNanosActual=1.7M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[asset], sharedJoinVars=[asset], firstRowTimeNanosActual=459, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=3.3K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=356, avgNextNanosActual=61, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.23, stddevActual=1.49, confidenceScoreActual=0.45, hasNextFalseCountActual=0, leftRowsProbedActual=9.3K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ║ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=815.4K, nextCallCountActual=9.3K, nextTimeNanosActual=576.9K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=116.4M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=165.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=87, avgNextNanosActual=62, indexHitRateActual=1.00) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=8.3M, nextCallCountActual=9.3K, nextTimeNanosActual=626.0K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[asset], sharedJoinVars=[asset], firstRowTimeNanosActual=917, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=4.5K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=446, avgNextNanosActual=67, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=27.9M, nextCallCountActual=37.3K, nextTimeNanosActual=5.4M, firstRowTimeNanosActual=708, openCountActual=37.3K, lastRowTimeNanosActual=3.0K, closeCountActual=37.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=374, avgNextNanosActual=146) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=37.3K, hasNextCallCountActual=74.7K, hasNextTrueCountActual=37.3K, hasNextTimeNanosActual=18.2M, nextCallCountActual=37.3K, nextTimeNanosActual=2.1M, sourceRowsScannedActual=74.7K, sourceRowsMatchedActual=37.3K, sourceRowsFilteredActual=37.3K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=37.3K, openCountActual=37.3K, lastRowTimeNanosActual=2.8K, closeCountActual=37.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=37.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=244, avgNextNanosActual=57, indexHitRateActual=0.50) + │ ║ │ s: Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optSub) (hasNextFalseCountActual=0) + │ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_5333e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (assetCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=asset) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_5333e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (assetCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=asset) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9586,73 +9976,73 @@ Projection ║ ProjectionElem "substation" ║ ProjectionElem "assetCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (substation) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optSub) (bindingState=bound) -│ ║ │ Var (name=asset) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=asset) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ ║ │ o: Var (name=substation) (bindingState=unbound) -│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) -│ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) -│ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[asset], plannedLookupComponents=[S, P]) [right] -│ ║ ║ s: Var (name=asset) (bindingState=bound) -│ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ ║ o: Var (name=substation) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) -│ ║ │ s: Var (name=asset) (bindingState=bound) -│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ │ o: Var (name=substation) (bindingState=bound) -│ ║ └── ExtensionElem (optSub) -│ ║ Var (name=substation) (bindingState=bound) -│ ║ GroupElem (_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345) -│ ║ Count -│ ║ Var (name=asset) (bindingState=bound) -│ ║ GroupElem (assetCount) -│ ║ Count (Distinct) -│ ║ Var (name=asset) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_60333f2fe36952f541b08a42a7b8ce15e70d012345) -│ Count -│ Var (name=asset) (bindingState=unbound) -└── ExtensionElem (assetCount) -Count (Distinct) -Var (name=asset) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_1433e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optSub) (bindingState=bound) + │ ║ │ Var (name=asset) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedAccessRows=33.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[asset], sharedJoinVars=[asset]) [right] + │ ║ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=9.2K) + │ ║ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=15.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.9K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ s: Var (name=asset) (bindingState=unbound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_72f33a14_uri, value=http://example.com/theme/grid/Generator, anonymous) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[asset], sharedJoinVars=[asset]) [right] + │ ║ ║ s: Var (name=asset) (bindingState=bound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=asset) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=bound) + │ ║ └── ExtensionElem (optSub) + │ ║ Var (name=substation) (bindingState=bound) + │ ║ GroupElem (_anon_having_1433e226babdcc344c88a5a61806b6a8e7f30) + │ ║ Count + │ ║ Var (name=asset) (bindingState=bound) + │ ║ GroupElem (assetCount) + │ ║ Count (Distinct) + │ ║ Var (name=asset) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_1433e226babdcc344c88a5a61806b6a8e7f30) + │ Count + │ Var (name=asset) (bindingState=unbound) + └── ExtensionElem (assetCount) + Count (Distinct) + Var (name=asset) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { -{ -?asset a . -?asset ?substation . -} -UNION -{ -?asset a . -?asset ?substation . -} -OPTIONAL { -?asset ?substation . -BIND(?substation AS ?optSub) -} -FILTER (?optSub != ?asset) + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) } GROUP BY ?substation HAVING (COUNT(?asset) > 0) @@ -9660,69 +10050,72 @@ HAVING (COUNT(?asset) > 0) Theme: ELECTRICAL_GRID z_queryIndex: 7 === Explanation Telemetry === -Initial explain execution time: 253 ms -Warmup execution 1/7 -Warmup execution 2/7 -Warmup execution 3/7 -Warmup execution 4/7 -Warmup execution 5/7 -Warmup execution 6/7 -Warmup execution 7/7 -Fastest execution time: 135 ms +Initial explain execution time: 57 ms +Warmup execution 1/10 +Warmup execution 2/10 +Warmup execution 3/10 +Warmup execution 4/10 +Warmup execution 5/10 +Warmup execution 6/10 +Warmup execution 7/10 +Warmup execution 8/10 +Warmup execution 9/10 +Warmup execution 10/10 +Fastest execution time: 30 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=1.8K, firstRowTimeNanosActual=244.5M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=1.8K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=48.5M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=48.5M, openCountActual=1, lastRowTimeNanosActual=48.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=24.3M, avgNextNanosActual=1.2K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=1000, firstRowTimeNanosActual=244.5M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=1000) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=244.5M, nextCallCountActual=1, nextTimeNanosActual=834, aggregateEvalCountActual=6, firstRowTimeNanosActual=244.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=244.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=122.3M, avgNextNanosActual=834) -│ ╠══ Difference (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=244.5M, nextCallCountActual=6, nextTimeNanosActual=208, firstRowTimeNanosActual=42.8M, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=30.6M, avgNextNanosActual=35, leftRowsConsumedActual=6, rightRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=201.7M, nextCallCountActual=6, nextTimeNanosActual=208, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=26.1K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=13.4K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=28.8M, avgNextNanosActual=35, filterRejectRateActual=0) -│ ║ │ ╠══ Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=12.7K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.5K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=375, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=424, indexHitRateActual=1.00) -│ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=6, joinRightIteratorsCreatedActual=28.0K, joinRightBindingsConsumedActual=6, inputRowsActual=28.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=14.1K, stddevActual=119, confidenceScoreActual=0.02, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=28.0K, joinRightIteratorsCreatedActual=28.0K, joinLeftBindingsConsumedActual=28.0K, joinRightBindingsConsumedActual=28.0K, inputRowsActual=56.0K, rowsDroppedActual=28.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.02, stddevActual=0.16, confidenceScoreActual=0.63, hasNextFalseCountActual=0, leftRowsProbedActual=28.0K, rightRowsScannedActual=28.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=28.6K, resultSizeActual=28.0K, hasNextCallCountActual=28.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=3.1M, nextCallCountActual=28.0K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) -│ ║ │ │ ║ Var (name=transformer) -│ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) -│ ║ │ │ ║ Var (name=meter) -│ ║ │ │ ║ , firstRowTimeNanosActual=7.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=244.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=112, avgNextNanosActual=41, indexHitRateActual=1.00) -│ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=19.4M, nextCallCountActual=28.0K, nextTimeNanosActual=1.2M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P], firstRowTimeNanosActual=791, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=6.0K, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=347, avgNextNanosActual=43, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=1.4K, resultSizeActual=6, hasNextCallCountActual=28.0K, hasNextTrueCountActual=6, hasNextTimeNanosActual=94.2M, nextCallCountActual=6, nextTimeNanosActual=166, sourceRowsScannedActual=28.0K, sourceRowsMatchedActual=6, sourceRowsFilteredActual=28.0K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=875, exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, openCountActual=28.0K, exprTrueCountActual=6, lastRowTimeNanosActual=3.0K, closeCountActual=28.0K, exprEvalTimeNanosActual=12.3M, inputRowsActual=28.0K, rowsDroppedActual=28.0K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=28, filterRejectRateActual=1.00) [right] -│ ║ │ ╠══ Or (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=6, shortCircuitCountActual=2, exprEvalTimeNanosActual=10.5M, hasNextFalseCountActual=0) -│ ║ │ ║ ├── Compare (=) (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=2, exprEvalTimeNanosActual=7.4M, hasNextFalseCountActual=0) -│ ║ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) -│ ║ │ ║ └── Compare (=) (exprEvalCountActual=28.0K, exprFalseCountActual=28.0K, exprTrueCountActual=4, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=28.0K, hasNextCallCountActual=56.0K, hasNextTrueCountActual=28.0K, hasNextTimeNanosActual=12.3M, nextCallCountActual=28.0K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=56.0K, sourceRowsMatchedActual=28.0K, sourceRowsFilteredActual=28.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=28.0K, openCountActual=28.0K, lastRowTimeNanosActual=834, closeCountActual=28.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=28.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=220, avgNextNanosActual=38, indexHitRateActual=0.50) -│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=42.7M, sourceRowsScannedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=112.0K, predicateErrorCountActual=112.0K, openCountActual=1, lastRowTimeNanosActual=42.7M, closeCountActual=1, exprEvalTimeNanosActual=25.0M, inputRowsActual=112.0K, rowsDroppedActual=112.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=42.8M, filterRejectRateActual=1.00) -│ ║ ╠══ Compare (=) (exprEvalCountActual=112.0K, exprErrorCountActual=112.0K, exprEvalTimeNanosActual=11.1M, hasNextFalseCountActual=0) -│ ║ ║ Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=7.3M, nextCallCountActual=112.0K, nextTimeNanosActual=4.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=42.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=36, indexHitRateActual=1.00) -│ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=48.5M, nextCallCountActual=1, nextTimeNanosActual=792, firstRowTimeNanosActual=48.5M, openCountActual=1, lastRowTimeNanosActual=48.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=24.3M, avgNextNanosActual=792) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=48.5M, nextCallCountActual=1, nextTimeNanosActual=375, aggregateEvalCountActual=6, firstRowTimeNanosActual=48.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=48.5M, maxGroupSizeActual=6, closeCountActual=1, varsAddedActual=1, varsDroppedActual=9, avgGroupSizeActual=6.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=6, rowsDroppedActual=5, selectivityActual=0.17, expansionFactorActual=0.17, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=24.3M, avgNextNanosActual=375) + │ ╠══ Difference (resultSizeActual=6, hasNextCallCountActual=8, hasNextTrueCountActual=7, hasNextTimeNanosActual=48.5M, nextCallCountActual=6, nextTimeNanosActual=125, firstRowTimeNanosActual=40.8M, openCountActual=1, lastRowTimeNanosActual=48.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=6.1M, avgNextNanosActual=21, leftRowsConsumedActual=6, rightRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── Filter (resultSizeActual=6, hasNextCallCountActual=7, hasNextTrueCountActual=6, hasNextTimeNanosActual=7.7M, nextCallCountActual=6, nextTimeNanosActual=125, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=17.3K, exprEvalCountActual=6, openCountActual=1, exprTrueCountActual=6, lastRowTimeNanosActual=48.5M, closeCountActual=1, varsAddedActual=2, exprEvalTimeNanosActual=10.5K, metricOrigin.varsAddedActual=derived, inputRowsActual=6, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.86, avgHasNextNanosActual=1.1M, avgNextNanosActual=21, filterRejectRateActual=0) + │ ║ │ ╠══ Exists (exprEvalCountActual=6, exprTrueCountActual=6, exprEvalTimeNanosActual=9.3K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ ║ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=6, hasNextTrueCountActual=6, hasNextTimeNanosActual=2.7K, sourceRowsScannedActual=6, sourceRowsMatchedActual=6, plannedIndexName=spoc, indexLookupCountActual=6, openCountActual=6, lastRowTimeNanosActual=500, closeCountActual=6, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=465, indexHitRateActual=1.00) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K, resultSizeActual=6, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=6, inputRowsActual=14, rowsDroppedActual=8, expansionFactorActual=0.43, sampleCountActual=2, varianceActual=5.7M, stddevActual=2.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=6) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=37, resultSizeActual=8, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=2, joinRightBindingsConsumedActual=8, inputRowsActual=10, rowsDroppedActual=2, expansionFactorActual=0.80, sampleCountActual=2, varianceActual=5.5M, stddevActual=2.3K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=2, rightRowsScannedActual=8, avgRightRowsPerLeftActual=4.00, joinOutputPerLeftActual=4.00) [left] + │ ║ │ │ ╠══ Filter (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=7.6M, nextCallCountActual=2, nextTimeNanosActual=124, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=2, sourceRowsFilteredActual=9.3K, plannedFilterEvidenceCount=22.9M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=7.6K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=2, lastRowTimeNanosActual=48.5M, closeCountActual=1, exprEvalTimeNanosActual=6.1M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.00, expansionFactorActual=0.00, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=2.6M, avgNextNanosActual=62, filterRejectRateActual=1.00) [left] + │ ║ │ │ ║ ├── Or (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=2, shortCircuitCountActual=1, exprEvalTimeNanosActual=5.4M, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ╠══ Compare (=) (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=4.5M, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ║ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.1K, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ╚══ Compare (=) (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=1, exprEvalTimeNanosActual=420.9K, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ValueConstant (value="Substation 1") (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) + │ ║ │ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=693.2K, nextCallCountActual=9.3K, nextTimeNanosActual=392.6K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=4.6K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=48.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=74, avgNextNanosActual=42, indexHitRateActual=1.00) + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=37.4K, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=4.8K, nextCallCountActual=8, nextTimeNanosActual=1.1K, sourceRowsScannedActual=15, sourceRowsMatchedActual=8, sourceRowsFilteredActual=7, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], unlockedFilters=Exists [right] + │ ║ │ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ │ Var (name=transformer) + │ ║ │ │ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ │ Var (name=meter) + │ ║ │ │ source=unknown, sharedJoinVars=[substation], firstRowTimeNanosActual=1.7K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=15.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=487, avgNextNanosActual=141, indexHitRateActual=0.53) + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern [index: spoc] (resultSizeEstimate=28.7K, resultSizeActual=6, hasNextCallCountActual=14, hasNextTrueCountActual=6, hasNextTimeNanosActual=6.3K, nextCallCountActual=6, nextTimeNanosActual=500, sourceRowsScannedActual=14, sourceRowsMatchedActual=6, sourceRowsFilteredActual=8, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[name, substation, transformer], sharedJoinVars=[transformer], firstRowTimeNanosActual=541, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=709, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.43, avgHasNextNanosActual=455, avgNextNanosActual=83, indexHitRateActual=0.43) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) (hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=40.7M, sourceRowsScannedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedFilterEvidenceCount=76.0M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter, exprEvalCountActual=112.0K, predicateErrorCountActual=112.0K, openCountActual=1, lastRowTimeNanosActual=40.7M, closeCountActual=1, exprEvalTimeNanosActual=25.2M, inputRowsActual=112.0K, rowsDroppedActual=112.0K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=40.8M, filterRejectRateActual=1.00) + │ ║ ╠══ Compare (=) (exprEvalCountActual=112.0K, exprErrorCountActual=112.0K, exprEvalTimeNanosActual=10.6M, hasNextFalseCountActual=0) + │ ║ ║ Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=6.4M, nextCallCountActual=112.0K, nextTimeNanosActual=3.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=40.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=58, avgNextNanosActual=35, indexHitRateActual=1.00) + │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9730,76 +10123,76 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) -│ ║ │ ╠══ Exists -│ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) -│ ║ │ ║ s: Var (name=transformer) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) -│ ║ │ ║ o: Var (name=meter) (bindingState=unbound) -│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=28.7K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=28.6K, plannedIndexPrefixLength=1.00, plannedWorkRows=33.6K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], unlockedFilters=Exists [left] -│ ║ │ │ ║ StatementPattern (resultSizeEstimate=112.1K) -│ ║ │ │ ║ Var (name=transformer) -│ ║ │ │ ║ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) -│ ║ │ │ ║ Var (name=meter) -│ ║ │ │ ║ ) -│ ║ │ │ ║ s: Var (name=transformer) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[transformer], plannedLookupComponents=[S, P]) [right] -│ ║ │ │ s: Var (name=transformer) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ │ │ o: Var (name=substation) (bindingState=unbound) -│ ║ │ └── Filter (resultSizeEstimate=1.4K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[substation, transformer], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ Or -│ ║ │ ║ ├── Compare (=) -│ ║ │ ║ │ Var (name=name) (bindingState=bound) -│ ║ │ ║ │ ValueConstant (value="Substation 0") -│ ║ │ ║ └── Compare (=) -│ ║ │ ║ Var (name=name) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="Substation 1") -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) -│ ║ │ s: Var (name=substation) (bindingState=bound) -│ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ╠══ Compare (=) -│ ║ ║ Var (name=load) (bindingState=bound) -│ ║ ║ Var (name=substation) (bindingState=unbound) -│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) -│ ║ s: Var (name=meter) (bindingState=unbound) -│ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) -│ ║ o: Var (name=load) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=transformer) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=transformer) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=28.7K) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=37) [left] + │ ║ │ │ ╠══ Filter (resultSizeEstimate=2.00, plannedFilterEvidenceCount=22.9M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.00, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ │ ║ ├── Or + │ ║ │ │ ║ │ ╠══ Compare (=) + │ ║ │ │ ║ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ║ ValueConstant (value="Substation 0") + │ ║ │ │ ║ │ ╚══ Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 1") + │ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ │ ║ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ ║ o: Var (name=name) (bindingState=unbound) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=37.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=37, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[name, substation], unlockedFilters=Exists [right] + │ ║ │ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ │ Var (name=transformer) + │ ║ │ │ Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ │ Var (name=meter) + │ ║ │ │ source=unknown, sharedJoinVars=[substation]) + │ ║ │ │ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=substation) (bindingState=bound) + │ ║ │ └── StatementPattern (resultSizeEstimate=28.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[name, substation, transformer], sharedJoinVars=[transformer]) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=76.1M, plannedFilterPassRatio=0, filterSelectivitySource=learned_filter) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { -?transformer a . -?transformer ?substation . -?substation ?name . -FILTER ((?name = "Substation 0") || (?name = "Substation 1")) -FILTER EXISTS { -?transformer ?meter . -} -MINUS { -?meter ?load . -FILTER (?load = ?substation) -} + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } } Theme: ELECTRICAL_GRID z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 38 ms +Initial explain execution time: 39 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -9810,58 +10203,58 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 21 ms +Fastest execution time: 20 ms -Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.2M) +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=30.6M, openCountActual=1, lastRowTimeNanosActual=30.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=30.6M) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "substation" (hasNextFalseCountActual=0) ║ ProjectionElem "transformerCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) -├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M) -│ ║ ├── Compare (>) (hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) -│ ║ └── Group (substation) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=31.1M, openCountActual=1, lastRowTimeNanosActual=31.1M, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=31.1M, groupsCreatedActual=0) -│ ║ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=9.3K, exprErrorCountActual=9.3K, exprEvalTimeNanosActual=1.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optTransformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=7.7M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=3.4M, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, plannedIndexName=psoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=375, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=368, indexHitRateActual=1.00) -│ ║ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=19.6M, nextCallCountActual=9.3K, nextTimeNanosActual=137.1K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, firstRowTimeNanosActual=14.3K, openCountActual=1, emptyRightProbeCountActual=9.3K, lastRowTimeNanosActual=31.0M, closeCountActual=1, inputRowsActual=9.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=15, leftRowsProbedActual=9.3K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=9.3K) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] -│ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=929.2K, nextCallCountActual=9.3K, nextTimeNanosActual=460.0K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=4.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=31.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=49, indexHitRateActual=1.00) [left] -│ ║ ║ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=421.7K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=500, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=2.6K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=45, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=4.8M, openCountActual=9.3K, lastRowTimeNanosActual=583, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=518) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=2.8M, sourceRowsScannedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=416, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=307, indexHitRateActual=0) -│ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optTransformer) (hasNextFalseCountActual=0) -│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ Count (hasNextFalseCountActual=0) -│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (transformerCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_61433f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ Count (hasNextFalseCountActual=0) -│ Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (transformerCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=30.6M, openCountActual=1, lastRowTimeNanosActual=30.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=30.6M) + ├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=30.6M, openCountActual=1, lastRowTimeNanosActual=30.6M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=30.6M) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=30.6M, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, openCountActual=1, lastRowTimeNanosActual=30.6M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=30.6M) + │ ║ ├── Compare (>) (hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_6643e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0"^^) (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) + │ ║ └── Group (substation) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=30.6M, openCountActual=1, lastRowTimeNanosActual=30.6M, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=30.6M, groupsCreatedActual=0) + │ ║ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=9.3K, exprErrorCountActual=9.3K, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=7.5M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=3.5M, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, plannedIndexName=psoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=375, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=374, indexHitRateActual=1.00) + │ ║ │ s: Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=19.2M, nextCallCountActual=9.3K, nextTimeNanosActual=143.6K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=9.3K, firstRowTimeNanosActual=13.2K, openCountActual=1, emptyRightProbeCountActual=9.3K, lastRowTimeNanosActual=30.5M, closeCountActual=1, inputRowsActual=9.3K, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=15, leftRowsProbedActual=9.3K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinMatchRateActual=0, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=9.3K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K, resultSizeActual=9.3K, joinRightIteratorsCreatedActual=9.3K, joinLeftBindingsConsumedActual=18.7K, joinRightBindingsConsumedActual=9.3K, inputRowsActual=18.7K, rowsDroppedActual=9.3K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=18.7K, rightRowsScannedActual=9.3K, avgRightRowsPerLeftActual=0.50, joinOutputPerLeftActual=0.50) [left] + │ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=748.5K, nextCallCountActual=9.3K, nextTimeNanosActual=455.6K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedAccessRows=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=30.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=80, avgNextNanosActual=49, indexHitRateActual=1.00) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=18.7K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=4.2M, nextCallCountActual=9.3K, nextTimeNanosActual=417.5K, sourceRowsScannedActual=18.7K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[name, substation], sharedJoinVars=[substation], firstRowTimeNanosActual=1000, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=3.0K, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=227, avgNextNanosActual=45, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=4.7M, openCountActual=9.3K, lastRowTimeNanosActual=542, closeCountActual=9.3K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=509) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=37.4K, resultSizeActual=0, hasNextCallCountActual=9.3K, hasNextTimeNanosActual=2.8M, sourceRowsScannedActual=9.3K, sourceRowsFilteredActual=9.3K, plannedIndexName=spoc, indexLookupCountActual=9.3K, openCountActual=9.3K, lastRowTimeNanosActual=416, closeCountActual=9.3K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.3K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=308, indexHitRateActual=0) + │ ║ │ s: Var (name=substation) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optTransformer) (hasNextFalseCountActual=0) + │ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_6643e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ Count (hasNextFalseCountActual=0) + │ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (transformerCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=transformer) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_6643e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ Count (hasNextFalseCountActual=0) + │ Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (transformerCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=transformer) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9870,62 +10263,62 @@ Projection ║ ProjectionElem "substation" ║ ProjectionElem "transformerCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="0"^^) -│ ║ └── Group (substation) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optTransformer) (bindingState=bound) -│ ║ │ ║ Var (name=substation) (bindingState=bound) -│ ║ │ ╚══ Exists -│ ║ │ StatementPattern (resultSizeEstimate=112.1K) -│ ║ │ s: Var (name=transformer) (bindingState=bound) -│ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) -│ ║ │ o: Var (name=meter) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] -│ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ s: Var (name=substation) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) -│ ║ ║ │ o: Var (name=name) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[name, substation], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=substation) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=37.4K) -│ ║ │ s: Var (name=substation) (bindingState=bound) -│ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) -│ ║ │ o: Var (name=transformer) (bindingState=unbound) -│ ║ └── ExtensionElem (optTransformer) -│ ║ Var (name=transformer) (bindingState=bound) -│ ║ GroupElem (_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0) -│ ║ Count -│ ║ Var (name=transformer) (bindingState=bound) -│ ║ GroupElem (transformerCount) -│ ║ Count (Distinct) -│ ║ Var (name=transformer) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_12433f2fe36952f541b08a42a7b8ce15e70d0) -│ Count -│ Var (name=transformer) (bindingState=unbound) -└── ExtensionElem (transformerCount) -Count (Distinct) -Var (name=transformer) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_1743e226babdcc344c88a5a61806b6a8e7f30, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (substation) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTransformer) (bindingState=bound) + │ ║ │ ║ Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ o: Var (name=meter) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=9.4K) [left] + │ ║ ║ ├── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ s: Var (name=substation) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ ║ │ o: Var (name=name) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=9.4K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[name, substation], sharedJoinVars=[substation]) [right] + │ ║ ║ s: Var (name=substation) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=37.4K) + │ ║ │ s: Var (name=substation) (bindingState=bound) + │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ o: Var (name=transformer) (bindingState=unbound) + │ ║ └── ExtensionElem (optTransformer) + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (_anon_having_1743e226babdcc344c88a5a61806b6a8e7f30) + │ ║ Count + │ ║ Var (name=transformer) (bindingState=bound) + │ ║ GroupElem (transformerCount) + │ ║ Count (Distinct) + │ ║ Var (name=transformer) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_1743e226babdcc344c88a5a61806b6a8e7f30) + │ Count + │ Var (name=transformer) (bindingState=unbound) + └── ExtensionElem (transformerCount) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?substation (COUNT(DISTINCT ?transformer) AS ?transformerCount) WHERE { -?substation ?name . -?substation a . -OPTIONAL { -?substation ?transformer . -BIND(?transformer AS ?optTransformer) -} -FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) + ?substation ?name . + ?substation a . + OPTIONAL { + ?substation ?transformer . + BIND(?transformer AS ?optTransformer) + } + FILTER ((?optTransformer != ?substation) && EXISTS { ?transformer ?meter . }) } GROUP BY ?substation HAVING (COUNT(?transformer) > 0) @@ -9946,51 +10339,46 @@ Warmup execution 9/10 Warmup execution 10/10 Fastest execution time: 6 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=584, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=584) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=625) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=292) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=84, firstRowTimeNanosActual=9.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=84, avgGroupSizeActual=0) -│ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsConsumedActual=0, overlapRowsActual=0) -│ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsProbedActual=0, rightRowsScannedActual=0) -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=0, joinRightIteratorsCreatedActual=58, joinLeftBindingsConsumedActual=58, inputRowsActual=58, rowsDroppedActual=58, expansionFactorActual=0, hasNextFalseCountActual=0, leftRowsProbedActual=58, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] -│ ║ │ ║ ├── Filter (resultSizeActual=58, hasNextCallCountActual=59, hasNextTrueCountActual=58, hasNextTimeNanosActual=9.3M, nextCallCountActual=58, nextTimeNanosActual=1.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=58, sourceRowsFilteredActual=9.3K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern, firstRowTimeNanosActual=56.5K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=58, lastRowTimeNanosActual=9.4M, closeCountActual=1, exprEvalTimeNanosActual=7.8M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=159.1K, avgNextNanosActual=24, filterRejectRateActual=0.99) [left] -│ ║ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=58, exprEvalTimeNanosActual=7.3M, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ValueConstant (value="500"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=443.4K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=457.3K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ║ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=437.9K, hasNextFalseCountActual=0) -│ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=602.2K, nextCallCountActual=9.3K, nextTimeNanosActual=348.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator -│ ║ │ ║ │ Var (name=cap) -│ ║ │ ║ │ ValueConstant (value="500"^^) -│ ║ │ ║ │ ValueConstant (value="600"^^) -│ ║ │ ║ │ ValueConstant (value="700"^^) -│ ║ │ ║ │ , firstRowTimeNanosActual=3.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=64, avgNextNanosActual=37, indexHitRateActual=1.00) -│ ║ │ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=18.8K, resultSizeActual=0, hasNextCallCountActual=58, hasNextTimeNanosActual=37.1K, sourceRowsScannedActual=58, sourceRowsFilteredActual=58, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[S, O, P], indexLookupCountActual=58, openCountActual=58, lastRowTimeNanosActual=625, closeCountActual=58, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58, nextPerHasNextRatioActual=0, avgHasNextNanosActual=641, indexHitRateActual=0) [right] -│ ║ │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] -│ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) -│ ║ ╠══ Compare (<) (hasNextFalseCountActual=0) -│ ║ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ValueConstant (value="500"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1000, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) -│ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=333, firstRowTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=333) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=9.4M, nextCallCountActual=1, nextTimeNanosActual=84, firstRowTimeNanosActual=9.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=9.5M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=7, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=4.7M, avgNextNanosActual=84, avgGroupSizeActual=0) + │ ╠══ Difference (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsConsumedActual=0, overlapRowsActual=0) + │ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=9.4M, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, inputRowsActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=9.5M, leftRowsProbedActual=0, rightRowsScannedActual=0) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0, resultSizeActual=0, joinRightIteratorsCreatedActual=58, joinLeftBindingsConsumedActual=58, inputRowsActual=58, rowsDroppedActual=58, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=58, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=58, resultSizeActual=58, hasNextCallCountActual=59, hasNextTrueCountActual=58, hasNextTimeNanosActual=9.3M, nextCallCountActual=58, nextTimeNanosActual=1.3K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=58, sourceRowsFilteredActual=9.3K, plannedFilterEvidenceCount=20.2M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=53.4K, exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, openCountActual=1, exprTrueCountActual=58, lastRowTimeNanosActual=9.4M, closeCountActual=1, exprEvalTimeNanosActual=7.8M, inputRowsActual=9.3K, rowsDroppedActual=9.3K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=159.3K, avgNextNanosActual=23, filterRejectRateActual=0.99) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=9.3K, exprFalseCountActual=9.3K, exprTrueCountActual=58, exprEvalTimeNanosActual=7.3M, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=442.7K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=448.4K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) (exprEvalCountActual=9.3K, exprTrueCountActual=9.3K, exprEvalTimeNanosActual=447.7K, hasNextFalseCountActual=0) + │ ║ │ ║ │ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=9.4K, resultSizeActual=9.3K, hasNextCallCountActual=9.3K, hasNextTrueCountActual=9.3K, hasNextTimeNanosActual=614.0K, nextCallCountActual=9.3K, nextTimeNanosActual=370.6K, sourceRowsScannedActual=9.3K, sourceRowsMatchedActual=9.3K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=9.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=66, avgNextNanosActual=40, indexHitRateActual=1.00) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=18.8K, resultSizeActual=0, hasNextCallCountActual=58, hasNextTimeNanosActual=34.9K, sourceRowsScannedActual=58, sourceRowsFilteredActual=58, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[cap, line], sharedJoinVars=[line], indexLookupCountActual=58, openCountActual=58, lastRowTimeNanosActual=500, closeCountActual=58, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=58, nextPerHasNextRatioActual=0, avgHasNextNanosActual=602, indexHitRateActual=0) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) [right] + │ ║ │ s: Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=substation) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (sourceRowsFilteredActual=0, plannedFilterEvidenceCount=31.1M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) + │ ║ ╠══ Compare (<) (hasNextFalseCountActual=0) + │ ║ ║ Var (name=cap2) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ValueConstant (value="500"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.2K, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) + │ ║ s: Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=cap2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=line) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=line) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -9998,126 +10386,121 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── LeftJoin -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] -│ ║ │ ║ ├── Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, deferredFilterScope=localPattern) [left] -│ ║ │ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) -│ ║ │ ║ │ ║ ValueConstant (value="500"^^) -│ ║ │ ║ │ ║ ValueConstant (value="600"^^) -│ ║ │ ║ │ ║ ValueConstant (value="700"^^) -│ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], unlockedFilters=ListMemberOperator -│ ║ │ ║ │ Var (name=cap) -│ ║ │ ║ │ ValueConstant (value="500"^^) -│ ║ │ ║ │ ValueConstant (value="600"^^) -│ ║ │ ║ │ ValueConstant (value="700"^^) -│ ║ │ ║ │ ) -│ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[cap, line], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ║ s: Var (name=line) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] -│ ║ │ s: Var (name=line) (bindingState=bound) -│ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) -│ ║ │ o: Var (name=substation) (bindingState=unbound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) -│ ║ ╠══ Compare (<) -│ ║ ║ Var (name=cap2) (bindingState=bound) -│ ║ ║ ValueConstant (value="500"^^) -│ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) -│ ║ s: Var (name=line) (bindingState=unbound) -│ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) -│ ║ o: Var (name=cap2) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=line) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=line) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── LeftJoin + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=0) [left] + │ ║ │ ║ ├── Filter (resultSizeEstimate=58, plannedFilterEvidenceCount=20.2M, plannedAccessRows=9.4K, plannedFilterPassRatio=0.01, plannedIndexPrefixLength=1.00, plannedWorkRows=9.4K, plannedIndexName=psoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[O], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ │ ║ Var (name=cap) (bindingState=bound) + │ ║ │ ║ │ ║ ValueConstant (value="500"^^) + │ ║ │ ║ │ ║ ValueConstant (value="600"^^) + │ ║ │ ║ │ ║ ValueConstant (value="700"^^) + │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ │ s: Var (name=line) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ │ ║ │ o: Var (name=cap) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=18.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[cap, line], sharedJoinVars=[line]) [right] + │ ║ │ ║ s: Var (name=line) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ o: Var (name=_const_9651cc13_uri, value=http://example.com/theme/grid/Line, anonymous) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=37.5K) [right] + │ ║ │ s: Var (name=line) (bindingState=bound) + │ ║ │ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + │ ║ │ o: Var (name=substation) (bindingState=unbound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=31.1M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_pattern) + │ ║ ╠══ Compare (<) + │ ║ ║ Var (name=cap2) (bindingState=bound) + │ ║ ║ ValueConstant (value="500"^^) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ s: Var (name=line) (bindingState=unbound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=cap2) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=line) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=line) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { -?line ?cap . -FILTER (?cap IN (500, 600, 700)) -?line a . -OPTIONAL { -?line ?substation . -} -MINUS { -?line ?cap2 . -FILTER (?cap2 < 500) -} + ?line ?cap . + FILTER (?cap IN (500, 600, 700)) + ?line a . + OPTIONAL { + ?line ?substation . + } + MINUS { + ?line ?cap2 . + FILTER (?cap2 < 500) + } } Theme: ELECTRICAL_GRID z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 737 ms +Initial explain execution time: 732 ms Warmup execution 1/2 Warmup execution 2/2 -Fastest execution time: 457 ms +Fastest execution time: 456 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=4.0K, firstRowTimeNanosActual=720.7M, openCountActual=1, lastRowTimeNanosActual=720.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=4.1K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=713.3M, nextCallCountActual=1, nextTimeNanosActual=4.8K, firstRowTimeNanosActual=713.3M, openCountActual=1, lastRowTimeNanosActual=713.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=356.7M, avgNextNanosActual=4.9K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=2.1K, firstRowTimeNanosActual=720.7M, openCountActual=1, lastRowTimeNanosActual=720.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=2.2K) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=720.7M, nextCallCountActual=1, nextTimeNanosActual=875, firstRowTimeNanosActual=720.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=720.7M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=360.4M, avgNextNanosActual=875, avgGroupSizeActual=0) -│ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=224.1K, rowsDroppedActual=224.1K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (>) (exprEvalCountActual=224.1K, exprFalseCountActual=224.1K, exprEvalTimeNanosActual=75.7M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="200"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.2K, hasNextFalseCountActual=0) -│ ║ │ ╚══ Not (hasNextFalseCountActual=0) -│ ║ │ Exists (hasNextFalseCountActual=0) -│ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) -│ ║ │ ├── Compare (<) (hasNextFalseCountActual=0) -│ ║ │ │ Var (name=low) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ValueConstant (value="50"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) -│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) -│ ║ │ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=low) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=619.8M, nextCallCountActual=224.1K, nextTimeNanosActual=2.1M, joinRightIteratorsCreatedActual=224.1K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=224.1K, firstRowTimeNanosActual=15.3K, leftRowsWithMatchActual=224.1K, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=448.2K, rowsDroppedActual=224.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.8K, avgNextNanosActual=9.52, leftRowsProbedActual=224.1K, rightRowsScannedActual=224.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Union (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=393.2M, nextCallCountActual=224.1K, nextTimeNanosActual=3.7M, firstRowTimeNanosActual=14.2K, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, sampleCountActual=2, varianceActual=0.10, stddevActual=0.32, confidenceScoreActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.8K, avgNextNanosActual=17, leftRowsConsumedActual=112.0K, rightRowsConsumedActual=112.0K, leftRowsOutputContributionActual=112.0K, rightRowsOutputContributionActual=112.0K) [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.54, stddevActual=0.73, confidenceScoreActual=0.54, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=9.6M, nextCallCountActual=112.0K, nextTimeNanosActual=5.0M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=11.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=294.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=45, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=276.7K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=48.7M, nextCallCountActual=112.0K, nextTimeNanosActual=5.8M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.6K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=52, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.34, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=112.0K) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.57, stddevActual=0.75, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=12.2M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=294.0M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=720.6M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=109, avgNextNanosActual=53, indexHitRateActual=1.00) [left] -│ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=280.9K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=56.3M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O], firstRowTimeNanosActual=500, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.1K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=251, avgNextNanosActual=53, indexHitRateActual=0.50) [right] -│ ║ ║ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=205.4K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=53.3M, nextCallCountActual=112.0K, nextTimeNanosActual=5.3M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.1K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=238, avgNextNanosActual=48, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=224.1K, hasNextCallCountActual=448.2K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=94.0M, nextCallCountActual=224.1K, nextTimeNanosActual=11.6M, sourceRowsScannedActual=448.2K, sourceRowsMatchedActual=224.1K, sourceRowsFilteredActual=224.1K, plannedIndexName=spoc, firstRowTimeNanosActual=833, indexLookupCountActual=224.1K, openCountActual=224.1K, lastRowTimeNanosActual=1.1K, closeCountActual=224.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=224.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=52, indexHitRateActual=0.50) [right] -│ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=optValue) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=713.3M, nextCallCountActual=1, nextTimeNanosActual=2.5K, firstRowTimeNanosActual=713.4M, openCountActual=1, lastRowTimeNanosActual=713.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=356.7M, avgNextNanosActual=2.6K) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=713.3M, nextCallCountActual=1, nextTimeNanosActual=1.0K, firstRowTimeNanosActual=713.4M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=713.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=1, varsDroppedActual=8, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=356.7M, avgNextNanosActual=1.0K, avgGroupSizeActual=0) + │ ╠══ Filter (resultSizeActual=0, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=224.1K, rowsDroppedActual=224.1K, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (>) (exprEvalCountActual=224.1K, exprFalseCountActual=224.1K, exprEvalTimeNanosActual=77.6M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optValue) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="200"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ │ ╚══ Not (hasNextFalseCountActual=0) + │ ║ │ Exists (hasNextFalseCountActual=0) + │ ║ │ Filter (sourceRowsFilteredActual=0, plannedFilterEvidenceCount=4.3M, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern, hasNextFalseCountActual=0) + │ ║ │ ├── Compare (<) (hasNextFalseCountActual=0) + │ ║ │ │ Var (name=low) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ValueConstant (value="50"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=125, hasNextFalseCountActual=0) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0) + │ ║ │ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=low) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=607.4M, nextCallCountActual=224.1K, nextTimeNanosActual=2.7M, joinRightIteratorsCreatedActual=224.1K, joinLeftBindingsConsumedActual=224.1K, joinRightBindingsConsumedActual=224.1K, firstRowTimeNanosActual=19.2K, leftRowsWithMatchActual=224.1K, openCountActual=1, lastRowTimeNanosActual=713.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=448.2K, rowsDroppedActual=224.1K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.7K, avgNextNanosActual=12, leftRowsProbedActual=224.1K, rightRowsScannedActual=224.1K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Union (resultSizeActual=224.1K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=381.8M, nextCallCountActual=224.1K, nextTimeNanosActual=3.4M, firstRowTimeNanosActual=17.5K, openCountActual=1, lastRowTimeNanosActual=713.2M, closeCountActual=1, sampleCountActual=2, varianceActual=0.10, stddevActual=0.32, confidenceScoreActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=15, leftRowsConsumedActual=112.0K, rightRowsConsumedActual=112.0K, leftRowsOutputContributionActual=112.0K, rightRowsOutputContributionActual=112.0K) [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=278.9K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.55, stddevActual=0.74, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=9.4M, nextCallCountActual=112.0K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=12.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=301.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=84, avgNextNanosActual=51, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=278.9K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=50.4M, nextCallCountActual=112.0K, nextTimeNanosActual=6.0M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter], firstRowTimeNanosActual=500, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.5K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=54, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=208.3K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.10, stddevActual=0.32, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=112.0K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=278.9K, resultSizeActual=112.0K, joinRightIteratorsCreatedActual=112.0K, joinLeftBindingsConsumedActual=112.0K, joinRightBindingsConsumedActual=112.0K, inputRowsActual=224.1K, rowsDroppedActual=112.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.55, stddevActual=0.74, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=112.0K, rightRowsScannedActual=112.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=112.1K, resultSizeActual=112.0K, hasNextCallCountActual=112.0K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=11.1M, nextCallCountActual=112.0K, nextTimeNanosActual=5.6M, sourceRowsScannedActual=112.0K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=1, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=301.2M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=713.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=100, avgNextNanosActual=50, indexHitRateActual=1.00) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=278.9K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=51.0M, nextCallCountActual=112.0K, nextTimeNanosActual=6.2M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter], firstRowTimeNanosActual=375, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=3.4K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=228, avgNextNanosActual=55, indexHitRateActual=0.50) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=load) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=208.3K, resultSizeActual=112.0K, hasNextCallCountActual=224.1K, hasNextTrueCountActual=112.0K, hasNextTimeNanosActual=46.9M, nextCallCountActual=112.0K, nextTimeNanosActual=5.9M, sourceRowsScannedActual=224.1K, sourceRowsMatchedActual=112.0K, sourceRowsFilteredActual=112.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[load, meter], sharedJoinVars=[load], firstRowTimeNanosActual=1.0K, indexLookupCountActual=112.0K, openCountActual=112.0K, lastRowTimeNanosActual=2.4K, closeCountActual=112.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=112.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=210, avgNextNanosActual=53, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=value) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=112.1K, resultSizeActual=224.1K, hasNextCallCountActual=448.2K, hasNextTrueCountActual=224.1K, hasNextTimeNanosActual=92.1M, nextCallCountActual=224.1K, nextTimeNanosActual=11.9M, sourceRowsScannedActual=448.2K, sourceRowsMatchedActual=224.1K, sourceRowsFilteredActual=224.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=224.1K, openCountActual=224.1K, lastRowTimeNanosActual=875, closeCountActual=224.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=224.1K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=206, avgNextNanosActual=53, indexHitRateActual=0.50) [right] + │ ║ s: Var (name=load) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=optValue) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=meter) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=meter) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -10125,81 +10508,81 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (>) -│ ║ │ ║ Var (name=optValue) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="200"^^) -│ ║ │ ╚══ Not -│ ║ │ Exists -│ ║ │ Filter (plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern) -│ ║ │ ├── Compare (<) -│ ║ │ │ Var (name=low) (bindingState=bound) -│ ║ │ │ ValueConstant (value="50"^^) -│ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) -│ ║ │ s: Var (name=load) (bindingState=bound) -│ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) -│ ║ │ o: Var (name=low) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Union [left] -│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=276.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[meter], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=meter) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) -│ ║ ║ │ o: Var (name=load) (bindingState=unbound) -│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) -│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=280.9K) [left] -│ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=111.6K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ ║ │ s: Var (name=load) (bindingState=unbound) -│ ║ ║ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) -│ ║ ║ ║ │ o: Var (name=value) (bindingState=unbound) -│ ║ ║ ║ └── StatementPattern (resultSizeEstimate=280.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[load, value], plannedLookupComponents=[O]) [right] -│ ║ ║ ║ s: Var (name=meter) (bindingState=unbound) -│ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) -│ ║ ║ ║ o: Var (name=load) (bindingState=bound) -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=205.4K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[load, meter, value], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=meter) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) -│ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] -│ ║ s: Var (name=load) (bindingState=bound) -│ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) -│ ║ o: Var (name=optValue) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=meter) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=meter) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter (plannedFilterEvidenceCount=4.3M, plannedFilterPassRatio=0.13, filterSelectivitySource=learned_pattern) + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=278.9K) + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=112.1K, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=278.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter]) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=208.3K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=278.9K) [left] + │ ║ ║ ║ ├── StatementPattern (resultSizeEstimate=112.1K, plannedAccessRows=151.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=151.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ║ └── StatementPattern (resultSizeEstimate=278.9K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[meter], sharedJoinVars=[meter]) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=208.3K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[load, meter], sharedJoinVars=[load]) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { -{ -?meter a . -?meter ?load . -} -UNION -{ -?load ?value . -?meter ?load . -?meter a . -} -OPTIONAL { -?load ?optValue . -} -FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter a . + ?meter ?load . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) } Theme: PHARMA z_queryIndex: 0 === Explanation Telemetry === -Initial explain execution time: 42 ms +Initial explain execution time: 33 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -10212,80 +10595,80 @@ Warmup execution 9/10 Warmup execution 10/10 Fastest execution time: 25 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=347.3K, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=349.3K, openCountActual=1, lastRowTimeNanosActual=353.6K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=173.7K, avgNextNanosActual=625) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=416.2K, nextCallCountActual=1, nextTimeNanosActual=709, firstRowTimeNanosActual=419.8K, openCountActual=1, lastRowTimeNanosActual=424.0K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208.1K, avgNextNanosActual=709) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=346.8K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=352.9K, openCountActual=1, lastRowTimeNanosActual=355.1K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=173.4K, avgNextNanosActual=292) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=345.2K, nextCallCountActual=1, nextTimeNanosActual=167, aggregateEvalCountActual=18, firstRowTimeNanosActual=353.0K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=354.0K, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=172.6K, avgNextNanosActual=167) -│ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=296.7K, nextCallCountActual=18, nextTimeNanosActual=332, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=43.7K, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=314.6K, closeCountActual=1, exprEvalTimeNanosActual=13.3K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=14.8K, avgNextNanosActual=18, filterRejectRateActual=0) -│ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=10.4K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=14.6K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=275.5K, nextCallCountActual=18, nextTimeNanosActual=628, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=39.5K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=305.6K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=14.5K, avgNextNanosActual=35, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=18, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=18, inputRowsActual=20, rowsDroppedActual=2, expansionFactorActual=0.90, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=18, avgRightRowsPerLeftActual=0.90, joinOutputPerLeftActual=0.90) [left] -│ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=626, nextCallCountActual=2, nextTimeNanosActual=126, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=1.7K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=303.1K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=209, avgNextNanosActual=63) [left] -│ ║ ║ └── Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=18, hasNextTimeNanosActual=214.0K, nextCallCountActual=18, nextTimeNanosActual=543, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=9.7K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=2, exprTrueCountActual=18, lastRowTimeNanosActual=122.0K, closeCountActual=2, exprEvalTimeNanosActual=56.4K, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=10.7K, avgNextNanosActual=30, filterRejectRateActual=0.31) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=52.9K, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=31.9K, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=17.2K, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=8.4K, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) -│ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=14, stddevActual=3.79, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=26, inputRowsActual=34, rowsDroppedActual=8, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=18, stddevActual=4.21, confidenceScoreActual=0.28, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] -│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=8, inputRowsActual=16, rowsDroppedActual=8, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=8, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=8.7K, nextCallCountActual=8, nextTimeNanosActual=2.2K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O], firstRowTimeNanosActual=3.3K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=120.3K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=879, avgNextNanosActual=281, indexHitRateActual=0.09) [left] -│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=8.5K, nextCallCountActual=8, nextTimeNanosActual=625, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=1.1K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=27.2K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=531, avgNextNanosActual=78, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=5.7K, nextCallCountActual=26, nextTimeNanosActual=1.6K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=417, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=25.5K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=169, avgNextNanosActual=62, indexHitRateActual=0.76) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=12.6K, nextCallCountActual=26, nextTimeNanosActual=1.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=7.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=243, avgNextNanosActual=70, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.8K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=458, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=6.5K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=70, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.9K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=5.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=74, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=10.8K, nextCallCountActual=26, nextTimeNanosActual=1.6K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] -│ ║ ║ Compare (<) -│ ║ ║ Var (name=p) -│ ║ ║ ValueConstant (value="0.05"^^) -│ ║ ║ Compare (>) -│ ║ ║ Var (name=effect) -│ ║ ║ ValueConstant (value="0.7"^^) -│ ║ ║ , firstRowTimeNanosActual=417, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=4.6K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=209, avgNextNanosActual=64, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=17.2K, nextCallCountActual=18, nextTimeNanosActual=3.2K, firstRowTimeNanosActual=541, openCountActual=18, lastRowTimeNanosActual=2.5K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=480, avgNextNanosActual=178) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=8.4K, nextCallCountActual=18, nextTimeNanosActual=1.4K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=1.7K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=79, indexHitRateActual=0.50) -│ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0) -│ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=415.5K, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=424.8K, openCountActual=1, lastRowTimeNanosActual=427.2K, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207.8K, avgNextNanosActual=292) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=414.2K, nextCallCountActual=1, nextTimeNanosActual=250, aggregateEvalCountActual=18, firstRowTimeNanosActual=425.1K, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=426.3K, maxGroupSizeActual=18, closeCountActual=1, varsAddedActual=1, varsDroppedActual=18, avgGroupSizeActual=18, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=18, rowsDroppedActual=17, selectivityActual=0.06, expansionFactorActual=0.06, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207.1K, avgNextNanosActual=250) + │ ╠══ Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=19, hasNextTimeNanosActual=355.1K, nextCallCountActual=18, nextTimeNanosActual=376, sourceRowsScannedActual=18, sourceRowsMatchedActual=18, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=58.9K, exprEvalCountActual=18, openCountActual=1, exprTrueCountActual=18, lastRowTimeNanosActual=380.1K, closeCountActual=1, exprEvalTimeNanosActual=17.3K, inputRowsActual=18, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=17.8K, avgNextNanosActual=21, filterRejectRateActual=0) + │ ║ ├── Compare (!=) (exprEvalCountActual=18, exprTrueCountActual=18, exprEvalTimeNanosActual=13.7K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optMarker) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) (exprEvalCountActual=1, exprEvalTimeNanosActual=22.3K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=18, hasNextCallCountActual=19, hasNextTrueCountActual=18, hasNextTimeNanosActual=329.5K, nextCallCountActual=18, nextTimeNanosActual=540, joinRightIteratorsCreatedActual=18, joinLeftBindingsConsumedActual=18, joinRightBindingsConsumedActual=18, firstRowTimeNanosActual=54.2K, leftRowsWithMatchActual=18, openCountActual=1, lastRowTimeNanosActual=370.4K, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=36, rowsDroppedActual=18, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.95, avgHasNextNanosActual=17.3K, avgNextNanosActual=30, leftRowsProbedActual=18, rightRowsScannedActual=18, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=18, joinRightIteratorsCreatedActual=2, joinLeftBindingsConsumedActual=20, joinRightBindingsConsumedActual=18, inputRowsActual=20, rowsDroppedActual=2, expansionFactorActual=0.90, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=20, rightRowsScannedActual=18, avgRightRowsPerLeftActual=0.90, joinOutputPerLeftActual=0.90) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, resultSizeActual=2, hasNextCallCountActual=3, hasNextTrueCountActual=2, hasNextTimeNanosActual=876, nextCallCountActual=2, nextTimeNanosActual=501, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=2.6K, openCountActual=1, bindingsProvidedActual=2, lastRowTimeNanosActual=367.8K, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=292, avgNextNanosActual=251) [left] + │ ║ ║ └── Filter (resultSizeActual=18, hasNextCallCountActual=20, hasNextTrueCountActual=18, hasNextTimeNanosActual=255.9K, nextCallCountActual=18, nextTimeNanosActual=375, sourceRowsScannedActual=26, sourceRowsMatchedActual=18, sourceRowsFilteredActual=8, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=10.7K, exprEvalCountActual=26, exprFalseCountActual=8, openCountActual=2, exprTrueCountActual=18, lastRowTimeNanosActual=157.2K, closeCountActual=2, exprEvalTimeNanosActual=82.6K, inputRowsActual=26, rowsDroppedActual=8, selectivityActual=0.69, expansionFactorActual=0.69, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.90, avgHasNextNanosActual=12.8K, avgNextNanosActual=21, filterRejectRateActual=0.31) [right] + │ ║ ║ ╠══ Or (exprEvalCountActual=26, exprFalseCountActual=8, exprTrueCountActual=18, shortCircuitCountActual=14, exprEvalTimeNanosActual=78.0K, hasNextFalseCountActual=0) + │ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=26, exprFalseCountActual=12, exprTrueCountActual=14, exprEvalTimeNanosActual=41.7K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=12.4K, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Compare (>) (exprEvalCountActual=12, exprFalseCountActual=8, exprTrueCountActual=4, exprEvalTimeNanosActual=11.2K, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=14, stddevActual=3.79, confidenceScoreActual=0.29, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=26, joinRightBindingsConsumedActual=26, inputRowsActual=52, rowsDroppedActual=26, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=26, joinRightIteratorsCreatedActual=8, joinRightBindingsConsumedActual=26, inputRowsActual=34, rowsDroppedActual=8, expansionFactorActual=0.76, sampleCountActual=2, varianceActual=18, stddevActual=4.21, confidenceScoreActual=0.28, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=26) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=8, joinRightIteratorsCreatedActual=8, joinLeftBindingsConsumedActual=8, joinRightBindingsConsumedActual=8, inputRowsActual=16, rowsDroppedActual=8, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=8, rightRowsScannedActual=8, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=10, hasNextTrueCountActual=8, hasNextTimeNanosActual=11.5K, nextCallCountActual=8, nextTimeNanosActual=2.1K, sourceRowsScannedActual=94, sourceRowsMatchedActual=8, sourceRowsFilteredActual=86, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=6.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[disease], sharedJoinVars=[disease], firstRowTimeNanosActual=4.0K, indexLookupCountActual=2, openCountActual=2, lastRowTimeNanosActual=156.0K, closeCountActual=2, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2, nextPerHasNextRatioActual=0.80, avgHasNextNanosActual=1.2K, avgNextNanosActual=266, indexHitRateActual=0.09) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=8, hasNextCallCountActual=16, hasNextTrueCountActual=8, hasNextTimeNanosActual=13.2K, nextCallCountActual=8, nextTimeNanosActual=793, sourceRowsScannedActual=16, sourceRowsMatchedActual=8, sourceRowsFilteredActual=8, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial], firstRowTimeNanosActual=1.7K, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=30.5K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=825, avgNextNanosActual=99, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=34, hasNextTrueCountActual=26, hasNextTimeNanosActual=6.4K, nextCallCountActual=26, nextTimeNanosActual=2.2K, sourceRowsScannedActual=34, sourceRowsMatchedActual=26, sourceRowsFilteredActual=8, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial], firstRowTimeNanosActual=416, indexLookupCountActual=8, openCountActual=8, lastRowTimeNanosActual=28.2K, closeCountActual=8, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8, nextPerHasNextRatioActual=0.76, avgHasNextNanosActual=189, avgNextNanosActual=87, indexHitRateActual=0.76) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=13.0K, nextCallCountActual=26, nextTimeNanosActual=1.9K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, trial], sharedJoinVars=[arm], firstRowTimeNanosActual=583, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=8.2K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252, avgNextNanosActual=74, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=11.4K, nextCallCountActual=26, nextTimeNanosActual=1.7K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, trial], sharedJoinVars=[arm], firstRowTimeNanosActual=583, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=7.0K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=67, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=11.7K, nextCallCountActual=26, nextTimeNanosActual=1.5K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, result, trial], sharedJoinVars=[result], firstRowTimeNanosActual=458, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=5.8K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=61, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=26, hasNextCallCountActual=52, hasNextTrueCountActual=26, hasNextTimeNanosActual=11.4K, nextCallCountActual=26, nextTimeNanosActual=1.5K, sourceRowsScannedActual=52, sourceRowsMatchedActual=26, sourceRowsFilteredActual=26, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, p, result, trial], unlockedFilters=Or [right] + │ ║ ║ Compare (<) + │ ║ ║ Var (name=p) + │ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ Compare (>) + │ ║ ║ Var (name=effect) + │ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ source=unknown, sharedJoinVars=[result], firstRowTimeNanosActual=667, indexLookupCountActual=26, openCountActual=26, lastRowTimeNanosActual=4.9K, closeCountActual=26, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=26, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=221, avgNextNanosActual=58, indexHitRateActual=0.50) + │ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=19.9K, nextCallCountActual=18, nextTimeNanosActual=3.6K, firstRowTimeNanosActual=750, openCountActual=18, lastRowTimeNanosActual=2.4K, closeCountActual=18, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=554, avgNextNanosActual=201) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=18, hasNextCallCountActual=36, hasNextTrueCountActual=18, hasNextTimeNanosActual=9.9K, nextCallCountActual=18, nextTimeNanosActual=1.1K, sourceRowsScannedActual=36, sourceRowsMatchedActual=18, sourceRowsFilteredActual=18, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=18, openCountActual=18, lastRowTimeNanosActual=2.1K, closeCountActual=18, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=18, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=275, avgNextNanosActual=65, indexHitRateActual=0.50) + │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=marker) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optMarker) (hasNextFalseCountActual=0) + │ ║ Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -10293,100 +10676,100 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (!=) -│ ║ │ Var (name=optMarker) (bindingState=bound) -│ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] -│ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (<) -│ ║ ║ ║ │ Var (name=p) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="0.05"^^) -│ ║ ║ ║ └── Compare (>) -│ ║ ║ ║ Var (name=effect) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="0.7"^^) -│ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] -│ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[disease], plannedLookupComponents=[O]) [left] -│ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) -│ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) -│ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) -│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -│ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) -│ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) -│ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) -│ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=result) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) -│ ║ ║ │ o: Var (name=p) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, p, result, trial], plannedLookupComponents=[S, P], unlockedFilters=Or [right] -│ ║ ║ Compare (<) -│ ║ ║ Var (name=p) -│ ║ ║ ValueConstant (value="0.05"^^) -│ ║ ║ Compare (>) -│ ║ ║ Var (name=effect) -│ ║ ║ ValueConstant (value="0.7"^^) -│ ║ ║ ) -│ ║ ║ s: Var (name=result) (bindingState=bound) -│ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) -│ ║ ║ o: Var (name=effect) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) -│ ║ │ s: Var (name=result) (bindingState=bound) -│ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) -│ ║ │ o: Var (name=marker) (bindingState=unbound) -│ ║ └── ExtensionElem (optMarker) -│ ║ Var (name=marker) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=drug) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=drug) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMarker) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/biomarker/999) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] + │ ║ ║ ├── BindingSetAssignment ([[disease=http://example.com/theme/pharma/disease/0], [disease=http://example.com/theme/pharma/disease/1]]) (resultSizeEstimate=2.00, plannedWorkRows=2.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ └── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (>) + │ ║ ║ ║ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ ╚══ Join (JoinIterator) (resultSizeEstimate=3.1K) + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + │ ║ ║ │ ║ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=6.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[disease], sharedJoinVars=[disease]) [left] + │ ║ ║ │ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + │ ║ ║ │ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, trial], sharedJoinVars=[arm]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, trial], sharedJoinVars=[arm]) [right] + │ ║ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, result, trial], sharedJoinVars=[result]) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, p, result, trial], unlockedFilters=Or [right] + │ ║ ║ Compare (<) + │ ║ ║ Var (name=p) + │ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ Compare (>) + │ ║ ║ Var (name=effect) + │ ║ ║ ValueConstant (value="0.7"^^) + │ ║ ║ source=unknown, sharedJoinVars=[result]) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ o: Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=unbound) + │ ║ └── ExtensionElem (optMarker) + │ ║ Var (name=marker) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { -VALUES ?disease { } -?trial ?disease . -?trial a . -?trial ?arm . -?arm ?drug . -?arm ?result . -?result ?p . -?result ?effect . -FILTER ((?p < 0.05) || (?effect > 0.7)) -OPTIONAL { -?result ?marker . -BIND(?marker AS ?optMarker) -} -FILTER (?optMarker != ) + VALUES ?disease { } + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?drug . + ?arm ?result . + ?result ?p . + ?result ?effect . + FILTER ((?p < 0.05) || (?effect > 0.7)) + OPTIONAL { + ?result ?marker . + BIND(?marker AS ?optMarker) + } + FILTER (?optMarker != ) } Theme: PHARMA z_queryIndex: 1 === Explanation Telemetry === -Initial explain execution time: 16 ms +Initial explain execution time: 14 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -10399,65 +10782,65 @@ Warmup execution 9/10 Warmup execution 10/10 Fastest execution time: 8 ms -Projection (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=17.1K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.3K, avgNextNanosActual=214) +Projection (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=2.9M, nextCallCountActual=80, nextTimeNanosActual=14.4K, firstRowTimeNanosActual=2.8M, openCountActual=1, lastRowTimeNanosActual=2.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=35.9K, avgNextNanosActual=180) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "combo" (hasNextFalseCountActual=0) ║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=11.9K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.2K, avgNextNanosActual=149) -├── Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=2.9M, openCountActual=1, lastRowTimeNanosActual=3.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.2K, avgNextNanosActual=80) -│ ╠══ Filter (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=3.0M, nextCallCountActual=80, nextTimeNanosActual=1.5K, sourceRowsScannedActual=134, sourceRowsMatchedActual=80, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=2.9M, exprEvalCountActual=134, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=80, lastRowTimeNanosActual=3.0M, closeCountActual=1, exprEvalTimeNanosActual=24.2K, inputRowsActual=134, rowsDroppedActual=54, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=37.1K, avgNextNanosActual=20, filterRejectRateActual=0.40) -│ ║ ├── Compare (>=) (exprEvalCountActual=134, exprFalseCountActual=54, exprTrueCountActual=80, exprEvalTimeNanosActual=14.5K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) -│ ║ └── Group (combo) (resultSizeActual=134, hasNextCallCountActual=135, hasNextTrueCountActual=134, hasNextTimeNanosActual=2.9M, nextCallCountActual=134, nextTimeNanosActual=2.6K, aggregateEvalCountActual=776, firstRowTimeNanosActual=2.9M, groupsCreatedActual=134, openCountActual=1, lastRowTimeNanosActual=3.0M, maxGroupSizeActual=7, closeCountActual=1, varsAddedActual=2, varsDroppedActual=11, avgGroupSizeActual=2.90, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=388, rowsDroppedActual=254, selectivityActual=0.35, expansionFactorActual=0.35, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=21.9K, avgNextNanosActual=20) -│ ║ Filter (resultSizeActual=388, hasNextCallCountActual=390, hasNextTrueCountActual=389, hasNextTimeNanosActual=2.6M, nextCallCountActual=388, nextTimeNanosActual=5.0K, sourceRowsScannedActual=593, sourceRowsMatchedActual=388, sourceRowsFilteredActual=205, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=30.3K, exprEvalCountActual=593, exprFalseCountActual=205, openCountActual=1, exprTrueCountActual=388, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=176.5K, inputRowsActual=593, rowsDroppedActual=205, selectivityActual=0.65, expansionFactorActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=6.7K, avgNextNanosActual=13, filterRejectRateActual=0.35) -│ ║ ├── ListMemberOperator (exprEvalCountActual=593, exprFalseCountActual=205, exprTrueCountActual=388, exprEvalTimeNanosActual=123.1K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optSeverity) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="Mild") (exprEvalCountActual=593, exprTrueCountActual=593, exprEvalTimeNanosActual=26.7K, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="Moderate") (exprEvalCountActual=385, exprTrueCountActual=385, exprEvalTimeNanosActual=16.5K, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=593, hasNextCallCountActual=594, hasNextTrueCountActual=593, hasNextTimeNanosActual=2.3M, nextCallCountActual=593, nextTimeNanosActual=8.7K, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=593, firstRowTimeNanosActual=24.2K, leftRowsWithMatchActual=285, openCountActual=1, lastRowTimeNanosActual=2.8M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=878, rowsDroppedActual=285, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, leftRowsProbedActual=285, rightRowsScannedActual=593, avgRightRowsPerLeftActual=2.08, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.08, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=285, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=285, inputRowsActual=570, rowsDroppedActual=285, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.33, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=285, rightRowsScannedActual=285, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281, resultSizeActual=285, joinRightIteratorsCreatedActual=141, joinLeftBindingsConsumedActual=141, joinRightBindingsConsumedActual=285, inputRowsActual=426, rowsDroppedActual=141, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=1.36, stddevActual=1.16, confidenceScoreActual=0.48, hasNextFalseCountActual=0, leftRowsProbedActual=141, rightRowsScannedActual=285, avgRightRowsPerLeftActual=2.02, joinOutputPerLeftActual=2.02) [left] -│ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, resultSizeActual=141, hasNextCallCountActual=142, hasNextTrueCountActual=141, hasNextTimeNanosActual=563.4K, nextCallCountActual=141, nextTimeNanosActual=2.1K, sourceRowsScannedActual=477, sourceRowsMatchedActual=141, sourceRowsFilteredActual=336, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, plannedLookupComponents=[P], firstRowTimeNanosActual=12.9K, exprEvalCountActual=477, exprFalseCountActual=336, openCountActual=1, exprTrueCountActual=141, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=453.1K, inputRowsActual=477, rowsDroppedActual=336, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=4.0K, avgNextNanosActual=15, filterRejectRateActual=0.70) [left] -│ ║ ║ │ ║ ├── Compare (>) (exprEvalCountActual=477, exprFalseCountActual=336, exprTrueCountActual=141, exprEvalTimeNanosActual=421.8K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ Var (name=score) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=750, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=42.9K, nextCallCountActual=477, nextTimeNanosActual=25.6K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.8K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=54, indexHitRateActual=1.00) -│ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=285, hasNextCallCountActual=426, hasNextTrueCountActual=285, hasNextTimeNanosActual=101.1K, nextCallCountActual=285, nextTimeNanosActual=18.7K, sourceRowsScannedActual=426, sourceRowsMatchedActual=285, sourceRowsFilteredActual=141, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=141, openCountActual=141, lastRowTimeNanosActual=19.7K, closeCountActual=141, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=141, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=237, avgNextNanosActual=66, indexHitRateActual=0.67) [right] -│ ║ ║ │ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=477, resultSizeActual=285, hasNextCallCountActual=570, hasNextTrueCountActual=285, hasNextTimeNanosActual=128.4K, nextCallCountActual=285, nextTimeNanosActual=18.2K, sourceRowsScannedActual=570, sourceRowsMatchedActual=285, sourceRowsFilteredActual=285, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=416, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=5.0K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=64, indexHitRateActual=0.50) [right] -│ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=593, hasNextCallCountActual=1.4K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=1.0M, nextCallCountActual=593, nextTimeNanosActual=29.5K, firstRowTimeNanosActual=2.1K, openCountActual=285, lastRowTimeNanosActual=4.0K, closeCountActual=285, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=708, avgNextNanosActual=50) [right] -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M, resultSizeActual=593, joinRightIteratorsCreatedActual=593, joinLeftBindingsConsumedActual=593, joinRightBindingsConsumedActual=593, inputRowsActual=1.1K, rowsDroppedActual=593, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=54, stddevActual=7.34, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=593, rightRowsScannedActual=593, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=593, hasNextCallCountActual=878, hasNextTrueCountActual=593, hasNextTimeNanosActual=249.1K, nextCallCountActual=593, nextTimeNanosActual=32.8K, sourceRowsScannedActual=878, sourceRowsMatchedActual=593, sourceRowsFilteredActual=285, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.3K, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=3.8K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=284, avgNextNanosActual=55, indexHitRateActual=0.68) [left] -│ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267, resultSizeActual=593, hasNextCallCountActual=1.1K, hasNextTrueCountActual=593, hasNextTimeNanosActual=291.5K, nextCallCountActual=593, nextTimeNanosActual=33.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=593, sourceRowsFilteredActual=593, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=593, openCountActual=593, lastRowTimeNanosActual=1.8K, closeCountActual=593, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=593, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=56, indexHitRateActual=0.50) [right] -│ ║ │ s: Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=sev) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optSeverity) (hasNextFalseCountActual=0) -│ ║ Var (name=sev) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_48633f2fe36952f541b08a42a7b8ce15e70d0123) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=2.9M, nextCallCountActual=80, nextTimeNanosActual=10.2K, firstRowTimeNanosActual=2.8M, openCountActual=1, lastRowTimeNanosActual=2.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=35.8K, avgNextNanosActual=128) + ├── Extension (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=2.9M, nextCallCountActual=80, nextTimeNanosActual=5.1K, firstRowTimeNanosActual=2.8M, openCountActual=1, lastRowTimeNanosActual=2.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=35.8K, avgNextNanosActual=64) + │ ╠══ Filter (resultSizeActual=80, hasNextCallCountActual=81, hasNextTrueCountActual=80, hasNextTimeNanosActual=2.8M, nextCallCountActual=80, nextTimeNanosActual=1.4K, sourceRowsScannedActual=134, sourceRowsMatchedActual=80, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=2.8M, exprEvalCountActual=134, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=80, lastRowTimeNanosActual=2.9M, closeCountActual=1, exprEvalTimeNanosActual=23.5K, inputRowsActual=134, rowsDroppedActual=54, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=35.7K, avgNextNanosActual=18, filterRejectRateActual=0.40) + │ ║ ├── Compare (>=) (exprEvalCountActual=134, exprFalseCountActual=54, exprTrueCountActual=80, exprEvalTimeNanosActual=13.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_4373e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) + │ ║ └── Group (combo) (resultSizeActual=134, hasNextCallCountActual=135, hasNextTrueCountActual=134, hasNextTimeNanosActual=2.8M, nextCallCountActual=134, nextTimeNanosActual=3.6K, aggregateEvalCountActual=776, firstRowTimeNanosActual=2.8M, groupsCreatedActual=134, openCountActual=1, lastRowTimeNanosActual=2.9M, maxGroupSizeActual=7, closeCountActual=1, varsAddedActual=2, varsDroppedActual=11, avgGroupSizeActual=2.90, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=388, rowsDroppedActual=254, selectivityActual=0.35, expansionFactorActual=0.35, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=21.1K, avgNextNanosActual=27) + │ ║ Filter (resultSizeActual=388, hasNextCallCountActual=390, hasNextTrueCountActual=389, hasNextTimeNanosActual=2.5M, nextCallCountActual=388, nextTimeNanosActual=5.4K, sourceRowsScannedActual=593, sourceRowsMatchedActual=388, sourceRowsFilteredActual=205, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=22.2K, exprEvalCountActual=593, exprFalseCountActual=205, openCountActual=1, exprTrueCountActual=388, lastRowTimeNanosActual=2.8M, closeCountActual=1, exprEvalTimeNanosActual=181.1K, inputRowsActual=593, rowsDroppedActual=205, selectivityActual=0.65, expansionFactorActual=0.65, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=6.5K, avgNextNanosActual=14, filterRejectRateActual=0.35) + │ ║ ├── ListMemberOperator (exprEvalCountActual=593, exprFalseCountActual=205, exprTrueCountActual=388, exprEvalTimeNanosActual=115.5K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optSeverity) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="Mild") (exprEvalCountActual=593, exprTrueCountActual=593, exprEvalTimeNanosActual=27.0K, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="Moderate") (exprEvalCountActual=385, exprTrueCountActual=385, exprEvalTimeNanosActual=13.8K, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=593, hasNextCallCountActual=594, hasNextTrueCountActual=593, hasNextTimeNanosActual=2.3M, nextCallCountActual=593, nextTimeNanosActual=7.9K, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=593, firstRowTimeNanosActual=18.0K, leftRowsWithMatchActual=285, openCountActual=1, lastRowTimeNanosActual=2.7M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=878, rowsDroppedActual=285, expansionFactorActual=0.68, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=13, leftRowsProbedActual=285, rightRowsScannedActual=593, avgRightRowsPerLeftActual=2.08, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.08, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=477, resultSizeActual=285, joinRightIteratorsCreatedActual=285, joinLeftBindingsConsumedActual=285, joinRightBindingsConsumedActual=285, inputRowsActual=570, rowsDroppedActual=285, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.11, stddevActual=0.33, confidenceScoreActual=0.60, hasNextFalseCountActual=0, leftRowsProbedActual=285, rightRowsScannedActual=285, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281, resultSizeActual=285, joinRightIteratorsCreatedActual=141, joinLeftBindingsConsumedActual=141, joinRightBindingsConsumedActual=285, inputRowsActual=426, rowsDroppedActual=141, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=1.36, stddevActual=1.16, confidenceScoreActual=0.48, hasNextFalseCountActual=0, leftRowsProbedActual=141, rightRowsScannedActual=285, avgRightRowsPerLeftActual=2.02, joinOutputPerLeftActual=2.02) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, resultSizeActual=141, hasNextCallCountActual=142, hasNextTrueCountActual=141, hasNextTimeNanosActual=548.7K, nextCallCountActual=141, nextTimeNanosActual=2.7K, sourceRowsScannedActual=477, sourceRowsMatchedActual=141, sourceRowsFilteredActual=336, plannedFilterEvidenceCount=824.2K, plannedAccessRows=477, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=9.2K, exprEvalCountActual=477, exprFalseCountActual=336, openCountActual=1, exprTrueCountActual=141, lastRowTimeNanosActual=2.7M, closeCountActual=1, exprEvalTimeNanosActual=446.2K, inputRowsActual=477, rowsDroppedActual=336, selectivityActual=0.30, expansionFactorActual=0.30, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=3.9K, avgNextNanosActual=19, filterRejectRateActual=0.70) [left] + │ ║ ║ │ ║ ├── Compare (>) (exprEvalCountActual=477, exprFalseCountActual=336, exprTrueCountActual=141, exprEvalTimeNanosActual=415.0K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=458, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: psoc] (resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=43.1K, nextCallCountActual=477, nextTimeNanosActual=26.8K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=3.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=2.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=90, avgNextNanosActual=56, indexHitRateActual=1.00) + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=285, hasNextCallCountActual=426, hasNextTrueCountActual=285, hasNextTimeNanosActual=100.2K, nextCallCountActual=285, nextTimeNanosActual=17.9K, sourceRowsScannedActual=426, sourceRowsMatchedActual=285, sourceRowsFilteredActual=141, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[combo, score], sharedJoinVars=[combo], firstRowTimeNanosActual=792, indexLookupCountActual=141, openCountActual=141, lastRowTimeNanosActual=21.0K, closeCountActual=141, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=141, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=235, avgNextNanosActual=63, indexHitRateActual=0.67) [right] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=477, resultSizeActual=285, hasNextCallCountActual=570, hasNextTrueCountActual=285, hasNextTimeNanosActual=129.9K, nextCallCountActual=285, nextTimeNanosActual=15.3K, sourceRowsScannedActual=570, sourceRowsMatchedActual=285, sourceRowsFilteredActual=285, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[combo, drug, score], sharedJoinVars=[combo], firstRowTimeNanosActual=542, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=4.6K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=228, avgNextNanosActual=54, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=593, hasNextCallCountActual=1.4K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=1.0M, nextCallCountActual=593, nextTimeNanosActual=26.9K, firstRowTimeNanosActual=1.3K, openCountActual=285, lastRowTimeNanosActual=3.5K, closeCountActual=285, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=683, avgNextNanosActual=45) [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=593, joinRightIteratorsCreatedActual=593, joinLeftBindingsConsumedActual=593, joinRightBindingsConsumedActual=593, inputRowsActual=1.1K, rowsDroppedActual=593, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=54, stddevActual=7.34, confidenceScoreActual=0.19, hasNextFalseCountActual=0, leftRowsProbedActual=593, rightRowsScannedActual=593, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=593, hasNextCallCountActual=878, hasNextTrueCountActual=593, hasNextTimeNanosActual=221.1K, nextCallCountActual=593, nextTimeNanosActual=36.9K, sourceRowsScannedActual=878, sourceRowsMatchedActual=593, sourceRowsFilteredActual=285, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[drug], firstRowTimeNanosActual=666, indexLookupCountActual=285, openCountActual=285, lastRowTimeNanosActual=3.2K, closeCountActual=285, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=285, nextPerHasNextRatioActual=0.68, avgHasNextNanosActual=252, avgNextNanosActual=62, indexHitRateActual=0.68) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=267, resultSizeActual=593, hasNextCallCountActual=1.1K, hasNextTrueCountActual=593, hasNextTimeNanosActual=291.4K, nextCallCountActual=593, nextTimeNanosActual=34.5K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=593, sourceRowsFilteredActual=593, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], sharedJoinVars=[sideEffect], firstRowTimeNanosActual=500, indexLookupCountActual=593, openCountActual=593, lastRowTimeNanosActual=2.1K, closeCountActual=593, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=593, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=58, indexHitRateActual=0.50) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=sev) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optSeverity) (hasNextFalseCountActual=0) + │ ║ Var (name=sev) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_4373e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_4373e226babdcc344c88a5a61806b6a8e7f30123) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (drugCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -10466,74 +10849,74 @@ Projection ║ ProjectionElem "combo" ║ ProjectionElem "drugCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>=) -│ ║ │ Var (name=_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="2"^^) -│ ║ └── Group (combo) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── ListMemberOperator -│ ║ │ Var (name=optSeverity) (bindingState=bound) -│ ║ │ ValueConstant (value="Mild") -│ ║ │ ValueConstant (value="Moderate") -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] -│ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ ├── Compare (>) -│ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) -│ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) -│ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) -│ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, score], plannedLookupComponents=[S, P]) [right] -│ ║ ║ │ s: Var (name=combo) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) -│ ║ ║ │ o: Var (name=drug) (bindingState=unbound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug, score], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=combo) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.4M) -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ ║ s: Var (name=drug) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) -│ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], plannedLookupComponents=[S, P]) [right] -│ ║ │ s: Var (name=sideEffect) (bindingState=bound) -│ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) -│ ║ │ o: Var (name=sev) (bindingState=unbound) -│ ║ └── ExtensionElem (optSeverity) -│ ║ Var (name=sev) (bindingState=bound) -│ ║ GroupElem (_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d) -│ ║ Count (Distinct) -│ ║ Var (name=drug) (bindingState=bound) -│ ║ GroupElem (drugCount) -│ ║ Count (Distinct) -│ ║ Var (name=drug) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_09633f2fe36952f541b08a42a7b8ce15e70d) -│ Count (Distinct) -│ Var (name=drug) (bindingState=unbound) -└── ExtensionElem (drugCount) -Count (Distinct) -Var (name=drug) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_0473e226babdcc344c88a5a61806b6a8e7f3, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (combo) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optSeverity) (bindingState=bound) + │ ║ │ ValueConstant (value="Mild") + │ ║ │ ValueConstant (value="Moderate") + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=477) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=281) [left] + │ ║ ║ │ ╠══ Filter (resultSizeEstimate=141, plannedFilterEvidenceCount=824.7K, plannedAccessRows=477, plannedFilterPassRatio=0.30, plannedIndexPrefixLength=1.00, plannedWorkRows=477, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, filterSelectivitySource=learned_filter) [left] + │ ║ ║ │ ║ ├── Compare (>) + │ ║ ║ │ ║ │ Var (name=score) (bindingState=bound) + │ ║ ║ │ ║ │ ValueConstant (value="0.7"^^) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=477) + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + │ ║ ║ │ ║ o: Var (name=score) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=949, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[combo, score], sharedJoinVars=[combo]) [right] + │ ║ ║ │ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ └── StatementPattern (resultSizeEstimate=477, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[combo, drug, score], sharedJoinVars=[combo]) [right] + │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[drug]) [left] + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ ║ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=267, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_2c1ec653_uri, _const_94a74d5e_uri, _const_a4089907_uri, _const_f5e5585a_uri, combo, drug, score, sideEffect], sharedJoinVars=[sideEffect]) [right] + │ ║ │ s: Var (name=sideEffect) (bindingState=bound) + │ ║ │ p: Var (name=_const_dff9bba5_uri, value=http://example.com/theme/pharma/severity, anonymous) + │ ║ │ o: Var (name=sev) (bindingState=unbound) + │ ║ └── ExtensionElem (optSeverity) + │ ║ Var (name=sev) (bindingState=bound) + │ ║ GroupElem (_anon_having_0473e226babdcc344c88a5a61806b6a8e7f3) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0473e226babdcc344c88a5a61806b6a8e7f3) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { -?combo ?score . -FILTER (?score > 0.7) -?combo ?drug . -?combo a . -OPTIONAL { -?drug ?sideEffect . -?sideEffect ?sev . -BIND(?sev AS ?optSeverity) -} -FILTER (?optSeverity IN ("Mild", "Moderate")) + ?combo ?score . + FILTER (?score > 0.7) + ?combo ?drug . + ?combo a . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) } GROUP BY ?combo HAVING (COUNT(DISTINCT ?drug) >= 2) @@ -10541,7 +10924,7 @@ HAVING (COUNT(DISTINCT ?drug) >= 2) Theme: PHARMA z_queryIndex: 2 === Explanation Telemetry === -Initial explain execution time: 75 ms +Initial explain execution time: 67 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -10552,74 +10935,74 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 41 ms +Fastest execution time: 33 ms -Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) +Projection (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=53.5M, openCountActual=1, lastRowTimeNanosActual=53.5M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=53.5M) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "target" (hasNextFalseCountActual=0) ║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) -├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M) -│ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=54.3M, sourceRowsScannedActual=63, sourceRowsFilteredActual=63, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=63, exprFalseCountActual=63, openCountActual=1, lastRowTimeNanosActual=54.3M, closeCountActual=1, exprEvalTimeNanosActual=12.0K, inputRowsActual=63, rowsDroppedActual=63, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=54.3M, filterRejectRateActual=1.00) -│ ║ ├── Compare (>) (exprEvalCountActual=63, exprFalseCountActual=63, exprEvalTimeNanosActual=5.9K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=11.0K, hasNextFalseCountActual=0) -│ ║ └── Group (target) (resultSizeActual=63, hasNextCallCountActual=64, hasNextTrueCountActual=63, hasNextTimeNanosActual=54.2M, nextCallCountActual=63, nextTimeNanosActual=1.8K, aggregateEvalCountActual=126, firstRowTimeNanosActual=54.3M, groupsCreatedActual=63, openCountActual=1, lastRowTimeNanosActual=54.3M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=848.3K, avgNextNanosActual=30) -│ ║ Filter (resultSizeActual=63, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=19.7K, rowsDroppedActual=19.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=19.7K, exprFalseCountActual=19.6K, exprTrueCountActual=134, exprEvalTimeNanosActual=9.6M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=510.5K, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=342.7K, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=134, exprFalseCountActual=71, exprTrueCountActual=63, exprEvalTimeNanosActual=279.1K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=0, joinRightIteratorsCreatedActual=63, joinLeftBindingsConsumedActual=63, joinRightBindingsConsumedActual=63, inputRowsActual=126, rowsDroppedActual=126, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=63, rightRowsScannedActual=63, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) -│ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=134, hasNextTrueCountActual=63, hasNextTimeNanosActual=98.4K, nextCallCountActual=63, nextTimeNanosActual=4.0K, sourceRowsScannedActual=147, sourceRowsMatchedActual=63, sourceRowsFilteredActual=84, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=833, indexLookupCountActual=134, openCountActual=134, lastRowTimeNanosActual=1.9K, closeCountActual=134, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=71, nextPerHasNextRatioActual=0.47, avgHasNextNanosActual=735, avgNextNanosActual=65, indexHitRateActual=0.43) [left] -│ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=63, hasNextTrueCountActual=63, hasNextTimeNanosActual=42.8K, nextCallCountActual=63, nextTimeNanosActual=3.7K, sourceRowsScannedActual=63, sourceRowsMatchedActual=63, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O], firstRowTimeNanosActual=750, indexLookupCountActual=63, openCountActual=63, lastRowTimeNanosActual=1.2K, closeCountActual=63, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=680, avgNextNanosActual=59, indexHitRateActual=1.00) [right] -│ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=19.7K, hasNextCallCountActual=19.7K, hasNextTrueCountActual=19.7K, hasNextTimeNanosActual=41.8M, nextCallCountActual=19.7K, nextTimeNanosActual=243.5K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.7K, firstRowTimeNanosActual=28.9K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=54.2M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.7K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=12, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.7K, avgRightRowsPerLeftActual=1.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.99, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=20.0K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=29.9K, rowsDroppedActual=20.0K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K, resultSizeActual=20.0K, joinRightIteratorsCreatedActual=666, joinRightBindingsConsumedActual=20.0K, inputRowsActual=20.6K, rowsDroppedActual=666, expansionFactorActual=0.97, sampleCountActual=2, varianceActual=0.00, stddevActual=0.01, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=20.0K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666, resultSizeActual=666, joinRightIteratorsCreatedActual=666, joinLeftBindingsConsumedActual=666, joinRightBindingsConsumedActual=666, inputRowsActual=1.3K, rowsDroppedActual=666, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=666, rightRowsScannedActual=666, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=667, hasNextTrueCountActual=666, hasNextTimeNanosActual=83.3K, nextCallCountActual=666, nextTimeNanosActual=43.0K, sourceRowsScannedActual=667, sourceRowsMatchedActual=666, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=5.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=54.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=125, avgNextNanosActual=65, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=1.3K, hasNextTrueCountActual=666, hasNextTimeNanosActual=407.0K, nextCallCountActual=666, nextTimeNanosActual=40.8K, sourceRowsScannedActual=1.3K, sourceRowsMatchedActual=666, sourceRowsFilteredActual=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=708, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=71.5K, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=306, avgNextNanosActual=61, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=20.3K, resultSizeActual=20.0K, hasNextCallCountActual=20.6K, hasNextTrueCountActual=20.0K, hasNextTimeNanosActual=2.0M, nextCallCountActual=20.0K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=20.6K, sourceRowsMatchedActual=20.0K, sourceRowsFilteredActual=666, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O], firstRowTimeNanosActual=625, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=70.1K, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=99, avgNextNanosActual=52, indexHitRateActual=0.97) [right] -│ ║ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.1K, resultSizeActual=9.9K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=9.3M, nextCallCountActual=9.9K, nextTimeNanosActual=572.5K, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=20.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=20.0K, openCountActual=20.0K, lastRowTimeNanosActual=3.2K, closeCountActual=20.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.0K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=311, avgNextNanosActual=58, indexHitRateActual=0.33) [right] -│ ║ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=9.1M, nextCallCountActual=19.7K, nextTimeNanosActual=2.3M, firstRowTimeNanosActual=500, openCountActual=9.9K, lastRowTimeNanosActual=2.2K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=185, avgNextNanosActual=121) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=5.7M, nextCallCountActual=19.7K, nextTimeNanosActual=936.6K, sourceRowsScannedActual=29.7K, sourceRowsMatchedActual=19.7K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=1.8K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=116, avgNextNanosActual=47, indexHitRateActual=0.67) -│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) -│ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_68733f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=53.5M, openCountActual=1, lastRowTimeNanosActual=53.5M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=53.5M) + ├── Extension (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=53.5M, openCountActual=1, lastRowTimeNanosActual=53.5M, closeCountActual=1, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=53.5M) + │ ╠══ Filter (resultSizeActual=0, hasNextCallCountActual=1, hasNextTimeNanosActual=53.4M, sourceRowsScannedActual=63, sourceRowsFilteredActual=63, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, exprEvalCountActual=63, exprFalseCountActual=63, openCountActual=1, lastRowTimeNanosActual=53.5M, closeCountActual=1, exprEvalTimeNanosActual=12.6K, inputRowsActual=63, rowsDroppedActual=63, selectivityActual=0, expansionFactorActual=0, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0, avgHasNextNanosActual=53.5M, filterRejectRateActual=1.00) + │ ║ ├── Compare (>) (exprEvalCountActual=63, exprFalseCountActual=63, exprEvalTimeNanosActual=7.0K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_6383e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=11.7K, hasNextFalseCountActual=0) + │ ║ └── Group (target) (resultSizeActual=63, hasNextCallCountActual=64, hasNextTrueCountActual=63, hasNextTimeNanosActual=53.4M, nextCallCountActual=63, nextTimeNanosActual=1.7K, aggregateEvalCountActual=126, firstRowTimeNanosActual=53.4M, groupsCreatedActual=63, openCountActual=1, lastRowTimeNanosActual=53.4M, maxGroupSizeActual=1, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.00, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=835.5K, avgNextNanosActual=28) + │ ║ Filter (resultSizeActual=63, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=19.7K, rowsDroppedActual=19.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=19.7K, exprFalseCountActual=19.6K, exprTrueCountActual=134, exprEvalTimeNanosActual=6.4M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=625.5K, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) (exprEvalCountActual=19.7K, exprEvalTimeNanosActual=509.0K, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=134, exprFalseCountActual=71, exprTrueCountActual=63, exprEvalTimeNanosActual=258.2K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=0, joinRightIteratorsCreatedActual=63, joinLeftBindingsConsumedActual=63, joinRightBindingsConsumedActual=63, inputRowsActual=126, rowsDroppedActual=126, expansionFactorActual=0, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=63, rightRowsScannedActual=63, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=0) + │ ║ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=134, hasNextTrueCountActual=63, hasNextTimeNanosActual=88.8K, nextCallCountActual=63, nextTimeNanosActual=3.6K, sourceRowsScannedActual=147, sourceRowsMatchedActual=63, sourceRowsFilteredActual=84, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[drug], firstRowTimeNanosActual=583, indexLookupCountActual=134, openCountActual=134, lastRowTimeNanosActual=458, closeCountActual=134, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=71, nextPerHasNextRatioActual=0.47, avgHasNextNanosActual=663, avgNextNanosActual=58, indexHitRateActual=0.43) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=63, hasNextCallCountActual=63, hasNextTrueCountActual=63, hasNextTimeNanosActual=44.2K, nextCallCountActual=63, nextTimeNanosActual=3.2K, sourceRowsScannedActual=63, sourceRowsMatchedActual=63, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], sharedJoinVars=[arm], firstRowTimeNanosActual=500, indexLookupCountActual=63, openCountActual=63, lastRowTimeNanosActual=791, closeCountActual=63, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=702, avgNextNanosActual=51, indexHitRateActual=1.00) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=19.7K, hasNextCallCountActual=19.7K, hasNextTrueCountActual=19.7K, hasNextTimeNanosActual=43.9M, nextCallCountActual=19.7K, nextTimeNanosActual=207.2K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.7K, firstRowTimeNanosActual=14.2K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=53.4M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.7K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.2K, avgNextNanosActual=10, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.7K, avgRightRowsPerLeftActual=1.99, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.99, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=19.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=9.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=9.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=19.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] + │ ║ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=494.0K, nextCallCountActual=5.0K, nextTimeNanosActual=278.6K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedAccessRows=15.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=5.4K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=53.4M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=56, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=2.8M, nextCallCountActual=9.9K, nextTimeNanosActual=611.8K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug], sharedJoinVars=[drug], firstRowTimeNanosActual=625, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=6.2K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=192, avgNextNanosActual=62, indexHitRateActual=0.67) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=9.9K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=4.8M, nextCallCountActual=9.9K, nextTimeNanosActual=556.4K, sourceRowsScannedActual=19.8K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=9.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[drug, target], sharedJoinVars=[target], firstRowTimeNanosActual=542, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=5.0K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=246, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=9.9K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=4.0M, nextCallCountActual=9.9K, nextTimeNanosActual=609.1K, sourceRowsScannedActual=19.8K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=9.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug, target], sharedJoinVars=[target], firstRowTimeNanosActual=375, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=3.9K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=61, indexHitRateActual=0.50) [right] + │ ║ ║ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=8.7M, nextCallCountActual=19.7K, nextTimeNanosActual=2.1M, firstRowTimeNanosActual=875, openCountActual=9.9K, lastRowTimeNanosActual=3.0K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=178, avgNextNanosActual=109) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=19.7K, hasNextCallCountActual=49.3K, hasNextTrueCountActual=39.4K, hasNextTimeNanosActual=5.6M, nextCallCountActual=19.7K, nextTimeNanosActual=859.9K, sourceRowsScannedActual=29.7K, sourceRowsMatchedActual=19.7K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=2.8K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=114, avgNextNanosActual=43, indexHitRateActual=0.67) + │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) + │ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_6383e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_6383e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (drugCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -10628,80 +11011,80 @@ Projection ║ ProjectionElem "target" ║ ProjectionElem "drugCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="2"^^) -│ ║ └── Group (target) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=optDisease) (bindingState=bound) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) -│ ║ │ ╚══ Exists -│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ s: Var (name=arm) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) -│ ║ │ ║ o: Var (name=drug) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], plannedLookupComponents=[O]) [right] -│ ║ │ s: Var (name=trial) (bindingState=unbound) -│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -│ ║ │ o: Var (name=arm) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20.3K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=666) [left] -│ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=1.00, plannedWorkRows=666, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) -│ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=666, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[pathway, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ ║ s: Var (name=target) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=20.3K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[pathway, target], plannedLookupComponents=[O]) [right] -│ ║ ║ │ s: Var (name=drug) (bindingState=unbound) -│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) -│ ║ ║ │ o: Var (name=target) (bindingState=bound) -│ ║ ║ └── StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, pathway, target], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ s: Var (name=drug) (bindingState=bound) -│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) -│ ║ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) -│ ║ │ o: Var (name=disease) (bindingState=unbound) -│ ║ └── ExtensionElem (optDisease) -│ ║ Var (name=disease) (bindingState=bound) -│ ║ GroupElem (_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123) -│ ║ Count (Distinct) -│ ║ Var (name=drug) (bindingState=bound) -│ ║ GroupElem (drugCount) -│ ║ Count (Distinct) -│ ║ Var (name=drug) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_49733f2fe36952f541b08a42a7b8ce15e70d0123) -│ Count (Distinct) -│ Var (name=drug) (bindingState=unbound) -└── ExtensionElem (drugCount) -Count (Distinct) -Var (name=drug) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4483e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="2"^^) + │ ║ └── Group (target) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/2) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/3) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[drug]) [left] + │ ║ │ ║ s: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ │ ║ o: Var (name=drug) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_51a21059_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, pathway, target], sharedJoinVars=[arm]) [right] + │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ o: Var (name=arm) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ ║ │ ║ ├── StatementPattern (resultSizeEstimate=5.0K, plannedAccessRows=15.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=20.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug], sharedJoinVars=[drug]) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[drug, target], sharedJoinVars=[target]) [right] + │ ║ ║ │ s: Var (name=target) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_51a21059_uri, value=http://example.com/theme/pharma/Target, anonymous) + │ ║ ║ └── StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug, target], sharedJoinVars=[target]) [right] + │ ║ ║ s: Var (name=target) (bindingState=bound) + │ ║ ║ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ o: Var (name=pathway) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ║ GroupElem (_anon_having_4483e226babdcc344c88a5a61806b6a8e7f30123) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4483e226babdcc344c88a5a61806b6a8e7f30123) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { -?target ?pathway . -?target a . -?drug ?target . -?drug a . -OPTIONAL { -?drug ?disease . -BIND(?disease AS ?optDisease) -} -FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) + ?drug a . + ?drug ?target . + ?target a . + ?target ?pathway . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) } GROUP BY ?target HAVING (COUNT(DISTINCT ?drug) > 2) @@ -10709,7 +11092,7 @@ HAVING (COUNT(DISTINCT ?drug) > 2) Theme: PHARMA z_queryIndex: 3 === Explanation Telemetry === -Initial explain execution time: 53 ms +Initial explain execution time: 46 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -10720,70 +11103,70 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 34 ms +Fastest execution time: 27 ms -Projection (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=28.6M, nextCallCountActual=2.2K, nextTimeNanosActual=165.1K, firstRowTimeNanosActual=48.0K, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, varsDroppedActual=14, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=75) +Projection (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=31.1M, nextCallCountActual=2.2K, nextTimeNanosActual=166.1K, firstRowTimeNanosActual=55.7K, openCountActual=1, lastRowTimeNanosActual=32.5M, closeCountActual=1, varsDroppedActual=14, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.0K, avgNextNanosActual=75) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "drug" (hasNextFalseCountActual=0) ║ ProjectionElem "disease" (hasNextFalseCountActual=0) -╚══ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=28.6M, nextCallCountActual=2.2K, nextTimeNanosActual=35.8K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.0K, exprEvalCountActual=2.2K, exprFalseCountActual=2, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=30.0M, closeCountActual=1, exprEvalTimeNanosActual=1.4M, inputRowsActual=2.2K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.9K, avgNextNanosActual=16, filterRejectRateActual=0.00) -├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=2, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) -│ Var (name=optTarget) (bindingState=bound, hasNextFalseCountActual=0) -│ ValueConstant (value=http://example.com/theme/pharma/target/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=250, hasNextFalseCountActual=0) -└── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=26.9M, nextCallCountActual=2.2K, nextTimeNanosActual=37.0K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=47.9K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.66, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.2K, avgNextNanosActual=17, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) -╠══ Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.8M, nextCallCountActual=1.1K, nextTimeNanosActual=15.2K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=46.0K, exprEvalCountActual=1.1K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=30.0M, closeCountActual=1, exprEvalTimeNanosActual=1.6M, inputRowsActual=1.1K, rowsDroppedActual=6, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.1K, avgNextNanosActual=14, filterRejectRateActual=0.01) [left] -║ ├── Not (exprEvalCountActual=1.1K, exprFalseCountActual=6, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=1.5M, hasNextFalseCountActual=0) -║ │ Exists (exprEvalCountActual=1.1K, exprFalseCountActual=1.1K, exprTrueCountActual=6, exprEvalTimeNanosActual=1.4M, inputRowsActual=0, hasNextFalseCountActual=0) -║ │ StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=0, hasNextCallCountActual=1.1K, hasNextTrueCountActual=6, hasNextTimeNanosActual=827.7K, sourceRowsScannedActual=1.1K, sourceRowsMatchedActual=6, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1000, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=733, indexHitRateActual=0.01) -║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) -║ │ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -║ └── Join (JoinIterator) (resultSizeEstimate=1.1K, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=1.1K, inputRowsActual=4.0K, rowsDroppedActual=2.8K, expansionFactorActual=0.28, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.1K) -║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] -║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] -║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=955, joinRightBindingsConsumedActual=2.8K, inputRowsActual=3.8K, rowsDroppedActual=955, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] -║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=955, joinRightIteratorsCreatedActual=955, joinLeftBindingsConsumedActual=955, joinRightBindingsConsumedActual=955, inputRowsActual=1.9K, rowsDroppedActual=955, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=955, rightRowsScannedActual=955, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=956, hasNextTrueCountActual=955, hasNextTimeNanosActual=127.2K, nextCallCountActual=955, nextTimeNanosActual=46.4K, sourceRowsScannedActual=956, sourceRowsMatchedActual=955, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=9.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=30.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=133, avgNextNanosActual=49, indexHitRateActual=1.00) [left] -║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) -║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) -║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=1.9K, hasNextTrueCountActual=955, hasNextTimeNanosActual=546.6K, nextCallCountActual=955, nextTimeNanosActual=49.8K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=955, sourceRowsFilteredActual=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=542, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=21.7K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=286, avgNextNanosActual=52, indexHitRateActual=0.50) [right] -║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) -║ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=633.7K, nextCallCountActual=2.8K, nextTimeNanosActual=143.4K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=955, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=542, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=20.7K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=165, avgNextNanosActual=50, indexHitRateActual=0.75) [right] -║ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=151.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], unlockedFilters=Not [right] -║ ║ │ Exists -║ ║ │ StatementPattern (resultSizeEstimate=9.9K) -║ ║ │ Var (name=drug) -║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) -║ ║ │ Var (name=disease) -║ ║ │ , firstRowTimeNanosActual=666, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=6.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=239, avgNextNanosActual=52, indexHitRateActual=0.50) -║ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) -║ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=144.9K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=416, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.0K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207, avgNextNanosActual=50, indexHitRateActual=0.50) [right] -║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) -║ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) -║ ╚══ Filter (resultSizeEstimate=1.1K, resultSizeActual=1.1K, hasNextCallCountActual=4.0K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=9.4M, nextCallCountActual=1.1K, nextTimeNanosActual=15.3K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.7K, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.4K, exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, openCountActual=2.8K, exprTrueCountActual=1.1K, lastRowTimeNanosActual=3.0K, closeCountActual=2.8K, exprEvalTimeNanosActual=3.0M, inputRowsActual=2.8K, rowsDroppedActual=1.7K, selectivityActual=0.39, expansionFactorActual=0.39, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.28, avgHasNextNanosActual=2.4K, avgNextNanosActual=14, filterRejectRateActual=0.61) [right] -║ ├── Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) -║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) -║ │ ValueConstant (value="0.6"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) -║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=127.3K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=1.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=44, indexHitRateActual=0.50) -║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) -║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=248.8K, firstRowTimeNanosActual=583, openCountActual=1.1K, lastRowTimeNanosActual=3.7K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=193, avgNextNanosActual=112) [right] -├── StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=635.1K, nextCallCountActual=2.2K, nextTimeNanosActual=108.7K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=3.5K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=115, avgNextNanosActual=49, indexHitRateActual=0.66) -│ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) -│ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (optTarget) (hasNextFalseCountActual=0) -Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) +╚══ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=31.0M, nextCallCountActual=2.2K, nextTimeNanosActual=34.5K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=2, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=61.5K, exprEvalCountActual=2.2K, exprFalseCountActual=2, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=32.5M, closeCountActual=1, exprEvalTimeNanosActual=1.5M, inputRowsActual=2.2K, rowsDroppedActual=2, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=14.0K, avgNextNanosActual=16, filterRejectRateActual=0.00) + ├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=2, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=1.2M, hasNextFalseCountActual=0) + │ Var (name=optTarget) (bindingState=bound, hasNextFalseCountActual=0) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) + └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=29.3M, nextCallCountActual=2.2K, nextTimeNanosActual=38.1K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=57.5K, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=32.5M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.66, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.2K, avgNextNanosActual=17, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=1.97, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.97, leftJoinNullExtendedRowsActual=0) + ╠══ Join (JoinIterator) (resultSizeEstimate=1.1K, resultSizeActual=1.1K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=1.1K, inputRowsActual=3.9K, rowsDroppedActual=2.8K, expansionFactorActual=0.28, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=1.1K, rightRowsScannedActual=1.1K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + ║ │ ╠══ Filter (resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=9.6M, nextCallCountActual=2.8K, nextTimeNanosActual=38.5K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=17, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=31.4K, exprEvalCountActual=2.8K, exprFalseCountActual=17, openCountActual=1, exprTrueCountActual=2.8K, lastRowTimeNanosActual=32.5M, closeCountActual=1, exprEvalTimeNanosActual=3.7M, inputRowsActual=2.8K, rowsDroppedActual=17, selectivityActual=0.99, expansionFactorActual=0.99, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.4K, avgNextNanosActual=13, filterRejectRateActual=0.01) [left] + ║ │ ║ ├── Not (exprEvalCountActual=2.8K, exprFalseCountActual=17, exprTrueCountActual=2.8K, exprEvalTimeNanosActual=3.4M, hasNextFalseCountActual=0) + ║ │ ║ │ Exists (exprEvalCountActual=2.8K, exprFalseCountActual=2.8K, exprTrueCountActual=17, exprEvalTimeNanosActual=3.2M, inputRowsActual=0, hasNextFalseCountActual=0) + ║ │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=0, hasNextCallCountActual=2.8K, hasNextTrueCountActual=17, hasNextTimeNanosActual=1.7M, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=17, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=666, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=621, indexHitRateActual=0.01) + ║ │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + ║ │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) + ║ │ ║ │ o: Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) + ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=955, joinRightBindingsConsumedActual=2.8K, inputRowsActual=3.8K, rowsDroppedActual=955, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] + ║ │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=955, resultSizeActual=955, joinRightIteratorsCreatedActual=955, joinLeftBindingsConsumedActual=955, joinRightBindingsConsumedActual=955, inputRowsActual=1.9K, rowsDroppedActual=955, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=955, rightRowsScannedActual=955, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + ║ │ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=956, hasNextTrueCountActual=955, hasNextTimeNanosActual=169.9K, nextCallCountActual=955, nextTimeNanosActual=45.0K, sourceRowsScannedActual=956, sourceRowsMatchedActual=955, sourceRowsFilteredActual=1, plannedAccessRows=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=16.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=32.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=178, avgNextNanosActual=47, indexHitRateActual=1.00) [left] + ║ │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + ║ │ ║ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) (hasNextFalseCountActual=0) + ║ │ ║ ║ │ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) + ║ │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=955, hasNextCallCountActual=1.9K, hasNextTrueCountActual=955, hasNextTimeNanosActual=569.2K, nextCallCountActual=955, nextTimeNanosActual=50.7K, sourceRowsScannedActual=1.9K, sourceRowsMatchedActual=955, sourceRowsFilteredActual=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial], firstRowTimeNanosActual=625, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=27.8K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=298, avgNextNanosActual=53, indexHitRateActual=0.50) [right] + ║ │ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + ║ │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) + ║ │ ║ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=629.0K, nextCallCountActual=2.8K, nextTimeNanosActual=143.1K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=955, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial], firstRowTimeNanosActual=416, indexLookupCountActual=955, openCountActual=955, lastRowTimeNanosActual=26.6K, closeCountActual=955, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=955, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=164, avgNextNanosActual=50, indexHitRateActual=0.75) [right] + ║ │ ║ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + ║ │ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + ║ │ ║ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + ║ │ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.4M, nextCallCountActual=2.8K, nextTimeNanosActual=142.4K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, trial], unlockedFilters=Not [right] + ║ │ ║ Exists + ║ │ ║ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ Var (name=drug) + ║ │ ║ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ Var (name=disease) + ║ │ ║ source=unknown, sharedJoinVars=[arm], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=7.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=250, avgNextNanosActual=49, indexHitRateActual=0.50) + ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) + ║ │ ║ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=159.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, trial], sharedJoinVars=[arm], firstRowTimeNanosActual=459, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.2K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) + ║ │ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) + ║ └── Filter (resultSizeEstimate=1.1K, resultSizeActual=1.1K, hasNextCallCountActual=3.9K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=9.5M, nextCallCountActual=1.1K, nextTimeNanosActual=16.7K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=1.7K, plannedFilterEvidenceCount=1.2M, plannedAccessRows=1.00, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, sharedJoinVars=[result], firstRowTimeNanosActual=2.0K, exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, openCountActual=2.8K, exprTrueCountActual=1.1K, lastRowTimeNanosActual=3.1K, closeCountActual=2.8K, exprEvalTimeNanosActual=3.1M, inputRowsActual=2.8K, rowsDroppedActual=1.7K, selectivityActual=0.39, expansionFactorActual=0.39, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.28, avgHasNextNanosActual=2.4K, avgNextNanosActual=15, filterRejectRateActual=0.61) [right] + ║ ╠══ Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=1.7K, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=2.9M, hasNextFalseCountActual=0) + ║ ║ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) + ║ ║ ValueConstant (value="0.6"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.9K, hasNextFalseCountActual=0) + ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=143.0K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=1.6K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=225, avgNextNanosActual=50, indexHitRateActual=0.50) + ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) + ║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) + ╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=245.4K, firstRowTimeNanosActual=583, openCountActual=1.1K, lastRowTimeNanosActual=4.0K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=193, avgNextNanosActual=111) [right] + ├── StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=670.0K, nextCallCountActual=2.2K, nextTimeNanosActual=104.6K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=3.7K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=121, avgNextNanosActual=47, indexHitRateActual=0.66) + │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) + │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (optTarget) (hasNextFalseCountActual=0) + Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -10792,88 +11175,88 @@ Projection ║ ProjectionElem "drug" ║ ProjectionElem "disease" ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -├── Compare (!=) -│ Var (name=optTarget) (bindingState=bound) -│ ValueConstant (value=http://example.com/theme/pharma/target/0) -└── LeftJoin (LeftJoinIterator) -╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] -║ ├── Not -║ │ Exists -║ │ StatementPattern (resultSizeEstimate=9.9K) -║ │ s: Var (name=drug) (bindingState=bound) -║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) -║ │ o: Var (name=disease) (bindingState=bound) -║ └── Join (JoinIterator) (resultSizeEstimate=1.1K) -║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] -║ ║ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], indexName=psoc) [left] -║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=unbound) -║ ║ │ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) -║ ║ │ ║ │ ║ o: Var (name=disease) (bindingState=unbound) -║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, O, P]) [right] -║ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) -║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -║ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) -║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedBoundVars=[disease, trial], plannedLookupComponents=[S, P]) [right] -║ ║ │ ║ s: Var (name=trial) (bindingState=bound) -║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) -║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, trial], plannedLookupComponents=[S, P], unlockedFilters=Not [right] -║ ║ │ Exists -║ ║ │ StatementPattern (resultSizeEstimate=9.9K) -║ ║ │ Var (name=drug) -║ ║ │ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) -║ ║ │ Var (name=disease) -║ ║ │ ) -║ ║ │ s: Var (name=arm) (bindingState=bound) -║ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) -║ ║ │ o: Var (name=drug) (bindingState=unbound) -║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, trial], plannedLookupComponents=[S, P]) [right] -║ ║ s: Var (name=arm) (bindingState=bound) -║ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) -║ ║ o: Var (name=result) (bindingState=unbound) -║ ╚══ Filter (resultSizeEstimate=1.1K, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P]) [right] -║ ├── Compare (>) -║ │ Var (name=rate) (bindingState=bound) -║ │ ValueConstant (value="0.6"^^) -║ └── StatementPattern (resultSizeEstimate=2.9K) -║ s: Var (name=result) (bindingState=bound) -║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) -║ o: Var (name=rate) (bindingState=unbound) -╚══ Extension [right] -├── StatementPattern (resultSizeEstimate=20.0K) -│ s: Var (name=drug) (bindingState=bound) -│ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) -│ o: Var (name=target) (bindingState=unbound) -└── ExtensionElem (optTarget) -Var (name=target) (bindingState=bound) + ├── Compare (!=) + │ Var (name=optTarget) (bindingState=bound) + │ ValueConstant (value=http://example.com/theme/pharma/target/0) + └── LeftJoin (LeftJoinIterator) + ╠══ Join (JoinIterator) (resultSizeEstimate=1.1K) [left] + ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] + ║ │ ║ ├── Not + ║ │ ║ │ Exists + ║ │ ║ │ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ │ s: Var (name=drug) (bindingState=bound) + ║ │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ │ o: Var (name=disease) (bindingState=bound) + ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=2.9K) + ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + ║ │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=955) [left] + ║ │ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=955, plannedAccessRows=955, plannedIndexPrefixLength=1.00, plannedWorkRows=955, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, indexName=psoc) [left] + ║ │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + ║ │ ║ ║ │ ║ p: Var (name=_const_5a7b59fd_uri, value=http://example.com/theme/pharma/studiesDisease, anonymous) + ║ │ ║ ║ │ ║ o: Var (name=disease) (bindingState=unbound) + ║ │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] + ║ │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + ║ │ ║ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=3.00, plannedIndexPrefixLength=2.00, plannedWorkRows=3.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[disease, trial], sharedJoinVars=[trial]) [right] + ║ │ ║ ║ s: Var (name=trial) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + ║ │ ║ ║ o: Var (name=arm) (bindingState=unbound) + ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, trial], unlockedFilters=Not [right] + ║ │ ║ Exists + ║ │ ║ StatementPattern (resultSizeEstimate=9.9K) + ║ │ ║ Var (name=drug) + ║ │ ║ Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + ║ │ ║ Var (name=disease) + ║ │ ║ source=unknown, sharedJoinVars=[arm]) + ║ │ ║ s: Var (name=arm) (bindingState=bound) + ║ │ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + ║ │ ║ o: Var (name=drug) (bindingState=unbound) + ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, trial], sharedJoinVars=[arm]) [right] + ║ │ s: Var (name=arm) (bindingState=bound) + ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + ║ │ o: Var (name=result) (bindingState=unbound) + ║ └── Filter (resultSizeEstimate=1.1K, plannedFilterEvidenceCount=1.2M, plannedAccessRows=1.00, plannedFilterPassRatio=0.39, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, disease, drug, result, trial], filterSelectivitySource=learned_filter, sharedJoinVars=[result]) [right] + ║ ╠══ Compare (>) + ║ ║ Var (name=rate) (bindingState=bound) + ║ ║ ValueConstant (value="0.6"^^) + ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + ║ s: Var (name=result) (bindingState=bound) + ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + ║ o: Var (name=rate) (bindingState=unbound) + ╚══ Extension [right] + ├── StatementPattern (resultSizeEstimate=20.0K) + │ s: Var (name=drug) (bindingState=bound) + │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ o: Var (name=target) (bindingState=unbound) + └── ExtensionElem (optTarget) + Var (name=target) (bindingState=bound) === Rendered Optimized TupleExpr === SELECT ?drug ?disease WHERE { -?trial ?disease . -?trial a . -?trial ?arm . -?arm ?drug . -?arm ?result . -?result ?rate . -FILTER (?rate > 0.6) -FILTER NOT EXISTS { -?drug ?disease . -} -OPTIONAL { -?drug ?target . -BIND(?target AS ?optTarget) -} -FILTER (?optTarget != ) + ?trial ?disease . + ?trial a . + ?trial ?arm . + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + ?arm ?result . + ?result ?rate . + FILTER (?rate > 0.6) + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) } Theme: PHARMA z_queryIndex: 4 === Explanation Telemetry === -Initial explain execution time: 83 ms +Initial explain execution time: 81 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -10884,75 +11267,75 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 52 ms +Fastest execution time: 51 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=1.2K, firstRowTimeNanosActual=64.1M, openCountActual=1, lastRowTimeNanosActual=64.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=1.3K) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=62.5M, nextCallCountActual=1, nextTimeNanosActual=1.1K, firstRowTimeNanosActual=62.5M, openCountActual=1, lastRowTimeNanosActual=62.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=31.3M, avgNextNanosActual=1.1K) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=708, firstRowTimeNanosActual=64.1M, openCountActual=1, lastRowTimeNanosActual=64.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=708) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.1M, nextCallCountActual=1, nextTimeNanosActual=416, aggregateEvalCountActual=11.8K, firstRowTimeNanosActual=64.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=64.1M, maxGroupSizeActual=11.8K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=13, avgGroupSizeActual=11.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.8K, rowsDroppedActual=11.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.1M, avgNextNanosActual=416) -│ ╠══ Difference (resultSizeActual=11.8K, hasNextCallCountActual=11.8K, hasNextTrueCountActual=11.8K, hasNextTimeNanosActual=62.4M, nextCallCountActual=11.8K, nextTimeNanosActual=151.5K, firstRowTimeNanosActual=3.4M, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.9K, rowsDroppedActual=106, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.3K, avgNextNanosActual=13, leftRowsConsumedActual=11.9K, rightRowsConsumedActual=34, overlapRowsActual=72) -│ ║ ├── Filter (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=53.0M, nextCallCountActual=11.9K, nextTimeNanosActual=176.2K, sourceRowsScannedActual=11.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=44.3K, exprEvalCountActual=11.9K, openCountActual=1, exprTrueCountActual=11.9K, lastRowTimeNanosActual=64.0M, closeCountActual=1, exprEvalTimeNanosActual=6.0M, inputRowsActual=11.9K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=15, filterRejectRateActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=11.9K, exprTrueCountActual=11.9K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optClassName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=46.0M, nextCallCountActual=11.9K, nextTimeNanosActual=109.7K, joinRightIteratorsCreatedActual=11.9K, joinLeftBindingsConsumedActual=11.9K, joinRightBindingsConsumedActual=11.9K, firstRowTimeNanosActual=33.5K, leftRowsWithMatchActual=11.9K, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=23.9K, rowsDroppedActual=11.9K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.9K, avgNextNanosActual=9.18, leftRowsProbedActual=11.9K, rightRowsScannedActual=11.9K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Union (resultSizeActual=11.9K, sampleCountActual=2, varianceActual=0.41, stddevActual=0.64, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsConsumedActual=10.0K, rightRowsConsumedActual=1.9K, leftRowsOutputContributionActual=10.0K, rightRowsOutputContributionActual=1.9K) [left] -│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.0K) -│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinLeftBindingsConsumedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.0K, rightRowsScannedActual=10.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.0K, resultSizeActual=10.0K, hasNextCallCountActual=10.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=1.0M, nextCallCountActual=10.0K, nextTimeNanosActual=546.7K, sourceRowsScannedActual=10.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=18.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=53.9M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=105, avgNextNanosActual=54, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.1K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.1M, nextCallCountActual=10.0K, nextTimeNanosActual=559.1K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=458, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=3.5K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=256, avgNextNanosActual=56, indexHitRateActual=0.50) [right] -│ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.3M, nextCallCountActual=10.0K, nextTimeNanosActual=618.0K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=2.5K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=267, avgNextNanosActual=62, indexHitRateActual=0.50) [right] -│ ║ │ │ ║ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=1.9K, joinRightBindingsConsumedActual=1.9K, inputRowsActual=3.8K, rowsDroppedActual=1.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.65, stddevActual=0.80, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) -│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=1.9K, inputRowsActual=2.8K, rowsDroppedActual=949, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=4.48, stddevActual=2.12, confidenceScoreActual=0.39, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) [left] -│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=949, joinLeftBindingsConsumedActual=949, joinRightBindingsConsumedActual=949, inputRowsActual=1.8K, rowsDroppedActual=949, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=949, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ │ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=950, hasNextTrueCountActual=949, hasNextTimeNanosActual=93.9K, nextCallCountActual=949, nextTimeNanosActual=58.6K, sourceRowsScannedActual=949, sourceRowsMatchedActual=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=53.9M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=64.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=99, avgNextNanosActual=62, indexHitRateActual=1.00) [left] -│ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.8K, hasNextTrueCountActual=949, hasNextTimeNanosActual=514.6K, nextCallCountActual=949, nextTimeNanosActual=57.1K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=583, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=6.2K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=60, indexHitRateActual=0.50) [right] -│ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=1.9K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=693.7K, nextCallCountActual=1.9K, nextTimeNanosActual=115.5K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=949, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, P], firstRowTimeNanosActual=750, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=5.0K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=242, avgNextNanosActual=60, indexHitRateActual=0.67) [right] -│ ║ │ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ │ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=1.9K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=1.0M, nextCallCountActual=1.9K, nextTimeNanosActual=116.1K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=1.9K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=1.9K, openCountActual=1.9K, lastRowTimeNanosActual=3.7K, closeCountActual=1.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=261, avgNextNanosActual=61, indexHitRateActual=0.50) [right] -│ ║ │ │ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=8.6M, nextCallCountActual=11.9K, nextTimeNanosActual=1.8M, firstRowTimeNanosActual=584, openCountActual=11.9K, lastRowTimeNanosActual=2.6K, closeCountActual=11.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=363, avgNextNanosActual=154) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=11.9K, nextTimeNanosActual=787.1K, sourceRowsScannedActual=23.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=11.9K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=11.9K, openCountActual=11.9K, lastRowTimeNanosActual=2.5K, closeCountActual=11.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=229, avgNextNanosActual=66, indexHitRateActual=0.50) -│ ║ │ ║ s: Var (name=class) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optClassName) (hasNextFalseCountActual=0) -│ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Filter (new scope) (resultSizeActual=34, hasNextCallCountActual=35, hasNextTrueCountActual=34, hasNextTimeNanosActual=3.2M, nextCallCountActual=34, nextTimeNanosActual=628, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=34, sourceRowsFilteredActual=4.9K, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=261.5K, exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, openCountActual=1, exprTrueCountActual=34, lastRowTimeNanosActual=3.3M, closeCountActual=1, exprEvalTimeNanosActual=2.4M, inputRowsActual=5.0K, rowsDroppedActual=4.9K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=93.7K, avgNextNanosActual=18, filterRejectRateActual=0.99) -│ ║ ╠══ ListMemberOperator (exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, exprTrueCountActual=34, exprEvalTimeNanosActual=2.1M, hasNextFalseCountActual=0) -│ ║ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) (exprEvalCountActual=5.0K, exprEvalTimeNanosActual=131.9K, hasNextFalseCountActual=0) -│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) (exprEvalCountActual=4.9K, exprEvalTimeNanosActual=83.2K, hasNextFalseCountActual=0) -│ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=403.4K, nextCallCountActual=5.0K, nextTimeNanosActual=198.7K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=81, avgNextNanosActual=40, indexHitRateActual=1.00) -│ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=62.5M, nextCallCountActual=1, nextTimeNanosActual=750, firstRowTimeNanosActual=62.5M, openCountActual=1, lastRowTimeNanosActual=62.5M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=31.3M, avgNextNanosActual=750) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=62.5M, nextCallCountActual=1, nextTimeNanosActual=500, aggregateEvalCountActual=11.8K, firstRowTimeNanosActual=62.5M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=62.5M, maxGroupSizeActual=11.8K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=13, avgGroupSizeActual=11.9K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.8K, rowsDroppedActual=11.8K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=31.3M, avgNextNanosActual=500) + │ ╠══ Difference (resultSizeActual=11.8K, hasNextCallCountActual=11.8K, hasNextTrueCountActual=11.8K, hasNextTimeNanosActual=60.8M, nextCallCountActual=11.8K, nextTimeNanosActual=143.3K, firstRowTimeNanosActual=3.1M, openCountActual=1, lastRowTimeNanosActual=62.5M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=11.9K, rowsDroppedActual=106, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.1K, avgNextNanosActual=12, leftRowsConsumedActual=11.9K, rightRowsConsumedActual=34, overlapRowsActual=72) + │ ║ ├── Filter (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=52.0M, nextCallCountActual=11.9K, nextTimeNanosActual=164.1K, sourceRowsScannedActual=11.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=17.4K, exprEvalCountActual=11.9K, openCountActual=1, exprTrueCountActual=11.9K, lastRowTimeNanosActual=62.5M, closeCountActual=1, exprEvalTimeNanosActual=6.4M, inputRowsActual=11.9K, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=4.4K, avgNextNanosActual=14, filterRejectRateActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=11.9K, exprTrueCountActual=11.9K, exprEvalTimeNanosActual=5.0M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=875, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=11.9K, hasNextCallCountActual=11.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=44.7M, nextCallCountActual=11.9K, nextTimeNanosActual=118.8K, joinRightIteratorsCreatedActual=11.9K, joinLeftBindingsConsumedActual=11.9K, joinRightBindingsConsumedActual=11.9K, firstRowTimeNanosActual=14.3K, leftRowsWithMatchActual=11.9K, openCountActual=1, lastRowTimeNanosActual=62.5M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=23.9K, rowsDroppedActual=11.9K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.7K, avgNextNanosActual=9.94, leftRowsProbedActual=11.9K, rightRowsScannedActual=11.9K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Union (resultSizeActual=11.9K, sampleCountActual=2, varianceActual=0.41, stddevActual=0.64, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsConsumedActual=10.0K, rightRowsConsumedActual=1.9K, leftRowsOutputContributionActual=10.0K, rightRowsOutputContributionActual=1.9K) [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.25, stddevActual=0.50, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=10.0K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=10.0K, joinRightIteratorsCreatedActual=10.0K, joinLeftBindingsConsumedActual=10.0K, joinRightBindingsConsumedActual=10.0K, inputRowsActual=20.0K, rowsDroppedActual=10.0K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=10.0K, rightRowsScannedActual=10.0K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=10.0K, resultSizeActual=10.0K, hasNextCallCountActual=10.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=954.2K, nextCallCountActual=10.0K, nextTimeNanosActual=562.1K, sourceRowsScannedActual=10.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=1, plannedAccessRows=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=8.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=95, avgNextNanosActual=56, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.0M, nextCallCountActual=10.0K, nextTimeNanosActual=557.7K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[drug, mol], sharedJoinVars=[drug], firstRowTimeNanosActual=416, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=3.6K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=250, avgNextNanosActual=56, indexHitRateActual=0.50) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=10.0K, hasNextCallCountActual=20.0K, hasNextTrueCountActual=10.0K, hasNextTimeNanosActual=5.1M, nextCallCountActual=10.0K, nextTimeNanosActual=619.7K, sourceRowsScannedActual=20.0K, sourceRowsMatchedActual=10.0K, sourceRowsFilteredActual=10.0K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=10.0K, openCountActual=10.0K, lastRowTimeNanosActual=2.7K, closeCountActual=10.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=10.0K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=254, avgNextNanosActual=62, indexHitRateActual=0.50) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=1.9K, joinRightBindingsConsumedActual=1.9K, inputRowsActual=3.8K, rowsDroppedActual=1.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.65, stddevActual=0.81, confidenceScoreActual=0.53, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=1.9K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=1.9K, inputRowsActual=2.8K, rowsDroppedActual=949, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=4.48, stddevActual=2.12, confidenceScoreActual=0.39, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=949, joinLeftBindingsConsumedActual=949, joinRightBindingsConsumedActual=949, inputRowsActual=1.8K, rowsDroppedActual=949, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=949, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ │ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=950, hasNextTrueCountActual=949, hasNextTimeNanosActual=98.0K, nextCallCountActual=949, nextTimeNanosActual=55.9K, sourceRowsScannedActual=949, sourceRowsMatchedActual=949, plannedAccessRows=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=52.7M, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=62.5M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=103, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.8K, hasNextTrueCountActual=949, hasNextTimeNanosActual=478.9K, nextCallCountActual=949, nextTimeNanosActual=55.9K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=949, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[combo, drug], sharedJoinVars=[combo], firstRowTimeNanosActual=500, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=7.0K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=252, avgNextNanosActual=59, indexHitRateActual=0.50) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=1.9K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=664.7K, nextCallCountActual=1.9K, nextTimeNanosActual=122.8K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=949, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[combo, drug], sharedJoinVars=[drug], firstRowTimeNanosActual=917, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=5.9K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=232, avgNextNanosActual=64, indexHitRateActual=0.67) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=5.0K, resultSizeActual=1.9K, hasNextCallCountActual=3.8K, hasNextTrueCountActual=1.9K, hasNextTimeNanosActual=970.7K, nextCallCountActual=1.9K, nextTimeNanosActual=118.8K, sourceRowsScannedActual=3.8K, sourceRowsMatchedActual=1.9K, sourceRowsFilteredActual=1.9K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=1.9K, openCountActual=1.9K, lastRowTimeNanosActual=4.4K, closeCountActual=1.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=253, avgNextNanosActual=62, indexHitRateActual=0.50) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=class) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=8.6M, nextCallCountActual=11.9K, nextTimeNanosActual=1.8M, firstRowTimeNanosActual=958, openCountActual=11.9K, lastRowTimeNanosActual=3.2K, closeCountActual=11.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=362, avgNextNanosActual=151) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=11.9K, hasNextCallCountActual=23.9K, hasNextTrueCountActual=11.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=11.9K, nextTimeNanosActual=788.3K, sourceRowsScannedActual=23.9K, sourceRowsMatchedActual=11.9K, sourceRowsFilteredActual=11.9K, plannedIndexName=spoc, firstRowTimeNanosActual=875, indexLookupCountActual=11.9K, openCountActual=11.9K, lastRowTimeNanosActual=3.0K, closeCountActual=11.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=231, avgNextNanosActual=66, indexHitRateActual=0.50) + │ ║ │ ║ s: Var (name=class) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optClassName) (hasNextFalseCountActual=0) + │ ║ │ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Filter (new scope) (resultSizeActual=34, hasNextCallCountActual=35, hasNextTrueCountActual=34, hasNextTimeNanosActual=3.1M, nextCallCountActual=34, nextTimeNanosActual=831, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=34, sourceRowsFilteredActual=4.9K, plannedFilterEvidenceCount=1.2M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_filter, firstRowTimeNanosActual=229.0K, exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, openCountActual=1, exprTrueCountActual=34, lastRowTimeNanosActual=3.1M, closeCountActual=1, exprEvalTimeNanosActual=2.3M, inputRowsActual=5.0K, rowsDroppedActual=4.9K, selectivityActual=0.01, expansionFactorActual=0.01, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=88.8K, avgNextNanosActual=24, filterRejectRateActual=0.99) + │ ║ ╠══ ListMemberOperator (exprEvalCountActual=5.0K, exprFalseCountActual=4.9K, exprTrueCountActual=34, exprEvalTimeNanosActual=2.0M, hasNextFalseCountActual=0) + │ ║ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) (exprEvalCountActual=5.0K, exprEvalTimeNanosActual=143.7K, hasNextFalseCountActual=0) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) (exprEvalCountActual=4.9K, exprEvalTimeNanosActual=87.1K, hasNextFalseCountActual=0) + │ ║ ╚══ StatementPattern [index: psoc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=351.4K, nextCallCountActual=5.0K, nextTimeNanosActual=178.4K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=1.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=3.1M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=70, avgNextNanosActual=36, indexHitRateActual=1.00) + │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -10960,108 +11343,108 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optClassName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="") -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Union [left] -│ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) -│ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.1K) [left] -│ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) -│ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) -│ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) -│ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.1K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[drug, mol], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) -│ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] -│ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) -│ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) -│ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) -│ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) -│ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] -│ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] -│ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) -│ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) -│ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) -│ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, O, P]) [right] -│ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) -│ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) -│ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[combo, drug], plannedLookupComponents=[S, P]) [right] -│ ║ │ │ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) -│ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) -│ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] -│ ║ │ │ s: Var (name=mol) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) -│ ║ │ │ o: Var (name=class) (bindingState=unbound) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) -│ ║ │ ║ s: Var (name=class) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) -│ ║ │ ║ o: Var (name=optName) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optClassName) -│ ║ │ Var (name=optName) (bindingState=bound) -│ ║ └── Filter (new scope) (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_filter) -│ ║ ╠══ ListMemberOperator -│ ║ ║ Var (name=disease) (bindingState=bound) -│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) -│ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) -│ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) -│ ║ s: Var (name=drug) (bindingState=unbound) -│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) -│ ║ o: Var (name=disease) (bindingState=unbound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=drug) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=drug) (bindingState=unbound) + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optClassName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Union [left] + │ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K) + │ ║ │ │ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ │ │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=10.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=10.0K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[drug, mol], sharedJoinVars=[drug]) [right] + │ ║ │ │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ ║ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ ║ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ ║ o: Var (name=class) (bindingState=unbound) + │ ║ │ │ ╚══ Join (JoinIterator) (resultSizeEstimate=4.4K) + │ ║ │ │ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=1.9K) [left] + │ ║ │ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=949) [left] + │ ║ │ │ │ ║ ├── StatementPattern (resultSizeEstimate=949, plannedAccessRows=949, plannedIndexPrefixLength=1.00, plannedWorkRows=949, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ │ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ │ │ │ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ │ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ │ │ │ ║ └── StatementPattern (resultSizeEstimate=949, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[combo, drug], sharedJoinVars=[combo]) [right] + │ ║ │ │ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ │ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ │ │ │ ╚══ StatementPattern (resultSizeEstimate=10.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[combo, drug], sharedJoinVars=[drug]) [right] + │ ║ │ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ │ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ │ │ o: Var (name=mol) (bindingState=unbound) + │ ║ │ │ └── StatementPattern (costEstimate=71, resultSizeEstimate=5.0K) [right] + │ ║ │ │ s: Var (name=mol) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_4d1dbdab_uri, value=http://example.com/theme/pharma/inClass, anonymous) + │ ║ │ │ o: Var (name=class) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ s: Var (name=class) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optClassName) + │ ║ │ Var (name=optName) (bindingState=bound) + │ ║ └── Filter (new scope) (plannedFilterEvidenceCount=1.2M, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_filter) + │ ║ ╠══ ListMemberOperator + │ ║ ║ Var (name=disease) (bindingState=bound) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/4) + │ ║ ║ ValueConstant (value=http://example.com/theme/pharma/disease/5) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { -{ -{ -{ -?drug ?mol . -?drug a . -} -} -?mol ?class . -} -UNION -{ -{ -{ -?combo ?drug . -?combo a . -?drug ?mol . -} -} -?mol ?class . -} -OPTIONAL { -?class ?optName . -BIND(?optName AS ?optClassName) -} -FILTER (?optClassName != "") -MINUS { -?drug ?disease . -FILTER (?disease IN (, )) -} + { + { + { + ?drug ?mol . + ?drug a . + } + } + ?mol ?class . + } + UNION + { + { + { + ?combo ?drug . + ?combo a . + ?drug ?mol . + } + } + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } } Theme: PHARMA z_queryIndex: 5 === Explanation Telemetry === -Initial explain execution time: 12 ms +Initial explain execution time: 31 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -11072,65 +11455,65 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 9 ms +Fastest execution time: 18 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=458, firstRowTimeNanosActual=1.1M, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=570.0K, avgNextNanosActual=458) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.9M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=15.9M, openCountActual=1, lastRowTimeNanosActual=15.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.0M, avgNextNanosActual=625) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=1.1M, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=569.7K, avgNextNanosActual=250) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=1.1M, nextCallCountActual=1, nextTimeNanosActual=167, aggregateEvalCountActual=32, firstRowTimeNanosActual=1.1M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=1.1M, maxGroupSizeActual=32, closeCountActual=1, varsAddedActual=1, varsDroppedActual=14, avgGroupSizeActual=32, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=32, rowsDroppedActual=31, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=568.9K, avgNextNanosActual=167) -│ ╠══ Filter (resultSizeActual=32, hasNextCallCountActual=34, hasNextTrueCountActual=33, hasNextTimeNanosActual=1.1M, nextCallCountActual=32, nextTimeNanosActual=712, sourceRowsScannedActual=44, sourceRowsMatchedActual=32, sourceRowsFilteredActual=12, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=67.8K, exprEvalCountActual=44, exprFalseCountActual=12, openCountActual=1, exprTrueCountActual=32, lastRowTimeNanosActual=1.1M, closeCountActual=1, exprEvalTimeNanosActual=38.5K, inputRowsActual=44, rowsDroppedActual=12, selectivityActual=0.73, expansionFactorActual=0.73, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=32.5K, avgNextNanosActual=22, filterRejectRateActual=0.27) -│ ║ ├── Compare (>) (exprEvalCountActual=44, exprFalseCountActual=12, exprTrueCountActual=32, exprEvalTimeNanosActual=32.6K, hasNextFalseCountActual=0) -│ ║ │ Var (name=optEffect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="0.3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=375, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=44, hasNextCallCountActual=45, hasNextTrueCountActual=44, hasNextTimeNanosActual=1.0M, nextCallCountActual=44, nextTimeNanosActual=1.0K, joinRightIteratorsCreatedActual=44, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, firstRowTimeNanosActual=65.1K, leftRowsWithMatchActual=44, openCountActual=1, lastRowTimeNanosActual=1.1M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=88, rowsDroppedActual=44, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=23.5K, avgNextNanosActual=24, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=44, joinRightIteratorsCreatedActual=79, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, inputRowsActual=123, rowsDroppedActual=79, expansionFactorActual=0.36, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=79, joinRightBindingsConsumedActual=79, inputRowsActual=158, rowsDroppedActual=79, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=312, stddevActual=18, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66, resultSizeActual=79, joinRightIteratorsCreatedActual=3, joinLeftBindingsConsumedActual=3, joinRightBindingsConsumedActual=79, inputRowsActual=82, rowsDroppedActual=3, expansionFactorActual=0.96, sampleCountActual=2, varianceActual=315, stddevActual=18, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=3, rightRowsScannedActual=79, avgRightRowsPerLeftActual=26, joinOutputPerLeftActual=26) [left] -│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, resultSizeActual=3, hasNextCallCountActual=4, hasNextTrueCountActual=3, hasNextTimeNanosActual=1.0K, nextCallCountActual=3, nextTimeNanosActual=333, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=2.3K, openCountActual=1, bindingsProvidedActual=3, lastRowTimeNanosActual=1.1M, closeCountActual=1, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=271, avgNextNanosActual=111) [left] -│ ║ ║ │ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=82, hasNextTrueCountActual=79, hasNextTimeNanosActual=16.2K, nextCallCountActual=79, nextTimeNanosActual=9.6K, sourceRowsScannedActual=82, sourceRowsMatchedActual=79, sourceRowsFilteredActual=3, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O], firstRowTimeNanosActual=917, indexLookupCountActual=3, openCountActual=3, lastRowTimeNanosActual=261.4K, closeCountActual=3, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=3, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=199, avgNextNanosActual=122, indexHitRateActual=0.96) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=70.1K, nextCallCountActual=79, nextTimeNanosActual=3.4K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O], firstRowTimeNanosActual=1.2K, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=13.8K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=444, avgNextNanosActual=44, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=34.0K, nextCallCountActual=79, nextTimeNanosActual=3.1K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O], firstRowTimeNanosActual=417, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=12.0K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=215, avgNextNanosActual=40, indexHitRateActual=0.50) [right] -│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=67.5K, nextCallCountActual=79, nextTimeNanosActual=2.8K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=667, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=11.1K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=428, avgNextNanosActual=36, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── Filter (resultSizeEstimate=1.6K, resultSizeActual=44, hasNextCallCountActual=123, hasNextTrueCountActual=44, hasNextTimeNanosActual=401.4K, nextCallCountActual=44, nextTimeNanosActual=1.1K, sourceRowsScannedActual=79, sourceRowsMatchedActual=44, sourceRowsFilteredActual=35, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P], firstRowTimeNanosActual=1.8K, exprEvalCountActual=79, exprFalseCountActual=35, openCountActual=79, exprTrueCountActual=44, lastRowTimeNanosActual=7.8K, closeCountActual=79, exprEvalTimeNanosActual=107.7K, inputRowsActual=79, rowsDroppedActual=35, selectivityActual=0.56, expansionFactorActual=0.56, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=3.3K, avgNextNanosActual=27, filterRejectRateActual=0.44) [right] -│ ║ ║ ╠══ Or (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, shortCircuitCountActual=44, exprEvalTimeNanosActual=100.2K, hasNextFalseCountActual=0) -│ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, exprEvalTimeNanosActual=86.5K, hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) -│ ║ ║ ║ └── Compare (=) (exprEvalCountActual=35, exprFalseCountActual=35, exprEvalTimeNanosActual=7.8K, hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=84, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=42.6K, nextCallCountActual=79, nextTimeNanosActual=4.0K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=4.9K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=270, avgNextNanosActual=52, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=34.9K, nextCallCountActual=44, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=542, openCountActual=44, lastRowTimeNanosActual=2.4K, closeCountActual=44, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=397, avgNextNanosActual=161) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=19.8K, nextCallCountActual=44, nextTimeNanosActual=2.7K, sourceRowsScannedActual=88, sourceRowsMatchedActual=44, sourceRowsFilteredActual=44, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=44, openCountActual=44, lastRowTimeNanosActual=2.0K, closeCountActual=44, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=62, indexHitRateActual=0.50) -│ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optEffect) (hasNextFalseCountActual=0) -│ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.9M, nextCallCountActual=1, nextTimeNanosActual=291, firstRowTimeNanosActual=15.9M, openCountActual=1, lastRowTimeNanosActual=15.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.0M, avgNextNanosActual=291) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=15.9M, nextCallCountActual=1, nextTimeNanosActual=125, aggregateEvalCountActual=32, firstRowTimeNanosActual=15.9M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=15.9M, maxGroupSizeActual=32, closeCountActual=1, varsAddedActual=1, varsDroppedActual=14, avgGroupSizeActual=32, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=32, rowsDroppedActual=31, selectivityActual=0.03, expansionFactorActual=0.03, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=8.0M, avgNextNanosActual=125) + │ ╠══ Filter (resultSizeActual=32, hasNextCallCountActual=34, hasNextTrueCountActual=33, hasNextTimeNanosActual=15.8M, nextCallCountActual=32, nextTimeNanosActual=499, sourceRowsScannedActual=44, sourceRowsMatchedActual=32, sourceRowsFilteredActual=12, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=72.4K, exprEvalCountActual=44, exprFalseCountActual=12, openCountActual=1, exprTrueCountActual=32, lastRowTimeNanosActual=15.9M, closeCountActual=1, exprEvalTimeNanosActual=37.0K, inputRowsActual=44, rowsDroppedActual=12, selectivityActual=0.73, expansionFactorActual=0.73, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=467.3K, avgNextNanosActual=16, filterRejectRateActual=0.27) + │ ║ ├── Compare (>) (exprEvalCountActual=44, exprFalseCountActual=12, exprTrueCountActual=32, exprEvalTimeNanosActual=30.1K, hasNextFalseCountActual=0) + │ ║ │ Var (name=optEffect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="0.3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=44, hasNextCallCountActual=45, hasNextTrueCountActual=44, hasNextTimeNanosActual=15.8M, nextCallCountActual=44, nextTimeNanosActual=1.1K, joinRightIteratorsCreatedActual=44, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, firstRowTimeNanosActual=70.6K, leftRowsWithMatchActual=44, openCountActual=1, lastRowTimeNanosActual=15.8M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=88, rowsDroppedActual=44, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=352.0K, avgNextNanosActual=26, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K, resultSizeActual=44, joinRightIteratorsCreatedActual=79, joinLeftBindingsConsumedActual=44, joinRightBindingsConsumedActual=44, inputRowsActual=123, rowsDroppedActual=79, expansionFactorActual=0.36, sampleCountActual=2, varianceActual=0.00, stddevActual=0.00, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=44, rightRowsScannedActual=44, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=79, joinRightIteratorsCreatedActual=8.6K, joinRightBindingsConsumedActual=79, inputRowsActual=8.7K, rowsDroppedActual=8.6K, expansionFactorActual=0.01, sampleCountActual=2, varianceActual=281, stddevActual=17, confidenceScoreActual=0.10, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=79) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=8.6K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=8.6K, inputRowsActual=11.5K, rowsDroppedActual=2.8K, expansionFactorActual=0.75, sampleCountActual=2, varianceActual=2.1M, stddevActual=1.4K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=8.6K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=1.02, stddevActual=1.01, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=236.2K, nextCallCountActual=2.8K, nextTimeNanosActual=101.7K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=15.8M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=82, avgNextNanosActual=35, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=955, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=99.1K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_73c2e40a_uri, arm, trial], firstRowTimeNanosActual=459, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=4.6K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=208, avgNextNanosActual=34, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=129.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, trial], firstRowTimeNanosActual=542, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=3.7K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=217, avgNextNanosActual=45, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, resultSizeActual=8.6K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=8.6K, hasNextTimeNanosActual=684.9K, nextCallCountActual=8.6K, nextTimeNanosActual=107.5K, plannedWorkRows=3.00, plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, result, trial], firstRowTimeNanosActual=125, openCountActual=2.8K, bindingsProvidedActual=8.6K, lastRowTimeNanosActual=2.7K, closeCountActual=2.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.75, avgHasNextNanosActual=59, avgNextNanosActual=12) [right] + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=8.7K, hasNextTrueCountActual=79, hasNextTimeNanosActual=2.8M, nextCallCountActual=79, nextTimeNanosActual=3.2K, sourceRowsScannedActual=8.7K, sourceRowsMatchedActual=79, sourceRowsFilteredActual=8.6K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, marker, result, trial], firstRowTimeNanosActual=500, indexLookupCountActual=8.6K, openCountActual=8.6K, lastRowTimeNanosActual=333, closeCountActual=8.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=8.6K, nextPerHasNextRatioActual=0.01, avgHasNextNanosActual=324, avgNextNanosActual=41, indexHitRateActual=0.01) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ └── Filter (resultSizeEstimate=1.6K, resultSizeActual=44, hasNextCallCountActual=123, hasNextTrueCountActual=44, hasNextTimeNanosActual=385.9K, nextCallCountActual=44, nextTimeNanosActual=1.1K, sourceRowsScannedActual=79, sourceRowsMatchedActual=44, sourceRowsFilteredActual=35, plannedFilterEvidenceCount=55.9K, plannedAccessRows=1.00, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_80a6979a_uri, _const_f5e5585a_uri, arm, marker, result, trial], filterSelectivitySource=learned_filter, firstRowTimeNanosActual=1.0K, exprEvalCountActual=79, exprFalseCountActual=35, openCountActual=79, exprTrueCountActual=44, lastRowTimeNanosActual=6.9K, closeCountActual=79, exprEvalTimeNanosActual=93.5K, inputRowsActual=79, rowsDroppedActual=35, selectivityActual=0.56, expansionFactorActual=0.56, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.36, avgHasNextNanosActual=3.1K, avgNextNanosActual=26, filterRejectRateActual=0.44) [right] + │ ║ ║ ╠══ Or (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, shortCircuitCountActual=44, exprEvalTimeNanosActual=85.6K, hasNextFalseCountActual=0) + │ ║ ║ ║ ├── Compare (<) (exprEvalCountActual=79, exprFalseCountActual=35, exprTrueCountActual=44, exprEvalTimeNanosActual=71.4K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.0K, hasNextFalseCountActual=0) + │ ║ ║ ║ └── Compare (=) (exprEvalCountActual=35, exprFalseCountActual=35, exprEvalTimeNanosActual=7.8K, hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ ValueConstant (value="0.05"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=79, hasNextCallCountActual=158, hasNextTrueCountActual=79, hasNextTimeNanosActual=32.3K, nextCallCountActual=79, nextTimeNanosActual=3.7K, sourceRowsScannedActual=158, sourceRowsMatchedActual=79, sourceRowsFilteredActual=79, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=79, openCountActual=79, lastRowTimeNanosActual=3.7K, closeCountActual=79, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=79, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=47, indexHitRateActual=0.50) + │ ║ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=33.8K, nextCallCountActual=44, nextTimeNanosActual=6.3K, firstRowTimeNanosActual=667, openCountActual=44, lastRowTimeNanosActual=2.0K, closeCountActual=44, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=385, avgNextNanosActual=145) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=44, hasNextCallCountActual=88, hasNextTrueCountActual=44, hasNextTimeNanosActual=19.7K, nextCallCountActual=44, nextTimeNanosActual=2.6K, sourceRowsScannedActual=88, sourceRowsMatchedActual=44, sourceRowsFilteredActual=44, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=44, openCountActual=44, lastRowTimeNanosActual=1.7K, closeCountActual=44, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=44, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=61, indexHitRateActual=0.50) + │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optEffect) (hasNextFalseCountActual=0) + │ ║ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -11138,81 +11521,81 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=optEffect) (bindingState=bound) -│ ║ │ ValueConstant (value="0.3"^^) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=66) [left] -│ ║ ║ │ ║ │ ║ ├── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] -│ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker], plannedLookupComponents=[O]) [right] -│ ║ ║ │ ║ │ ║ s: Var (name=result) (bindingState=unbound) -│ ║ ║ │ ║ │ ║ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) -│ ║ ║ │ ║ │ ║ o: Var (name=marker) (bindingState=bound) -│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[marker, result], plannedLookupComponents=[O]) [right] -│ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) -│ ║ ║ │ ║ │ o: Var (name=result) (bindingState=bound) -│ ║ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[arm, marker, result], plannedLookupComponents=[O]) [right] -│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -│ ║ ║ │ ║ o: Var (name=arm) (bindingState=bound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ s: Var (name=trial) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) -│ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, marker, result, trial], filterSelectivitySource=learned_filter, plannedLookupComponents=[S, P]) [right] -│ ║ ║ ╠══ Or -│ ║ ║ ║ ├── Compare (<) -│ ║ ║ ║ │ Var (name=p) (bindingState=bound) -│ ║ ║ ║ │ ValueConstant (value="0.05"^^) -│ ║ ║ ║ └── Compare (=) -│ ║ ║ ║ Var (name=p) (bindingState=bound) -│ ║ ║ ║ ValueConstant (value="0.05"^^) -│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) -│ ║ ║ s: Var (name=result) (bindingState=bound) -│ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) -│ ║ ║ o: Var (name=p) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=2.9K) -│ ║ │ s: Var (name=result) (bindingState=bound) -│ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) -│ ║ │ o: Var (name=effect) (bindingState=unbound) -│ ║ └── ExtensionElem (optEffect) -│ ║ Var (name=effect) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=trial) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=trial) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=optEffect) (bindingState=bound) + │ ║ │ ValueConstant (value="0.3"^^) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.6K) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=955, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_73c2e40a_uri, arm, trial]) [right] + │ ║ ║ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, trial]) [right] + │ ║ ║ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ │ ║ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ │ ║ │ o: Var (name=result) (bindingState=unbound) + │ ║ ║ │ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/0], [marker=http://example.com/theme/pharma/biomarker/1], [marker=http://example.com/theme/pharma/biomarker/2]]) (resultSizeEstimate=3.00, plannedWorkRows=3.00, plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, result, trial]) [right] + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=0, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, marker, result, trial]) [right] + │ ║ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ ║ └── Filter (resultSizeEstimate=1.6K, plannedFilterEvidenceCount=56.0K, plannedAccessRows=1.00, plannedFilterPassRatio=0.56, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_4795bbfb_uri, _const_60f6d7af_uri, _const_73c2e40a_uri, _const_80a6979a_uri, _const_f5e5585a_uri, arm, marker, result, trial], filterSelectivitySource=learned_filter) [right] + │ ║ ║ ╠══ Or + │ ║ ║ ║ ├── Compare (<) + │ ║ ║ ║ │ Var (name=p) (bindingState=bound) + │ ║ ║ ║ │ ValueConstant (value="0.05"^^) + │ ║ ║ ║ └── Compare (=) + │ ║ ║ ║ Var (name=p) (bindingState=bound) + │ ║ ║ ║ ValueConstant (value="0.05"^^) + │ ║ ║ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ ║ o: Var (name=p) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ │ o: Var (name=effect) (bindingState=unbound) + │ ║ └── ExtensionElem (optEffect) + │ ║ Var (name=effect) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=trial) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=trial) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { -VALUES ?marker { } -?result ?marker . -?arm ?result . -?trial ?arm . -?trial a . -?result ?p . -FILTER ((?p < 0.05) || (?p = 0.05)) -OPTIONAL { -?result ?effect . -BIND(?effect AS ?optEffect) -} -FILTER (?optEffect > 0.3) + ?trial ?arm . + ?trial a . + ?arm ?result . + VALUES ?marker { } + ?result ?marker . + ?result ?p . + FILTER ((?p < 0.05) || (?p = 0.05)) + OPTIONAL { + ?result ?effect . + BIND(?effect AS ?optEffect) + } + FILTER (?optEffect > 0.3) } Theme: PHARMA z_queryIndex: 6 === Explanation Telemetry === -Initial explain execution time: 22 ms +Initial explain execution time: 20 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -11223,77 +11606,77 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 18 ms +Fastest execution time: 15 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=666, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=666) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.3M, nextCallCountActual=1, nextTimeNanosActual=583, firstRowTimeNanosActual=7.3M, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=583) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "combo" (hasNextFalseCountActual=0) ║ ProjectionElem "sharedTargets" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=333, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=333) -├── Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=250, firstRowTimeNanosActual=5.9M, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=250) -│ ╠══ Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=5.9M, nextCallCountActual=1, nextTimeNanosActual=166, sourceRowsScannedActual=5, sourceRowsMatchedActual=1, sourceRowsFilteredActual=4, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=5.9M, exprEvalCountActual=5, exprFalseCountActual=4, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=2.9K, inputRowsActual=5, rowsDroppedActual=4, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.0M, avgNextNanosActual=166, filterRejectRateActual=0.80) -│ ║ ├── Compare (>) (exprEvalCountActual=5, exprFalseCountActual=4, exprTrueCountActual=1, exprEvalTimeNanosActual=2.5K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.3K, hasNextFalseCountActual=0) -│ ║ └── Group (combo) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=5.9M, nextCallCountActual=5, nextTimeNanosActual=250, aggregateEvalCountActual=44, firstRowTimeNanosActual=5.9M, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=5.9M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=4.40, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=22, rowsDroppedActual=17, selectivityActual=0.23, expansionFactorActual=0.23, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=991.1K, avgNextNanosActual=50) -│ ║ Filter (resultSizeActual=22, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=22, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=12.4K, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optSideEffect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=416, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=21.3K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=22, hasNextTrueCountActual=22, hasNextTimeNanosActual=8.2K, sourceRowsScannedActual=22, sourceRowsMatchedActual=22, plannedIndexName=spoc, indexLookupCountActual=22, openCountActual=22, lastRowTimeNanosActual=334, closeCountActual=22, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=373, indexHitRateActual=1.00) -│ ║ │ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=sideEffect2) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22, hasNextCallCountActual=23, hasNextTrueCountActual=22, hasNextTimeNanosActual=5.8M, nextCallCountActual=22, nextTimeNanosActual=504, joinRightIteratorsCreatedActual=12, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=22, firstRowTimeNanosActual=1.8M, leftRowsWithMatchActual=12, openCountActual=1, lastRowTimeNanosActual=5.9M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=34, rowsDroppedActual=12, expansionFactorActual=0.65, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=255.4K, avgNextNanosActual=23, leftRowsProbedActual=12, rightRowsScannedActual=22, avgRightRowsPerLeftActual=1.83, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.83, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M, resultSizeActual=12, joinRightIteratorsCreatedActual=2.5K, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=12, inputRowsActual=2.5K, rowsDroppedActual=2.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=44.7M, stddevActual=6.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=12, rightRowsScannedActual=12, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M, resultSizeActual=2.5K, joinRightIteratorsCreatedActual=1.2K, joinLeftBindingsConsumedActual=1.2K, joinRightBindingsConsumedActual=2.5K, inputRowsActual=3.7K, rowsDroppedActual=1.2K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=1.2K, rightRowsScannedActual=2.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] -│ ║ ║ │ ╠══ Filter (resultSizeActual=1.2K, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=2.1M, nextCallCountActual=1.2K, nextTimeNanosActual=15.4K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=1.2K, sourceRowsFilteredActual=949, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=20.6K, exprEvalCountActual=2.2K, exprFalseCountActual=949, openCountActual=1, exprTrueCountActual=1.2K, lastRowTimeNanosActual=5.9M, closeCountActual=1, exprEvalTimeNanosActual=239.3K, inputRowsActual=2.2K, rowsDroppedActual=949, selectivityActual=0.57, expansionFactorActual=0.57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=12, filterRejectRateActual=0.43) [left] -│ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=949, exprTrueCountActual=1.2K, exprEvalTimeNanosActual=94.7K, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=2.2K, joinRightIteratorsCreatedActual=949, joinRightBindingsConsumedActual=2.2K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=3.1K, rowsDroppedActual=949, expansionFactorActual=0.70, sampleCountActual=2, varianceActual=0.44, stddevActual=0.66, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.2K) -│ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, resultSizeActual=949, joinRightIteratorsCreatedActual=477, joinLeftBindingsConsumedActual=477, joinRightBindingsConsumedActual=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=1.4K, rowsDroppedActual=477, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=477, rightRowsScannedActual=949, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] -│ ║ ║ │ ║ ║ ├── StatementPattern [index: ospc] (costEstimate=161, resultSizeEstimate=477, resultSizeActual=477, hasNextCallCountActual=478, hasNextTrueCountActual=477, hasNextTimeNanosActual=55.6K, nextCallCountActual=477, nextTimeNanosActual=22.7K, sourceRowsScannedActual=478, sourceRowsMatchedActual=477, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=6.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=5.9M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=116, avgNextNanosActual=48, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=1.4K, hasNextTrueCountActual=949, hasNextTimeNanosActual=269.2K, nextCallCountActual=949, nextTimeNanosActual=47.8K, sourceRowsScannedActual=1.4K, sourceRowsMatchedActual=949, sourceRowsFilteredActual=476, plannedIndexName=spoc, firstRowTimeNanosActual=459, indexLookupCountActual=477, openCountActual=477, lastRowTimeNanosActual=1.7K, closeCountActual=477, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=477, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=189, avgNextNanosActual=50, indexHitRateActual=0.67) [right] -│ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=2.2K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=486.0K, nextCallCountActual=2.2K, nextTimeNanosActual=109.6K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=948, plannedIndexName=spoc, firstRowTimeNanosActual=375, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=833, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.70, avgHasNextNanosActual=154, avgNextNanosActual=50, indexHitRateActual=0.70) [right] -│ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=2.5K, hasNextCallCountActual=3.7K, hasNextTrueCountActual=2.5K, hasNextTimeNanosActual=720.8K, nextCallCountActual=2.5K, nextTimeNanosActual=113.3K, sourceRowsScannedActual=3.7K, sourceRowsMatchedActual=2.5K, sourceRowsFilteredActual=1.2K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=1.2K, openCountActual=1.2K, lastRowTimeNanosActual=1.2K, closeCountActual=1.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=192, avgNextNanosActual=45, indexHitRateActual=0.67) [right] -│ ║ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=20.0K, resultSizeActual=12, hasNextCallCountActual=2.5K, hasNextTrueCountActual=12, hasNextTimeNanosActual=1.0M, nextCallCountActual=12, nextTimeNanosActual=583, sourceRowsScannedActual=2.5K, sourceRowsMatchedActual=12, sourceRowsFilteredActual=2.5K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=2.5K, openCountActual=2.5K, lastRowTimeNanosActual=416, closeCountActual=2.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=413, avgNextNanosActual=49, indexHitRateActual=0.00) [right] -│ ║ ║ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=11.9K, nextCallCountActual=22, nextTimeNanosActual=3.3K, firstRowTimeNanosActual=541, openCountActual=12, lastRowTimeNanosActual=2.5K, closeCountActual=12, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=221, avgNextNanosActual=154) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=6.5K, nextCallCountActual=22, nextTimeNanosActual=1.1K, sourceRowsScannedActual=34, sourceRowsMatchedActual=22, sourceRowsFilteredActual=12, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=12, openCountActual=12, lastRowTimeNanosActual=2.3K, closeCountActual=12, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=121, avgNextNanosActual=53, indexHitRateActual=0.65) -│ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optSideEffect) (hasNextFalseCountActual=0) -│ ║ Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (sharedTargets) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_67143f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (sharedTargets) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.3M, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=7.3M, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=292) + ├── Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.3M, nextCallCountActual=1, nextTimeNanosActual=167, firstRowTimeNanosActual=7.3M, openCountActual=1, lastRowTimeNanosActual=7.4M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=167) + │ ╠══ Filter (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=7.3M, nextCallCountActual=1, nextTimeNanosActual=41, sourceRowsScannedActual=5, sourceRowsMatchedActual=1, sourceRowsFilteredActual=4, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=7.3M, exprEvalCountActual=5, exprFalseCountActual=4, openCountActual=1, exprTrueCountActual=1, lastRowTimeNanosActual=7.3M, closeCountActual=1, exprEvalTimeNanosActual=2.1K, inputRowsActual=5, rowsDroppedActual=4, selectivityActual=0.20, expansionFactorActual=0.20, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=3.7M, avgNextNanosActual=41, filterRejectRateActual=0.80) + │ ║ ├── Compare (>) (exprEvalCountActual=5, exprFalseCountActual=4, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_6224e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.7K, hasNextFalseCountActual=0) + │ ║ └── Group (combo) (resultSizeActual=5, hasNextCallCountActual=6, hasNextTrueCountActual=5, hasNextTimeNanosActual=7.3M, nextCallCountActual=5, nextTimeNanosActual=250, aggregateEvalCountActual=44, firstRowTimeNanosActual=7.3M, groupsCreatedActual=5, openCountActual=1, lastRowTimeNanosActual=7.3M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=4.40, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=22, rowsDroppedActual=17, selectivityActual=0.23, expansionFactorActual=0.23, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.83, avgHasNextNanosActual=1.2M, avgNextNanosActual=50) + │ ║ Filter (resultSizeActual=22, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=22, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=7.0K, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=291, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=22, exprTrueCountActual=22, exprEvalTimeNanosActual=21.4K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=22, hasNextTrueCountActual=22, hasNextTimeNanosActual=8.7K, sourceRowsScannedActual=22, sourceRowsMatchedActual=22, plannedIndexName=spoc, indexLookupCountActual=22, openCountActual=22, lastRowTimeNanosActual=416, closeCountActual=22, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=396, indexHitRateActual=1.00) + │ ║ │ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22, hasNextCallCountActual=23, hasNextTrueCountActual=22, hasNextTimeNanosActual=7.3M, nextCallCountActual=22, nextTimeNanosActual=375, joinRightIteratorsCreatedActual=12, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=22, firstRowTimeNanosActual=2.3M, leftRowsWithMatchActual=12, openCountActual=1, lastRowTimeNanosActual=7.3M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=34, rowsDroppedActual=12, expansionFactorActual=0.65, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.96, avgHasNextNanosActual=318.8K, avgNextNanosActual=17, leftRowsProbedActual=12, rightRowsScannedActual=22, avgRightRowsPerLeftActual=1.83, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.83, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M, resultSizeActual=12, joinRightIteratorsCreatedActual=2.5K, joinLeftBindingsConsumedActual=12, joinRightBindingsConsumedActual=12, inputRowsActual=2.5K, rowsDroppedActual=2.5K, expansionFactorActual=0.00, sampleCountActual=2, varianceActual=44.7M, stddevActual=6.7K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=12, rightRowsScannedActual=12, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M, resultSizeActual=2.5K, joinRightIteratorsCreatedActual=1.2K, joinLeftBindingsConsumedActual=1.2K, joinRightBindingsConsumedActual=2.5K, inputRowsActual=3.7K, rowsDroppedActual=1.2K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=1.2K, rightRowsScannedActual=2.5K, avgRightRowsPerLeftActual=2.00, joinOutputPerLeftActual=2.00) [left] + │ ║ ║ │ ╠══ Filter (resultSizeActual=1.2K, hasNextCallCountActual=1.2K, hasNextTrueCountActual=1.2K, hasNextTimeNanosActual=3.7M, nextCallCountActual=1.2K, nextTimeNanosActual=16.4K, sourceRowsScannedActual=2.2K, sourceRowsMatchedActual=1.2K, sourceRowsFilteredActual=949, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow, firstRowTimeNanosActual=16.0K, exprEvalCountActual=2.2K, exprFalseCountActual=949, openCountActual=1, exprTrueCountActual=1.2K, lastRowTimeNanosActual=7.3M, closeCountActual=1, exprEvalTimeNanosActual=268.3K, inputRowsActual=2.2K, rowsDroppedActual=949, selectivityActual=0.57, expansionFactorActual=0.57, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.0K, avgNextNanosActual=13, filterRejectRateActual=0.43) [left] + │ ║ ║ │ ║ ├── Compare (!=) (exprEvalCountActual=2.2K, exprFalseCountActual=949, exprTrueCountActual=1.2K, exprEvalTimeNanosActual=96.9K, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=2.2K, joinRightIteratorsCreatedActual=2.2K, joinRightBindingsConsumedActual=2.2K, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=4.4K, rowsDroppedActual=2.2K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=2.97, stddevActual=1.72, confidenceScoreActual=0.42, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.2K) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.9K, resultSizeActual=2.2K, joinRightIteratorsCreatedActual=949, joinLeftBindingsConsumedActual=949, joinRightBindingsConsumedActual=2.2K, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=3.1K, rowsDroppedActual=949, expansionFactorActual=0.70, sampleCountActual=2, varianceActual=0.44, stddevActual=0.66, confidenceScoreActual=0.55, hasNextFalseCountActual=0, leftRowsProbedActual=949, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=2.32, joinOutputPerLeftActual=2.32) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern [index: psoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=949, hasNextCallCountActual=950, hasNextTrueCountActual=949, hasNextTimeNanosActual=96.6K, nextCallCountActual=949, nextTimeNanosActual=50.6K, sourceRowsScannedActual=949, sourceRowsMatchedActual=949, plannedIndexName=psoc, firstRowTimeNanosActual=3.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=7.3M, optimizer.candidateCount=16, closeCountActual=1, varsAddedActual=3, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=102, avgNextNanosActual=53, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ │ o: Var (name=drugA) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=15, resultSizeEstimate=949, resultSizeActual=2.2K, hasNextCallCountActual=3.1K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=498.8K, nextCallCountActual=2.2K, nextTimeNanosActual=107.2K, sourceRowsScannedActual=3.1K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=948, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=949, openCountActual=949, lastRowTimeNanosActual=1.5K, closeCountActual=949, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=949, nextPerHasNextRatioActual=0.70, avgHasNextNanosActual=158, avgNextNanosActual=49, indexHitRateActual=0.70) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ ║ o: Var (name=drugB) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ ╚══ StatementPattern [index: spoc] (costEstimate=161, resultSizeEstimate=477, resultSizeActual=2.2K, hasNextCallCountActual=4.4K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=853.9K, nextCallCountActual=2.2K, nextTimeNanosActual=105.9K, sourceRowsScannedActual=4.4K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=2.2K, plannedIndexName=spoc, firstRowTimeNanosActual=416, indexLookupCountActual=2.2K, openCountActual=2.2K, lastRowTimeNanosActual=708, closeCountActual=2.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.2K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=194, avgNextNanosActual=48, indexHitRateActual=0.50) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=2.5K, hasNextCallCountActual=3.7K, hasNextTrueCountActual=2.5K, hasNextTimeNanosActual=669.3K, nextCallCountActual=2.5K, nextTimeNanosActual=121.1K, sourceRowsScannedActual=3.7K, sourceRowsMatchedActual=2.5K, sourceRowsFilteredActual=1.2K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=1.2K, openCountActual=1.2K, lastRowTimeNanosActual=1.2K, closeCountActual=1.2K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.2K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=178, avgNextNanosActual=48, indexHitRateActual=0.67) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: spoc] (costEstimate=0.50, resultSizeEstimate=20.0K, resultSizeActual=12, hasNextCallCountActual=2.5K, hasNextTrueCountActual=12, hasNextTimeNanosActual=994.7K, nextCallCountActual=12, nextTimeNanosActual=456, sourceRowsScannedActual=2.5K, sourceRowsMatchedActual=12, sourceRowsFilteredActual=2.5K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=2.5K, openCountActual=2.5K, lastRowTimeNanosActual=416, closeCountActual=2.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.5K, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=394, avgNextNanosActual=38, indexHitRateActual=0.00) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=11.2K, nextCallCountActual=22, nextTimeNanosActual=2.9K, firstRowTimeNanosActual=583, openCountActual=12, lastRowTimeNanosActual=2.3K, closeCountActual=12, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=208, avgNextNanosActual=134) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=22, hasNextCallCountActual=54, hasNextTrueCountActual=42, hasNextTimeNanosActual=6.6K, nextCallCountActual=22, nextTimeNanosActual=997, sourceRowsScannedActual=34, sourceRowsMatchedActual=22, sourceRowsFilteredActual=12, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=12, openCountActual=12, lastRowTimeNanosActual=2.1K, closeCountActual=12, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=12, nextPerHasNextRatioActual=0.41, avgHasNextNanosActual=123, avgNextNanosActual=45, indexHitRateActual=0.65) + │ ║ │ s: Var (name=drugA) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optSideEffect) (hasNextFalseCountActual=0) + │ ║ Var (name=sideEffect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_6224e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (sharedTargets) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_6224e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (sharedTargets) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -11302,85 +11685,85 @@ Projection ║ ProjectionElem "combo" ║ ProjectionElem "sharedTargets" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="1"^^) -│ ║ └── Group (combo) -│ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) -│ ║ │ ╚══ Exists -│ ║ │ StatementPattern (resultSizeEstimate=10.0K) -│ ║ │ s: Var (name=drugB) (bindingState=bound) -│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) -│ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] -│ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] -│ ║ ║ │ ║ ├── Compare (!=) -│ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) -│ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) -│ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) -│ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=161, resultSizeEstimate=477, optimizer.candidateCount=16, optimizer.score=31.3M, optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=558.2352941176471 rawRows=949.0 effectiveRows=949.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=later secondary tie-breaker index; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=227169.48529411765 rawRows=617901.0 effectiveRows=617901.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo combinationOf ?drugB) score=694.1176470588234 rawRows=1888.0 effectiveRows=1888.0 sharedVars=1 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=1108.8235294117646 rawRows=1885.0 effectiveRows=1885.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=1.18625E8 rawRows=1.898E7 effectiveRows=1.898E7 sharedVars=0 boundAnchors=0 cheapFilters=1 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2205.8823529411766 rawRows=3750.0 effectiveRows=3750.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2206.470588235294 rawRows=3751.0 effectiveRows=3751.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=3.125E7 rawRows=7.5E7 effectiveRows=7.5E7 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.rejectionReason=later secondary tie-breaker index, optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=7.5E7, effectiveRows=7.5E7, adjustedCost=3.125E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) -│ ║ ║ │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ ║ │ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) -│ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] -│ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) -│ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) -│ ║ ║ │ ║ ║ o: Var (name=drugA) (bindingState=unbound) -│ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] -│ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) -│ ║ ║ │ ║ o: Var (name=drugB) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] -│ ║ ║ │ s: Var (name=drugA) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) -│ ║ ║ │ o: Var (name=target) (bindingState=unbound) -│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] -│ ║ ║ s: Var (name=drugB) (bindingState=bound) -│ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) -│ ║ ║ o: Var (name=target) (bindingState=bound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=10.0K) -│ ║ │ s: Var (name=drugA) (bindingState=bound) -│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) -│ ║ │ o: Var (name=sideEffect) (bindingState=unbound) -│ ║ └── ExtensionElem (optSideEffect) -│ ║ Var (name=sideEffect) (bindingState=bound) -│ ║ GroupElem (_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123) -│ ║ Count (Distinct) -│ ║ Var (name=target) (bindingState=bound) -│ ║ GroupElem (sharedTargets) -│ ║ Count (Distinct) -│ ║ Var (name=target) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_48143f2fe36952f541b08a42a7b8ce15e70d0123) -│ Count (Distinct) -│ Var (name=target) (bindingState=unbound) -└── ExtensionElem (sharedTargets) -Count (Distinct) -Var (name=target) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_4324e226babdcc344c88a5a61806b6a8e7f30123, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (combo) + │ ║ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optSideEffect) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/side-effect/0) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugB) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect2) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=755200.0M) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=37.8M) [left] + │ ║ ║ │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, deferredFilterScope=smallestWindow) [left] + │ ║ ║ │ ║ ├── Compare (!=) + │ ║ ║ │ ║ │ Var (name=drugA) (bindingState=bound) + │ ║ ║ │ ║ │ Var (name=drugB) (bindingState=bound) + │ ║ ║ │ ║ └── Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) + │ ║ ║ │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=1.9K, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ ├── StatementPattern (costEstimate=15, resultSizeEstimate=949, optimizer.candidateCount=16, optimizer.score=30.9M, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_CYCLE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] promotedPrefixes=[] plannedOrder=[SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), SP(?drugA http://example.com/theme/pharma/targets ?target), SP(?drugB http://example.com/theme/pharma/targets ?target)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_CYCLE factors=[0:SP(?combo http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Combination), 1:SP(?combo http://example.com/theme/pharma/combinationOf ?drugA), 2:SP(?combo http://example.com/theme/pharma/combinationOf ?drugB), 3:SP(?drugA http://example.com/theme/pharma/targets ?target), 4:SP(?drugB http://example.com/theme/pharma/targets ?target)], optimizer.decisionTrace=initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugA) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?combo combinationOf ?drugB) score=8336.470588235294 rawRows=949.0 effectiveRows=949.0 baseCostRows=14172.0 factorWorkRows=14172.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugA targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo type Combination) right=SP(?drugB targets ?target) score=9.54E7 rawRows=9540000.0 effectiveRows=9540000.0 baseCostRows=9540000.0 factorWorkRows=33509.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?combo combinationOf ?drugB) score=1116.4705882352941 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1898.0 factorWorkRows=1898.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugA targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugA) right=SP(?drugB targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugA targets ?target) score=1.898E8 rawRows=1.898E7 effectiveRows=1.898E7 baseCostRows=1.898E7 factorWorkRows=21235.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?combo combinationOf ?drugB) right=SP(?drugB targets ?target) score=12491.176470588236 rawRows=1865.0 effectiveRows=1865.0 baseCostRows=21235.0 factorWorkRows=21235.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drugA targets ?target) right=SP(?drugB targets ?target) score=363471.17647058825 rawRows=617901.0 effectiveRows=617901.0 baseCostRows=617901.0 factorWorkRows=40572.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?combo type Combination) score=1110.5882352941176 rawRows=1888.0 effectiveRows=1888.0 baseCostRows=1888.0 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drugA targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drugB targets ?target) score=2182.3529411764707 rawRows=3710.0 effectiveRows=3710.0 baseCostRows=3710.0 factorWorkRows=2.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=rejected reason=later tie-breaker index; expand candidate left=Join right=SP(?drugB targets ?target) score=3.0916666666666668E7 rawRows=7.42E7 effectiveRows=7.42E7 baseCostRows=7.42E7 factorWorkRows=0.0 sharedVars=2 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=4 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drugB targets ?target), optimizer.strategy=greedy, optimizer.estimateSource=cardinality+learned filter stats, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[SP(?combo type Combination), SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.chosenOrder=[SP(?combo combinationOf ?drugA), SP(?combo combinationOf ?drugB), SP(?combo type Combination), SP(?drugA targets ?target), SP(?drugB targets ?target)], optimizer.scoreComponents=rawRows=7.42E7, effectiveRows=7.42E7, baseCostRows=7.42E7, factorWorkRows=0.0, adjustedCost=3.0916666666666668E7, sharedVars=2, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=4, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ │ ║ ║ │ s: Var (name=combo) (bindingState=unbound) + │ ║ ║ │ ║ ║ │ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ │ o: Var (name=drugA) (bindingState=unbound) + │ ║ ║ │ ║ ║ └── StatementPattern (costEstimate=15, resultSizeEstimate=949) [right] + │ ║ ║ │ ║ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + │ ║ ║ │ ║ ║ o: Var (name=drugB) (bindingState=unbound) + │ ║ ║ │ ║ ╚══ StatementPattern (costEstimate=161, resultSizeEstimate=477) [right] + │ ║ ║ │ ║ s: Var (name=combo) (bindingState=bound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_a4089907_uri, value=http://example.com/theme/pharma/Combination, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ o: Var (name=target) (bindingState=unbound) + │ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=20.0K) [right] + │ ║ ║ s: Var (name=drugB) (bindingState=bound) + │ ║ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ o: Var (name=target) (bindingState=bound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drugA) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=sideEffect) (bindingState=unbound) + │ ║ └── ExtensionElem (optSideEffect) + │ ║ Var (name=sideEffect) (bindingState=bound) + │ ║ GroupElem (_anon_having_4324e226babdcc344c88a5a61806b6a8e7f30123) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (sharedTargets) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_4324e226babdcc344c88a5a61806b6a8e7f30123) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (sharedTargets) + Count (Distinct) + Var (name=target) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { -?combo a . -?combo ?drugA . -?combo ?drugB . -FILTER (?drugA != ?drugB) -?drugA ?target . -?drugB ?target . -OPTIONAL { -?drugA ?sideEffect . -BIND(?sideEffect AS ?optSideEffect) -} -FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) + ?combo ?drugA . + ?combo ?drugB . + ?combo a . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER ((?optSideEffect != ) && EXISTS { ?drugB ?sideEffect2 . }) } GROUP BY ?combo HAVING (COUNT(DISTINCT ?target) > 1) @@ -11388,7 +11771,7 @@ HAVING (COUNT(DISTINCT ?target) > 1) Theme: PHARMA z_queryIndex: 7 === Explanation Telemetry === -Initial explain execution time: 91 ms +Initial explain execution time: 82 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -11399,67 +11782,67 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 47 ms +Fastest execution time: 48 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=833) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.8M, nextCallCountActual=1, nextTimeNanosActual=833, firstRowTimeNanosActual=64.8M, openCountActual=1, lastRowTimeNanosActual=64.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.4M, avgNextNanosActual=833) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=416, firstRowTimeNanosActual=65.2M, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=416) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=65.2M, nextCallCountActual=1, nextTimeNanosActual=292, aggregateEvalCountActual=5.7K, firstRowTimeNanosActual=65.2M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, maxGroupSizeActual=5.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=5.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.6M, avgNextNanosActual=292) -│ ╠══ Filter (resultSizeActual=5.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=5.7K, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=2.3M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optCompName) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, hasNextFalseCountActual=0) -│ ║ │ ╚══ Not (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=41.1M, hasNextFalseCountActual=0) -│ ║ │ Exists (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=40.8M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Join (JoinIterator) (resultSizeEstimate=144, resultSizeActual=0, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=5.7K, rowsDroppedActual=5.7K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) -│ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.5M, nextCallCountActual=5.7K, nextTimeNanosActual=355.5K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P], firstRowTimeNanosActual=625, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=6.1K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=62, indexHitRateActual=0.50) [left] -│ ║ │ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=r) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Filter (resultSizeEstimate=1.00, resultSizeActual=0, hasNextCallCountActual=5.7K, hasNextTimeNanosActual=21.8M, sourceRowsScannedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_pattern, plannedLookupComponents=[S, O, P], exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=3.4K, closeCountActual=5.7K, exprEvalTimeNanosActual=6.1M, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.8K, filterRejectRateActual=1.00) [right] -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=5.8M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="0.08"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=518.7K, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value="0.09"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=575.7K, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=5.7K, nextTimeNanosActual=282.1K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=417, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=1.2K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=212, avgNextNanosActual=49, indexHitRateActual=0.50) -│ ║ │ s: Var (name=r) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=5.7K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=18.7M, nextCallCountActual=5.7K, nextTimeNanosActual=34.9K, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, joinRightBindingsConsumedActual=5.7K, firstRowTimeNanosActual=37.6K, leftRowsWithMatchActual=5.7K, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=11.5K, rowsDroppedActual=5.7K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.3K, avgNextNanosActual=6.06, leftRowsProbedActual=5.7K, rightRowsScannedActual=5.7K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Join (JoinIterator) (resultSizeActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=8.6K, rowsDroppedActual=2.8K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=352.2K, nextCallCountActual=2.8K, nextTimeNanosActual=115.6K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=65.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=122, avgNextNanosActual=40, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.5M, nextCallCountActual=2.8K, nextTimeNanosActual=92.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=584, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=21.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=271, avgNextNanosActual=32, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ └── Union (resultSizeActual=5.7K, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsConsumedActual=2.8K, rightRowsConsumedActual=2.8K, leftRowsOutputContributionActual=2.8K, rightRowsOutputContributionActual=2.8K) [right] -│ ║ ║ ╠══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=128.8K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=625, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=10.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=45, indexHitRateActual=0.50) -│ ║ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=98.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=10.5K, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=19.7K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=238, avgNextNanosActual=34, indexHitRateActual=0.50) -│ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=4.6M, nextCallCountActual=5.7K, nextTimeNanosActual=808.4K, firstRowTimeNanosActual=792, openCountActual=5.7K, lastRowTimeNanosActual=8.6K, closeCountActual=5.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=405, avgNextNanosActual=140) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=3.3M, nextCallCountActual=5.7K, nextTimeNanosActual=328.9K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=750, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=8.4K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=289, avgNextNanosActual=57, indexHitRateActual=0.50) -│ ║ │ s: Var (name=comp) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optCompName) (hasNextFalseCountActual=0) -│ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.8M, nextCallCountActual=1, nextTimeNanosActual=459, firstRowTimeNanosActual=64.8M, openCountActual=1, lastRowTimeNanosActual=64.8M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.4M, avgNextNanosActual=459) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=64.8M, nextCallCountActual=1, nextTimeNanosActual=333, aggregateEvalCountActual=5.7K, firstRowTimeNanosActual=64.8M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=64.8M, maxGroupSizeActual=5.7K, closeCountActual=1, varsAddedActual=1, varsDroppedActual=11, avgGroupSizeActual=5.8K, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0.00, expansionFactorActual=0.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=32.4M, avgNextNanosActual=333) + │ ╠══ Filter (resultSizeActual=5.7K, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=5.7K, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=2.2M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="") (exprEvalCountActual=1, exprFalseCountActual=1, exprEvalTimeNanosActual=667, hasNextFalseCountActual=0) + │ ║ │ ╚══ Not (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=41.1M, hasNextFalseCountActual=0) + │ ║ │ Exists (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=40.8M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Join (JoinIterator) (resultSizeEstimate=1.00, resultSizeActual=0, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=5.7K, rowsDroppedActual=5.7K, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=0) + │ ║ │ ├── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.5M, nextCallCountActual=5.7K, nextTimeNanosActual=358.0K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[arm], firstRowTimeNanosActual=459, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=5.9K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=224, avgNextNanosActual=62, indexHitRateActual=0.50) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=r) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Filter (resultSizeEstimate=1.00, resultSizeActual=0, hasNextCallCountActual=5.7K, hasNextTimeNanosActual=22.0M, sourceRowsScannedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedFilterEvidenceCount=1.5M, plannedAccessRows=1.00, plannedFilterPassRatio=0, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_filter, sharedJoinVars=[r], exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=3.2K, closeCountActual=5.7K, exprEvalTimeNanosActual=6.2M, inputRowsActual=5.7K, rowsDroppedActual=5.7K, selectivityActual=0, expansionFactorActual=0, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0, avgHasNextNanosActual=3.8K, filterRejectRateActual=1.00) [right] + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=5.7K, exprFalseCountActual=5.7K, exprEvalTimeNanosActual=6.0M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=p) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="0.08"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=542.0K, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value="0.09"^^) (exprEvalCountActual=5.7K, exprTrueCountActual=5.7K, exprEvalTimeNanosActual=614.8K, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=2.4M, nextCallCountActual=5.7K, nextTimeNanosActual=300.1K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=1.1K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=213, avgNextNanosActual=52, indexHitRateActual=0.50) + │ ║ │ s: Var (name=r) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=p) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=5.7K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=18.2M, nextCallCountActual=5.7K, nextTimeNanosActual=61.9K, joinRightIteratorsCreatedActual=5.7K, joinLeftBindingsConsumedActual=5.7K, joinRightBindingsConsumedActual=5.7K, firstRowTimeNanosActual=33.0K, leftRowsWithMatchActual=5.7K, openCountActual=1, lastRowTimeNanosActual=64.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=11.5K, rowsDroppedActual=5.7K, expansionFactorActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.2K, avgNextNanosActual=11, leftRowsProbedActual=5.7K, rightRowsScannedActual=5.7K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Join (JoinIterator) (resultSizeActual=5.7K, joinLeftBindingsConsumedActual=5.7K, inputRowsActual=8.6K, rowsDroppedActual=2.8K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0, leftRowsProbedActual=5.7K, rightRowsScannedActual=0, avgRightRowsPerLeftActual=0, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ │ ╠══ StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=367.7K, nextCallCountActual=2.8K, nextTimeNanosActual=125.4K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=3.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=64.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=127, avgNextNanosActual=43, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.4M, nextCallCountActual=2.8K, nextTimeNanosActual=97.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[arm, trial], sharedJoinVars=[trial], firstRowTimeNanosActual=541, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=21.0K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=260, avgNextNanosActual=34, indexHitRateActual=0.50) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── Union (resultSizeActual=5.7K, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsConsumedActual=2.8K, rightRowsConsumedActual=2.8K, leftRowsOutputContributionActual=2.8K, rightRowsOutputContributionActual=2.8K) [right] + │ ║ ║ ╠══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=140.8K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=584, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=10.7K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=49, indexHitRateActual=0.50) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ StatementPattern [index: spoc] (new scope) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=118.7K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=10.7K, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=19.7K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=237, avgNextNanosActual=41, indexHitRateActual=0.50) + │ ║ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=comp) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=4.5M, nextCallCountActual=5.7K, nextTimeNanosActual=842.1K, firstRowTimeNanosActual=833, openCountActual=5.7K, lastRowTimeNanosActual=8.4K, closeCountActual=5.7K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=394, avgNextNanosActual=146) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=13.2K, resultSizeActual=5.7K, hasNextCallCountActual=11.5K, hasNextTrueCountActual=5.7K, hasNextTimeNanosActual=3.2M, nextCallCountActual=5.7K, nextTimeNanosActual=372.1K, sourceRowsScannedActual=11.5K, sourceRowsMatchedActual=5.7K, sourceRowsFilteredActual=5.7K, plannedIndexName=spoc, firstRowTimeNanosActual=792, indexLookupCountActual=5.7K, openCountActual=5.7K, lastRowTimeNanosActual=8.2K, closeCountActual=5.7K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.7K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=280, avgNextNanosActual=64, indexHitRateActual=0.50) + │ ║ │ s: Var (name=comp) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=optName) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optCompName) (hasNextFalseCountActual=0) + │ ║ Var (name=optName) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -11467,79 +11850,79 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optCompName) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="") -│ ║ │ ╚══ Not -│ ║ │ Exists -│ ║ │ Join (JoinIterator) (resultSizeEstimate=144) -│ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[S, P]) [left] -│ ║ │ │ s: Var (name=arm) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) -│ ║ │ │ o: Var (name=r) (bindingState=unbound) -│ ║ │ └── Filter (resultSizeEstimate=1.00, plannedFilterPassRatio=0.05, plannedIndexPrefixLength=3.00, plannedWorkRows=0.05, plannedIndexName=spoc, plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_pattern, plannedLookupComponents=[S, O, P]) [right] -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=p) (bindingState=bound) -│ ║ │ ║ ValueConstant (value="0.08"^^) -│ ║ │ ║ ValueConstant (value="0.09"^^) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) -│ ║ │ s: Var (name=r) (bindingState=bound) -│ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) -│ ║ │ o: Var (name=p) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) -│ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -│ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ │ s: Var (name=trial) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) -│ ║ ║ └── Union [right] -│ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) -│ ║ ║ ║ s: Var (name=arm) (bindingState=bound) -│ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) -│ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) -│ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) -│ ║ ║ s: Var (name=arm) (bindingState=bound) -│ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) -│ ║ ║ o: Var (name=comp) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=13.2K) -│ ║ │ s: Var (name=comp) (bindingState=bound) -│ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) -│ ║ │ o: Var (name=optName) (bindingState=unbound) -│ ║ └── ExtensionElem (optCompName) -│ ║ Var (name=optName) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=arm) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=arm) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optCompName) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="") + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=1.00) + │ ║ │ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, trial], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, sharedJoinVars=[arm]) [left] + │ ║ │ │ s: Var (name=arm) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ │ o: Var (name=r) (bindingState=unbound) + │ ║ │ └── Filter (resultSizeEstimate=1.00, plannedFilterEvidenceCount=1.5M, plannedAccessRows=1.00, plannedFilterPassRatio=0, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[P, O, S], plannedMissingLookupComponents=[O], plannedBoundVars=[_const_4795bbfb_uri, _const_73c2e40a_uri, _const_f5e5585a_uri, arm, comp, r, trial], filterSelectivitySource=learned_filter, sharedJoinVars=[r]) [right] + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=p) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="0.08"^^) + │ ║ │ ║ ValueConstant (value="0.09"^^) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ │ s: Var (name=r) (bindingState=bound) + │ ║ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ ║ │ o: Var (name=p) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ │ ║ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ │ ║ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[arm, trial], sharedJoinVars=[trial]) [right] + │ ║ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ └── Union [right] + │ ║ ║ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_4514e0aa_uri, value=http://example.com/theme/pharma/armComparator, anonymous) + │ ║ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ ║ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ o: Var (name=comp) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ s: Var (name=comp) (bindingState=bound) + │ ║ │ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ o: Var (name=optName) (bindingState=unbound) + │ ║ └── ExtensionElem (optCompName) + │ ║ Var (name=optName) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=arm) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=arm) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { -?trial ?arm . -?trial a . -?arm (|) ?comp . -OPTIONAL { -?comp ?optName . -BIND(?optName AS ?optCompName) -} -FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) + ?trial ?arm . + ?trial a . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER ((?optCompName != "") && NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) }) } Theme: PHARMA z_queryIndex: 8 === Explanation Telemetry === -Initial explain execution time: 61 ms +Initial explain execution time: 58 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -11550,70 +11933,70 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 37 ms +Fastest execution time: 35 ms -Projection (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.3M, nextCallCountActual=1.6K, nextTimeNanosActual=249.4K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=32.0K, avgNextNanosActual=153) +Projection (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=51.5M, nextCallCountActual=1.6K, nextTimeNanosActual=240.0K, firstRowTimeNanosActual=50.2M, openCountActual=1, lastRowTimeNanosActual=51.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.5K, avgNextNanosActual=147) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "drug" (hasNextFalseCountActual=0) ║ ProjectionElem "targetCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=163.3K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=32.0K, avgNextNanosActual=100) -├── Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=89.8K, firstRowTimeNanosActual=51.0M, openCountActual=1, lastRowTimeNanosActual=52.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.9K, avgNextNanosActual=55) -│ ╠══ Filter (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=52.2M, nextCallCountActual=1.6K, nextTimeNanosActual=20.0K, sourceRowsScannedActual=4.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=3.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=51.0M, exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, openCountActual=1, exprTrueCountActual=1.6K, lastRowTimeNanosActual=52.7M, closeCountActual=1, exprEvalTimeNanosActual=753.2K, inputRowsActual=4.9K, rowsDroppedActual=3.3K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.9K, avgNextNanosActual=12, filterRejectRateActual=0.67) -│ ║ ├── Compare (>=) (exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=418.4K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) -│ ║ └── Group (drug) (resultSizeActual=4.9K, hasNextCallCountActual=4.9K, hasNextTrueCountActual=4.9K, hasNextTimeNanosActual=51.0M, nextCallCountActual=4.9K, nextTimeNanosActual=86.9K, aggregateEvalCountActual=39.6K, firstRowTimeNanosActual=51.0M, groupsCreatedActual=4.9K, openCountActual=1, lastRowTimeNanosActual=52.7M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.98, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.8K, rowsDroppedActual=14.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.3K, avgNextNanosActual=17) -│ ║ Difference (resultSizeActual=19.8K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=41.1M, nextCallCountActual=19.8K, nextTimeNanosActual=215.2K, firstRowTimeNanosActual=87.9K, openCountActual=1, lastRowTimeNanosActual=49.3M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.9K, rowsDroppedActual=166, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=11, leftRowsConsumedActual=19.9K, rightRowsConsumedActual=30, overlapRowsActual=136) -│ ║ ├── Filter (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=33.8M, nextCallCountActual=19.9K, nextTimeNanosActual=264.9K, sourceRowsScannedActual=19.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=17.0K, exprEvalCountActual=19.9K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=19.9K, lastRowTimeNanosActual=49.0M, closeCountActual=1, exprEvalTimeNanosActual=7.7M, inputRowsActual=19.9K, rowsDroppedActual=6, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.00) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=19.9K, exprFalseCountActual=6, exprTrueCountActual=19.9K, exprEvalTimeNanosActual=6.2M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optMol) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=167, hasNextFalseCountActual=0) -│ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=24.5M, nextCallCountActual=19.9K, nextTimeNanosActual=193.9K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.9K, firstRowTimeNanosActual=14.0K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=49.0M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.9K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=9.72, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.9K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=14.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=14.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) [left] -│ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=446.4K, nextCallCountActual=5.0K, nextTimeNanosActual=297.4K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=7.0K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=49.0M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=89, avgNextNanosActual=59, indexHitRateActual=1.00) [left] -│ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=2.8M, nextCallCountActual=9.9K, nextTimeNanosActual=566.6K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P], firstRowTimeNanosActual=583, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=6.9K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=188, avgNextNanosActual=57, indexHitRateActual=0.67) [right] -│ ║ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) -│ ║ │ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ └── Extension (resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=8.8M, nextCallCountActual=19.9K, nextTimeNanosActual=2.4M, firstRowTimeNanosActual=542, openCountActual=9.9K, lastRowTimeNanosActual=5.8K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=177, avgNextNanosActual=122) [right] -│ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=19.9K, nextTimeNanosActual=1.0M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=5.5K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=110, avgNextNanosActual=55, indexHitRateActual=0.67) -│ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ╚══ ExtensionElem (optMol) (hasNextFalseCountActual=0) -│ ║ │ Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── Union (resultSizeActual=30, hasNextFalseCountActual=0, leftRowsConsumedActual=16, rightRowsConsumedActual=14, leftRowsOutputContributionActual=16, rightRowsOutputContributionActual=14) -│ ║ ╠══ Filter (resultSizeActual=16, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=16, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ ║ ├── SameTerm (hasNextFalseCountActual=0) -│ ║ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) (exprEvalCountActual=1, exprEvalTimeNanosActual=41, hasNextFalseCountActual=0) -│ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=16, resultSizeActual=16, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=4.5K, nextCallCountActual=16, nextTimeNanosActual=1.1K, sourceRowsScannedActual=48, sourceRowsMatchedActual=16, sourceRowsFilteredActual=32, plannedIndexName=ospc, firstRowTimeNanosActual=2.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=26.0K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=267, avgNextNanosActual=73, indexHitRateActual=0.33) -│ ║ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Filter (resultSizeActual=14, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=14, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) -│ ║ ├── SameTerm (hasNextFalseCountActual=0) -│ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) (exprEvalCountActual=1, exprEvalTimeNanosActual=42, hasNextFalseCountActual=0) -│ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=14, resultSizeActual=14, hasNextCallCountActual=15, hasNextTrueCountActual=14, hasNextTimeNanosActual=3.5K, nextCallCountActual=14, nextTimeNanosActual=540, sourceRowsScannedActual=54, sourceRowsMatchedActual=14, sourceRowsFilteredActual=40, plannedIndexName=ospc, firstRowTimeNanosActual=31.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=47.1K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=236, avgNextNanosActual=39, indexHitRateActual=0.26) -│ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) -│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (targetCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_53343f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (targetCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=51.4M, nextCallCountActual=1.6K, nextTimeNanosActual=157.9K, firstRowTimeNanosActual=50.2M, openCountActual=1, lastRowTimeNanosActual=51.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.5K, avgNextNanosActual=97) + ├── Extension (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=51.4M, nextCallCountActual=1.6K, nextTimeNanosActual=84.3K, firstRowTimeNanosActual=50.2M, openCountActual=1, lastRowTimeNanosActual=51.9M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.4K, avgNextNanosActual=52) + │ ╠══ Filter (resultSizeActual=1.6K, hasNextCallCountActual=1.6K, hasNextTrueCountActual=1.6K, hasNextTimeNanosActual=51.3M, nextCallCountActual=1.6K, nextTimeNanosActual=21.3K, sourceRowsScannedActual=4.9K, sourceRowsMatchedActual=1.6K, sourceRowsFilteredActual=3.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=50.2M, exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, openCountActual=1, exprTrueCountActual=1.6K, lastRowTimeNanosActual=51.8M, closeCountActual=1, exprEvalTimeNanosActual=776.5K, inputRowsActual=4.9K, rowsDroppedActual=3.3K, selectivityActual=0.33, expansionFactorActual=0.33, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=31.4K, avgNextNanosActual=13, filterRejectRateActual=0.67) + │ ║ ├── Compare (>=) (exprEvalCountActual=4.9K, exprFalseCountActual=3.3K, exprTrueCountActual=1.6K, exprEvalTimeNanosActual=394.6K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_5834e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="3"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.6K, hasNextFalseCountActual=0) + │ ║ └── Group (drug) (resultSizeActual=4.9K, hasNextCallCountActual=4.9K, hasNextTrueCountActual=4.9K, hasNextTimeNanosActual=50.2M, nextCallCountActual=4.9K, nextTimeNanosActual=104.5K, aggregateEvalCountActual=39.6K, firstRowTimeNanosActual=50.2M, groupsCreatedActual=4.9K, openCountActual=1, lastRowTimeNanosActual=51.8M, maxGroupSizeActual=9, closeCountActual=1, varsAddedActual=2, varsDroppedActual=7, avgGroupSizeActual=3.98, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.8K, rowsDroppedActual=14.8K, selectivityActual=0.25, expansionFactorActual=0.25, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=10.1K, avgNextNanosActual=21) + │ ║ Difference (resultSizeActual=19.8K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=40.9M, nextCallCountActual=19.8K, nextTimeNanosActual=216.2K, firstRowTimeNanosActual=106.6K, openCountActual=1, lastRowTimeNanosActual=48.9M, closeCountActual=1, varsDroppedActual=2, metricOrigin.varsDroppedActual=derived, inputRowsActual=19.9K, rowsDroppedActual=166, selectivityActual=0.99, expansionFactorActual=0.99, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.1K, avgNextNanosActual=11, leftRowsConsumedActual=19.9K, rightRowsConsumedActual=30, overlapRowsActual=136) + │ ║ ├── Filter (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=33.9M, nextCallCountActual=19.9K, nextTimeNanosActual=260.1K, sourceRowsScannedActual=19.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=6, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=20.8K, exprEvalCountActual=19.9K, exprFalseCountActual=6, openCountActual=1, exprTrueCountActual=19.9K, lastRowTimeNanosActual=48.7M, closeCountActual=1, exprEvalTimeNanosActual=7.9M, inputRowsActual=19.9K, rowsDroppedActual=6, selectivityActual=1.00, expansionFactorActual=1.00, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.7K, avgNextNanosActual=13, filterRejectRateActual=0.00) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=19.9K, exprFalseCountActual=6, exprTrueCountActual=19.9K, exprEvalTimeNanosActual=6.1M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optMol) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=209, hasNextFalseCountActual=0) + │ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=19.9K, hasNextCallCountActual=19.9K, hasNextTrueCountActual=19.9K, hasNextTimeNanosActual=24.4M, nextCallCountActual=19.9K, nextTimeNanosActual=201.8K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=9.9K, joinRightBindingsConsumedActual=19.9K, firstRowTimeNanosActual=16.4K, leftRowsWithMatchActual=9.9K, openCountActual=1, lastRowTimeNanosActual=48.7M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=29.9K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=1.2K, avgNextNanosActual=10, leftRowsProbedActual=9.9K, rightRowsScannedActual=19.9K, avgRightRowsPerLeftActual=2.01, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.01, leftJoinNullExtendedRowsActual=0) + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=14.9K, joinRightBindingsConsumedActual=9.9K, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=14.9K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=0.67, joinOutputPerLeftActual=0.67) [left] + │ ║ │ │ ╠══ StatementPattern [index: ospc] (resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=432.1K, nextCallCountActual=5.0K, nextTimeNanosActual=294.4K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedAccessRows=15.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=9.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=48.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=86, avgNextNanosActual=59, indexHitRateActual=1.00) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=2.8M, nextCallCountActual=9.9K, nextTimeNanosActual=614.1K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug], sharedJoinVars=[drug], firstRowTimeNanosActual=625, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=6.7K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=192, avgNextNanosActual=62, indexHitRateActual=0.67) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) + │ ║ │ │ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ └── Extension (resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=8.9M, nextCallCountActual=19.9K, nextTimeNanosActual=2.4M, firstRowTimeNanosActual=584, openCountActual=9.9K, lastRowTimeNanosActual=5.5K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=179, avgNextNanosActual=122) [right] + │ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=19.9K, hasNextCallCountActual=49.9K, hasNextTrueCountActual=39.9K, hasNextTimeNanosActual=5.4M, nextCallCountActual=19.9K, nextTimeNanosActual=1.1M, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=19.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=542, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=5.4K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=109, avgNextNanosActual=55, indexHitRateActual=0.67) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ ExtensionElem (optMol) (hasNextFalseCountActual=0) + │ ║ │ Var (name=mol) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── Union (resultSizeActual=30, hasNextFalseCountActual=0, leftRowsConsumedActual=16, rightRowsConsumedActual=14, leftRowsOutputContributionActual=16, rightRowsOutputContributionActual=14) + │ ║ ╠══ Filter (resultSizeActual=16, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=6.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=16, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ ║ ├── SameTerm (hasNextFalseCountActual=0) + │ ║ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) (exprEvalCountActual=1, exprEvalTimeNanosActual=83, hasNextFalseCountActual=0) + │ ║ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=16, resultSizeActual=16, hasNextCallCountActual=17, hasNextTrueCountActual=16, hasNextTimeNanosActual=5.0K, nextCallCountActual=16, nextTimeNanosActual=1.7K, sourceRowsScannedActual=48, sourceRowsMatchedActual=16, sourceRowsFilteredActual=32, plannedIndexName=ospc, firstRowTimeNanosActual=3.2K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=27.6K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=299, avgNextNanosActual=110, indexHitRateActual=0.33) + │ ║ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Filter (resultSizeActual=14, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=5.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter, inputRowsActual=14, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=0) + │ ║ ├── SameTerm (hasNextFalseCountActual=0) + │ ║ │ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) (exprEvalCountActual=1, hasNextFalseCountActual=0) + │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=14, resultSizeActual=14, hasNextCallCountActual=15, hasNextTrueCountActual=14, hasNextTimeNanosActual=3.7K, nextCallCountActual=14, nextTimeNanosActual=916, sourceRowsScannedActual=54, sourceRowsMatchedActual=14, sourceRowsFilteredActual=40, plannedIndexName=ospc, firstRowTimeNanosActual=36.7K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=53.1K, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.93, avgHasNextNanosActual=247, avgNextNanosActual=65, indexHitRateActual=0.26) + │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) (hasNextFalseCountActual=0) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_5834e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (targetCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_5834e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (targetCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -11622,85 +12005,85 @@ Projection ║ ProjectionElem "drug" ║ ProjectionElem "targetCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>=) -│ ║ │ Var (name=_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="3"^^) -│ ║ └── Group (drug) -│ ║ Difference -│ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optMol) (bindingState=bound) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) -│ ║ │ ╚══ LeftJoin -│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.1K) [left] -│ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) -│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) -│ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedBoundVars=[drug], plannedLookupComponents=[S, P]) [right] -│ ║ │ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) -│ ║ │ │ o: Var (name=target) (bindingState=unbound) -│ ║ │ └── Extension [right] -│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) -│ ║ │ ║ s: Var (name=drug) (bindingState=bound) -│ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) -│ ║ │ ║ o: Var (name=mol) (bindingState=unbound) -│ ║ │ ╚══ ExtensionElem (optMol) -│ ║ │ Var (name=mol) (bindingState=bound) -│ ║ └── Union -│ ║ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ║ ├── SameTerm -│ ║ ║ │ Var (name=disease) (bindingState=bound) -│ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) -│ ║ ║ └── StatementPattern (resultSizeEstimate=16) -│ ║ ║ s: Var (name=drug) (bindingState=unbound) -│ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) -│ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) -│ ║ ╚══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) -│ ║ ├── SameTerm -│ ║ │ Var (name=disease) (bindingState=bound) -│ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) -│ ║ └── StatementPattern (resultSizeEstimate=14) -│ ║ s: Var (name=drug) (bindingState=unbound) -│ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) -│ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) -│ ║ GroupElem (_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d) -│ ║ Count (Distinct) -│ ║ Var (name=target) (bindingState=bound) -│ ║ GroupElem (targetCount) -│ ║ Count (Distinct) -│ ║ Var (name=target) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_04343f2fe36952f541b08a42a7b8ce15e70d) -│ Count (Distinct) -│ Var (name=target) (bindingState=unbound) -└── ExtensionElem (targetCount) -Count (Distinct) -Var (name=target) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>=) + │ ║ │ Var (name=_anon_having_0934e226babdcc344c88a5a61806b6a8e7f3, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="3"^^) + │ ║ └── Group (drug) + │ ║ Difference + │ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optMol) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/molecule/0) + │ ║ │ ╚══ LeftJoin + │ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.0K) [left] + │ ║ │ │ ╠══ StatementPattern (resultSizeEstimate=5.0K, plannedAccessRows=15.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=15.1K, plannedIndexName=ospc, plannedIndexAccessMode=prefixScan, plannedLookupComponents=[O, P], plannedMissingLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=20.0K, plannedAccessRows=2.00, plannedIndexPrefixLength=2.00, plannedWorkRows=2.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[drug], sharedJoinVars=[drug]) [right] + │ ║ │ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=target) (bindingState=unbound) + │ ║ │ └── Extension [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ ║ s: Var (name=drug) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fb60ad98_uri, value=http://example.com/theme/pharma/hasMolecule, anonymous) + │ ║ │ ║ o: Var (name=mol) (bindingState=unbound) + │ ║ │ ╚══ ExtensionElem (optMol) + │ ║ │ Var (name=mol) (bindingState=bound) + │ ║ └── Union + │ ║ ╠══ Filter (plannedFilterEvidenceCount=6.1K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ║ ├── SameTerm + │ ║ ║ │ Var (name=disease) (bindingState=bound) + │ ║ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/6) + │ ║ ║ └── StatementPattern (resultSizeEstimate=16) + │ ║ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/6) (bindingState=unbound) + │ ║ ╚══ Filter (plannedFilterEvidenceCount=5.3K, plannedFilterPassRatio=1.00, filterSelectivitySource=learned_filter) + │ ║ ├── SameTerm + │ ║ │ Var (name=disease) (bindingState=bound) + │ ║ │ ValueConstant (value=http://example.com/theme/pharma/disease/7) + │ ║ └── StatementPattern (resultSizeEstimate=14) + │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=disease, value=http://example.com/theme/pharma/disease/7) (bindingState=unbound) + │ ║ GroupElem (_anon_having_0934e226babdcc344c88a5a61806b6a8e7f3) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ║ GroupElem (targetCount) + │ ║ Count (Distinct) + │ ║ Var (name=target) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_0934e226babdcc344c88a5a61806b6a8e7f3) + │ Count (Distinct) + │ Var (name=target) (bindingState=unbound) + └── ExtensionElem (targetCount) + Count (Distinct) + Var (name=target) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { -?drug a . -?drug ?target . -OPTIONAL { -?drug ?mol . -BIND(?mol AS ?optMol) -} -FILTER (?optMol != ) -MINUS { -{ -?drug . -FILTER (sameTerm(?disease, )) -} -UNION -{ -?drug . -FILTER (sameTerm(?disease, )) -} -} + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } } GROUP BY ?drug HAVING (COUNT(DISTINCT ?target) >= 3) @@ -11708,7 +12091,7 @@ HAVING (COUNT(DISTINCT ?target) >= 3) Theme: PHARMA z_queryIndex: 9 === Explanation Telemetry === -Initial explain execution time: 61 ms +Initial explain execution time: 49 ms Warmup execution 1/10 Warmup execution 2/10 Warmup execution 3/10 @@ -11719,97 +12102,97 @@ Warmup execution 7/10 Warmup execution 8/10 Warmup execution 9/10 Warmup execution 10/10 -Fastest execution time: 37 ms +Fastest execution time: 28 ms -Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=625, firstRowTimeNanosActual=28.6M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=625) +Projection (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=29.0M, nextCallCountActual=1, nextTimeNanosActual=542, firstRowTimeNanosActual=29.0M, openCountActual=1, lastRowTimeNanosActual=29.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.5M, avgNextNanosActual=542) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "count" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=167, firstRowTimeNanosActual=28.7M, openCountActual=1, lastRowTimeNanosActual=28.7M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=167) -├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=28.6M, nextCallCountActual=1, nextTimeNanosActual=84, aggregateEvalCountActual=13, firstRowTimeNanosActual=28.7M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=28.7M, maxGroupSizeActual=13, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=13, rowsDroppedActual=12, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.3M, avgNextNanosActual=84) -│ ╠══ Filter (resultSizeActual=13, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=2.2K, rowsDroppedActual=2.2K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=2.2K, exprFalseCountActual=2.2K, exprTrueCountActual=13, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=54.8K, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=40.1K, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=13, exprTrueCountActual=13, exprEvalTimeNanosActual=15.5K, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=13, hasNextTrueCountActual=13, hasNextTimeNanosActual=5.8K, sourceRowsScannedActual=13, sourceRowsMatchedActual=13, plannedIndexName=spoc, indexLookupCountActual=13, openCountActual=13, lastRowTimeNanosActual=417, closeCountActual=13, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=452, indexHitRateActual=1.00) -│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=se) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=27.2M, nextCallCountActual=2.2K, nextTimeNanosActual=24.4K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=24.1M, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.3K, avgNextNanosActual=11, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) -│ ║ ╠══ Projection (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=207.4K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.3K, avgNextNanosActual=188) [left] -│ ║ ║ ├── ProjectionElemList (hasNextFalseCountActual=0) -│ ║ ║ │ ProjectionElem "drug" (hasNextFalseCountActual=0) -│ ║ ║ │ ProjectionElem "avgEffect" (hasNextFalseCountActual=0) -│ ║ ║ └── Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=125.4K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.3K, avgNextNanosActual=113) -│ ║ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.6M, nextCallCountActual=1.1K, nextTimeNanosActual=72.7K, firstRowTimeNanosActual=24.1M, openCountActual=1, lastRowTimeNanosActual=28.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.2K, avgNextNanosActual=66) -│ ║ ║ ║ ├── Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.5M, nextCallCountActual=1.1K, nextTimeNanosActual=18.5K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=723, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.1M, exprEvalCountActual=1.8K, exprFalseCountActual=723, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=28.6M, closeCountActual=1, exprEvalTimeNanosActual=303.5K, inputRowsActual=1.8K, rowsDroppedActual=723, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.2K, avgNextNanosActual=17, filterRejectRateActual=0.40) -│ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=1.8K, exprFalseCountActual=723, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=159.5K, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ Var (name=_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=625, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ╚══ Group (drug) (resultSizeActual=1.8K, hasNextCallCountActual=1.8K, hasNextTrueCountActual=1.8K, hasNextTimeNanosActual=24.1M, nextCallCountActual=1.8K, nextTimeNanosActual=39.9K, aggregateEvalCountActual=4.5K, firstRowTimeNanosActual=24.1M, groupsCreatedActual=1.8K, openCountActual=1, lastRowTimeNanosActual=28.6M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=13, avgGroupSizeActual=1.25, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.2K, rowsDroppedActual=453, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.2K, avgNextNanosActual=22) -│ ║ ║ ║ │ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=19.5M, nextCallCountActual=2.2K, nextTimeNanosActual=31.6K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=603, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=93.0K, exprEvalCountActual=2.8K, exprFalseCountActual=603, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=23.3M, closeCountActual=1, exprEvalTimeNanosActual=3.1M, inputRowsActual=2.8K, rowsDroppedActual=603, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.6K, avgNextNanosActual=14, filterRejectRateActual=0.21) -│ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=603, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=2.8M, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=333, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=16.1M, nextCallCountActual=2.8K, nextTimeNanosActual=27.0K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, firstRowTimeNanosActual=29.0K, leftRowsWithMatchActual=2.8K, openCountActual=1, lastRowTimeNanosActual=23.2M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.6K, avgNextNanosActual=9.37, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) -│ ║ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.03, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] -│ ║ ║ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] -│ ║ ║ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=329.5K, nextCallCountActual=2.8K, nextTimeNanosActual=169.4K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P], firstRowTimeNanosActual=11.5K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=23.2M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=114, avgNextNanosActual=59, indexHitRateActual=1.00) [left] -│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=169.6K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P], firstRowTimeNanosActual=541, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=7.4K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=230, avgNextNanosActual=59, indexHitRateActual=0.50) [right] -│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=169.9K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=6.3K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=59, indexHitRateActual=0.50) [right] -│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=158.4K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=375, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.3K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=205, avgNextNanosActual=55, indexHitRateActual=0.50) [right] -│ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.1M, nextCallCountActual=2.8K, nextTimeNanosActual=144.2K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=4.5K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=207, avgNextNanosActual=50, indexHitRateActual=0.50) [right] -│ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ └── Extension (resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.9M, nextCallCountActual=2.8K, nextTimeNanosActual=370.9K, firstRowTimeNanosActual=792, openCountActual=2.8K, lastRowTimeNanosActual=3.4K, closeCountActual=2.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=344, avgNextNanosActual=129) [right] -│ ║ ║ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=131.7K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=3.2K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=214, avgNextNanosActual=46, indexHitRateActual=0.50) -│ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ GroupElem (_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ │ GroupElem (avgEffect) (hasNextFalseCountActual=0) -│ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) -│ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ ║ └── ExtensionElem (_anon_having_64443f2fe36952f541b08a42a7b8ce15e70d012345) (hasNextFalseCountActual=0) -│ ║ ║ ║ Avg (hasNextFalseCountActual=0) -│ ║ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ ╚══ ExtensionElem (avgEffect) (hasNextFalseCountActual=0) -│ ║ ║ Avg (hasNextFalseCountActual=0) -│ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.2K, nextTimeNanosActual=285.2K, firstRowTimeNanosActual=959, openCountActual=1.1K, lastRowTimeNanosActual=2.6K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=251, avgNextNanosActual=129) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.0M, nextCallCountActual=2.2K, nextTimeNanosActual=127.0K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=917, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=2.4K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=183, avgNextNanosActual=57, indexHitRateActual=0.67) -│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) -│ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ GroupElem (count) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -└── ExtensionElem (count) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=29.0M, nextCallCountActual=1, nextTimeNanosActual=292, firstRowTimeNanosActual=29.0M, openCountActual=1, lastRowTimeNanosActual=29.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.5M, avgNextNanosActual=292) + ├── Group () (resultSizeActual=1, hasNextCallCountActual=2, hasNextTrueCountActual=1, hasNextTimeNanosActual=29.0M, nextCallCountActual=1, nextTimeNanosActual=42, aggregateEvalCountActual=13, firstRowTimeNanosActual=29.0M, groupsCreatedActual=1, openCountActual=1, lastRowTimeNanosActual=29.0M, maxGroupSizeActual=13, closeCountActual=1, varsAddedActual=1, varsDroppedActual=5, avgGroupSizeActual=13, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=13, rowsDroppedActual=12, selectivityActual=0.08, expansionFactorActual=0.08, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=14.5M, avgNextNanosActual=42) + │ ╠══ Filter (resultSizeActual=13, sourceRowsFilteredActual=0, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, inputRowsActual=2.2K, rowsDroppedActual=2.2K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ ListMemberOperator (exprEvalCountActual=2.2K, exprFalseCountActual=2.2K, exprTrueCountActual=13, exprEvalTimeNanosActual=1.1M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optDisease) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=62.1K, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) (exprEvalCountActual=2.2K, exprEvalTimeNanosActual=39.7K, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=13, exprTrueCountActual=13, exprEvalTimeNanosActual=15.2K, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ StatementPattern [index: spoc] (resultSizeEstimate=10.0K, resultSizeActual=0, hasNextCallCountActual=13, hasNextTrueCountActual=13, hasNextTimeNanosActual=5.0K, sourceRowsScannedActual=13, sourceRowsMatchedActual=13, plannedIndexName=spoc, indexLookupCountActual=13, openCountActual=13, lastRowTimeNanosActual=459, closeCountActual=13, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=0, nextPerHasNextRatioActual=0, avgHasNextNanosActual=391, indexHitRateActual=1.00) + │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=se) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=27.5M, nextCallCountActual=2.2K, nextTimeNanosActual=27.6K, joinRightIteratorsCreatedActual=1.1K, joinLeftBindingsConsumedActual=1.1K, joinRightBindingsConsumedActual=2.2K, firstRowTimeNanosActual=24.5M, leftRowsWithMatchActual=1.1K, openCountActual=1, lastRowTimeNanosActual=28.9M, closeCountActual=1, maxRightRowsPerLeftActual=3, inputRowsActual=3.3K, rowsDroppedActual=1.1K, expansionFactorActual=0.67, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=12.4K, avgNextNanosActual=12, leftRowsProbedActual=1.1K, rightRowsScannedActual=2.2K, avgRightRowsPerLeftActual=2.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=2.00, leftJoinNullExtendedRowsActual=0) + │ ║ ╠══ Projection (new scope) (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=25.0M, nextCallCountActual=1.1K, nextTimeNanosActual=189.2K, firstRowTimeNanosActual=24.5M, openCountActual=1, lastRowTimeNanosActual=28.9M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.7K, avgNextNanosActual=171) [left] + │ ║ ║ ├── ProjectionElemList (hasNextFalseCountActual=0) + │ ║ ║ │ ProjectionElem "drug" (hasNextFalseCountActual=0) + │ ║ ║ │ ProjectionElem "avgEffect" (hasNextFalseCountActual=0) + │ ║ ║ └── Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=25.0M, nextCallCountActual=1.1K, nextTimeNanosActual=114.8K, firstRowTimeNanosActual=24.5M, openCountActual=1, lastRowTimeNanosActual=29.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.6K, avgNextNanosActual=104) + │ ║ ║ ╠══ Extension (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=25.0M, nextCallCountActual=1.1K, nextTimeNanosActual=65.1K, firstRowTimeNanosActual=24.5M, openCountActual=1, lastRowTimeNanosActual=29.0M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.6K, avgNextNanosActual=59) + │ ║ ║ ║ ├── Filter (resultSizeActual=1.1K, hasNextCallCountActual=1.1K, hasNextTrueCountActual=1.1K, hasNextTimeNanosActual=24.9M, nextCallCountActual=1.1K, nextTimeNanosActual=19.0K, sourceRowsScannedActual=1.8K, sourceRowsMatchedActual=1.1K, sourceRowsFilteredActual=723, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=24.5M, exprEvalCountActual=1.8K, exprFalseCountActual=723, openCountActual=1, exprTrueCountActual=1.1K, lastRowTimeNanosActual=28.9M, closeCountActual=1, exprEvalTimeNanosActual=318.4K, inputRowsActual=1.8K, rowsDroppedActual=723, selectivityActual=0.60, expansionFactorActual=0.60, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=22.6K, avgNextNanosActual=17, filterRejectRateActual=0.40) + │ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=1.8K, exprFalseCountActual=723, exprTrueCountActual=1.1K, exprEvalTimeNanosActual=161.8K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Var (name=_anon_having_6944e226babdcc344c88a5a61806b6a8e7f3012345, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.8K, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╚══ Group (drug) (resultSizeActual=1.8K, hasNextCallCountActual=1.8K, hasNextTrueCountActual=1.8K, hasNextTimeNanosActual=24.5M, nextCallCountActual=1.8K, nextTimeNanosActual=42.3K, aggregateEvalCountActual=4.5K, firstRowTimeNanosActual=24.5M, groupsCreatedActual=1.8K, openCountActual=1, lastRowTimeNanosActual=28.9M, maxGroupSizeActual=4, closeCountActual=1, varsAddedActual=2, varsDroppedActual=13, avgGroupSizeActual=1.25, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=2.2K, rowsDroppedActual=453, selectivityActual=0.80, expansionFactorActual=0.80, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=13.4K, avgNextNanosActual=23) + │ ║ ║ ║ │ Filter (resultSizeActual=2.2K, hasNextCallCountActual=2.2K, hasNextTrueCountActual=2.2K, hasNextTimeNanosActual=19.8M, nextCallCountActual=2.2K, nextTimeNanosActual=40.8K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=603, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=37.8K, exprEvalCountActual=2.8K, exprFalseCountActual=603, openCountActual=1, exprTrueCountActual=2.2K, lastRowTimeNanosActual=23.7M, closeCountActual=1, exprEvalTimeNanosActual=3.2M, inputRowsActual=2.8K, rowsDroppedActual=603, selectivityActual=0.79, expansionFactorActual=0.79, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=8.7K, avgNextNanosActual=18, filterRejectRateActual=0.21) + │ ║ ║ ║ │ ╠══ Compare (>) (exprEvalCountActual=2.8K, exprFalseCountActual=603, exprTrueCountActual=2.2K, exprEvalTimeNanosActual=2.9M, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=291, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╚══ LeftJoin (LeftJoinIterator) (resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=16.3M, nextCallCountActual=2.8K, nextTimeNanosActual=30.4K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, firstRowTimeNanosActual=23.0K, leftRowsWithMatchActual=2.8K, openCountActual=1, lastRowTimeNanosActual=23.7M, closeCountActual=1, maxRightRowsPerLeftActual=1, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=5.7K, avgNextNanosActual=11, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinMatchRateActual=1.00, joinOutputPerLeftActual=1.00, leftJoinNullExtendedRowsActual=0) + │ ║ ║ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=3.1K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0.00, stddevActual=0.03, confidenceScoreActual=0.66, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ║ │ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=2.8K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.8K, joinRightIteratorsCreatedActual=2.8K, joinLeftBindingsConsumedActual=2.8K, joinRightBindingsConsumedActual=2.8K, inputRowsActual=5.7K, rowsDroppedActual=2.8K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.8K, rightRowsScannedActual=2.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=2.8K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=320.4K, nextCallCountActual=2.8K, nextTimeNanosActual=181.7K, sourceRowsScannedActual=2.8K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=1, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=8.1K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=23.7M, closeCountActual=1, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=111, avgNextNanosActual=63, indexHitRateActual=1.00) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=168.3K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[arm, trial], sharedJoinVars=[trial], firstRowTimeNanosActual=542, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=8.1K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=236, avgNextNanosActual=58, indexHitRateActual=0.50) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.8K, nextTimeNanosActual=183.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, trial], sharedJoinVars=[arm], firstRowTimeNanosActual=541, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=7.0K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=226, avgNextNanosActual=64, indexHitRateActual=0.50) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=175.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, drug, trial], sharedJoinVars=[arm], firstRowTimeNanosActual=500, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=5.9K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=61, indexHitRateActual=0.50) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=3.1K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=143.4K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, drug, result, trial], sharedJoinVars=[result], firstRowTimeNanosActual=542, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=4.8K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=216, avgNextNanosActual=50, indexHitRateActual=0.50) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ └── Extension (resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.9M, nextCallCountActual=2.8K, nextTimeNanosActual=371.6K, firstRowTimeNanosActual=666, openCountActual=2.8K, lastRowTimeNanosActual=3.7K, closeCountActual=2.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=345, avgNextNanosActual=129) [right] + │ ║ ║ ║ │ ╠══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.8K, hasNextCallCountActual=5.7K, hasNextTrueCountActual=2.8K, hasNextTimeNanosActual=1.2M, nextCallCountActual=2.8K, nextTimeNanosActual=142.5K, sourceRowsScannedActual=5.7K, sourceRowsMatchedActual=2.8K, sourceRowsFilteredActual=2.8K, plannedIndexName=spoc, firstRowTimeNanosActual=667, indexLookupCountActual=2.8K, openCountActual=2.8K, lastRowTimeNanosActual=3.6K, closeCountActual=2.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.8K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=218, avgNextNanosActual=49, indexHitRateActual=0.50) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ GroupElem (_anon_having_6944e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ │ GroupElem (avgEffect) (hasNextFalseCountActual=0) + │ ║ ║ ║ │ Avg (hasNextFalseCountActual=0) + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ ║ └── ExtensionElem (_anon_having_6944e226babdcc344c88a5a61806b6a8e7f3012345) (hasNextFalseCountActual=0) + │ ║ ║ ║ Avg (hasNextFalseCountActual=0) + │ ║ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ ╚══ ExtensionElem (avgEffect) (hasNextFalseCountActual=0) + │ ║ ║ Avg (hasNextFalseCountActual=0) + │ ║ ║ Var (name=effect) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ╚══ Extension (resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=1.3M, nextCallCountActual=2.2K, nextTimeNanosActual=271.2K, firstRowTimeNanosActual=708, openCountActual=1.1K, lastRowTimeNanosActual=1.8K, closeCountActual=1.1K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=246, avgNextNanosActual=123) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=9.9K, resultSizeActual=2.2K, hasNextCallCountActual=5.5K, hasNextTrueCountActual=4.4K, hasNextTimeNanosActual=995.0K, nextCallCountActual=2.2K, nextTimeNanosActual=128.9K, sourceRowsScannedActual=3.3K, sourceRowsMatchedActual=2.2K, sourceRowsFilteredActual=1.1K, plannedIndexName=spoc, firstRowTimeNanosActual=666, indexLookupCountActual=1.1K, openCountActual=1.1K, lastRowTimeNanosActual=1.6K, closeCountActual=1.1K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1.1K, nextPerHasNextRatioActual=0.40, avgHasNextNanosActual=180, avgNextNanosActual=58, indexHitRateActual=0.67) + │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=disease) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optDisease) (hasNextFalseCountActual=0) + │ ║ Var (name=disease) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ GroupElem (count) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + └── ExtensionElem (count) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -11817,195 +12200,190 @@ Projection ╠══ ProjectionElemList ║ ProjectionElem "count" ╚══ Extension -├── Group () -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── And -│ ║ │ ╠══ ListMemberOperator -│ ║ │ ║ Var (name=optDisease) (bindingState=bound) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) -│ ║ │ ╚══ Exists -│ ║ │ StatementPattern (resultSizeEstimate=10.0K) -│ ║ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) -│ ║ │ o: Var (name=se) (bindingState=unbound) -│ ║ └── LeftJoin -│ ║ ╠══ Projection (new scope) [left] -│ ║ ║ ├── ProjectionElemList -│ ║ ║ │ ProjectionElem "drug" -│ ║ ║ │ ProjectionElem "avgEffect" -│ ║ ║ └── Extension -│ ║ ║ ╠══ Extension -│ ║ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ║ ║ │ ╠══ Compare (>) -│ ║ ║ ║ │ ║ Var (name=_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound) -│ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) -│ ║ ║ ║ │ ╚══ Group (drug) -│ ║ ║ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ║ ║ │ ╠══ Compare (>) -│ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) -│ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) -│ ║ ║ ║ │ ╚══ LeftJoin -│ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] -│ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] -│ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] -│ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] -│ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[P]) [left] -│ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) -│ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -│ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) -│ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, O, P]) [right] -│ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) -│ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) -│ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) -│ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) -│ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) -│ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) -│ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) -│ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) -│ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedBoundVars=[arm, drug, result, trial], plannedLookupComponents=[S, P]) [right] -│ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) -│ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) -│ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) -│ ║ ║ ║ │ └── Extension [right] -│ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) -│ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) -│ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) -│ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) -│ ║ ║ ║ │ ╚══ ExtensionElem (optRate) -│ ║ ║ ║ │ Var (name=rate) (bindingState=bound) -│ ║ ║ ║ │ GroupElem (_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234) -│ ║ ║ ║ │ Avg -│ ║ ║ ║ │ Var (name=effect) (bindingState=bound) -│ ║ ║ ║ │ GroupElem (avgEffect) -│ ║ ║ ║ │ Avg -│ ║ ║ ║ │ Var (name=effect) (bindingState=bound) -│ ║ ║ ║ └── ExtensionElem (_anon_having_55443f2fe36952f541b08a42a7b8ce15e70d01234) -│ ║ ║ ║ Avg -│ ║ ║ ║ Var (name=effect) (bindingState=unbound) -│ ║ ║ ╚══ ExtensionElem (avgEffect) -│ ║ ║ Avg -│ ║ ║ Var (name=effect) (bindingState=unbound) -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=9.9K) -│ ║ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) -│ ║ │ o: Var (name=disease) (bindingState=unbound) -│ ║ └── ExtensionElem (optDisease) -│ ║ Var (name=disease) (bindingState=bound) -│ ╚══ GroupElem (count) -│ Count (Distinct) -│ Var (name=drug) (bindingState=bound) -└── ExtensionElem (count) -Count (Distinct) -Var (name=drug) (bindingState=unbound) + ├── Group () + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── And + │ ║ │ ╠══ ListMemberOperator + │ ║ │ ║ Var (name=optDisease) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/8) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/disease/9) + │ ║ │ ╚══ Exists + │ ║ │ StatementPattern (resultSizeEstimate=10.0K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_72f8dc5a_uri, value=http://example.com/theme/pharma/hasSideEffect, anonymous) + │ ║ │ o: Var (name=se) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Projection (new scope) [left] + │ ║ ║ ├── ProjectionElemList + │ ║ ║ │ ProjectionElem "drug" + │ ║ ║ │ ProjectionElem "avgEffect" + │ ║ ║ └── Extension + │ ║ ║ ╠══ Extension + │ ║ ║ ║ ├── Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=_anon_having_5054e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.4"^^) + │ ║ ║ ║ │ ╚══ Group (drug) + │ ║ ║ ║ │ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ║ ║ │ ╠══ Compare (>) + │ ║ ║ ║ │ ║ Var (name=optRate) (bindingState=bound) + │ ║ ║ ║ │ ║ ValueConstant (value="0.2"^^) + │ ║ ║ ║ │ ╚══ LeftJoin + │ ║ ║ ║ │ ├── Join (resultSizeEstimate=3.1K) [left] + │ ║ ║ ║ │ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ ├── Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ╠══ Join (resultSizeEstimate=2.9K) [left] + │ ║ ║ ║ │ │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ ║ ║ │ │ ║ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=3.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[arm, trial], sharedJoinVars=[trial]) [right] + │ ║ ║ ║ │ │ ║ │ ║ s: Var (name=trial) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ │ │ ║ │ ║ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ ║ ║ │ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, trial], sharedJoinVars=[arm]) [right] + │ ║ ║ ║ │ │ ║ │ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ ║ ║ ║ │ │ ║ │ o: Var (name=drug) (bindingState=unbound) + │ ║ ║ ║ │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, drug, trial], sharedJoinVars=[arm]) [right] + │ ║ ║ ║ │ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ ║ ║ │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ ║ ║ │ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ ║ ║ │ │ ╚══ StatementPattern (resultSizeEstimate=3.1K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[arm, drug, result, trial], sharedJoinVars=[result]) [right] + │ ║ ║ ║ │ │ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ ║ ║ ║ │ │ o: Var (name=effect) (bindingState=unbound) + │ ║ ║ ║ │ └── Extension [right] + │ ║ ║ ║ │ ╠══ StatementPattern (resultSizeEstimate=2.9K) + │ ║ ║ ║ │ ║ s: Var (name=result) (bindingState=bound) + │ ║ ║ ║ │ ║ p: Var (name=_const_d84fe169_uri, value=http://example.com/theme/pharma/responseRate, anonymous) + │ ║ ║ ║ │ ║ o: Var (name=rate) (bindingState=unbound) + │ ║ ║ ║ │ ╚══ ExtensionElem (optRate) + │ ║ ║ ║ │ Var (name=rate) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (_anon_having_5054e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ │ GroupElem (avgEffect) + │ ║ ║ ║ │ Avg + │ ║ ║ ║ │ Var (name=effect) (bindingState=bound) + │ ║ ║ ║ └── ExtensionElem (_anon_having_5054e226babdcc344c88a5a61806b6a8e7f301234) + │ ║ ║ ║ Avg + │ ║ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ║ ╚══ ExtensionElem (avgEffect) + │ ║ ║ Avg + │ ║ ║ Var (name=effect) (bindingState=unbound) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=9.9K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ │ o: Var (name=disease) (bindingState=unbound) + │ ║ └── ExtensionElem (optDisease) + │ ║ Var (name=disease) (bindingState=bound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=drug) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=drug) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { -{ -SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { -?trial ?arm . -?trial a . -?arm ?drug . -?arm ?result . -?result ?effect . -OPTIONAL { -?result ?rate . -BIND(?rate AS ?optRate) -} -FILTER (?optRate > 0.2) -} -GROUP BY ?drug -HAVING (AVG(?effect) > 0.4) -} -OPTIONAL { -?drug ?disease . -BIND(?disease AS ?optDisease) -} -FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial ?arm . + ?trial a . + ?arm ?drug . + ?arm ?result . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) } Theme: PHARMA z_queryIndex: 10 === Explanation Telemetry === -Initial explain execution time: 479 ms -Warmup execution 1/4 -Warmup execution 2/4 -Warmup execution 3/4 -Warmup execution 4/4 -Fastest execution time: 294 ms +Initial explain execution time: 4296 ms -Projection (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=11.6K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=228) +Projection (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=4288.1M, nextCallCountActual=51, nextTimeNanosActual=17.2K, firstRowTimeNanosActual=4288.0M, openCountActual=1, lastRowTimeNanosActual=4288.1M, closeCountActual=1, varsDroppedActual=1, metricOrigin.varsDroppedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=82.5M, avgNextNanosActual=338) ╠══ ProjectionElemList (hasNextFalseCountActual=0) ║ ProjectionElem "pathway" (hasNextFalseCountActual=0) ║ ProjectionElem "drugCount" (hasNextFalseCountActual=0) -╚══ Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=7.0K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=139) -├── Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.6M, nextCallCountActual=51, nextTimeNanosActual=3.9K, firstRowTimeNanosActual=470.5M, openCountActual=1, lastRowTimeNanosActual=470.6M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.1M, avgNextNanosActual=78) -│ ╠══ Filter (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=470.5M, nextCallCountActual=51, nextTimeNanosActual=1.0K, sourceRowsScannedActual=105, sourceRowsMatchedActual=51, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=470.5M, exprEvalCountActual=105, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=51, lastRowTimeNanosActual=470.6M, closeCountActual=1, exprEvalTimeNanosActual=33.3K, inputRowsActual=105, rowsDroppedActual=54, selectivityActual=0.49, expansionFactorActual=0.49, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=9.0M, avgNextNanosActual=20, filterRejectRateActual=0.51) -│ ║ ├── Compare (>) (exprEvalCountActual=105, exprFalseCountActual=54, exprTrueCountActual=51, exprEvalTimeNanosActual=24.5K, hasNextFalseCountActual=0) -│ ║ │ Var (name=_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=5.5K, hasNextFalseCountActual=0) -│ ║ └── Group (pathway) (resultSizeActual=105, hasNextCallCountActual=106, hasNextTrueCountActual=105, hasNextTimeNanosActual=470.5M, nextCallCountActual=105, nextTimeNanosActual=2.7K, aggregateEvalCountActual=412, firstRowTimeNanosActual=470.5M, groupsCreatedActual=105, openCountActual=1, lastRowTimeNanosActual=470.6M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.96, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=206, rowsDroppedActual=101, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=4.4M, avgNextNanosActual=26) -│ ║ Filter (resultSizeActual=206, sourceRowsFilteredActual=0, plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern, inputRowsActual=22.6K, rowsDroppedActual=22.4K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) -│ ║ ├── And (hasNextFalseCountActual=0) -│ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22.6K, exprFalseCountActual=6, exprTrueCountActual=11.3K, exprErrorCountActual=11.2K, exprEvalTimeNanosActual=4.7M, hasNextFalseCountActual=0) -│ ║ │ ║ Var (name=optTrial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=166, hasNextFalseCountActual=0) -│ ║ │ ╚══ Exists (exprEvalCountActual=22.6K, exprFalseCountActual=11.1K, exprTrueCountActual=11.4K, exprEvalTimeNanosActual=404.5M, inputRowsActual=0, hasNextFalseCountActual=0) -│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=0, joinRightIteratorsCreatedActual=191.5K, joinRightBindingsConsumedActual=11.4K, inputRowsActual=203.0K, rowsDroppedActual=203.0K, expansionFactorActual=0, sampleCountActual=2, varianceActual=974, stddevActual=31, confidenceScoreActual=0.06, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=11.4K) -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=191.5K, joinRightIteratorsCreatedActual=191.5K, joinLeftBindingsConsumedActual=191.5K, joinRightBindingsConsumedActual=191.5K, inputRowsActual=383.1K, rowsDroppedActual=191.5K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=191.5K, rightRowsScannedActual=191.5K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ │ ║ ├── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=191.5K, hasNextCallCountActual=202.7K, hasNextTrueCountActual=191.5K, hasNextTimeNanosActual=23.1M, nextCallCountActual=191.5K, nextTimeNanosActual=9.8M, sourceRowsScannedActual=202.7K, sourceRowsMatchedActual=191.5K, sourceRowsFilteredActual=11.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O], firstRowTimeNanosActual=542, indexLookupCountActual=22.6K, openCountActual=22.6K, lastRowTimeNanosActual=2.2K, closeCountActual=22.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.1K, nextPerHasNextRatioActual=0.94, avgHasNextNanosActual=114, avgNextNanosActual=51, indexHitRateActual=0.94) [left] -│ ║ │ ║ │ s: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ │ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ║ └── StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=191.5K, hasNextCallCountActual=371.7K, hasNextTrueCountActual=191.5K, hasNextTimeNanosActual=91.6M, nextCallCountActual=191.5K, nextTimeNanosActual=9.9M, sourceRowsScannedActual=371.7K, sourceRowsMatchedActual=191.5K, sourceRowsFilteredActual=180.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O], firstRowTimeNanosActual=542, indexLookupCountActual=191.5K, openCountActual=191.5K, lastRowTimeNanosActual=1.7K, closeCountActual=191.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=180.1K, nextPerHasNextRatioActual=0.52, avgHasNextNanosActual=247, avgNextNanosActual=52, indexHitRateActual=0.52) [right] -│ ║ │ ║ s: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) -│ ║ │ ║ o: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ ╚══ StatementPattern [index: ospc] (resultSizeEstimate=2.9K, resultSizeActual=11.4K, hasNextCallCountActual=191.5K, hasNextTrueCountActual=11.4K, hasNextTimeNanosActual=62.6M, nextCallCountActual=11.4K, nextTimeNanosActual=611.2K, sourceRowsScannedActual=191.5K, sourceRowsMatchedActual=11.4K, sourceRowsFilteredActual=180.1K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O], firstRowTimeNanosActual=500, indexLookupCountActual=191.5K, openCountActual=191.5K, lastRowTimeNanosActual=1000, closeCountActual=191.5K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=180.1K, nextPerHasNextRatioActual=0.06, avgHasNextNanosActual=327, avgNextNanosActual=53, indexHitRateActual=0.06) [right] -│ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22.6K, hasNextCallCountActual=22.6K, hasNextTrueCountActual=22.6K, hasNextTimeNanosActual=54.9M, nextCallCountActual=22.6K, nextTimeNanosActual=229.1K, joinRightIteratorsCreatedActual=19.8K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=11.3K, firstRowTimeNanosActual=20.9K, leftRowsWithMatchActual=8.6K, openCountActual=1, emptyRightProbeCountActual=11.2K, lastRowTimeNanosActual=470.4M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=31.2K, rowsDroppedActual=8.6K, expansionFactorActual=0.72, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=2.4K, avgNextNanosActual=10, leftRowsProbedActual=19.8K, rightRowsScannedActual=11.3K, avgRightRowsPerLeftActual=0.57, joinMatchRateActual=0.43, joinOutputPerLeftActual=1.14, leftJoinNullExtendedRowsActual=11.2K) -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=19.8K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=19.8K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=29.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=98.9M, stddevActual=9.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=19.8K, rightRowsScannedActual=19.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=9.9K, joinRightBindingsConsumedActual=9.9K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=19.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=48, stddevActual=6.96, confidenceScoreActual=0.20, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.9K) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=5.0K, joinLeftBindingsConsumedActual=5.0K, joinRightBindingsConsumedActual=9.9K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=14.9K, rowsDroppedActual=5.0K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=0.26, stddevActual=0.51, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=5.0K, rightRowsScannedActual=9.9K, avgRightRowsPerLeftActual=1.99, joinOutputPerLeftActual=1.99) [left] -│ ║ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=1.00, resultSizeEstimate=5.0K, resultSizeActual=5.0K, hasNextCallCountActual=5.0K, hasNextTrueCountActual=5.0K, hasNextTimeNanosActual=697.7K, nextCallCountActual=5.0K, nextTimeNanosActual=254.0K, sourceRowsScannedActual=5.0K, sourceRowsMatchedActual=5.0K, sourceRowsFilteredActual=1, plannedIndexName=ospc, firstRowTimeNanosActual=7.9K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=470.4M, optimizer.candidateCount=9, closeCountActual=1, varsAddedActual=3, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=139, avgNextNanosActual=51, indexHitRateActual=1.00) [left] -│ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ └── StatementPattern [index: spoc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=9.9K, hasNextCallCountActual=14.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=3.3M, nextCallCountActual=9.9K, nextTimeNanosActual=544.6K, sourceRowsScannedActual=14.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=5.0K, plannedIndexName=spoc, firstRowTimeNanosActual=458, indexLookupCountActual=5.0K, openCountActual=5.0K, lastRowTimeNanosActual=12.6K, closeCountActual=5.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=5.0K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=226, avgNextNanosActual=55, indexHitRateActual=0.67) [right] -│ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=2.0K, resultSizeEstimate=666, resultSizeActual=9.9K, hasNextCallCountActual=19.8K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=5.5M, nextCallCountActual=9.9K, nextTimeNanosActual=527.3K, sourceRowsScannedActual=19.8K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=9.9K, plannedIndexName=spoc, firstRowTimeNanosActual=792, indexLookupCountActual=9.9K, openCountActual=9.9K, lastRowTimeNanosActual=11.6K, closeCountActual=9.9K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=281, avgNextNanosActual=53, indexHitRateActual=0.50) [right] -│ ║ ║ │ s: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) -│ ║ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=19.8K, hasNextCallCountActual=29.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=2.8M, nextCallCountActual=19.8K, nextTimeNanosActual=244.4K, firstRowTimeNanosActual=125, openCountActual=9.9K, bindingsProvidedActual=19.8K, lastRowTimeNanosActual=10.2K, closeCountActual=9.9K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=96, avgNextNanosActual=12) [right] -│ ║ ╚══ Extension (resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=14.0M, nextCallCountActual=11.3K, nextTimeNanosActual=1.6M, firstRowTimeNanosActual=667, openCountActual=19.8K, lastRowTimeNanosActual=667, closeCountActual=19.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=383, avgNextNanosActual=148) [right] -│ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=3.4K, resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=9.0M, nextCallCountActual=11.3K, nextTimeNanosActual=680.9K, sourceRowsScannedActual=31.2K, sourceRowsMatchedActual=11.3K, sourceRowsFilteredActual=19.8K, plannedIndexName=spoc, firstRowTimeNanosActual=583, indexLookupCountActual=19.8K, openCountActual=19.8K, lastRowTimeNanosActual=375, closeCountActual=19.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=247, avgNextNanosActual=60, indexHitRateActual=0.36) -│ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) (hasNextFalseCountActual=0) -│ ║ │ o: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) -│ ║ └── ExtensionElem (optTrial) (hasNextFalseCountActual=0) -│ ║ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) -│ ║ Count (Distinct) (hasNextFalseCountActual=0) -│ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) -│ ╚══ ExtensionElem (_anon_having_50543f2fe36952f541b08a42a7b8ce15e70d01234) (hasNextFalseCountActual=0) -│ Count (Distinct) (hasNextFalseCountActual=0) -│ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) -└── ExtensionElem (drugCount) (hasNextFalseCountActual=0) -Count (Distinct) (hasNextFalseCountActual=0) -Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) +╚══ Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=4288.1M, nextCallCountActual=51, nextTimeNanosActual=8.1K, firstRowTimeNanosActual=4288.0M, openCountActual=1, lastRowTimeNanosActual=4288.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=82.5M, avgNextNanosActual=159) + ├── Extension (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=4288.1M, nextCallCountActual=51, nextTimeNanosActual=3.8K, firstRowTimeNanosActual=4288.0M, openCountActual=1, lastRowTimeNanosActual=4288.1M, closeCountActual=1, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=82.5M, avgNextNanosActual=76) + │ ╠══ Filter (resultSizeActual=51, hasNextCallCountActual=52, hasNextTrueCountActual=51, hasNextTimeNanosActual=4288.0M, nextCallCountActual=51, nextTimeNanosActual=793, sourceRowsScannedActual=105, sourceRowsMatchedActual=51, sourceRowsFilteredActual=54, plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality, firstRowTimeNanosActual=4288.0M, exprEvalCountActual=105, exprFalseCountActual=54, openCountActual=1, exprTrueCountActual=51, lastRowTimeNanosActual=4288.1M, closeCountActual=1, exprEvalTimeNanosActual=61.3K, inputRowsActual=105, rowsDroppedActual=54, selectivityActual=0.49, expansionFactorActual=0.49, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.98, avgHasNextNanosActual=82.5M, avgNextNanosActual=16, filterRejectRateActual=0.51) + │ ║ ├── Compare (>) (exprEvalCountActual=105, exprFalseCountActual=54, exprTrueCountActual=51, exprEvalTimeNanosActual=51.4K, hasNextFalseCountActual=0) + │ ║ │ Var (name=_anon_having_5154e226babdcc344c88a5a61806b6a8e7f301234, anonymous) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ValueConstant (value="1"^^) (exprEvalCountActual=1, exprTrueCountActual=1, exprEvalTimeNanosActual=1.5K, hasNextFalseCountActual=0) + │ ║ └── Group (pathway) (resultSizeActual=105, hasNextCallCountActual=106, hasNextTrueCountActual=105, hasNextTimeNanosActual=4287.9M, nextCallCountActual=105, nextTimeNanosActual=3.4K, aggregateEvalCountActual=412, firstRowTimeNanosActual=4287.9M, groupsCreatedActual=105, openCountActual=1, lastRowTimeNanosActual=4288.1M, maxGroupSizeActual=8, closeCountActual=1, varsAddedActual=2, varsDroppedActual=10, avgGroupSizeActual=1.96, metricOrigin.varsAddedActual=derived, metricOrigin.varsDroppedActual=derived, inputRowsActual=206, rowsDroppedActual=101, selectivityActual=0.51, expansionFactorActual=0.51, hasNextFalseCountActual=1, nextPerHasNextRatioActual=0.99, avgHasNextNanosActual=40.5M, avgNextNanosActual=33) + │ ║ Filter (resultSizeActual=206, sourceRowsFilteredActual=0, plannedFilterEvidenceCount=135.7K, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_pattern, inputRowsActual=22.6K, rowsDroppedActual=22.4K, selectivityActual=0.01, expansionFactorActual=0.01, hasNextFalseCountActual=0) + │ ║ ├── And (hasNextFalseCountActual=0) + │ ║ │ ╠══ Compare (!=) (exprEvalCountActual=22.6K, exprFalseCountActual=6, exprTrueCountActual=11.3K, exprErrorCountActual=11.2K, exprEvalTimeNanosActual=9.2M, hasNextFalseCountActual=0) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) (exprEvalCountActual=1, exprEvalTimeNanosActual=208, hasNextFalseCountActual=0) + │ ║ │ ╚══ Exists (exprEvalCountActual=22.6K, exprFalseCountActual=11.1K, exprTrueCountActual=11.4K, exprEvalTimeNanosActual=4199.6M, inputRowsActual=0, hasNextFalseCountActual=0) + │ ║ │ Join (JoinIterator) (resultSizeEstimate=22, resultSizeActual=0, joinRightIteratorsCreatedActual=2.3M, joinRightBindingsConsumedActual=11.4K, inputRowsActual=2.3M, rowsDroppedActual=2.3M, expansionFactorActual=0, sampleCountActual=2, varianceActual=159.5K, stddevActual=399, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=11.4K) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K, resultSizeActual=2.3M, joinRightIteratorsCreatedActual=2.3M, joinLeftBindingsConsumedActual=2.3M, joinRightBindingsConsumedActual=2.3M, inputRowsActual=4.6M, rowsDroppedActual=2.3M, expansionFactorActual=0.50, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=2.3M, rightRowsScannedActual=2.3M, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ │ ║ ├── StatementPattern [index: psoc] (resultSizeEstimate=2.9K, resultSizeActual=2.3M, hasNextCallCountActual=2.3M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=141.9M, nextCallCountActual=2.3M, nextTimeNanosActual=116.4M, sourceRowsScannedActual=2.3M, sourceRowsMatchedActual=2.3M, sourceRowsFilteredActual=11.1K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, firstRowTimeNanosActual=708, indexLookupCountActual=22.6K, openCountActual=22.6K, lastRowTimeNanosActual=382.6K, closeCountActual=22.6K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=11.1K, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=61, avgNextNanosActual=50, indexHitRateActual=1.00) [left] + │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ║ └── StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=2.3M, hasNextCallCountActual=4.6M, hasNextTrueCountActual=2.3M, hasNextTimeNanosActual=926.8M, nextCallCountActual=2.3M, nextTimeNanosActual=106.7M, sourceRowsScannedActual=4.6M, sourceRowsMatchedActual=2.3M, sourceRowsFilteredActual=2.3M, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, target, trial], sharedJoinVars=[arm], firstRowTimeNanosActual=458, indexLookupCountActual=2.3M, openCountActual=2.3M, lastRowTimeNanosActual=1.4K, closeCountActual=2.3M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.3M, nextPerHasNextRatioActual=0.50, avgHasNextNanosActual=201, avgNextNanosActual=46, indexHitRateActual=0.50) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) (hasNextFalseCountActual=0) + │ ║ │ ║ o: Var (name=result) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ │ ╚══ StatementPattern [index: spoc] (resultSizeEstimate=2.9K, resultSizeActual=11.4K, hasNextCallCountActual=2.3M, hasNextTrueCountActual=11.4K, hasNextTimeNanosActual=796.9M, nextCallCountActual=11.4K, nextTimeNanosActual=419.7K, sourceRowsScannedActual=2.3M, sourceRowsMatchedActual=11.4K, sourceRowsFilteredActual=2.3M, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=22, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target, trial], sharedJoinVars=[marker, result], firstRowTimeNanosActual=500, indexLookupCountActual=2.3M, openCountActual=2.3M, lastRowTimeNanosActual=959, closeCountActual=2.3M, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=2.3M, nextPerHasNextRatioActual=0.00, avgHasNextNanosActual=344, avgNextNanosActual=37, indexHitRateActual=0.00) [right] + │ ║ │ s: Var (name=result) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=marker) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ └── LeftJoin (LeftJoinIterator) (resultSizeActual=22.6K, hasNextCallCountActual=22.6K, hasNextTrueCountActual=22.6K, hasNextTimeNanosActual=70.4M, nextCallCountActual=22.6K, nextTimeNanosActual=314.5K, joinRightIteratorsCreatedActual=19.8K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=11.3K, firstRowTimeNanosActual=54.3K, leftRowsWithMatchActual=8.6K, openCountActual=1, emptyRightProbeCountActual=11.2K, lastRowTimeNanosActual=4287.6M, closeCountActual=1, maxRightRowsPerLeftActual=4, inputRowsActual=31.2K, rowsDroppedActual=8.6K, expansionFactorActual=0.72, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=3.1K, avgNextNanosActual=14, leftRowsProbedActual=19.8K, rightRowsScannedActual=11.3K, avgRightRowsPerLeftActual=0.57, joinMatchRateActual=0.43, joinOutputPerLeftActual=1.14, leftJoinNullExtendedRowsActual=11.2K) + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=19.8K, joinRightIteratorsCreatedActual=9.9K, joinLeftBindingsConsumedActual=19.8K, joinRightBindingsConsumedActual=19.8K, optimizer.candidateCount=9, optimizer.score=39223.5M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6680.0 rawRows=666.0 effectiveRows=666.0 baseCostRows=668.0 factorWorkRows=668.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=202880.0 rawRows=20000.0 effectiveRows=20000.0 baseCostRows=20288.0 factorWorkRows=20288.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=150740.0 rawRows=5006.0 effectiveRows=5006.0 baseCostRows=15074.0 factorWorkRows=15074.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=12324.705882352942 rawRows=20286.0 effectiveRows=20286.0 baseCostRows=20952.0 factorWorkRows=20952.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15738.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=20798.823529411766 rawRows=10033.0 effectiveRows=10033.0 baseCostRows=35358.0 factorWorkRows=35358.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug targets ?target) score=7835294.117647059 rawRows=1.332E7 effectiveRows=1.332E7 baseCostRows=1.332E7 factorWorkRows=20000.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15072.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug type Drug) score=3.922348235294118E10 rawRows=6.667992E10 effectiveRows=6.667992E10 baseCostRows=6.667992E10 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drug type Drug), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.chosenOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.scoreComponents=rawRows=6.667992E10, effectiveRows=6.667992E10, baseCostRows=6.667992E10, factorWorkRows=1.0, adjustedCost=3.922348235294118E10, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=3, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, inputRowsActual=29.8K, rowsDroppedActual=9.9K, expansionFactorActual=0.67, sampleCountActual=2, varianceActual=98.9M, stddevActual=9.9K, confidenceScoreActual=0.00, hasNextFalseCountActual=0, leftRowsProbedActual=19.8K, rightRowsScannedActual=19.8K, avgRightRowsPerLeftActual=1.00, joinOutputPerLeftActual=1.00) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K, resultSizeActual=9.9K, joinRightIteratorsCreatedActual=20.0K, joinRightBindingsConsumedActual=9.9K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)], inputRowsActual=29.9K, rowsDroppedActual=20.0K, expansionFactorActual=0.33, sampleCountActual=2, varianceActual=0.24, stddevActual=0.49, confidenceScoreActual=0.57, hasNextFalseCountActual=0, leftRowsProbedActual=0, rightRowsScannedActual=9.9K) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20.3K, resultSizeActual=20.0K, joinRightIteratorsCreatedActual=666, joinLeftBindingsConsumedActual=666, joinRightBindingsConsumedActual=20.0K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)], inputRowsActual=20.6K, rowsDroppedActual=666, expansionFactorActual=0.97, sampleCountActual=2, varianceActual=0, stddevActual=0, confidenceScoreActual=0.67, hasNextFalseCountActual=0, leftRowsProbedActual=666, rightRowsScannedActual=20.0K, avgRightRowsPerLeftActual=30, joinOutputPerLeftActual=30) [left] + │ ║ ║ │ ║ ├── StatementPattern [index: psoc] (costEstimate=2.0K, resultSizeEstimate=666, resultSizeActual=666, hasNextCallCountActual=667, hasNextTrueCountActual=666, hasNextTimeNanosActual=165.3K, nextCallCountActual=666, nextTimeNanosActual=47.6K, sourceRowsScannedActual=667, sourceRowsMatchedActual=666, sourceRowsFilteredActual=1, plannedIndexName=psoc, firstRowTimeNanosActual=14.3K, indexLookupCountActual=1, openCountActual=1, lastRowTimeNanosActual=4287.6M, closeCountActual=1, varsAddedActual=3, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)], metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=1, nextPerHasNextRatioActual=1.00, avgHasNextNanosActual=248, avgNextNanosActual=72, indexHitRateActual=1.00) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ └── StatementPattern [index: ospc] (costEstimate=71, resultSizeEstimate=20.0K, resultSizeActual=20.0K, hasNextCallCountActual=20.6K, hasNextTrueCountActual=20.0K, hasNextTimeNanosActual=3.0M, nextCallCountActual=20.0K, nextTimeNanosActual=969.0K, sourceRowsScannedActual=20.6K, sourceRowsMatchedActual=20.0K, sourceRowsFilteredActual=666, plannedIndexName=ospc, firstRowTimeNanosActual=792, indexLookupCountActual=666, openCountActual=666, lastRowTimeNanosActual=5.9M, closeCountActual=666, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=666, nextPerHasNextRatioActual=0.97, avgHasNextNanosActual=147, avgNextNanosActual=48, indexHitRateActual=0.97) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ ╚══ StatementPattern [index: spoc] (costEstimate=1.00, resultSizeEstimate=5.0K, resultSizeActual=9.9K, hasNextCallCountActual=29.9K, hasNextTrueCountActual=9.9K, hasNextTimeNanosActual=19.0M, nextCallCountActual=9.9K, nextTimeNanosActual=482.0K, sourceRowsScannedActual=29.9K, sourceRowsMatchedActual=9.9K, sourceRowsFilteredActual=20.0K, plannedIndexName=spoc, firstRowTimeNanosActual=1.1K, indexLookupCountActual=20.0K, openCountActual=20.0K, lastRowTimeNanosActual=729.0K, closeCountActual=20.0K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=20.0K, nextPerHasNextRatioActual=0.33, avgHasNextNanosActual=635, avgNextNanosActual=48, indexHitRateActual=0.33) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) (hasNextFalseCountActual=0) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00, resultSizeActual=19.8K, hasNextCallCountActual=29.8K, hasNextTrueCountActual=19.8K, hasNextTimeNanosActual=2.5M, nextCallCountActual=19.8K, nextTimeNanosActual=303.7K, firstRowTimeNanosActual=167, openCountActual=9.9K, bindingsProvidedActual=19.8K, lastRowTimeNanosActual=727.2K, optimizer.candidateCount=9, closeCountActual=9.9K, varsAddedActual=1, optimizer.score=39223.5M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6680.0 rawRows=666.0 effectiveRows=666.0 baseCostRows=668.0 factorWorkRows=668.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=202880.0 rawRows=20000.0 effectiveRows=20000.0 baseCostRows=20288.0 factorWorkRows=20288.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=150740.0 rawRows=5006.0 effectiveRows=5006.0 baseCostRows=15074.0 factorWorkRows=15074.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=12324.705882352942 rawRows=20286.0 effectiveRows=20286.0 baseCostRows=20952.0 factorWorkRows=20952.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15738.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=20798.823529411766 rawRows=10033.0 effectiveRows=10033.0 baseCostRows=35358.0 factorWorkRows=35358.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug targets ?target) score=7835294.117647059 rawRows=1.332E7 effectiveRows=1.332E7 baseCostRows=1.332E7 factorWorkRows=20000.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15072.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug type Drug) score=3.922348235294118E10 rawRows=6.667992E10 effectiveRows=6.667992E10 baseCostRows=6.667992E10 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drug type Drug), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=6.667992E10, effectiveRows=6.667992E10, baseCostRows=6.667992E10, factorWorkRows=1.0, adjustedCost=3.922348235294118E10, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=3, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=9.9K, nextPerHasNextRatioActual=0.67, avgHasNextNanosActual=86, avgNextNanosActual=15) [right] + │ ║ ╚══ Extension (resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=14.4M, nextCallCountActual=11.3K, nextTimeNanosActual=1.5M, firstRowTimeNanosActual=542, openCountActual=19.8K, lastRowTimeNanosActual=667, closeCountActual=19.8K, varsAddedActual=1, metricOrigin.varsAddedActual=derived, sampleCountActual=1, varianceActual=0, stddevActual=0, confidenceScoreActual=0.50, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=394, avgNextNanosActual=135) [right] + │ ║ ├── StatementPattern [index: spoc] (resultSizeEstimate=3.4K, resultSizeActual=11.3K, hasNextCallCountActual=36.7K, hasNextTrueCountActual=16.8K, hasNextTimeNanosActual=9.4M, nextCallCountActual=11.3K, nextTimeNanosActual=643.5K, sourceRowsScannedActual=31.2K, sourceRowsMatchedActual=11.3K, sourceRowsFilteredActual=19.8K, plannedIndexName=spoc, firstRowTimeNanosActual=500, indexLookupCountActual=19.8K, openCountActual=19.8K, lastRowTimeNanosActual=459, closeCountActual=19.8K, varsAddedActual=3, metricOrigin.varsAddedActual=derived, hasNextFalseCountActual=19.8K, nextPerHasNextRatioActual=0.31, avgHasNextNanosActual=257, avgNextNanosActual=57, indexHitRateActual=0.36) + │ ║ │ s: Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) (hasNextFalseCountActual=0) + │ ║ │ o: Var (name=trial) (bindingState=unbound, hasNextFalseCountActual=0) + │ ║ └── ExtensionElem (optTrial) (hasNextFalseCountActual=0) + │ ║ Var (name=trial) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (_anon_having_5154e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ║ GroupElem (drugCount) (hasNextFalseCountActual=0) + │ ║ Count (Distinct) (hasNextFalseCountActual=0) + │ ║ Var (name=drug) (bindingState=bound, hasNextFalseCountActual=0) + │ ╚══ ExtensionElem (_anon_having_5154e226babdcc344c88a5a61806b6a8e7f301234) (hasNextFalseCountActual=0) + │ Count (Distinct) (hasNextFalseCountActual=0) + │ Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) + └── ExtensionElem (drugCount) (hasNextFalseCountActual=0) + Count (Distinct) (hasNextFalseCountActual=0) + Var (name=drug) (bindingState=unbound, hasNextFalseCountActual=0) === Explanation Optimized === @@ -12014,81 +12392,81 @@ Projection ║ ProjectionElem "pathway" ║ ProjectionElem "drugCount" ╚══ Extension -├── Extension -│ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) -│ ║ ├── Compare (>) -│ ║ │ Var (name=_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012, anonymous) (bindingState=bound) -│ ║ │ ValueConstant (value="1"^^) -│ ║ └── Group (pathway) -│ ║ Filter (plannedFilterPassRatio=0.05, filterSelectivitySource=learned_pattern) -│ ║ ├── And -│ ║ │ ╠══ Compare (!=) -│ ║ │ ║ Var (name=optTrial) (bindingState=bound) -│ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) -│ ║ │ ╚══ Exists -│ ║ │ Join (JoinIterator) (resultSizeEstimate=2.9K) -│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] -│ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED, plannedLookupComponents=[O]) [left] -│ ║ │ ║ │ s: Var (name=result) (bindingState=unbound) -│ ║ │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) -│ ║ │ ║ │ o: Var (name=marker) (bindingState=bound) -│ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] -│ ║ │ ║ s: Var (name=arm) (bindingState=unbound) -│ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) -│ ║ │ ║ o: Var (name=result) (bindingState=bound) -│ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=1.00, plannedIndexName=ospc, plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target], plannedLookupComponents=[O]) [right] -│ ║ │ s: Var (name=trial) (bindingState=bound) -│ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) -│ ║ │ o: Var (name=arm) (bindingState=bound) -│ ║ └── LeftJoin -│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, joinType=Cartesian product, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=10.1K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ ├── StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K, optimizer.candidateCount=9, optimizer.score=10.1K, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6660.0 rawRows=666.0 effectiveRows=666.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=200000.0 rawRows=20000.0 effectiveRows=20000.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=50060.0 rawRows=5006.0 effectiveRows=5006.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=11932.94117647059 rawRows=20286.0 effectiveRows=20286.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=101430.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?target inPathway ?pathway) score=5966.470588235295 rawRows=10143.0 effectiveRows=10143.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=chosen reason=chosen; expand candidate left=Join right=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) score=10143.0 rawRows=10143.0 effectiveRows=10143.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[SP(?drug type Drug), SP(?drug targets ?target), SP(?target inPathway ?pathway), BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]])], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=10143.0, effectiveRows=10143.0, adjustedCost=10143.0, sharedVars=0, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=0, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] -│ ║ ║ │ ║ │ s: Var (name=drug) (bindingState=unbound) -│ ║ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) -│ ║ ║ │ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) -│ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] -│ ║ ║ │ ║ s: Var (name=drug) (bindingState=bound) -│ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) -│ ║ ║ │ ║ o: Var (name=target) (bindingState=unbound) -│ ║ ║ │ ╚══ StatementPattern (costEstimate=2.0K, resultSizeEstimate=666) [right] -│ ║ ║ │ s: Var (name=target) (bindingState=bound) -│ ║ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) -│ ║ ║ │ o: Var (name=pathway) (bindingState=unbound) -│ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] -│ ║ ╚══ Extension [right] -│ ║ ├── StatementPattern (resultSizeEstimate=3.4K) -│ ║ │ s: Var (name=drug) (bindingState=bound) -│ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) -│ ║ │ o: Var (name=trial) (bindingState=unbound) -│ ║ └── ExtensionElem (optTrial) -│ ║ Var (name=trial) (bindingState=bound) -│ ║ GroupElem (_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012) -│ ║ Count (Distinct) -│ ║ Var (name=drug) (bindingState=bound) -│ ║ GroupElem (drugCount) -│ ║ Count (Distinct) -│ ║ Var (name=drug) (bindingState=bound) -│ ╚══ ExtensionElem (_anon_having_31543f2fe36952f541b08a42a7b8ce15e70d012) -│ Count (Distinct) -│ Var (name=drug) (bindingState=unbound) -└── ExtensionElem (drugCount) -Count (Distinct) -Var (name=drug) (bindingState=unbound) + ├── Extension + │ ╠══ Filter (plannedFilterPassRatio=1.00, filterSelectivitySource=cardinality) + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_3254e226babdcc344c88a5a61806b6a8e7f3012, anonymous) (bindingState=bound) + │ ║ │ ValueConstant (value="1"^^) + │ ║ └── Group (pathway) + │ ║ Filter (plannedFilterEvidenceCount=158.4K, plannedFilterPassRatio=0.01, filterSelectivitySource=learned_pattern) + │ ║ ├── And + │ ║ │ ╠══ Compare (!=) + │ ║ │ ║ Var (name=optTrial) (bindingState=bound) + │ ║ │ ║ ValueConstant (value=http://example.com/theme/pharma/trial/0) + │ ║ │ ╚══ Exists + │ ║ │ Join (JoinIterator) (resultSizeEstimate=22) + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=2.9K) [left] + │ ║ │ ║ ├── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=2.9K, plannedIndexPrefixLength=1.00, plannedWorkRows=2.9K, plannedIndexName=psoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, drug, marker, pathway, target], plannerId=lmdb-sketch, plannerAlgorithm=DYNAMIC_PROGRAMMING, plannerPath=ROBUST_USED) [left] + │ ║ │ ║ │ s: Var (name=trial) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ ║ │ ║ │ o: Var (name=arm) (bindingState=unbound) + │ ║ │ ║ └── StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=1.00, plannedIndexPrefixLength=2.00, plannedWorkRows=1.00, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, S], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, target, trial], sharedJoinVars=[arm]) [right] + │ ║ │ ║ s: Var (name=arm) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ ║ │ ║ o: Var (name=result) (bindingState=unbound) + │ ║ │ ╚══ StatementPattern (resultSizeEstimate=2.9K, plannedAccessRows=0, plannedIndexPrefixLength=3.00, plannedWorkRows=22, plannedIndexName=spoc, plannedIndexAccessMode=directLookup, plannedLookupComponents=[P, O, S], plannedBoundVars=[_const_1a978c1d_uri, _const_7f67635a_uri, _const_f5e5585a_uri, _const_f6bbe068_uri, arm, drug, marker, pathway, result, target, trial], sharedJoinVars=[marker, result]) [right] + │ ║ │ s: Var (name=result) (bindingState=bound) + │ ║ │ p: Var (name=_const_80a6979a_uri, value=http://example.com/theme/pharma/biomarker, anonymous) + │ ║ │ o: Var (name=marker) (bindingState=bound) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=10.0K, optimizer.candidateCount=9, optimizer.score=39223.5M, joinType=Cartesian product, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)], optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6680.0 rawRows=666.0 effectiveRows=666.0 baseCostRows=668.0 factorWorkRows=668.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=202880.0 rawRows=20000.0 effectiveRows=20000.0 baseCostRows=20288.0 factorWorkRows=20288.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=150740.0 rawRows=5006.0 effectiveRows=5006.0 baseCostRows=15074.0 factorWorkRows=15074.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=12324.705882352942 rawRows=20286.0 effectiveRows=20286.0 baseCostRows=20952.0 factorWorkRows=20952.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15738.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=20798.823529411766 rawRows=10033.0 effectiveRows=10033.0 baseCostRows=35358.0 factorWorkRows=35358.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug targets ?target) score=7835294.117647059 rawRows=1.332E7 effectiveRows=1.332E7 baseCostRows=1.332E7 factorWorkRows=20000.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15072.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug type Drug) score=3.922348235294118E10 rawRows=6.667992E10 effectiveRows=6.667992E10 baseCostRows=6.667992E10 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drug type Drug), optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.initiallyBoundVars=[], optimizer.rejectionReason=higher adjusted cost, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.chosenOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.scoreComponents=rawRows=6.667992E10, effectiveRows=6.667992E10, baseCostRows=6.667992E10, factorWorkRows=1.0, adjustedCost=3.922348235294118E10, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=3, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=10.0K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)]) [left] + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=20.3K, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)]) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=2.0K, resultSizeEstimate=666, optimizer.plannerId=lmdb-sketch, optimizer.plannerPath=UNSUPPORTED_SHAPE, optimizer.plannerDiagnostics=input: algorithm=DYNAMIC_PROGRAMMING initiallyBoundVars=[] originalOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] promotedPrefixes=[] plannedOrder=[BSA(names=[marker], rows=2), SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), SP(?drug http://example.com/theme/pharma/targets ?target), SP(?target http://example.com/theme/pharma/inPathway ?pathway)] plannedBoundVars=[]; rejected: path=UNSUPPORTED_SHAPE factors=[0:BSA(names=[marker], rows=2), 1:SP(?drug http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.com/theme/pharma/Drug), 2:SP(?drug http://example.com/theme/pharma/targets ?target), 3:SP(?target http://example.com/theme/pharma/inPathway ?pathway)]) [left] + │ ║ ║ │ ║ │ s: Var (name=target) (bindingState=unbound) + │ ║ ║ │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ ║ │ ║ │ o: Var (name=pathway) (bindingState=unbound) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=71, resultSizeEstimate=20.0K) [right] + │ ║ ║ │ ║ s: Var (name=drug) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ ║ │ ║ o: Var (name=target) (bindingState=bound) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=5.0K) [right] + │ ║ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ ║ └── BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) (costEstimate=6.00, resultSizeEstimate=1.00, optimizer.candidateCount=9, optimizer.score=39223.5M, optimizer.decisionTrace=initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?target inPathway ?pathway) score=6680.0 rawRows=666.0 effectiveRows=666.0 baseCostRows=668.0 factorWorkRows=668.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=chosen reason=chosen; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug targets ?target) score=202880.0 rawRows=20000.0 effectiveRows=20000.0 baseCostRows=20288.0 factorWorkRows=20288.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]) right=SP(?drug type Drug) score=150740.0 rawRows=5006.0 effectiveRows=5006.0 baseCostRows=15074.0 factorWorkRows=15074.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=0 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug targets ?target) score=12324.705882352942 rawRows=20286.0 effectiveRows=20286.0 baseCostRows=20952.0 factorWorkRows=20952.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?target inPathway ?pathway) right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15738.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=1 decision=rejected reason=higher adjusted cost; initial candidate left=SP(?drug targets ?target) right=SP(?drug type Drug) score=20798.823529411766 rawRows=10033.0 effectiveRows=10033.0 baseCostRows=35358.0 factorWorkRows=35358.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug targets ?target) score=7835294.117647059 rawRows=1.332E7 effectiveRows=1.332E7 baseCostRows=1.332E7 factorWorkRows=20000.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=2 decision=chosen reason=chosen; expand candidate left=Join right=SP(?drug type Drug) score=3.333996E7 rawRows=3333996.0 effectiveRows=3333996.0 baseCostRows=3333996.0 factorWorkRows=15072.0 sharedVars=0 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=rejected reason=higher adjusted cost; expand candidate left=Join right=SP(?drug type Drug) score=3.922348235294118E10 rawRows=6.667992E10 effectiveRows=6.667992E10 baseCostRows=6.667992E10 factorWorkRows=1.0 sharedVars=1 boundAnchors=0 cheapFilters=0 expensiveFilters=0 filterPassRatio=-1.0 tieBreakerIndex=3 decision=chosen reason=chosen, optimizer.configuredStrategy=hybrid, optimizer.decision=expand chosen SP(?drug type Drug), optimizer.rejectionReason=higher adjusted cost, optimizer.strategy=greedy, optimizer.estimateSource=cardinality, optimizer.originalOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.thresholds=DYNAMIC_PROGRAMMING_JOIN_ARG_LIMIT=8, MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER=10, AVOIDABLE_CROSS_JOIN_PENALTY=10.0, UNANCHORED_INITIAL_PAIR_PENALTY=5.0, SHARED_VAR_BONUS_PER_VAR=1.7, MAX_SHARED_VAR_BONUS=3.4, BOUND_ANCHOR_BONUS_PER_VAR=1.4, MAX_BOUND_ANCHOR_BONUS=2.8, CHEAP_FILTER_BONUS_PER_FILTER=1.6, MAX_CHEAP_FILTER_BONUS=2.56, EXPENSIVE_FILTER_BONUS_PER_FILTER=1.1, MAX_EXPENSIVE_FILTER_BONUS=1.21, MIN_UNLOCKED_FILTER_PASS_RATIO=0.25, optimizer.chosenOrder=[BindingSetAssignment ([[marker=http://example.com/theme/pharma/biomarker/3], [marker=http://example.com/theme/pharma/biomarker/4]]), SP(?target inPathway ?pathway), SP(?drug targets ?target), SP(?drug type Drug)], optimizer.initiallyBoundVars=[], optimizer.scoreComponents=rawRows=6.667992E10, effectiveRows=6.667992E10, baseCostRows=6.667992E10, factorWorkRows=1.0, adjustedCost=3.922348235294118E10, sharedVars=1, boundAnchors=0, cheapFilters=0, expensiveFilters=0, filterPassRatio=-1.0, tieBreakerIndex=3, optimizer.scopeBarriers=segment only; separator barriers preserved outside this segment) [right] + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=3.4K) + │ ║ │ s: Var (name=drug) (bindingState=bound) + │ ║ │ p: Var (name=_const_4389be5e_uri, value=http://example.com/theme/pharma/testedIn, anonymous) + │ ║ │ o: Var (name=trial) (bindingState=unbound) + │ ║ └── ExtensionElem (optTrial) + │ ║ Var (name=trial) (bindingState=bound) + │ ║ GroupElem (_anon_having_3254e226babdcc344c88a5a61806b6a8e7f3012) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ║ GroupElem (drugCount) + │ ║ Count (Distinct) + │ ║ Var (name=drug) (bindingState=bound) + │ ╚══ ExtensionElem (_anon_having_3254e226babdcc344c88a5a61806b6a8e7f3012) + │ Count (Distinct) + │ Var (name=drug) (bindingState=unbound) + └── ExtensionElem (drugCount) + Count (Distinct) + Var (name=drug) (bindingState=unbound) === Rendered Optimized TupleExpr === SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { -?drug a . -?drug ?target . -?target ?pathway . -VALUES ?marker { } -OPTIONAL { -?drug ?trial . -BIND(?trial AS ?optTrial) -} -FILTER ((?optTrial != ) && EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . }) + ?target ?pathway . + ?drug ?target . + ?drug a . + VALUES ?marker { } + OPTIONAL { + ?drug ?trial . + BIND(?trial AS ?optTrial) + } + FILTER ((?optTrial != ) && EXISTS { ?trial ?arm . ?arm ?result . ?result ?marker . }) } GROUP BY ?pathway HAVING (COUNT(DISTINCT ?drug) > 1) From 8201da8e8434ff44c96e923deab8d5ae0e8c6148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Tue, 21 Apr 2026 01:05:02 +0200 Subject: [PATCH 28/43] queries are faster, but optimization takes the most time --- .../optimizer/QueryJoinOptimizer.java | 295 ++++++++++++++++-- .../impl/QueryJoinOptimizerTest.java | 220 +++++++++++++ .../sail/base/SketchBasedJoinEstimator.java | 16 +- .../sail/base/SketchJoinOrderPlanner.java | 2 +- .../sail/lmdb/LmdbEvaluationStatistics.java | 36 ++- .../rdf4j/sail/lmdb/LmdbSailStore.java | 36 ++- .../LmdbIndexAwareJoinOrderPlanningTest.java | 32 +- .../LmdbSketchAwareFilterPlacementTest.java | 25 +- .../BenchmarkJoinEstimatorSupport.java | 17 + .../LmdbThemeQueryRegressionTest.java | 240 ++++++++++++-- .../lmdb/benchmark/ThemeQueryBenchmark.java | 39 +-- .../lmdb/benchmark/ThemeQueryExplain.java | 3 +- .../benchmark/ThemeQueryHexaBenchmark.java | 2 + 13 files changed, 848 insertions(+), 115 deletions(-) diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index eac3acc3a9e..ffee3094bda 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -36,14 +36,19 @@ import org.eclipse.rdf4j.query.Dataset; import org.eclipse.rdf4j.query.QueryEvaluationException; import org.eclipse.rdf4j.query.algebra.AbstractQueryModelNode; +import org.eclipse.rdf4j.query.algebra.And; import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Distinct; import org.eclipse.rdf4j.query.algebra.Exists; import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.LeftJoin; import org.eclipse.rdf4j.query.algebra.Not; +import org.eclipse.rdf4j.query.algebra.Reduced; +import org.eclipse.rdf4j.query.algebra.Slice; import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; import org.eclipse.rdf4j.query.algebra.ValueExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.ZeroLengthPath; @@ -130,6 +135,10 @@ public QueryJoinOptimizer(EvaluationStatistics statistics, boolean trackResultSi } private static int filterConditionCost(ValueExpr condition) { + if (condition instanceof And) { + And and = (And) condition; + return Math.max(filterConditionCost(and.getLeftArg()), filterConditionCost(and.getRightArg())); + } if (condition instanceof Exists) { return 100; } @@ -314,8 +323,7 @@ private TupleExpr unwrapJoinFilterChain(Filter filter, ArrayDeque nested private TupleExpr reapplyDeferredFilters(TupleExpr root, List deferredFilters) { TupleExpr current = root; for (DeferredFilter deferredFilter : deferredFilters) { - Filter clone = deferredFilter.filter.clone(); - clone.setArg(current); + Filter clone = new Filter(current, deferredFilter.condition.clone()); annotateDeferredFilter(clone, deferredFilter, "root"); current = clone; } @@ -438,16 +446,76 @@ private List buildDeferredFilters(List filters, Set deferredFilters = new ArrayList<>(filters.size()); - for (int i = 0; i < filters.size(); i++) { - Filter filter = filters.get(i); - Set requiredVars = new HashSet<>(VarNameCollector.process(filter.getCondition())); - requiredVars.retainAll(scopeBindingNames); - deferredFilters - .add(new DeferredFilter(filter, requiredVars, filterConditionCost(filter.getCondition()), i)); + int originalIndex = 0; + for (Filter filter : filters) { + List conditions = new ArrayList<>(); + collectConjunctiveConditions(filter.getCondition(), conditions); + for (ValueExpr condition : conditions) { + Set requiredVars = new HashSet<>(VarNameCollector.process(condition)); + requiredVars.retainAll(scopeBindingNames); + deferredFilters + .add(new DeferredFilter(filter, condition, requiredVars, + filterConditionCost(condition), originalIndex++)); + } } return deferredFilters; } + private void collectConjunctiveConditions(ValueExpr condition, List conditions) { + if (condition instanceof And) { + And and = (And) condition; + collectConjunctiveConditions(and.getLeftArg(), conditions); + collectConjunctiveConditions(and.getRightArg(), conditions); + } else { + conditions.add(condition); + } + } + + private StatementPattern patternLocalBaseForFilterCondition(Filter filter, ValueExpr condition) { + Set conditionVars = VarNameCollector.process(condition); + if (bindingSetAssignmentsCover(filter.getArg(), conditionVars)) { + return null; + } + + Set patterns = FilterSelectivityKeys.originPatternsForFilter(filter); + StatementPattern match = null; + for (StatementPattern pattern : patterns) { + if (!FilterSelectivityKeys.conditionIntersectsPattern(condition, pattern)) { + continue; + } + if (match != null) { + return null; + } + match = pattern; + } + return match; + } + + private boolean bindingSetAssignmentsCover(TupleExpr tupleExpr, Set requiredVars) { + if (tupleExpr == null || requiredVars == null || requiredVars.isEmpty()) { + return false; + } + + Set bindingSetAssignmentNames = new HashSet<>(); + tupleExpr.visit(new AbstractSimpleQueryModelVisitor() { + @Override + public void meet(BindingSetAssignment bindingSetAssignment) { + bindingSetAssignmentNames.addAll(bindingSetAssignment.getAssuredBindingNames()); + } + }); + return bindingSetAssignmentNames.containsAll(requiredVars); + } + + private EvaluationStatistics.FilterPassEstimate estimateFilterPass(Filter filter, ValueExpr condition) { + if (condition == filter.getCondition()) { + return statistics.estimateFilterPass(filter); + } + + Filter splitFilter = filter.clone(); + splitFilter.setCondition(condition.clone()); + return statistics.estimateFilterPass(splitFilter); + } + private void assignDeferredFilters(List rawPlanItems, List deferredFilters, List rootDeferredFilters, Set outerBoundVars) { for (DeferredFilter deferredFilter : deferredFilters) { @@ -539,15 +607,80 @@ private TupleExpr buildSegmentRoot(OrderedJoinSegment orderedJoinSegment) { private boolean groupDeferredFilterOnSmallestWindow(List factors, DeferredFilter deferredFilter, Set boundBeforeSegment) { - if (deferredFilter.originPatterns.isEmpty()) { - return false; + int[] window = null; + if (deferredFilter.conditionCost == 0) { + if (groupDeferredFilterOnBindingAssignments(factors, deferredFilter, boundBeforeSegment)) { + return true; + } + window = smallestBindingCoveringWindow(factors, deferredFilter.requiredVars, boundBeforeSegment); } - int[] window = smallestPatternCoveringWindow(factors, deferredFilter.originPatterns); if (window == null) { + if (deferredFilter.originPatterns.isEmpty()) { + return false; + } + window = smallestPatternCoveringWindow(factors, deferredFilter.originPatterns); + if (window == null) { + return false; + } + } + + return groupDeferredFilterOnWindow(factors, deferredFilter, boundBeforeSegment, window); + } + + private boolean groupDeferredFilterOnBindingAssignments(List factors, + DeferredFilter deferredFilter, Set boundBeforeSegment) { + Set missingVars = new HashSet<>(deferredFilter.requiredVars); + missingVars.removeAll(boundBeforeSegment); + if (missingVars.isEmpty()) { + return false; + } + + List selectedIndexes = new ArrayList<>(); + for (int i = 0; i < factors.size(); i++) { + SegmentFactor factor = factors.get(i); + if (!isBindingOnlyFactor(factor) || Collections.disjoint(factor.bindingNames, missingVars)) { + continue; + } + + selectedIndexes.add(i); + missingVars.removeAll(factor.bindingNames); + if (missingVars.isEmpty()) { + break; + } + } + + if (!missingVars.isEmpty() || selectedIndexes.isEmpty()) { return false; } + Deque selectedRoots = new ArrayDeque<>(selectedIndexes.size()); + Set containedPatterns = Collections.newSetFromMap(new IdentityHashMap<>()); + for (Integer selectedIndex : selectedIndexes) { + SegmentFactor factor = factors.get(selectedIndex); + selectedRoots.addLast(factor.tupleExpr); + containedPatterns.addAll(factor.containedPatterns); + } + + TupleExpr groupedRoot = buildJoinRoot(selectedRoots); + TupleExpr filteredRoot = wrapTupleExprWithDeferredFilters(groupedRoot, List.of(deferredFilter), + "bindingAssignments"); + SegmentFactor groupedFactor = new SegmentFactor(filteredRoot, containedPatterns); + + int insertionIndex = selectedIndexes.get(0); + for (int i = selectedIndexes.size() - 1; i >= 0; i--) { + factors.remove((int) selectedIndexes.get(i)); + } + factors.add(insertionIndex, groupedFactor); + return true; + } + + private boolean isBindingOnlyFactor(SegmentFactor factor) { + return factor.containedPatterns.isEmpty() && !factor.bindingNames.isEmpty(); + } + + private boolean groupDeferredFilterOnWindow(List factors, DeferredFilter deferredFilter, + Set boundBeforeSegment, int[] window) { Set availableVars = new HashSet<>(boundBeforeSegment); for (int i = window[0]; i <= window[1]; i++) { availableVars.addAll(factors.get(i).bindingNames); @@ -576,6 +709,44 @@ private boolean groupDeferredFilterOnSmallestWindow(List factors, return true; } + private int[] smallestBindingCoveringWindow(List factors, Set requiredVars, + Set boundBeforeSegment) { + if (factors.isEmpty()) { + return null; + } + + int bestStart = -1; + int bestEnd = -1; + int bestCost = Integer.MAX_VALUE; + int bestSize = Integer.MAX_VALUE; + + for (int start = 0; start < factors.size(); start++) { + Set availableVars = new HashSet<>(boundBeforeSegment); + int cost = 0; + for (int end = start; end < factors.size(); end++) { + SegmentFactor factor = factors.get(end); + availableVars.addAll(factor.bindingNames); + cost += bindingWindowCost(factor); + if (availableVars.containsAll(requiredVars)) { + int size = end - start + 1; + if (cost < bestCost || (cost == bestCost && size < bestSize)) { + bestStart = start; + bestEnd = end; + bestCost = cost; + bestSize = size; + } + break; + } + } + } + + return bestStart < 0 ? null : new int[] { bestStart, bestEnd }; + } + + private int bindingWindowCost(SegmentFactor factor) { + return factor.containedPatterns.isEmpty() ? 0 : 1; + } + private int[] smallestPatternCoveringWindow(List factors, Set originPatterns) { int bestStart = -1; @@ -830,7 +1001,7 @@ private List toPlannerFilterConstraints( for (DeferredFilter deferredFilter : deferredFilters) { constraints.add(new JoinOrderPlanner.FilterConstraint(deferredFilter.requiredVars, deferredFilter.filterPassEstimate.getPassRatio(), deferredFilter.conditionCost, - deferredFilter.filter.getCondition().toString(), + deferredFilter.condition.toString(), deferredFilter.filterPassEstimate.getSource().name().toLowerCase(), deferredFilter.filterPassEstimate.getEvidenceCount())); } @@ -1073,10 +1244,13 @@ private List positionBindingSetAssignmentsInSegment(List s } List bindingSetAssignments = new ArrayList<>(); + Map> bindingSetAssignmentNames = new IdentityHashMap<>(); List nonAssignments = new ArrayList<>(segment.size()); for (TupleExpr tupleExpr : segment) { - if (tupleExpr instanceof BindingSetAssignment) { + Optional> bindingNames = positionableBindingSetAssignmentNames(tupleExpr); + if (bindingNames.isPresent()) { bindingSetAssignments.add(tupleExpr); + bindingSetAssignmentNames.put(tupleExpr, bindingNames.get()); } else { nonAssignments.add(tupleExpr); } @@ -1093,7 +1267,7 @@ private List positionBindingSetAssignmentsInSegment(List s Map> insertions = new HashMap<>(); for (TupleExpr bindingSetAssignment : bindingSetAssignments) { - int insertionIndex = findFirstUsageIndex(bindingSetAssignment.getAssuredBindingNames(), + int insertionIndex = findFirstUsageIndex(bindingSetAssignmentNames.get(bindingSetAssignment), referencedVarNames); insertions.computeIfAbsent(insertionIndex, key -> new ArrayList<>()).add(bindingSetAssignment); } @@ -1102,6 +1276,7 @@ private List positionBindingSetAssignmentsInSegment(List s for (int i = 0; i <= nonAssignments.size(); i++) { List insertedAssignments = insertions.get(i); if (insertedAssignments != null) { + insertedAssignments.sort(Comparator.comparingInt(this::bindingSetAssignmentPositionPriority)); positioned.addAll(insertedAssignments); } if (i < nonAssignments.size()) { @@ -1112,6 +1287,46 @@ private List positionBindingSetAssignmentsInSegment(List s return positioned; } + private int bindingSetAssignmentPositionPriority(TupleExpr tupleExpr) { + return tupleExpr instanceof BindingSetAssignment ? 1 : 0; + } + + private Optional> positionableBindingSetAssignmentNames(TupleExpr tupleExpr) { + if (tupleExpr instanceof BindingSetAssignment) { + return Optional.of(tupleExpr.getAssuredBindingNames()); + } + + BindingSetAssignment leaf = bindingSetAssignmentLeaf(tupleExpr); + if (leaf == null) { + return Optional.empty(); + } + + Set bindingNames = leaf.getAssuredBindingNames(); + Set referencedNames = VarNameCollector.process(tupleExpr); + if (!bindingNames.containsAll(referencedNames)) { + return Optional.empty(); + } + return Optional.of(bindingNames); + } + + private BindingSetAssignment bindingSetAssignmentLeaf(TupleExpr tupleExpr) { + TupleExpr current = tupleExpr; + while (isPositionableBindingSetAssignmentWrapper(current)) { + current = ((UnaryTupleOperator) current).getArg(); + } + if (current instanceof BindingSetAssignment) { + return (BindingSetAssignment) current; + } + return null; + } + + private boolean isPositionableBindingSetAssignmentWrapper(TupleExpr tupleExpr) { + return tupleExpr instanceof Filter + || tupleExpr instanceof Distinct + || tupleExpr instanceof Reduced + || tupleExpr instanceof Slice; + } + private int findFirstUsageIndex(Set bindingNames, List> referencedVarNames) { if (bindingNames.isEmpty()) { return referencedVarNames.size(); @@ -1652,8 +1867,7 @@ private TupleExpr wrapTupleExprWithDeferredFilters(TupleExpr tupleExpr, List outerBoundVars, FactorCostCache factorCostCache) { Optional leftEstimate = factorCostCache.get(left, outerBoundVars); @@ -2110,7 +2350,7 @@ private RawJoinSegment(List joinArgs, Set bindingNames, Set requiredVars; private final int conditionCost; private final int originalIndex; @@ -2118,15 +2358,16 @@ private final class DeferredFilter { private final Set originPatterns; private final EvaluationStatistics.FilterPassEstimate filterPassEstimate; - private DeferredFilter(Filter filter, Set requiredVars, int conditionCost, int originalIndex) { - this.filter = filter; + private DeferredFilter(Filter filter, ValueExpr condition, Set requiredVars, int conditionCost, + int originalIndex) { + this.condition = condition; this.requiredVars = requiredVars; this.conditionCost = conditionCost; this.originalIndex = originalIndex; - this.patternLocalBase = FilterSelectivityKeys.patternLocalBaseForFilter(filter); + this.patternLocalBase = patternLocalBaseForFilterCondition(filter, condition); this.originPatterns = Collections.newSetFromMap(new IdentityHashMap<>()); this.originPatterns.addAll(FilterSelectivityKeys.originPatternsForFilter(filter)); - this.filterPassEstimate = statistics.estimateFilterPass(filter); + this.filterPassEstimate = estimateFilterPass(filter, condition); } } diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java index fb5ce70540b..d7bb23033e8 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java @@ -34,6 +34,7 @@ import org.eclipse.rdf4j.query.MalformedQueryException; import org.eclipse.rdf4j.query.QueryLanguage; import org.eclipse.rdf4j.query.UnsupportedQueryLanguageException; +import org.eclipse.rdf4j.query.algebra.And; import org.eclipse.rdf4j.query.algebra.BinaryTupleOperator; import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; import org.eclipse.rdf4j.query.algebra.Compare; @@ -52,6 +53,7 @@ import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizerTest; +import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinFactorCostModel; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; @@ -509,6 +511,23 @@ public void optimizeNormalizesPlannerOutputBindingsBeforeFirstUse() { .containsExactly(uValues, vValues, follows, name); } + @Test + public void optimizeNormalizesPlannerOutputFilterWrappedBindingsBeforeFirstUse() { + BindingSetAssignment uValues = bindingSetAssignment("u", "u1"); + Filter uRestriction = filter(uValues, "u", "u"); + BindingSetAssignment vValues = bindingSetAssignment("v", "v1"); + StatementPattern follows = statementPattern("u", "v", ex("follows")); + PlannerStatistics statistics = new PlannerStatistics(List.of(vValues, follows, uRestriction), + List.of(uRestriction, vValues, follows)); + + QueryRoot root = new QueryRoot(new Join(new Join(uRestriction, vValues), follows)); + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(root, null, null); + + assertThat(flattenJoinLeaves(root.getArg())) + .as("Filter-wrapped BindingSetAssignment factors should be positioned before first use") + .containsExactly(uRestriction, vValues, follows); + } + @Test public void optimizePassesDeferredFilterConstraintsToPlannerForFilteredPrefixChoice() { StatementPattern pValue = statementPattern("result", "p", ex("pValue")); @@ -725,6 +744,60 @@ public void optimizeTreatsKnownZeroPassFilterAsSelectiveForGreedyPrefix() { .containsExactlyInAnyOrder(ex("pA"), ex("pB")); } + @Test + public void optimizeLetsSelectiveLocalFilterOutputBeatBroadWorkRows() { + StatementPattern patientType = statementPattern("patient", "type", rdfType()); + StatementPattern hasEncounter = statementPattern("patient", "enc", medical("hasEncounter")); + StatementPattern hasObservation = statementPattern("enc", "obs", medical("hasObservation")); + Filter valueFilter = filter(statementPattern("obs", "value", medical("value")), "value", "limit"); + + QueryRoot root = new QueryRoot(new Join(new Join(patientType, hasEncounter), + new Join(hasObservation, valueFilter))); + new QueryJoinOptimizer( + new LocalFilterWorkRowsStatistics(Map.of( + pairKey(rdfType(), medical("hasEncounter")), 100.0d, + pairKey(medical("hasObservation"), medical("value")), 120.0d)), + new EmptyTripleSource()).optimize(root, null, null); + + List leafPredicates = flattenedLeafPredicates(root.getArg()); + assertThat(leafPredicates) + .as("A selective local literal filter should seed before a broad type-edge prefix even when its scan work is higher") + .startsWith(medical("value")); + assertThat(leafPredicates.indexOf(medical("value"))) + .isLessThan(leafPredicates.indexOf(medical("hasEncounter"))); + } + + @Test + public void optimizeGroupsCheapValuesFilterBeforeCycleJoinAndExists() { + BindingSetAssignment userPairValues = bindingSetAssignment(Map.of( + "u1", ex("social/user/0"), + "u2", ex("social/user/1"))); + BindingSetAssignment user3Values = bindingSetAssignment(Map.of("u3", ex("social/user/2"))); + StatementPattern u1FollowsU2 = statementPattern("u1", "u2", social("follows")); + StatementPattern u2FollowsU1 = statementPattern("u2", "u1", social("follows")); + StatementPattern u1FollowsU3 = statementPattern("u1", "u3", social("follows")); + StatementPattern u3FollowsU1 = statementPattern("u3", "u1", social("follows")); + StatementPattern u2FollowsU3 = statementPattern("u2", "u3", social("follows")); + StatementPattern u3FollowsU2 = statementPattern("u3", "u2", social("follows")); + TupleExpr cycle = new Join(new Join(new Join(new Join(new Join(new Join(new Join(userPairValues, user3Values), + u1FollowsU2), u1FollowsU3), u2FollowsU1), u3FollowsU1), u2FollowsU3), u3FollowsU2); + Filter combinedFilter = new Filter(cycle, new And( + new Compare(Var.of("u1"), Var.of("u3"), CompareOp.NE), + new Exists(statementPattern("u1", "name", social("name"))))); + + QueryRoot root = new QueryRoot(combinedFilter); + new QueryJoinOptimizer(new EvaluationStatistics(), new EmptyTripleSource()).optimize(root, null, null); + + Filter relocatedValuesFilter = compareFilter(root, "u1", "u3"); + assertThat(countStatementPatterns(relocatedValuesFilter.getArg())) + .as("A cheap inequality over VALUES-bound variables should be applied before any cycle join") + .isZero(); + Filter existsFilter = existsFilter(root); + assertThat(countStatementPatterns(relocatedValuesFilter.getArg())) + .as("The cheap VALUES inequality should be scheduled before the expensive EXISTS filter") + .isLessThanOrEqualTo(countStatementPatterns(existsFilter.getArg())); + } + @Test public void optimizeDiscountsNotExistsUnlockAgainstConnectedInitialPair() { String query = String.join("\n", @@ -864,6 +937,26 @@ public void meet(StatementPattern statementPattern) { return predicates.stream().limit(limit).collect(Collectors.toList()); } + private static List flattenedLeafPredicates(TupleExpr tupleExpr) { + return flattenJoinLeavesKeepingScopeBarriers(unwrapQueryRoot(tupleExpr)).stream() + .map(QueryJoinOptimizerTest::firstStatementPatternPredicate) + .filter(predicate -> predicate != null) + .collect(Collectors.toList()); + } + + private static String firstStatementPatternPredicate(TupleExpr tupleExpr) { + ArrayList predicates = new ArrayList<>(); + unwrapQueryRoot(tupleExpr).visit(new AbstractQueryModelVisitor() { + @Override + public void meet(StatementPattern statementPattern) { + if (predicates.isEmpty()) { + predicates.add(statementPattern.getPredicateVar().getValue().stringValue()); + } + } + }); + return predicates.isEmpty() ? null : predicates.get(0); + } + private static TupleExpr unwrapQueryRoot(TupleExpr tupleExpr) { while (tupleExpr instanceof QueryRoot || tupleExpr instanceof Projection) { if (tupleExpr instanceof QueryRoot) { @@ -955,6 +1048,74 @@ private static BindingSetAssignment bindingSetAssignment(String varName, String return assignment; } + private static BindingSetAssignment bindingSetAssignment(Map iriBindings) { + BindingSetAssignment assignment = new BindingSetAssignment(); + QueryBindingSet bindingSet = new QueryBindingSet(); + iriBindings.forEach((name, iri) -> bindingSet.addBinding(name, VF.createIRI(iri))); + assignment.setBindingSets(List.of(bindingSet)); + return assignment; + } + + private static String rdfType() { + return "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"; + } + + private static String medical(String localName) { + return "http://example.com/theme/medical/" + localName; + } + + private static String social(String localName) { + return "http://example.com/theme/social/" + localName; + } + + private static Filter compareFilter(QueryModelNode root, String leftVarName, String rightVarName) { + return filters(root).stream() + .filter(filter -> isCompareFilter(filter, leftVarName, rightVarName)) + .findFirst() + .orElseThrow(() -> new AssertionError("Missing compare filter " + leftVarName + " != " + + rightVarName + " in " + root)); + } + + private static Filter existsFilter(QueryModelNode root) { + return filters(root).stream() + .filter(filter -> filter.getCondition() instanceof Exists) + .findFirst() + .orElseThrow(() -> new AssertionError("Missing EXISTS filter in " + root)); + } + + private static List filters(QueryModelNode root) { + ArrayList filters = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(Filter filter) throws RuntimeException { + filters.add(filter); + super.meet(filter); + } + }); + return filters; + } + + private static boolean isCompareFilter(Filter filter, String leftVarName, String rightVarName) { + if (!(filter.getCondition() instanceof Compare)) { + return false; + } + Compare compare = (Compare) filter.getCondition(); + return compare.getOperator() == CompareOp.NE + && compare.getLeftArg().equals(Var.of(leftVarName)) + && compare.getRightArg().equals(Var.of(rightVarName)); + } + + private static int countStatementPatterns(TupleExpr tupleExpr) { + ArrayList patterns = new ArrayList<>(); + tupleExpr.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(StatementPattern statementPattern) throws RuntimeException { + patterns.add(statementPattern); + } + }); + return patterns.size(); + } + private static String getPredicateValue(TupleExpr expr) { return ((StatementPattern) expr).getPredicateVar().getValue().stringValue(); } @@ -989,6 +1150,10 @@ private static void collectTupleExprPredicates(TupleExpr expr, List pred collectTupleExprPredicates(join.getRightArg(), predicates); return; } + if (expr instanceof Filter) { + collectTupleExprPredicates(((Filter) expr).getArg(), predicates); + return; + } if (expr instanceof StatementPattern) { predicates.add(getPredicateValue(expr)); } @@ -1200,6 +1365,61 @@ public FilterPassEstimate estimateFilterPass(Filter filter) { } } + private static final class LocalFilterWorkRowsStatistics extends EvaluationStatistics + implements JoinFactorCostModel { + private final Map joinCosts; + + private LocalFilterWorkRowsStatistics(Map joinCosts) { + this.joinCosts = joinCosts; + } + + @Override + public boolean supportsJoinEstimation() { + return true; + } + + @Override + public boolean supportsFilterSelectivityCosting() { + return true; + } + + @Override + public double getCardinality(TupleExpr expr) { + if (expr instanceof Join) { + Join join = (Join) expr; + String left = tupleExprKey(join.getLeftArg()); + String right = tupleExprKey(join.getRightArg()); + if (left != null && right != null) { + return joinCosts.getOrDefault(pairKey(left, right), 1000.0d); + } + return 1000.0d; + } + if (expr instanceof Filter) { + return 10.0d; + } + if (expr instanceof StatementPattern) { + return 1000.0d; + } + return super.getCardinality(expr); + } + + @Override + public Optional estimateFactorCost(TupleExpr factor, Set currentlyBoundVars) { + if (factor instanceof Filter) { + return Optional.of(new FactorCostEstimate(10_000.0d, 10.0d)); + } + if (factor instanceof StatementPattern) { + return Optional.of(new FactorCostEstimate(1_000.0d, 1_000.0d)); + } + return Optional.empty(); + } + + @Override + public FilterPassEstimate estimateFilterPass(Filter filter) { + return new FilterPassEstimate(0.01d, FilterPassEstimate.Source.LEARNED_FILTER); + } + } + private static final class FilterSelectivityStatistics extends EvaluationStatistics { @Override public double estimateFilterPassRatio(Filter filter) { diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 7821279abda..440755d9c60 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -5815,7 +5815,7 @@ private String lookupKey(ValueExpr valueExpr, Set currentlyBoundVars) { private double resolveFilterMultiplier(Filter filter, StatementPattern pattern) { double knownMultiplier = estimateKnownFilterMultiplier(filter, pattern); - return knownMultiplier > 0.0d ? knownMultiplier : 1.0d; + return knownMultiplier >= 0.0d ? knownMultiplier : 1.0d; } private double resolveFilterMultiplier(Filter filter, TuplePlanEstimate estimate) { @@ -5825,7 +5825,7 @@ private double resolveFilterMultiplier(Filter filter, TuplePlanEstimate estimate StatementPattern patternLocalBase = basePatternForFilter(filter); if (patternLocalBase != null) { double knownMultiplier = estimateKnownFilterMultiplier(filter, patternLocalBase); - if (knownMultiplier > 0.0d) { + if (knownMultiplier >= 0.0d) { return knownMultiplier; } } @@ -7526,7 +7526,7 @@ private void appendSketchPayload(State state, SketchAddress address, UpdateSketc private void appendSketchPayload(State state, int entryId, SketchAddress address, UpdateSketch sketch) throws IOException { TrackedByteArray payload = serializeTrackedSketchPayload(MemoryCategory.SERIALIZATION_BUFFERS, - transientOwner(MEMORY_OWNER_SERIALIZATION_BUFFER, entryId), sketch); + transientOwner(MEMORY_OWNER_SERIALIZATION_BUFFER, entryId), sketch, false); try { appendSketchPayload(state, entryId, address, payload.bytes); } finally { @@ -8046,8 +8046,16 @@ private static int validateManifestHeader(DataInputStream in) throws IOException private TrackedByteArray serializeTrackedSketchPayload(MemoryCategory category, long ownerId, UpdateSketch sketch) throws IOException { + return serializeTrackedSketchPayload(category, ownerId, sketch, true); + } + + private TrackedByteArray serializeTrackedSketchPayload(MemoryCategory category, long ownerId, UpdateSketch sketch, + boolean enforceCapacity) + throws IOException { long predictedBytes = estimateByteArrayBytes(Math.max(128, sketch.getCurrentBytes())); - ensureEstimatorCapacity(predictedBytes, true); + if (enforceCapacity) { + ensureEstimatorCapacity(predictedBytes, true); + } reserveTrackedMemory(category, ownerId, predictedBytes); try (ByteArrayOutputStream bos = new ByteArrayOutputStream(128); DataOutputStream out = new DataOutputStream(bos)) { diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java index ac7d2064d9d..1f9aedbc26f 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java @@ -515,7 +515,7 @@ private double newlyUnlockedFilterPassRatio(long previousMask, long nextMask) { continue; } double filterPassRatio = filter.getEstimatedPassRatio(); - if (Double.isFinite(filterPassRatio) && filterPassRatio > 0.0d && filterPassRatio <= 1.0d) { + if (Double.isFinite(filterPassRatio) && filterPassRatio >= 0.0d && filterPassRatio <= 1.0d) { passRatio *= filterPassRatio; found = true; } diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java index 4aede6fd7a1..cb03f972624 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java @@ -191,9 +191,7 @@ private Optional estimateLmdbFactorCost(TupleExpr factor, Se Map stringMetrics = new HashMap<>(); Map doubleMetrics = new HashMap<>(); - Set accessLookupComponents = accessLookupComponents(accessShape); - TripleStore.IndexPrefixSelection prefixSelection = tripleStore - .selectBestIndexPrefix(accessLookupComponents); + TripleStore.IndexPrefixSelection prefixSelection = selectEffectiveIndexPrefix(accessShape); Set prefixComponents = prefixSelection == null ? Set.of() : prefixSelection.prefixComponents(); int prefixScore = prefixSelection == null ? 0 : prefixSelection.prefixScore(); if (prefixSelection != null && prefixScore > 0) { @@ -211,7 +209,7 @@ private Optional estimateLmdbFactorCost(TupleExpr factor, Se missingLookupComponents.toString()); } - double accessRows = prefixScore > 0 ? accessShape.estimateAccessRows(prefixComponents) : outputRows; + double accessRows = accessShape.estimateAccessRows(prefixComponents); if (Double.isFinite(accessRows) && accessRows >= 0.0d) { doubleMetrics.put(TelemetryMetricNames.PLANNED_ACCESS_ROWS, accessRows); if (!accessShape.filterLookupComponents().isEmpty() && canApplyFilterAtAccess(accessShape, prefixComponents) @@ -268,6 +266,18 @@ private Set accessLookupComponents(SketchBasedJoinEstimator.AccessSha return Set.copyOf(accessLookupComponents); } + private TripleStore.IndexPrefixSelection selectEffectiveIndexPrefix( + SketchBasedJoinEstimator.AccessShape accessShape) { + TripleStore.IndexPrefixSelection lookupSelection = tripleStore + .selectBestIndexPrefix(accessShape.lookupBoundComponents()); + if (accessShape.filterLookupComponents().isEmpty() || lookupSelection == null + || canApplyFilterAtAccess(accessShape, lookupSelection.prefixComponents())) { + return lookupSelection; + } + + return tripleStore.selectBestIndexPrefix(accessLookupComponents(accessShape)); + } + private boolean canApplyFilterAtAccess(SketchBasedJoinEstimator.AccessShape accessShape, Set prefixComponents) { if (accessShape.filterLookupComponents().isEmpty()) { @@ -287,8 +297,7 @@ private double adjustJoinOrderWorkRows(SketchBasedJoinEstimator.AccessShape acce return defaultWorkRows; } - TripleStore.IndexPrefixSelection prefixSelection = tripleStore - .selectBestIndexPrefix(accessLookupComponents(accessShape)); + TripleStore.IndexPrefixSelection prefixSelection = selectEffectiveIndexPrefix(accessShape); if (prefixSelection == null) { return defaultWorkRows; } @@ -299,16 +308,27 @@ private double adjustJoinOrderWorkRows(SketchBasedJoinEstimator.AccessShape acce } double adjustedWorkRows = accessRows; + boolean filterAppliedAtAccess = false; Set filterLookupComponents = accessShape.filterLookupComponents(); if (!filterLookupComponents.isEmpty() && canApplyFilterAtAccess(accessShape, prefixSelection.prefixComponents())) { double filteredAccessRows = accessRows * accessShape.filterMultiplier(); if (Double.isFinite(filteredAccessRows) && filteredAccessRows >= 0.0d) { adjustedWorkRows = filteredAccessRows; + filterAppliedAtAccess = true; + } + } + double workFloor = filterAppliedAtAccess ? 0.0d : defaultWorkRows; + double filterMultiplier = accessShape.filterMultiplier(); + if (!filterAppliedAtAccess && Double.isFinite(filterMultiplier) && filterMultiplier > 0.0d + && filterMultiplier < 1.0d) { + double unfilteredWorkRows = defaultWorkRows / filterMultiplier; + if (Double.isFinite(unfilteredWorkRows) && unfilteredWorkRows >= 0.0d) { + workFloor = Math.max(workFloor, unfilteredWorkRows); } } - if (!accessShape.isDirectLookup(prefixSelection.prefixComponents())) { - adjustedWorkRows = Math.max(adjustedWorkRows, defaultWorkRows); + if (Double.isFinite(workFloor) && workFloor >= 0.0d) { + adjustedWorkRows = Math.max(adjustedWorkRows, workFloor); } return adjustedWorkRows; diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java index 96318235405..6afd7c8b38f 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -362,9 +364,7 @@ void rollback() throws SailException { public void close() throws SailException { try { try { - if (persistFuture != null) { - persistFuture.cancel(false); - } + cancelAndDrainScheduledEstimatorPersist(); persistEstimatorState(); sketchBasedJoinEstimator.close(); } finally { @@ -392,7 +392,15 @@ public void close() throws SailException { throw new InterruptedSailException(e); } } finally { - estimatorPersistExec.shutdownNow(); + estimatorPersistExec.shutdown(); + try { + while (!estimatorPersistExec.awaitTermination(1, TimeUnit.SECONDS)) { + logger.warn("Waiting for join estimator persist executor to terminate"); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new InterruptedSailException(e); + } tripleStore.close(); } } @@ -411,6 +419,26 @@ public void close() throws SailException { } } + private void cancelAndDrainScheduledEstimatorPersist() { + ScheduledFuture future = persistFuture; + if (future == null) { + return; + } + if (future.cancel(false)) { + return; + } + try { + future.get(); + } catch (CancellationException e) { + // Already cancelled by the scheduler or another close path. + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new InterruptedSailException(e); + } catch (ExecutionException e) { + logger.warn("Scheduled join estimator persistence failed during close", e.getCause()); + } + } + private void persistEstimatorState() { sketchBasedJoinEstimator.persistIfDirty(); if (filterSelectivityStats != null) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java index a1d14a1b6df..460a2fa4864 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbIndexAwareJoinOrderPlanningTest.java @@ -87,17 +87,21 @@ void plannerPrefersFeedsBeforeFilteredNameWithoutPosc(@TempDir File dataDir) thr } @Test - void plannerMayMoveFilteredNameEarlierWhenPoscExists(@TempDir File dataDir) throws Exception { + void plannerCostsTargetBoundFilteredNameLookupWhenPoscExists(@TempDir File dataDir) throws Exception { PlannedBranch plannedBranch = planGeneratorBranch(dataDir, "spoc,ospc,psoc,posc"); Optional plan = plannedBranch.plan(); assertTrue(plan.isPresent(), "Expected LMDB planner to produce a plan for the generator branch"); List orderedArgs = plan.get().getOrderedArgs(); assertEquals(4, orderedArgs.size(), "Expected four join factors in the generator branch"); - assertTrue( - orderedArgs.indexOf(plannedBranch.filteredNamePattern()) < orderedArgs - .indexOf(plannedBranch.feedsPattern()), - "With posc available, LMDB planner may use the grid:name filter before grid:feeds"); + JoinFactorCostModel.FactorCostEstimate filteredNameCost = plannedBranch.targetBoundFilteredNameCost(); + assertEquals("directLookup", + filteredNameCost.getStringMetrics().get(TelemetryMetricNames.PLANNED_INDEX_ACCESS_MODE), + "Expected posc to provide a direct target-bound grid:name lookup: " + + filteredNameCost.getStringMetrics() + filteredNameCost.getDoubleMetrics()); + assertTrue(filteredNameCost.getWorkRows() < GENERATOR_COUNT, + "Expected posc to make target-bound grid:name cheaper than generator type scan: " + + filteredNameCost.getStringMetrics() + filteredNameCost.getDoubleMetrics()); } @Test @@ -176,15 +180,18 @@ void plannerStartsElectricalQ2WithFilteredSubstationNameWhenOnlyPredicatePrefixI StatementPattern feedsPattern = transformerFeedsPattern(); Filter filteredNamePattern = filteredNameListMemberPattern(); JoinOrderPlanner planner = (JoinOrderPlanner) store.getBackingStore().getEvaluationStatistics(); - Optional plan = planner.planJoinOrder( + JoinOrderPlanner.PlanningAttempt attempt = planner.planJoinOrderAttempt( List.of(typePattern, feedsPattern, filteredNamePattern), Set.of(), - JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING, + List.of()); + Optional plan = attempt.getPlan(); assertTrue(plan.isPresent(), "Expected LMDB planner to produce an electrical q2-style plan"); List orderedArgs = plan.get().getOrderedArgs(); assertEquals(filteredNamePattern, orderedArgs.get(0), - "Electrical q2 should seed with the selective substation-name predicate-prefix scan"); + "Electrical q2 should seed with the selective substation-name predicate-prefix scan\nDiagnostics: " + + attempt.getDiagnostics()); } finally { repository.shutDown(); } @@ -256,6 +263,9 @@ private static PlannedBranch planGeneratorBranch(File dataDir, String indexes) t BindingSetAssignment targets = targetBindings(); JoinOrderPlanner planner = (JoinOrderPlanner) store.getBackingStore().getEvaluationStatistics(); + JoinFactorCostModel.FactorCostEstimate targetBoundFilteredNameCost = ((JoinFactorCostModel) planner) + .estimateFactorCost(filteredNamePattern, Set.of("target")) + .orElseThrow(); return new PlannedBranch( planner.planJoinOrder(List.of(targets, typePattern, feedsPattern, filteredNamePattern), java.util.Set.of(), @@ -263,7 +273,8 @@ private static PlannedBranch planGeneratorBranch(File dataDir, String indexes) t targets, typePattern, feedsPattern, - filteredNamePattern); + filteredNamePattern, + targetBoundFilteredNameCost); } finally { repository.shutDown(); } @@ -443,7 +454,8 @@ private static String socialMediaQ4Query() { } private record PlannedBranch(Optional plan, BindingSetAssignment targets, - StatementPattern typePattern, StatementPattern feedsPattern, Filter filteredNamePattern) { + StatementPattern typePattern, StatementPattern feedsPattern, Filter filteredNamePattern, + JoinFactorCostModel.FactorCostEstimate targetBoundFilteredNameCost) { } private static String predicateValue(StatementPattern statementPattern) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java index 0b760a74844..13faa00ebe3 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/LmdbSketchAwareFilterPlacementTest.java @@ -40,6 +40,7 @@ import org.eclipse.rdf4j.repository.sail.SailRepository; import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; import org.eclipse.rdf4j.repository.util.RDFInserter; +import org.eclipse.rdf4j.sail.lmdb.benchmark.BenchmarkJoinEstimatorSupport; import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -200,19 +201,19 @@ void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsW } @Test - void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsInBenchmarkDataset( + void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsInThemeDataset( @TempDir File dataDir) throws Exception { LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); SailRepository repository = new SailRepository(store); repository.init(); try { - loadAllThemeData(repository); + loadThemeDataWithBulkEstimator(repository, store, Theme.MEDICAL_RECORDS); String query = ThemeQueryCatalog.queryFor(Theme.MEDICAL_RECORDS, 2); EvaluationStatistics statistics = store.getBackingStore().getEvaluationStatistics(); assertTrue(statistics.supportsFilterSelectivityCosting(), - "Expected LMDB to expose local filter selectivity costing for q2 in the mixed benchmark dataset"); + "Expected LMDB to expose local filter selectivity costing for q2 in the theme dataset"); TupleExpr optimized; try (SailRepositoryConnection connection = repository.getConnection()) { @@ -227,14 +228,14 @@ void optimizedMedicalRecordsQ2MovesRecordedOnFilterBeforeOtherMandatoryPatternsI } @Test - void optimizedElectricalGridQ2MovesSubstationNameFilterBeforeTransformerScanInBenchmarkDataset( + void optimizedElectricalGridQ2MovesSubstationNameFilterBeforeTransformerScanInThemeDataset( @TempDir File dataDir) throws Exception { LmdbStore store = new LmdbStore(dataDir, new LmdbStoreConfig()); SailRepository repository = new SailRepository(store); repository.init(); try { - loadAllThemeData(repository); + loadThemeDataWithBulkEstimator(repository, store, Theme.ELECTRICAL_GRID); String query = ThemeQueryCatalog.queryFor(Theme.ELECTRICAL_GRID, 2); try (SailRepositoryConnection connection = repository.getConnection()) { @@ -333,15 +334,11 @@ private static void loadThemeData(SailRepository repository, Theme theme) { } } - private static void loadAllThemeData(SailRepository repository) { - try (SailRepositoryConnection connection = repository.getConnection()) { - connection.begin(IsolationLevels.NONE); - var inserter = new RDFInserter(connection); - for (Theme theme : Theme.values()) { - ThemeDataSetGenerator.generate(theme, inserter); - } - connection.commit(); - } + private static void loadThemeDataWithBulkEstimator(SailRepository repository, LmdbStore store, Theme theme) + throws Exception { + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadThemeData(repository, theme); + BenchmarkJoinEstimatorSupport.persistEstimatorAfterBulkLoad(repository, store); } private static List collectMandatoryLeafOrder(TupleExpr optimized) { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java index f634c05b33d..5e8030df858 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java @@ -54,6 +54,23 @@ public static void prepareEstimatorForBulkLoad(SailRepository repository, LmdbSt estimator.discardAndMarkForRebuild(); } + public static void persistEstimatorAfterBulkLoad(SailRepository repository, LmdbStore store) throws IOException { + repository.init(); + SketchBasedJoinEstimator estimator = resolveEstimator(store); + estimator.rebuildOnceSlow(); + persistReusableEstimatorSnapshot(estimator); + } + + public static void persistStoreStatistics(LmdbStore store) throws IOException { + Object backingStore = invoke(GET_BACKING_STORE, store); + Method persistEstimatorState = reflectMethod(backingStore.getClass(), "persistEstimatorState"); + invoke(persistEstimatorState, backingStore); + } + + public static void releaseEstimatorMemory(LmdbStore store) throws IOException { + resolveEstimator(store).unload(); + } + public static void prepareFixedMedicalRecordsExplanationStore(File storeDirectory) throws IOException { FileUtils.deleteDirectory(storeDirectory); Files.createDirectories(storeDirectory.toPath()); diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java index 5c74b0afce8..6b2f68338c3 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java @@ -12,55 +12,188 @@ package org.eclipse.rdf4j.sail.lmdb.benchmark; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; import org.eclipse.rdf4j.repository.sail.SailRepository; import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; import org.eclipse.rdf4j.repository.util.RDFInserter; import org.eclipse.rdf4j.sail.lmdb.LmdbStore; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; class LmdbThemeQueryRegressionTest { - private static final Theme THEME = Theme.PHARMA; - private static final int[] QUERY_INDEXES = { 8, 10 }; - private static final int ITERATIONS = 3; + private static final Map> HIGH_VALUE_QUERY_INDEXES = Map.of( + Theme.SOCIAL_MEDIA, List.of(0, 4, 6, 8, 9, 10), + Theme.PHARMA, List.of(0, 5, 10), + Theme.LIBRARY, List.of(7), + Theme.MEDICAL_RECORDS, List.of(2, 5), + Theme.ENGINEERING, List.of(5, 9), + Theme.ELECTRICAL_GRID, List.of(2, 4, 5), + Theme.TRAIN, List.of(2, 7, 8)); + private static final Map> COUNT_REGRESSION_QUERY_INDEXES = Map.of( + Theme.PHARMA, List.of(8, 10)); + private static final Map> LEARNED_FILTER_PRIME_QUERY_INDEXES = Map.of( + Theme.PHARMA, List.of(0, 5, 10), + Theme.LIBRARY, List.of(7), + Theme.MEDICAL_RECORDS, List.of(2, 5), + Theme.ENGINEERING, List.of(5, 9), + Theme.ELECTRICAL_GRID, List.of(2, 4, 5), + Theme.TRAIN, List.of(2, 7, 8)); + private static final List HIGH_VALUE_ANCHORS = List.of( + anchor(Theme.SOCIAL_MEDIA, 0, "VALUES", " ?v"), + anchor(Theme.SOCIAL_MEDIA, 4, "VALUES", " ?v"), + anchor(Theme.SOCIAL_MEDIA, 6, "VALUES", " ?v"), + anchor(Theme.SOCIAL_MEDIA, 9, "VALUES", " ?b"), + anchor(Theme.SOCIAL_MEDIA, 10, "VALUES", " ?b"), + anchor(Theme.PHARMA, 0, "VALUES ?disease", " ?arm"), + anchor(Theme.PHARMA, 5, "VALUES ?marker", " ?arm"), + anchor(Theme.PHARMA, 10, "VALUES ?marker", " ?trial"), + anchor(Theme.LIBRARY, 7, " ?branchName", + " ?branch"), + anchor(Theme.MEDICAL_RECORDS, 2, " ?date", + " ?practitioner"), + anchor(Theme.MEDICAL_RECORDS, 5, " ?value", + " ?enc"), + anchor(Theme.ENGINEERING, 5, " ?value", + "?measurement a "), + anchor(Theme.ENGINEERING, 9, " ?value", + " ?measurement"), + anchor(Theme.ELECTRICAL_GRID, 2, " ?name", + " ?substation"), + anchor(Theme.ELECTRICAL_GRID, 4, " ?name", + " ?substation"), + anchor(Theme.ELECTRICAL_GRID, 5, " ?capacity", + "?generator a "), + anchor(Theme.TRAIN, 2, " ?lineName", + " ?line"), + anchor(Theme.TRAIN, 7, " ?name", + " ?op")); - @Test - void pharmaQueriesMatchExpectedCounts(@TempDir java.nio.file.Path dataDir) throws IOException { - SailRepository repository = new SailRepository(new LmdbStore(dataDir.toFile(), ConfigUtil.createConfig())); + @ParameterizedTest(name = "{0}") + @MethodSource("highValueThemes") + void highValueThemeQueriesExposePersistedOptimizerDiagnostics(Theme theme, @TempDir Path dataDir) + throws Exception { + Path themeDir = dataDir.resolve(theme.name()); + LmdbStore store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); try { - loadData(repository); - for (int iteration = 0; iteration < ITERATIONS; iteration++) { - for (int queryIndex : QUERY_INDEXES) { - String query = ThemeQueryCatalog.queryFor(THEME, queryIndex); - long expected = ThemeQueryCatalog.expectedCountFor(THEME, queryIndex); - long actual = executeQuery(repository, query); - if (actual != expected) { - throw new AssertionError( - mismatchMessage(repository, queryIndex, iteration, expected, actual, query)); - } - } + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(repository, theme); + persistEstimatorAfterBulkLoad(repository, store); + primeLearnedFilterStats(repository, theme, primeableHighValueQueryIndexes(theme)); + BenchmarkJoinEstimatorSupport.persistStoreStatistics(store); + } finally { + shutdownAndRelease(repository, store); + } + + store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + repository = new SailRepository(store); + try { + for (int queryIndex : HIGH_VALUE_QUERY_INDEXES.get(theme)) { + OptimizerSnapshot snapshot = explainOptimized(repository, theme, queryIndex); + assertContains(snapshot.plan(), "plannerId=lmdb-sketch"); + assertContainsAny(snapshot.plan(), "plannedAccessRows", "optimizer.decisionTrace", + "plannedFilterEvidenceCount"); + assertHighValueAnchors(theme, queryIndex, snapshot.renderedQuery()); + BenchmarkJoinEstimatorSupport.releaseEstimatorMemory(store); } + assertCountRegressionQueries(repository, theme); + BenchmarkJoinEstimatorSupport.releaseEstimatorMemory(store); } finally { - repository.shutDown(); + shutdownAndRelease(repository, store); + } + } + + private static Stream highValueThemes() { + return Stream.of(Theme.PHARMA, Theme.LIBRARY, Theme.MEDICAL_RECORDS, Theme.ENGINEERING, + Theme.ELECTRICAL_GRID, Theme.TRAIN, Theme.SOCIAL_MEDIA); + } + + private static void primeLearnedFilterStats(SailRepository repository, Theme theme, int... queryIndexes) { + for (int queryIndex : queryIndexes) { + String query = ThemeQueryCatalog.queryFor(theme, queryIndex); + long expected = ThemeQueryCatalog.expectedCountFor(theme, queryIndex); + long actual = executeQuery(repository, query); + if (actual != expected) { + throw new AssertionError("Unable to prime learned filter stats: theme=" + theme + ", queryIndex=" + + queryIndex + ", expected=" + expected + ", actual=" + actual); + } } } - private static void loadData(SailRepository repository) throws IOException { + private static int[] primeableHighValueQueryIndexes(Theme theme) { + return LEARNED_FILTER_PRIME_QUERY_INDEXES.getOrDefault(theme, List.of()) + .stream() + .mapToInt(Integer::intValue) + .toArray(); + } + + private static void loadData(SailRepository repository, Theme theme) throws IOException { try (SailRepositoryConnection connection = repository.getConnection()) { connection.begin(IsolationLevels.NONE); RDFInserter inserter = new RDFInserter(connection); - ThemeDataSetGenerator.generate(THEME, inserter); + ThemeDataSetGenerator.generate(theme, inserter); connection.commit(); } } + private static void persistEstimatorAfterBulkLoad(SailRepository repository, LmdbStore store) throws Exception { + Method method; + try { + method = BenchmarkJoinEstimatorSupport.class.getDeclaredMethod("persistEstimatorAfterBulkLoad", + SailRepository.class, LmdbStore.class); + } catch (NoSuchMethodException e) { + throw new AssertionError( + "BenchmarkJoinEstimatorSupport must persist a reusable estimator snapshot after bulk load", e); + } + try { + method.invoke(null, repository, store); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof Exception exception) { + throw exception; + } + if (cause instanceof Error error) { + throw error; + } + throw new AssertionError("Unable to persist benchmark estimator snapshot", cause); + } + } + + private static void shutdownAndRelease(SailRepository repository, LmdbStore store) throws IOException { + try { + BenchmarkJoinEstimatorSupport.releaseEstimatorMemory(store); + } finally { + repository.shutDown(); + } + } + + private static OptimizerSnapshot explainOptimized(SailRepository repository, Theme theme, int queryIndex) { + String query = ThemeQueryCatalog.queryFor(theme, queryIndex); + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query) + .explain(Explanation.Level.Optimized); + return new OptimizerSnapshot( + explanation.toString(), + new TupleExprIRRenderer().render((TupleExpr) explanation.tupleExpr())); + } + } + private static long executeQuery(SailRepository repository, String query) { try (SailRepositoryConnection connection = repository.getConnection()) { return connection.prepareTupleQuery(query) @@ -70,17 +203,70 @@ private static long executeQuery(SailRepository repository, String query) { } } - private static String mismatchMessage(SailRepository repository, int queryIndex, int iteration, long expected, - long actual, String query) { - String explanation = ""; + private static void assertCountRegressionQueries(SailRepository repository, Theme theme) { + for (int queryIndex : COUNT_REGRESSION_QUERY_INDEXES.getOrDefault(theme, List.of())) { + String query = ThemeQueryCatalog.queryFor(theme, queryIndex); + long expected = ThemeQueryCatalog.expectedCountFor(theme, queryIndex); + long actual = executeQuery(repository, query); + if (actual != expected) { + throw new AssertionError("LMDB theme query mismatch: theme=" + theme + ", queryIndex=" + queryIndex + + ", expected=" + expected + ", actual=" + actual + "\n" + explainBestEffort(repository, + query)); + } + } + } + + private static String explainBestEffort(SailRepository repository, String query) { try (SailRepositoryConnection connection = repository.getConnection()) { - explanation = connection.prepareTupleQuery(query) + return connection.prepareTupleQuery(query) .explain(Explanation.Level.Optimized) .toString(); } catch (Exception ignored) { - // Best-effort explanation for diagnosis. + return ""; + } + } + + private static void assertContains(String value, String expected) { + if (!value.contains(expected)) { + throw new AssertionError("Expected to find `" + expected + "` in:\n" + value); + } + } + + private static void assertContainsAny(String value, String... expectedValues) { + for (String expected : expectedValues) { + if (value.contains(expected)) { + return; + } + } + throw new AssertionError("Expected to find one of `" + String.join("`, `", expectedValues) + "` in:\n" + + value); + } + + private static void assertBefore(String value, String first, String second, String message) { + int firstIndex = value.indexOf(first); + int secondIndex = value.indexOf(second); + if (firstIndex < 0 || secondIndex < 0 || firstIndex >= secondIndex) { + throw new AssertionError(message + "\nExpected `" + first + "` before `" + second + "` in:\n" + value); + } + } + + private static void assertHighValueAnchors(Theme theme, int queryIndex, String renderedQuery) { + for (ShapeAnchor anchor : HIGH_VALUE_ANCHORS) { + if (anchor.theme() == theme && anchor.queryIndex() == queryIndex) { + assertBefore(renderedQuery, anchor.first(), anchor.second(), + "Expected theme=" + theme + ", queryIndex=" + queryIndex + + " to retain the selective anchor before the broad scan"); + } } - return "LMDB theme query mismatch: theme=" + THEME + ", queryIndex=" + queryIndex + ", iteration=" + iteration - + ", expected=" + expected + ", actual=" + actual + "\n" + explanation; + } + + private static ShapeAnchor anchor(Theme theme, int queryIndex, String first, String second) { + return new ShapeAnchor(theme, queryIndex, first, second); + } + + private record OptimizerSnapshot(String plan, String renderedQuery) { + } + + private record ShapeAnchor(Theme theme, int queryIndex, String first, String second) { } } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index 5473acf3a28..ebefeb8524c 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -68,7 +68,7 @@ import org.openjdk.jmh.runner.options.TimeValue; @State(Scope.Benchmark) -@Warmup(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 10) +@Warmup(iterations = 100, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 1) @BenchmarkMode({ Mode.AverageTime }) @Fork(value = 1, jvmArgs = { "-Xms1G", "-Xmx32G" }) @Measurement(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 5) @@ -99,31 +99,31 @@ public class ThemeQueryBenchmark { private static final long EXPECTED_VALUES_DATA_SIZE_BYTES = 713687040L; @Param({ - "0", +// "0", "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", +// "2", +// "3", +// "4", +// "5", +// "6", +// "7", +// "8", +// "9", +// "10", // "11", // "12" }) public int z_queryIndex; @Param({ - "MEDICAL_RECORDS", +// "MEDICAL_RECORDS", "SOCIAL_MEDIA", - "LIBRARY", - "ENGINEERING", - "HIGHLY_CONNECTED", - "TRAIN", - "ELECTRICAL_GRID", - "PHARMA" +// "LIBRARY", +// "ENGINEERING", +// "HIGHLY_CONNECTED", +// "TRAIN", +// "ELECTRICAL_GRID", +// "PHARMA" }) public String themeName; @@ -226,8 +226,9 @@ private void rebuildStoreFromScratch() throws IOException { storeConfig = ConfigUtil.createConfig(); store = new LmdbStore(storeDirectory, storeConfig); repository = new SailRepository(store); -// BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); loadData(); + BenchmarkJoinEstimatorSupport.persistEstimatorAfterBulkLoad(repository, store); repository.shutDown(); repository = null; diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java index 907ded5fa57..0ee1152efc4 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryExplain.java @@ -186,8 +186,9 @@ private static void rebuildStoreFromScratch() throws IOException { storeConfig = ConfigUtil.createConfig(); store = new LmdbStore(storeDirectory, storeConfig); repository = new SailRepository(store); -// BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); loadData(); + BenchmarkJoinEstimatorSupport.persistEstimatorAfterBulkLoad(repository, store); repository.shutDown(); repository = null; diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java index 09e6ac85a9e..d64a76d1f02 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryHexaBenchmark.java @@ -188,7 +188,9 @@ private void rebuildStoreFromScratch() throws IOException { storeConfig = ConfigUtil.createConfig(); store = new LmdbStore(STORE_DIRECTORY, storeConfig); repository = new SailRepository(store); + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); loadData(); + BenchmarkJoinEstimatorSupport.persistEstimatorAfterBulkLoad(repository, store); } private DbFileSizes readExpectedDbFileSizes() throws IOException { From 39b97e02cec9f9d1c2b88c8f2b9bc2f090181976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Tue, 21 Apr 2026 21:46:21 +0200 Subject: [PATCH 29/43] wip --- .../optimizer/QueryJoinOptimizer.java | 449 +- .../evaluation/impl/FilterOptimizerTest.java | 6 +- .../impl/QueryJoinOptimizerTest.java | 117 + ...wrapSingleBgpInUnionBranchesTransform.java | 26 + .../sail/base/SketchBasedJoinEstimator.java | 329 +- .../sail/base/SketchJoinOrderPlanner.java | 912 +++- .../sail/base/SketchJoinOrderReorderer.java | 168 +- ...asedJoinEstimatorJoinOrderPlannerTest.java | 278 +- ...etchBasedJoinEstimatorPersistenceTest.java | 24 + .../SketchJoinOrderPlannerLoggingTest.java | 90 +- .../sail/lmdb/LmdbEvaluationStatistics.java | 4 + .../BenchmarkJoinEstimatorSupport.java | 20 +- ...mdbPharmaOptimizedQueryRegressionTest.java | 280 ++ .../LmdbThemeQueryRegressionTest.java | 274 +- .../lmdb/benchmark/ThemeQueryBenchmark.java | 31 +- ...fastest-run-optimized-queries-and-plans.md | 4379 +++++++++++++++++ .../FilterInValuesRewriteRegressionTest.java | 488 ++ ...ter-in-values-rewrite-regression-suite.tsv | 19 + 18 files changed, 7656 insertions(+), 238 deletions(-) create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbPharmaOptimizedQueryRegressionTest.java create mode 100644 core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/lmdb-theme-fastest-run-optimized-queries-and-plans.md create mode 100644 core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/FilterInValuesRewriteRegressionTest.java create mode 100644 core/sail/memory/src/test/resources/filter-in-values-rewrite-regression-suite.tsv diff --git a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java index ffee3094bda..a780f97108b 100644 --- a/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java +++ b/core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/optimizer/QueryJoinOptimizer.java @@ -19,6 +19,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -28,30 +29,42 @@ import org.eclipse.rdf4j.common.iteration.CloseableIteration; import org.eclipse.rdf4j.common.order.StatementOrder; import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Literal; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.Statement; import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.datatypes.XMLDatatypeUtil; +import org.eclipse.rdf4j.model.vocabulary.FN; +import org.eclipse.rdf4j.model.vocabulary.XMLSchema; import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.Dataset; import org.eclipse.rdf4j.query.QueryEvaluationException; import org.eclipse.rdf4j.query.algebra.AbstractQueryModelNode; import org.eclipse.rdf4j.query.algebra.And; import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.Difference; import org.eclipse.rdf4j.query.algebra.Distinct; import org.eclipse.rdf4j.query.algebra.Exists; import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.FunctionCall; import org.eclipse.rdf4j.query.algebra.Join; import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.ListMemberOperator; import org.eclipse.rdf4j.query.algebra.Not; import org.eclipse.rdf4j.query.algebra.Reduced; +import org.eclipse.rdf4j.query.algebra.SameTerm; import org.eclipse.rdf4j.query.algebra.Slice; import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Str; import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.UnaryTupleOperator; +import org.eclipse.rdf4j.query.algebra.ValueConstant; import org.eclipse.rdf4j.query.algebra.ValueExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.ZeroLengthPath; +import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet; import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizer; import org.eclipse.rdf4j.query.algebra.evaluation.TripleSource; import org.eclipse.rdf4j.query.algebra.evaluation.impl.EvaluationStatistics; @@ -72,6 +85,7 @@ public class QueryJoinOptimizer implements QueryOptimizer { private static final Logger log = LoggerFactory.getLogger(QueryJoinOptimizer.class); + private static final int SMALL_LITERAL_FILTER_ANCHOR_LIMIT = 16; /** * When deciding if merge join is the correct approach we will compare the cardinality of the two join arguments, if * one is bigger than the other by a factor of MERGE_JOIN_CARDINALITY_SIZE_DIFF_MULTIPLIER then we will not use @@ -167,6 +181,7 @@ protected class JoinVisitor extends AbstractSimpleQueryModelVisitor boundVars = new HashSet<>(); private double currentHighestCost = 1; private final Map plannedPrefixRowsByRightArg = new IdentityHashMap<>(); + private int suppressedSmallLiteralFilterAnchors; protected JoinVisitor() { super(trackResultSize); @@ -184,6 +199,9 @@ public void meet(Filter node) { } } + if (suppressedSmallLiteralFilterAnchors == 0) { + addFilterSemijoinAnchor(node); + } node.getArg().visit(this); annotateFilterSelectivity(node); @@ -212,6 +230,23 @@ public void meet(LeftJoin leftJoin) { } } + @Override + public void meet(Difference difference) { + TupleExpr replacement = rewriteRedundantPatternMinusFilter(difference); + if (replacement != null) { + replacement.visit(this); + return; + } + + difference.getLeftArg().visit(this); + try { + suppressedSmallLiteralFilterAnchors++; + difference.getRightArg().visit(this); + } finally { + suppressedSmallLiteralFilterAnchors--; + } + } + @Override public void meet(StatementPattern node) throws RuntimeException { node.setResultSizeEstimate(Math.max(statistics.getCardinality(node), node.getResultSizeEstimate())); @@ -228,6 +263,97 @@ private void optimizePriorityJoin(Set origBoundVars, TupleExpr join) { } } + private TupleExpr rewriteRedundantPatternMinusFilter(Difference difference) { + if (!(difference.getRightArg() instanceof Filter)) { + return null; + } + + Filter rightFilter = (Filter) difference.getRightArg(); + if (!(rightFilter.getArg() instanceof StatementPattern)) { + return null; + } + + StatementPattern rightPattern = (StatementPattern) rightFilter.getArg(); + Set conditionVars = VarNameCollector.process(rightFilter.getCondition()); + if (!rightPattern.getBindingNames().containsAll(conditionVars) + || !difference.getLeftArg().getAssuredBindingNames().containsAll(conditionVars) + || !isSafeTotalMinusLocalCondition(rightFilter.getCondition(), conditionVars) + || !containsEquivalentRequiredPattern(difference.getLeftArg(), rightPattern)) { + return null; + } + + Filter replacement = new Filter(difference.getLeftArg().clone(), + new Not(rightFilter.getCondition().clone())); + difference.replaceWith(replacement); + return replacement; + } + + private boolean containsEquivalentRequiredPattern(TupleExpr tupleExpr, StatementPattern expectedPattern) { + if (tupleExpr instanceof StatementPattern) { + return sameStatementPattern((StatementPattern) tupleExpr, expectedPattern); + } + if (tupleExpr instanceof Join) { + Join join = (Join) tupleExpr; + return containsEquivalentRequiredPattern(join.getLeftArg(), expectedPattern) + || containsEquivalentRequiredPattern(join.getRightArg(), expectedPattern); + } + if (tupleExpr instanceof LeftJoin) { + return containsEquivalentRequiredPattern(((LeftJoin) tupleExpr).getLeftArg(), expectedPattern); + } + if (tupleExpr instanceof Difference) { + return containsEquivalentRequiredPattern(((Difference) tupleExpr).getLeftArg(), expectedPattern); + } + if (tupleExpr instanceof UnaryTupleOperator) { + return containsEquivalentRequiredPattern(((UnaryTupleOperator) tupleExpr).getArg(), expectedPattern); + } + return false; + } + + private boolean sameStatementPattern(StatementPattern left, StatementPattern right) { + return samePatternVar(left.getSubjectVar(), right.getSubjectVar()) + && samePatternVar(left.getPredicateVar(), right.getPredicateVar()) + && samePatternVar(left.getObjectVar(), right.getObjectVar()) + && samePatternVar(left.getContextVar(), right.getContextVar()); + } + + private boolean samePatternVar(Var left, Var right) { + if (left == null || right == null) { + return left == right; + } + if (left.hasValue() || right.hasValue()) { + return left.hasValue() && right.hasValue() && left.getValue().equals(right.getValue()); + } + return left.getName() != null && left.getName().equals(right.getName()); + } + + private boolean isSafeTotalMinusLocalCondition(ValueExpr condition, Set assuredConditionVars) { + if (condition instanceof And) { + And and = (And) condition; + return isSafeTotalMinusLocalCondition(and.getLeftArg(), assuredConditionVars) + && isSafeTotalMinusLocalCondition(and.getRightArg(), assuredConditionVars); + } + if (condition instanceof FunctionCall) { + FunctionCall functionCall = (FunctionCall) condition; + return FN.CONTAINS.stringValue().equals(functionCall.getURI()) && functionCall.getArgs().size() == 2 + && isSafeStringExpression(functionCall.getArgs().get(0), assuredConditionVars) + && isSafeStringExpression(functionCall.getArgs().get(1), assuredConditionVars); + } + return false; + } + + private boolean isSafeStringExpression(ValueExpr expression, Set assuredConditionVars) { + if (expression instanceof Str) { + ValueExpr arg = ((Str) expression).getArg(); + return arg instanceof Var && assuredConditionVars.contains(((Var) arg).getName()); + } + if (expression instanceof ValueConstant) { + Value value = ((ValueConstant) expression).getValue(); + return value instanceof Literal && !((Literal) value).getLanguage().isPresent() + && XMLSchema.STRING.equals(((Literal) value).getDatatype()); + } + return false; + } + @Override public void meet(Join node) { optimizeJoinReplacement(node, node, List.of()); @@ -420,6 +546,9 @@ private OrderedJoinPlan orderJoinArgsPreservingSeparators(CollectedJoinArgs coll List deferredFilters = buildDeferredFilters(collectedJoinArgs.deferredFilters, scopeBindingNames); + if (suppressedSmallLiteralFilterAnchors == 0) { + addSmallLiteralFilterAnchors(rawPlanItems, deferredFilters); + } assignDeferredFilters(rawPlanItems, deferredFilters, orderedJoinPlan.rootDeferredFilters, outerBoundVars); for (Object rawPlanItem : rawPlanItems) { @@ -440,6 +569,216 @@ private OrderedJoinPlan orderJoinArgsPreservingSeparators(CollectedJoinArgs coll return orderedJoinPlan; } + private void addSmallLiteralFilterAnchors(List rawPlanItems, List deferredFilters) { + if (deferredFilters.isEmpty()) { + return; + } + for (DeferredFilter deferredFilter : deferredFilters) { + BindingSetAssignment anchor = smallLiteralFilterAnchor(deferredFilter.condition); + if (anchor == null) { + continue; + } + String bindingName = anchor.getBindingNames().iterator().next(); + RawJoinSegment segment = findAnchorSegment(rawPlanItems, deferredFilter, bindingName); + if (segment == null || segment.boundBeforeSegment.contains(bindingName) + || (!isEmptyBindingSetAssignment(anchor) && !segmentMustBind(segment, bindingName)) + || segmentHasBindingSetAssignment(segment, bindingName)) { + continue; + } + int insertionIndex = anchorInsertionIndex(segment, deferredFilter, bindingName); + segment.joinArgs.add(insertionIndex, anchor); + segment.bindingNames.add(bindingName); + } + } + + private BindingSetAssignment smallLiteralFilterAnchor(ValueExpr condition) { + if (condition instanceof ListMemberOperator) { + List arguments = ((ListMemberOperator) condition).getArguments(); + if (arguments.isEmpty() || !(arguments.get(0) instanceof Var)) { + return null; + } + + Var filterVar = (Var) arguments.get(0); + String bindingName = filterVar.getName(); + if (bindingName == null || filterVar.hasValue()) { + return null; + } + + LinkedHashSet values = new LinkedHashSet<>(); + for (int i = 1; i < arguments.size(); i++) { + ValueExpr argument = arguments.get(i); + if (!(argument instanceof ValueConstant)) { + return null; + } + Value value = ((ValueConstant) argument).getValue(); + if (!isSafeValuesAnchorValue(value)) { + return null; + } + values.add(value); + } + return smallLiteralFilterAnchor(bindingName, values); + } + if (condition instanceof Compare && ((Compare) condition).getOperator() == Compare.CompareOp.EQ) { + Compare compare = (Compare) condition; + return smallLiteralFilterAnchor(compare.getLeftArg(), compare.getRightArg()); + } + if (condition instanceof SameTerm) { + SameTerm sameTerm = (SameTerm) condition; + return smallLiteralFilterAnchor(sameTerm.getLeftArg(), sameTerm.getRightArg()); + } + return null; + } + + private BindingSetAssignment smallLiteralFilterAnchor(ValueExpr leftArg, ValueExpr rightArg) { + if (leftArg instanceof Var && rightArg instanceof ValueConstant) { + return smallLiteralFilterAnchor((Var) leftArg, (ValueConstant) rightArg); + } + if (rightArg instanceof Var && leftArg instanceof ValueConstant) { + return smallLiteralFilterAnchor((Var) rightArg, (ValueConstant) leftArg); + } + return null; + } + + private BindingSetAssignment smallLiteralFilterAnchor(Var filterVar, ValueConstant valueConstant) { + String bindingName = filterVar.getName(); + if (bindingName == null || filterVar.hasValue()) { + return null; + } + Value value = valueConstant.getValue(); + if (!isSafeValuesAnchorValue(value)) { + return null; + } + LinkedHashSet values = new LinkedHashSet<>(); + values.add(value); + return smallLiteralFilterAnchor(bindingName, values); + } + + private BindingSetAssignment smallLiteralFilterAnchor(String bindingName, LinkedHashSet values) { + if (values.size() > SMALL_LITERAL_FILTER_ANCHOR_LIMIT) { + return null; + } + + BindingSetAssignment assignment = new BindingSetAssignment(); + assignment.setBindingNames(Set.of(bindingName)); + List bindingSets = new ArrayList<>(values.size()); + for (Value value : values) { + QueryBindingSet bindingSet = new QueryBindingSet(); + bindingSet.addBinding(bindingName, value); + bindingSets.add(bindingSet); + } + assignment.setBindingSets(bindingSets); + return assignment; + } + + private boolean isSafeValuesAnchorValue(Value value) { + return value != null && isValuesExpressible(value) && !isUnsafeCoreInEqualityValue(value); + } + + private boolean isEmptyBindingSetAssignment(BindingSetAssignment assignment) { + return !assignment.getBindingSets().iterator().hasNext(); + } + + private void addFilterSemijoinAnchor(Filter filter) { + BindingSetAssignment anchor = smallLiteralFilterAnchor(filter.getCondition()); + if (anchor == null) { + return; + } + String bindingName = anchor.getBindingNames().iterator().next(); + TupleExpr arg = filter.getArg(); + if ((!isEmptyBindingSetAssignment(anchor) && !arg.getAssuredBindingNames().contains(bindingName)) + || containsBindingSetAssignment(arg, bindingName)) { + return; + } + filter.setArg(new Join(arg, anchor)); + } + + private boolean containsBindingSetAssignment(TupleExpr tupleExpr, String bindingName) { + boolean[] found = new boolean[1]; + tupleExpr.visit(new AbstractSimpleQueryModelVisitor() { + @Override + public void meet(BindingSetAssignment node) { + found[0] |= node.getBindingNames().contains(bindingName); + } + }); + return found[0]; + } + + private boolean isValuesExpressible(Value value) { + return value instanceof IRI || value instanceof Literal; + } + + private boolean isUnsafeCoreInEqualityValue(Value value) { + if (!(value instanceof Literal)) { + return false; + } + IRI datatype = ((Literal) value).getDatatype(); + return XMLDatatypeUtil.isNumericDatatype(datatype) + || XMLSchema.BOOLEAN.equals(datatype) + || XMLSchema.DATETIME.equals(datatype); + } + + private RawJoinSegment findAnchorSegment(List rawPlanItems, DeferredFilter deferredFilter, + String bindingName) { + for (Object rawPlanItem : rawPlanItems) { + if (!(rawPlanItem instanceof RawJoinSegment)) { + continue; + } + RawJoinSegment segment = (RawJoinSegment) rawPlanItem; + if (!segment.bindingNames.contains(bindingName)) { + continue; + } + if (deferredFilter.patternLocalBase == null + || segmentContainsPattern(segment, deferredFilter.patternLocalBase)) { + return segment; + } + } + return null; + } + + private boolean segmentContainsPattern(RawJoinSegment segment, StatementPattern pattern) { + for (TupleExpr joinArg : segment.joinArgs) { + if (collectPatternIdentities(joinArg).contains(pattern)) { + return true; + } + } + return false; + } + + private boolean segmentHasBindingSetAssignment(RawJoinSegment segment, String bindingName) { + for (TupleExpr joinArg : segment.joinArgs) { + Optional> names = positionableBindingSetAssignmentNames(joinArg); + if (names.isPresent() && names.get().contains(bindingName)) { + return true; + } + } + return false; + } + + private boolean segmentMustBind(RawJoinSegment segment, String bindingName) { + for (TupleExpr joinArg : segment.joinArgs) { + if (joinArg.getAssuredBindingNames().contains(bindingName)) { + return true; + } + } + return false; + } + + private int anchorInsertionIndex(RawJoinSegment segment, DeferredFilter deferredFilter, String bindingName) { + for (int i = 0; i < segment.joinArgs.size(); i++) { + TupleExpr joinArg = segment.joinArgs.get(i); + if (deferredFilter.patternLocalBase != null + && collectPatternIdentities(joinArg).contains(deferredFilter.patternLocalBase)) { + return i; + } + } + for (int i = 0; i < segment.joinArgs.size(); i++) { + if (VarNameCollector.process(segment.joinArgs.get(i)).contains(bindingName)) { + return i; + } + } + return 0; + } + private List buildDeferredFilters(List filters, Set scopeBindingNames) { if (filters.isEmpty()) { return List.of(); @@ -608,10 +947,11 @@ private TupleExpr buildSegmentRoot(OrderedJoinSegment orderedJoinSegment) { private boolean groupDeferredFilterOnSmallestWindow(List factors, DeferredFilter deferredFilter, Set boundBeforeSegment) { int[] window = null; + if (groupDeferredFilterOnBindingAssignments(factors, deferredFilter, boundBeforeSegment)) { + return true; + } + if (deferredFilter.conditionCost == 0) { - if (groupDeferredFilterOnBindingAssignments(factors, deferredFilter, boundBeforeSegment)) { - return true; - } window = smallestBindingCoveringWindow(factors, deferredFilter.requiredVars, boundBeforeSegment); } @@ -1073,6 +1413,45 @@ private void applyPlannerSummaryEstimates(JoinOrderPlanner.JoinOrderPlan plan, D } rootAnnotationTarget.setDoubleMetricPlanned(TelemetryMetricNames.PLANNED_WORK_ROWS, plan.getEstimatedTotalWork()); + seedPlannerPrefixEstimates(plan, orderedArgs); + } + + private void seedPlannerPrefixEstimates(JoinOrderPlanner.JoinOrderPlan plan, Deque orderedArgs) { + if (orderedArgs.size() < 2) { + return; + } + + double finalRows = plan.getEstimatedFinalRows(); + double prefixRows = orderedArgs.getFirst().getResultSizeEstimate(); + if (!isFiniteNonNegative(prefixRows) && isFiniteNonNegative(finalRows)) { + prefixRows = finalRows; + } + + boolean first = true; + for (TupleExpr tupleExpr : orderedArgs) { + if (first) { + first = false; + continue; + } + + double factorRows = tupleExpr.getResultSizeEstimate(); + if (isFiniteNonNegative(prefixRows) && isFiniteNonNegative(factorRows)) { + prefixRows = Math.max(prefixRows, factorRows); + } else if (isFiniteNonNegative(factorRows)) { + prefixRows = factorRows; + } else if (!isFiniteNonNegative(prefixRows) && isFiniteNonNegative(finalRows)) { + prefixRows = finalRows; + } + + if (isFiniteNonNegative(prefixRows)) { + plannedPrefixRowsByRightArg.putIfAbsent(tupleExpr, prefixRows); + } + } + + TupleExpr last = orderedArgs.getLast(); + if (isFiniteNonNegative(finalRows)) { + plannedPrefixRowsByRightArg.put(last, finalRows); + } } private void applyRebuiltPlannerStepEstimates(Deque orderedArgs, Set boundBeforeSegment) { @@ -1245,12 +1624,17 @@ private List positionBindingSetAssignmentsInSegment(List s List bindingSetAssignments = new ArrayList<>(); Map> bindingSetAssignmentNames = new IdentityHashMap<>(); + Map bindingSetAssignmentNonAssignmentsBefore = new IdentityHashMap<>(); + Map bindingSetAssignmentOriginalOrder = new IdentityHashMap<>(); List nonAssignments = new ArrayList<>(segment.size()); + int originalOrder = 0; for (TupleExpr tupleExpr : segment) { Optional> bindingNames = positionableBindingSetAssignmentNames(tupleExpr); if (bindingNames.isPresent()) { bindingSetAssignments.add(tupleExpr); bindingSetAssignmentNames.put(tupleExpr, bindingNames.get()); + bindingSetAssignmentNonAssignmentsBefore.put(tupleExpr, nonAssignments.size()); + bindingSetAssignmentOriginalOrder.put(tupleExpr, originalOrder++); } else { nonAssignments.add(tupleExpr); } @@ -1267,16 +1651,17 @@ private List positionBindingSetAssignmentsInSegment(List s Map> insertions = new HashMap<>(); for (TupleExpr bindingSetAssignment : bindingSetAssignments) { - int insertionIndex = findFirstUsageIndex(bindingSetAssignmentNames.get(bindingSetAssignment), + int firstUsageIndex = findFirstUsageIndex(bindingSetAssignmentNames.get(bindingSetAssignment), referencedVarNames); - insertions.computeIfAbsent(insertionIndex, key -> new ArrayList<>()).add(bindingSetAssignment); + insertions.computeIfAbsent(firstUsageIndex, key -> new ArrayList<>()).add(bindingSetAssignment); } List positioned = new ArrayList<>(segment.size()); for (int i = 0; i <= nonAssignments.size(); i++) { List insertedAssignments = insertions.get(i); if (insertedAssignments != null) { - insertedAssignments.sort(Comparator.comparingInt(this::bindingSetAssignmentPositionPriority)); + insertedAssignments.sort(Comparator.comparingInt(this::bindingSetAssignmentPositionPriority) + .thenComparingInt(bindingSetAssignmentOriginalOrder::get)); positioned.addAll(insertedAssignments); } if (i < nonAssignments.size()) { @@ -1435,7 +1820,7 @@ private List greedyReorderByJoinCardinality(List segment, for (TupleExpr candidate : remaining) { GreedyChoiceMetrics metrics = buildNextGreedyChoiceMetrics(prefixForEstimation, prefixBindingNames, candidate, pendingDeferredFilters, cardinalityCache, factorCostCache, - hasConnectedCandidate); + hasConnectedCandidate, remaining); GreedyChoiceScore score = scoreGreedyChoice(metrics, originalOrder.get(candidate), -1); GreedyChoiceCandidate candidateDecision = new GreedyChoiceCandidate("expand", prefixForEstimation, candidate, metrics, score); @@ -1992,7 +2377,8 @@ private GreedyChoiceMetrics buildInitialGreedyChoiceMetrics(TupleExpr left, Tupl private GreedyChoiceMetrics buildNextGreedyChoiceMetrics(TupleExpr prefixForEstimation, Set prefixBindingNames, TupleExpr candidate, List deferredFilters, - JoinCardinalityCache cardinalityCache, FactorCostCache factorCostCache, boolean hasConnectedCandidate) { + JoinCardinalityCache cardinalityCache, FactorCostCache factorCostCache, boolean hasConnectedCandidate, + List remaining) { Set candidateAvailableVars = getAvailableVars(prefixBindingNames, candidate); int sharedVarCount = sharedJoinVariableCount(candidate, prefixBindingNames); double rawJoinRows = cardinalityCache.get(prefixForEstimation, candidate); @@ -2002,15 +2388,60 @@ private GreedyChoiceMetrics buildNextGreedyChoiceMetrics(TupleExpr prefixForEsti double factorWorkRows = estimateCandidateFactorWorkRows(candidate, prefixBindingNames, factorCostCache); double baseCostRows = factorAwareBaseCostRows(effectiveJoinRows, factorWorkRows, containsLocalFilter(candidate)); + boolean avoidableCrossJoin = sharedVarCount == 0 && hasConnectedCandidate + && !hasPendingBridgeToEndpointConstraint(candidate, prefixBindingNames, remaining, factorCostCache, + factorWorkRows); return new GreedyChoiceMetrics(rawJoinRows, effectiveJoinRows, baseCostRows, factorWorkRows, sharedVarCount, 0, countCompatibleCheapFilters(deferredFilters, candidateAvailableVars), countCompatibleExpensiveFilters(deferredFilters, candidateAvailableVars), - sharedVarCount == 0 && hasConnectedCandidate, false, + avoidableCrossJoin, false, combinedUnlockedFilterPassRatio(deferredFilters, candidateAvailableVars), shouldFloorUnlockedFilterPassRatio(deferredFilters, candidateAvailableVars)); } + private boolean hasPendingBridgeToEndpointConstraint(TupleExpr candidate, Set prefixBindingNames, + List remaining, FactorCostCache factorCostCache, double factorWorkRows) { + if (!(candidate instanceof StatementPattern) + || sharedJoinVariableCount(candidate, prefixBindingNames) != 0) { + return false; + } + Set candidateVars = nonConstantBindingNames(candidate); + if (candidateVars.size() != 1) { + return false; + } + double candidateRows = isFiniteNonNegative(factorWorkRows) + ? factorWorkRows + : statistics.getCardinality(candidate); + if (!isFiniteNonNegative(candidateRows)) { + return false; + } + for (TupleExpr bridge : remaining) { + if (bridge == candidate || bridge instanceof BindingSetAssignment) { + continue; + } + Set bridgeVars = nonConstantBindingNames(bridge); + if (bridgeVars.size() < 2 || Collections.disjoint(bridgeVars, prefixBindingNames) + || Collections.disjoint(bridgeVars, candidateVars)) { + continue; + } + double bridgeRows = estimateCandidateFactorWorkRows(bridge, prefixBindingNames, factorCostCache); + if (!isFiniteNonNegative(bridgeRows)) { + bridgeRows = statistics.getCardinality(bridge); + } + if (isFiniteNonNegative(bridgeRows) && candidateRows <= Math.max(1.0d, bridgeRows)) { + return true; + } + } + return false; + } + + private Set nonConstantBindingNames(TupleExpr tupleExpr) { + Set bindingNames = new LinkedHashSet<>(tupleExpr.getBindingNames()); + bindingNames.removeIf(bindingName -> bindingName.startsWith("_const_")); + return bindingNames; + } + private double factorAwareBaseCostRows(double effectiveJoinRows, double factorWorkRows, boolean hasLocalFilter) { if (!isFiniteNonNegative(factorWorkRows)) { diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java index f6328fb0d4c..fd58f59dbc9 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/FilterOptimizerTest.java @@ -270,8 +270,8 @@ public void standardPipelinePreJoinFilterPassStillPushesFilterBelowJoinWhenOnlyF @Test public void standardPipelineFinalFilterPassAnnotatesSelectivityFromCardinalityStatsUsedForPlacement() { - String query = "SELECT * WHERE {?branch ?branchName . ?copy ?branch . " - + "FILTER(?branchName = \"Branch 0\" && ?branchName != \"Branch 1\") }"; + String query = "SELECT * WHERE {?branch ?rank . ?copy ?branch . " + + "FILTER(?rank = 1 && ?rank != 2) }"; QueryRoot root = new QueryRoot(QueryParserUtil.parseQuery(QueryLanguage.SPARQL, query, null).getTupleExpr()); StandardQueryOptimizerPipeline pipeline = new StandardQueryOptimizerPipeline( @@ -290,7 +290,7 @@ public void standardPipelineFinalFilterPassAnnotatesSelectivityFromCardinalitySt .satisfies(filter -> { assertThat(filter.getArg()).isInstanceOf(StatementPattern.class); assertThat(filter.getDoubleMetricPlanned(TelemetryMetricNames.PLANNED_FILTER_PASS_RATIO)) - .isEqualTo(0.2d); + .isEqualTo(1.0d); assertThat(filter.getStringMetricPlanned(TelemetryMetricNames.FILTER_SELECTIVITY_SOURCE)) .isEqualTo("cardinality"); }); diff --git a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java index d7bb23033e8..58fc6af45f0 100644 --- a/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java +++ b/core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/impl/QueryJoinOptimizerTest.java @@ -491,9 +491,40 @@ public void optimizeInvokesPlannerSpiWhenStatisticsProvidesPlan() { assertThat(statistics.planCalls) .as("QueryJoinOptimizer should delegate segment ordering to JoinOrderPlanner when available") .isEqualTo(1); + assertThat(statistics.joinCardinalityCalls) + .as("Planner-provided orders should bypass clone-based greedy join-cardinality scoring") + .isZero(); assertThat(predicates(flattenJoinLeaves(root.getArg()))).containsExactly(ex("pC"), ex("pB"), ex("pA")); } + @Test + public void optimizeDoesNotUseCloneBasedGreedyWhenPlannerProvidesDenseCyclePlan() { + BindingSetAssignment userPairValues = bindingSetAssignment(Map.of( + "u1", ex("social/user/0"), + "u2", ex("social/user/1"))); + BindingSetAssignment user3Values = bindingSetAssignment(Map.of("u3", ex("social/user/2"))); + StatementPattern u1FollowsU2 = statementPattern("u1", "u2", social("follows")); + StatementPattern u1FollowsU3 = statementPattern("u1", "u3", social("follows")); + StatementPattern u2FollowsU1 = statementPattern("u2", "u1", social("follows")); + StatementPattern u3FollowsU1 = statementPattern("u3", "u1", social("follows")); + StatementPattern u2FollowsU3 = statementPattern("u2", "u3", social("follows")); + StatementPattern u3FollowsU2 = statementPattern("u3", "u2", social("follows")); + List plannedOrder = List.of(userPairValues, user3Values, u1FollowsU2, u1FollowsU3, + u2FollowsU1, u3FollowsU1, u2FollowsU3, u3FollowsU2); + TupleExpr rootArg = new Join(new Join(new Join(new Join(new Join(new Join(new Join(userPairValues, + user3Values), u1FollowsU2), u1FollowsU3), u2FollowsU1), u3FollowsU1), u2FollowsU3), u3FollowsU2); + PlannerStatistics statistics = new PlannerStatistics(plannedOrder, plannedOrder); + + new QueryJoinOptimizer(statistics, new EmptyTripleSource()).optimize(new QueryRoot(rootArg), null, null); + + assertThat(statistics.planCalls) + .as("Dense cyclic planner-supported segments should be delegated once") + .isEqualTo(1); + assertThat(statistics.joinCardinalityCalls) + .as("Dense cyclic planner-supported segments must not enter greedy clone-based scoring") + .isZero(); + } + @Test public void optimizeNormalizesPlannerOutputBindingsBeforeFirstUse() { BindingSetAssignment uValues = bindingSetAssignment("u", "u1"); @@ -767,6 +798,74 @@ public void optimizeLetsSelectiveLocalFilterOutputBeatBroadWorkRows() { .isLessThan(leafPredicates.indexOf(medical("hasEncounter"))); } + @Test + public void optimizeAddsValuesAnchorForMustBoundStringInFilter() { + QueryRoot root = optimizeWithStatistics(String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:name ?name .", + " ?s ex:type ?type .", + " FILTER (?name IN (\"Alice\", \"Bob\", \"Alice\"))", + "}"), new EvaluationStatistics()); + + List assignments = bindingSetAssignments(root, "name"); + assertThat(assignments) + .as("A must-bound string IN filter can be represented as a same-term VALUES semijoin") + .hasSize(1); + assertThat(assignments.get(0).getBindingSets()) + .as("VALUES rows should be deduplicated by RDF-term identity") + .hasSize(2); + } + + @Test + public void optimizeDoesNotAddValuesAnchorForBindProducedInFilterVariable() { + QueryRoot root = optimizeWithStatistics(String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:p ?o .", + " BIND((1 / 0) AS ?name)", + " ?s ex:q ?q .", + " FILTER (?name IN (\"Alice\", \"Bob\"))", + "}"), new EvaluationStatistics()); + + assertThat(bindingSetAssignments(root, "name")) + .as("BIND is not a must-bind proof: expression errors leave ?name unbound") + .isEmpty(); + } + + @Test + public void optimizeDoesNotAddValuesAnchorForUnknownTypeValueEqualityInFilter() { + assertThat(bindingSetAssignments(optimizeWithStatistics(String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:value ?value .", + " ?s ex:type ?type .", + " FILTER (?value IN (1, 2.0))", + "}"), new EvaluationStatistics()), "value")) + .as("Numeric IN equality can match non-identical RDF terms, so same-term VALUES is unsafe") + .isEmpty(); + + assertThat(bindingSetAssignments(optimizeWithStatistics(String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:value ?value .", + " ?s ex:type ?type .", + " FILTER (?value IN (\"true\"^^))", + "}"), new EvaluationStatistics()), "value")) + .as("Boolean IN equality is value equality, not RDF-term identity") + .isEmpty(); + + assertThat(bindingSetAssignments(optimizeWithStatistics(String.join("\n", + "PREFIX ex: ", + "SELECT * WHERE {", + " ?s ex:value ?value .", + " ?s ex:type ?type .", + " FILTER (?value IN (\"2020-01-01T00:00:00Z\"^^))", + "}"), new EvaluationStatistics()), "value")) + .as("dateTime IN equality is value equality, not RDF-term identity") + .isEmpty(); + } + @Test public void optimizeGroupsCheapValuesFilterBeforeCycleJoinAndExists() { BindingSetAssignment userPairValues = bindingSetAssignment(Map.of( @@ -1002,6 +1101,20 @@ public void meet(Filter filter) throws RuntimeException { return filters.get(0); } + private static List bindingSetAssignments(QueryModelNode root, String bindingName) { + List assignments = new ArrayList<>(); + root.visit(new AbstractQueryModelVisitor() { + @Override + public void meet(BindingSetAssignment assignment) throws RuntimeException { + if (assignment.getBindingNames().contains(bindingName)) { + assignments.add(assignment); + } + super.meet(assignment); + } + }); + return assignments; + } + private Object buildJoinVisitor(QueryJoinOptimizer optimizer) throws Exception { Class joinVisitorClass = Class .forName("org.eclipse.rdf4j.query.algebra.evaluation.optimizer.QueryJoinOptimizer$JoinVisitor"); @@ -1289,6 +1402,7 @@ private static final class PlannerStatistics extends EvaluationStatistics implem private final List expectedArgs; private List filterConstraints = List.of(); private int planCalls; + private int joinCardinalityCalls; private PlannerStatistics(List orderedArgs) { this(orderedArgs, List.of(orderedArgs.get(2), orderedArgs.get(1), orderedArgs.get(0))); @@ -1306,6 +1420,9 @@ public boolean supportsJoinEstimation() { @Override public double getCardinality(TupleExpr expr) { + if (expr instanceof Join) { + joinCardinalityCalls++; + } return 10.0d; } diff --git a/core/queryrender/src/main/java/org/eclipse/rdf4j/queryrender/sparql/ir/util/transform/UnwrapSingleBgpInUnionBranchesTransform.java b/core/queryrender/src/main/java/org/eclipse/rdf4j/queryrender/sparql/ir/util/transform/UnwrapSingleBgpInUnionBranchesTransform.java index 861be8828a0..f59721e5bf0 100644 --- a/core/queryrender/src/main/java/org/eclipse/rdf4j/queryrender/sparql/ir/util/transform/UnwrapSingleBgpInUnionBranchesTransform.java +++ b/core/queryrender/src/main/java/org/eclipse/rdf4j/queryrender/sparql/ir/util/transform/UnwrapSingleBgpInUnionBranchesTransform.java @@ -81,10 +81,36 @@ private static IrUnion unwrapUnionBranches(IrUnion u) { } cur = flattened; } + cur = flattenNonScopedChildBgps(cur); // Reapply the accumulated scope to the flattened branch BGP cur.setNewScope(branchScope); u2.addBranch(cur); } return u2; } + + private static IrBGP flattenNonScopedChildBgps(IrBGP bgp) { + List flattened = new ArrayList<>(); + boolean changed = false; + for (IrNode line : bgp.getLines()) { + if (line instanceof IrBGP && !((IrBGP) line).isNewScope() + && !containsScopedContainer((IrBGP) line)) { + flattened.addAll(flattenNonScopedChildBgps((IrBGP) line).getLines()); + changed = true; + } else { + flattened.add(line); + } + } + return changed ? BaseTransform.bgpWithLines(bgp, flattened) : bgp; + } + + private static boolean containsScopedContainer(IrBGP bgp) { + for (IrNode line : bgp.getLines()) { + if (line instanceof IrGraph || line instanceof IrOptional || line instanceof IrMinus + || line instanceof IrService || line instanceof IrSubSelect || line instanceof IrUnion) { + return true; + } + } + return false; + } } diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java index 440755d9c60..acc1876f084 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimator.java @@ -1776,6 +1776,8 @@ private void applyTo(SketchBasedJoinEstimator estimator, State state, byte slot) private static final int PARALLEL_INGEST_MIN_BATCH_SIZE = INCREMENTAL_BATCH_SIZE; private static final int PARALLEL_INGEST_MAX_BATCH_SIZE = INCREMENTAL_BATCH_SIZE * 2; private static final int REBUILD_BATCH_SIZE = PARALLEL_INGEST_MAX_BATCH_SIZE; + private static final int BOUNDED_REBUILD_BUDGET_CHECK_INTERVAL = 1024; + private static final long BULK_REBUILD_WITH_PERSISTENCE_MIN_HEAP_BYTES = 16L * 1024L * 1024L * 1024L; private final Object incrementalBufferLock = new Object(); private final Object asyncIncrementalDrainLock = new Object(); private final BlockingQueue asyncIncrementalBatches = new ArrayBlockingQueue<>( @@ -2734,6 +2736,10 @@ private void ingestRebuildBatch(State state, IngestEvent[] batch, int batchSize) if (batchSize == 0) { return; } + if (shouldUseBoundedPersistenceRebuild()) { + ingestBoundedRebuildBatch(state, batch, batchSize); + return; + } if (batchSize < PARALLEL_INGEST_MIN_BATCH_SIZE) { for (int i = 0; i < batchSize; i++) { IngestEvent event = batch[i]; @@ -2761,6 +2767,29 @@ private void ingestRebuildBatch(State state, IngestEvent[] batch, int batchSize) } } + private boolean shouldUseBoundedPersistenceRebuild() { + if (persistenceBlobBaseFile == null) { + return false; + } + Runtime runtime = Runtime.getRuntime(); + long maxHeap = runtime.maxMemory(); + return maxHeap < BULK_REBUILD_WITH_PERSISTENCE_MIN_HEAP_BYTES + || availableHeapHeadroomBytes() < BULK_REBUILD_WITH_PERSISTENCE_MIN_HEAP_BYTES / 2; + } + + private void ingestBoundedRebuildBatch(State state, IngestEvent[] batch, int batchSize) { + for (int i = 0; i < batchSize; i++) { + IngestEvent event = batch[i]; + if (event != null) { + applyBoundedRebuildIngestEvent(state, event); + } + if ((i + 1) % BOUNDED_REBUILD_BUDGET_CHECK_INTERVAL == 0) { + enforceSketchBudget(); + } + } + enforceSketchBudget(); + } + private void applyRebuildPartition(State state, IngestEvent[] batch, int batchSize, IngestPartition partition) { for (int i = 0; i < batchSize; i++) { IngestEvent event = batch[i]; @@ -2894,6 +2923,63 @@ private void applyRebuildIngestEvent(State state, IngestEvent event, IngestParti } } + private void applyBoundedRebuildIngestEvent(State state, IngestEvent event) { + applyBoundedRebuildSingleUpdates(state, event); + applyBoundedRebuildPair(state, Pair.SP, event.isDelete, event.spKey, event.thetaSig, event.thetaHo, + event.thetaHc); + applyBoundedRebuildPair(state, Pair.SO, event.isDelete, event.soKey, event.thetaSig, event.thetaHp, + event.thetaHc); + applyBoundedRebuildPair(state, Pair.SC, event.isDelete, event.scKey, event.thetaSig, event.thetaHp, + event.thetaHo); + applyBoundedRebuildPair(state, Pair.PO, event.isDelete, event.poKey, event.thetaSig, event.thetaHs, + event.thetaHc); + applyBoundedRebuildPair(state, Pair.PC, event.isDelete, event.pcKey, event.thetaSig, event.thetaHs, + event.thetaHo); + applyBoundedRebuildPair(state, Pair.OC, event.isDelete, event.ocKey, event.thetaSig, event.thetaHs, + event.thetaHp); + } + + private void applyBoundedRebuildSingleUpdates(State state, IngestEvent event) { + boolean isDelete = event.isDelete; + int si = event.si; + int pi = event.pi; + int oi = event.oi; + int ci = event.ci; + long thetaHs = event.thetaHs; + long thetaHp = event.thetaHp; + long thetaHo = event.thetaHo; + long thetaHc = event.thetaHc; + long thetaSig = event.thetaSig; + + updateSingleSketchRaw(state, isDelete, Component.S, si, thetaSig); + updateSingleSketchRaw(state, isDelete, Component.P, pi, thetaSig); + updateSingleSketchRaw(state, isDelete, Component.O, oi, thetaSig); + updateSingleSketchRaw(state, isDelete, Component.C, ci, thetaSig); + + updateComplementSketchRaw(state, isDelete, Component.S, Component.P, si, thetaHp); + updateComplementSketchRaw(state, isDelete, Component.S, Component.O, si, thetaHo); + updateComplementSketchRaw(state, isDelete, Component.S, Component.C, si, thetaHc); + + updateComplementSketchRaw(state, isDelete, Component.P, Component.S, pi, thetaHs); + updateComplementSketchRaw(state, isDelete, Component.P, Component.O, pi, thetaHo); + updateComplementSketchRaw(state, isDelete, Component.P, Component.C, pi, thetaHc); + + updateComplementSketchRaw(state, isDelete, Component.O, Component.S, oi, thetaHs); + updateComplementSketchRaw(state, isDelete, Component.O, Component.P, oi, thetaHp); + updateComplementSketchRaw(state, isDelete, Component.O, Component.C, oi, thetaHc); + + updateComplementSketchRaw(state, isDelete, Component.C, Component.S, ci, thetaHs); + updateComplementSketchRaw(state, isDelete, Component.C, Component.P, ci, thetaHp); + updateComplementSketchRaw(state, isDelete, Component.C, Component.O, ci, thetaHo); + } + + private void applyBoundedRebuildPair(State state, Pair pair, boolean isDelete, long key, long triple, long comp1, + long comp2) { + updatePairSketchRaw(state, isDelete, pair, REC_PAIR_TRIPLE, key, triple); + updatePairSketchRaw(state, isDelete, pair, REC_PAIR_COMP1, key, comp1); + updatePairSketchRaw(state, isDelete, pair, REC_PAIR_COMP2, key, comp2); + } + private void applyRebuildSingleUpdates(State state, IngestEvent event) { boolean isDelete = event.isDelete; int si = event.si; @@ -4266,7 +4352,36 @@ private boolean isSupportedJoinOrderingFactor(TupleExpr tupleExpr) { || current instanceof Slice) { current = ((UnaryTupleOperator) current).getArg(); } - return current instanceof StatementPattern || current instanceof BindingSetAssignment; + if (current instanceof StatementPattern || current instanceof BindingSetAssignment) { + return true; + } + if (current instanceof Join) { + Join join = (Join) current; + return isSmallBindingSetAssignmentLookupJoin(join.getLeftArg(), join.getRightArg()) + || isSmallBindingSetAssignmentLookupJoin(join.getRightArg(), join.getLeftArg()); + } + return false; + } + + private boolean isSmallBindingSetAssignmentLookupJoin(TupleExpr assignmentArg, TupleExpr lookupArg) { + return assignmentArg instanceof BindingSetAssignment + && lookupArg instanceof StatementPattern + && isSmallBindingSetAssignment((BindingSetAssignment) assignmentArg); + } + + private boolean isSmallBindingSetAssignment(BindingSetAssignment assignment) { + Iterable bindingSets = assignment.getBindingSets(); + if (bindingSets == null) { + return true; + } + double rows = 0.0d; + for (BindingSet ignored : bindingSets) { + rows++; + if (rows > SketchJoinOrderPlanner.SMALL_BINDING_SET_ASSIGNMENT_MAX_ROWS) { + return false; + } + } + return true; } private TuplePlanEstimate estimatePatternTupleExprPlan(PatternEstimateInput input) { @@ -4384,6 +4499,11 @@ private TuplePlanEstimate applyInitiallyBoundVars(TuplePlanEstimate estimate, Se } private JoinStepEstimate estimateJoinStep(TuplePlanEstimate left, TuplePlanEstimate right) { + return estimateJoinStep(left, right, null); + } + + private JoinStepEstimate estimateJoinStep(TuplePlanEstimate left, TuplePlanEstimate right, + JoinOrderingSketchIntersectionCache sketchIntersectionCache) { if (left.outputRows <= 0.0d || right.baseRows <= 0.0d) { return new JoinStepEstimate(0.0d, 0.0d, Collections.emptyMap()); } @@ -4397,7 +4517,7 @@ private JoinStepEstimate estimateJoinStep(TuplePlanEstimate left, TuplePlanEstim continue; } SharedVarEstimate shared = estimateSharedVarJoin(left.outputRows, right.baseRows, entry.getValue(), - rightStats, disconnectedRows); + rightStats, disconnectedRows, sketchIntersectionCache); if (shared.rows == 0.0d && left.localFilterMultiplier == 1.0d && right.localFilterMultiplier == 1.0d && entry.getValue().pattern != null && rightStats.pattern != null) { Double exactJoinRows = zeroIntersectionFallbackJoinRows(entry.getValue().pattern, rightStats.pattern, @@ -4450,6 +4570,52 @@ JoinStepEstimate estimateJoinStepForJoinOrdering(TuplePlanEstimate left, TuplePl return estimateJoinStep(left, right); } + JoinStepEstimate estimateJoinStepForJoinOrdering(TuplePlanEstimate left, TuplePlanEstimate right, + JoinOrderingSketchIntersectionCache sketchIntersectionCache) { + return estimateJoinStep(left, right, sketchIntersectionCache); + } + + JoinStepEstimate boundLookupJoinStepForJoinOrdering(TuplePlanEstimate prefix, TuplePlanEstimate right, + double workRows) { + double outputRows = normalizeRows(prefix.outputRows); + Map mergedStats = new HashMap<>(prefix.varStats); + for (Map.Entry entry : right.varStats.entrySet()) { + mergedStats.putIfAbsent(entry.getKey(), + new VarPlanStats(clampDistinct(entry.getValue().distinct, outputRows), null, + entry.getValue().pattern)); + } + return new JoinStepEstimate(outputRows, normalizeRows(workRows), mergedStats); + } + + JoinStepEstimate joinStepWithOutputRowsForJoinOrdering(TuplePlanEstimate prefix, TuplePlanEstimate right, + double outputRows, double workRows) { + double rows = normalizeRows(outputRows); + Map mergedStats = new HashMap<>(); + for (Map.Entry entry : prefix.varStats.entrySet()) { + VarPlanStats stats = entry.getValue(); + mergedStats.put(entry.getKey(), new VarPlanStats(clampDistinct(stats.distinct, rows), null, + stats.pattern)); + } + for (Map.Entry entry : right.varStats.entrySet()) { + if (mergedStats.containsKey(entry.getKey())) { + continue; + } + VarPlanStats stats = entry.getValue(); + mergedStats.put(entry.getKey(), new VarPlanStats(clampDistinct(stats.distinct, rows), null, + stats.pattern)); + } + return new JoinStepEstimate(rows, normalizeRows(workRows), mergedStats); + } + + JoinStepEstimate distinctCountJoinStepForJoinOrdering(TuplePlanEstimate left, TuplePlanEstimate right) { + return estimateJoinStep(withoutSketches(left), withoutSketches(right)); + } + + private TuplePlanEstimate withoutSketches(TuplePlanEstimate estimate) { + return new TuplePlanEstimate(estimate.baseRows, estimate.outputRows, estimate.localFilterMultiplier, + clampVarStatsToRows(estimate.varStats, estimate.outputRows, false)); + } + TuplePlanEstimate joinedPlanEstimate(JoinStepEstimate step) { return new TuplePlanEstimate(step.outputRows, step.outputRows, 1.0d, step.varStats); } @@ -4470,15 +4636,16 @@ boolean hasSharedJoinVariable(TuplePlanEstimate left, TuplePlanEstimate right) { } private SharedVarEstimate estimateSharedVarJoin(double leftRows, double rightRows, VarPlanStats leftStats, - VarPlanStats rightStats, double disconnectedRows) { + VarPlanStats rightStats, double disconnectedRows, + JoinOrderingSketchIntersectionCache sketchIntersectionCache) { double leftDistinct = Math.max(1.0d, leftStats.distinct); double rightDistinct = Math.max(1.0d, rightStats.distinct); if (leftStats.sketch != null && rightStats.sketch != null) { - Intersection ix = SetOperation.builder().buildIntersection(); - ix.intersect(leftStats.sketch); - ix.intersect(rightStats.sketch); - Sketch intersection = ix.getResult(); - double distinct = Math.max(0.0d, intersection.getEstimate()); + SketchIntersectionResult intersectionResult = sketchIntersectionCache == null + ? intersectJoinOrderingSketches(leftStats.sketch, rightStats.sketch) + : sketchIntersectionCache.intersect(leftStats.sketch, rightStats.sketch); + Sketch intersection = intersectionResult.sketch; + double distinct = Math.min(intersectionResult.distinct, Math.min(leftDistinct, rightDistinct)); if (distinct == 0.0d) { return new SharedVarEstimate(0.0d, 0.0d, intersection); } @@ -4496,6 +4663,18 @@ private SharedVarEstimate estimateSharedVarJoin(double leftRows, double rightRow return new SharedVarEstimate(normalizeRows(rows), Math.min(leftDistinct, rightDistinct), null); } + private static SketchIntersectionResult intersectJoinOrderingSketches(Sketch left, Sketch right) { + Intersection ix = SetOperation.builder().buildIntersection(); + ix.intersect(left); + ix.intersect(right); + Sketch intersection = ix.getResult(); + return new SketchIntersectionResult(Math.max(0.0d, intersection.getEstimate()), intersection); + } + + JoinOrderingSketchIntersectionCache newJoinOrderingSketchIntersectionCache() { + return new JoinOrderingSketchIntersectionCache(); + } + private double normalizeRows(double rows) { if (!Double.isFinite(rows) || rows < 0.0d) { return rows < 0.0d ? -1.0d : Double.MAX_VALUE; @@ -4555,6 +4734,11 @@ Set joinVars() { return Set.copyOf(varStats.keySet()); } + double distinct(String varName) { + VarPlanStats stats = varStats.get(varName); + return stats == null ? 0.0d : stats.distinct; + } + String summary() { return "baseRows=" + baseRows + ", outputRows=" + outputRows + ", filterMultiplier=" + localFilterMultiplier + ", joinVars=" + summarizeVarStats(varStats); @@ -4589,6 +4773,54 @@ private SharedVarEstimate(double rows, double distinct, Sketch sketch) { } } + static final class JoinOrderingSketchIntersectionCache { + private final Map intersections = new HashMap<>(); + + private SketchIntersectionResult intersect(Sketch left, Sketch right) { + return intersections.computeIfAbsent(new SketchPairKey(left, right), + ignored -> intersectJoinOrderingSketches(left, right)); + } + } + + private static final class SketchIntersectionResult { + private final double distinct; + private final Sketch sketch; + + private SketchIntersectionResult(double distinct, Sketch sketch) { + this.distinct = distinct; + this.sketch = sketch; + } + } + + private static final class SketchPairKey { + private final Sketch left; + private final Sketch right; + private final int hashCode; + + private SketchPairKey(Sketch left, Sketch right) { + this.left = left; + this.right = right; + this.hashCode = System.identityHashCode(left) ^ System.identityHashCode(right); + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (!(other instanceof SketchPairKey)) { + return false; + } + SketchPairKey that = (SketchPairKey) other; + return left == that.left && right == that.right || left == that.right && right == that.left; + } + + @Override + public int hashCode() { + return hashCode; + } + } + static final class JoinStepEstimate { private final double outputRows; private final double workRows; @@ -4867,7 +5099,7 @@ private TuplePlanEstimate estimateBindingSetAssignmentJoinPlan(TupleExpr leftArg TupleExpr otherArg = leftAssignment ? rightArg : leftArg; Set sharedNames = new HashSet<>(assignment.getBindingNames()); sharedNames.retainAll(otherArg.getBindingNames()); - if (sharedNames.size() <= 1) { + if (sharedNames.isEmpty() || !isSmallBindingSetAssignment(assignment)) { return null; } @@ -4952,14 +5184,87 @@ public void meet(Var var) { private TuplePlanEstimate estimateBoundTupleExprPlan(TupleExpr tupleExpr, Set initiallyBoundVars) { if (tupleExpr instanceof StatementPattern) { - Double exactRows = exactBoundStatementPatternRows((StatementPattern) tupleExpr); - if (exactRows != null) { - return new TuplePlanEstimate(exactRows, exactRows, 1.0d, Collections.emptyMap()); + TuplePlanEstimate exactPlan = exactBoundStatementPatternPlan((StatementPattern) tupleExpr); + if (exactPlan != null) { + return exactPlan; } } return estimateTupleExprPlan(tupleExpr, initiallyBoundVars); } + private TuplePlanEstimate exactBoundStatementPatternPlan(StatementPattern pattern) { + if (boundComponentCount(pattern) < 2) { + return null; + } + if (hasIncompatibleBoundResource(pattern.getSubjectVar()) + || hasIncompatibleBoundPredicate(pattern.getPredicateVar()) + || hasIncompatibleBoundResource(pattern.getContextVar())) { + return new TuplePlanEstimate(0.0d, 0.0d, 1.0d, Collections.emptyMap()); + } + + Resource subject = exactBoundResource(pattern.getSubjectVar()); + IRI predicate = exactBoundIri(pattern.getPredicateVar()); + Value object = exactBoundValue(pattern.getObjectVar()); + Resource[] contexts = exactBoundContexts(pattern.getContextVar()); + if (contexts == null) { + return new TuplePlanEstimate(0.0d, 0.0d, 1.0d, Collections.emptyMap()); + } + + double rows = 0.0d; + Map> distinctValues = new HashMap<>(); + try (SailDataset dataset = sailStore.getExplicitSailSource().dataset(IsolationLevels.READ_COMMITTED); + CloseableIteration statements = dataset.getStatements(subject, predicate, object, + contexts)) { + while (statements.hasNext()) { + Statement statement = statements.next(); + if (!statementMatchesPatternVariableEqualities(pattern, statement)) { + continue; + } + rows++; + if (rows > zeroIntersectionRowBudget) { + return null; + } + collectExactPatternVarValues(pattern, statement, distinctValues); + } + } catch (SailException e) { + logger.debug("Falling back from exact bound pattern lookup for {}", pattern, e); + return null; + } + + rows = normalizeRows(rows); + Map varStats = new HashMap<>(); + for (Map.Entry> entry : distinctValues.entrySet()) { + varStats.put(entry.getKey(), new VarPlanStats(clampDistinct(entry.getValue().size(), rows), null, + pattern)); + } + return new TuplePlanEstimate(rows, rows, 1.0d, varStats); + } + + private int boundComponentCount(StatementPattern pattern) { + int count = 0; + for (Component component : COMPONENT_VALUES) { + Var var = varForComponent(pattern, component); + if (hasBoundValue(var)) { + count++; + } + } + return count; + } + + private void collectExactPatternVarValues(StatementPattern pattern, Statement statement, + Map> distinctValues) { + for (Component component : COMPONENT_VALUES) { + Var var = varForComponent(pattern, component); + if (var == null || var.hasValue() || var.getName() == null) { + continue; + } + Value value = statementValue(statement, component); + if (value != null) { + distinctValues.computeIfAbsent(var.getName(), ignored -> new HashSet<>()).add(value); + } + } + } + private Double exactBoundStatementPatternRows(StatementPattern pattern) { Var subjectVar = pattern.getSubjectVar(); Var predicateVar = pattern.getPredicateVar(); diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java index 1f9aedbc26f..34d4547779f 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlanner.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.OptionalDouble; import java.util.Set; import java.util.TreeSet; @@ -30,6 +31,7 @@ import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; import org.eclipse.rdf4j.query.explanation.TelemetryMetricNames; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,17 +40,30 @@ final class SketchJoinOrderPlanner { static final int MAX_DYNAMIC_PROGRAMMING_JOIN_ARGS = 20; + private static final String TRACE_DIAGNOSTICS_PROPERTY = "rdf4j.optimizer.sketchPlanner.traceDiagnostics"; + private static final double CHEAP_UNLOCKED_FILTER_SCORE_RATIO = 0.25d; + static final double SMALL_BINDING_SET_ASSIGNMENT_MAX_ROWS = 64.0d; + private static final double SMALL_BINDING_SET_ASSIGNMENT_SCORE_RATIO = 0.05d; + private static final double PENDING_SMALL_VALUES_ANCHOR_FILTER_PENALTY = 4.0d; + private static final double BROAD_EDGE_PENDING_CONSTRAINT_PENALTY = 4.0d; + private static final double MAX_BROAD_EDGE_PENDING_CONSTRAINT_PENALTY = 1024.0d; + private static final double BROAD_EDGE_MIN_ROWS = 1024.0d; private static final Logger logger = LoggerFactory.getLogger(SketchJoinOrderPlanner.class); private final SketchBasedJoinEstimator estimator; private final SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster; + private final SketchBasedJoinEstimator.JoinOrderingSketchIntersectionCache sketchIntersectionCache; private final List factors; private final Set initiallyBoundVars; private final Map> variablesMemo = new HashMap<>(); + private final Map> boundVariablesMemo = new HashMap<>(); + private final Map> candidatesMemo = new HashMap<>(); + private final Map transitionEstimateMemo = new HashMap<>(); private final SketchBasedJoinEstimator.SketchPlannerPath factorRejectionPath; private final TupleExpr rejectedFactor; private final List deferredFilters; private final List diagnostics = new ArrayList<>(); + private final boolean traceDiagnostics; SketchJoinOrderPlanner(SketchBasedJoinEstimator estimator, SketchBasedJoinEstimator.JoinOrderWorkAdjuster workAdjuster, @@ -64,10 +79,12 @@ final class SketchJoinOrderPlanner { List deferredFilters) { this.estimator = Objects.requireNonNull(estimator, "estimator"); this.workAdjuster = Objects.requireNonNull(workAdjuster, "workAdjuster"); + this.sketchIntersectionCache = estimator.newJoinOrderingSketchIntersectionCache(); this.initiallyBoundVars = initiallyBoundVars == null || initiallyBoundVars.isEmpty() ? Set.of() : Set.copyOf(initiallyBoundVars); this.deferredFilters = deferredFilters == null || deferredFilters.isEmpty() ? List.of() : List.copyOf(deferredFilters); + this.traceDiagnostics = Boolean.getBoolean(TRACE_DIAGNOSTICS_PROPERTY); FactorBuildResult factorBuildResult = buildFactors(expressions); this.factors = factorBuildResult.factors(); this.factorRejectionPath = factorBuildResult.rejectionPath(); @@ -106,7 +123,6 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { StatePlan result = switch (algorithm) { case DYNAMIC_PROGRAMMING -> optimizeDynamicProgramming(); -// optimizeGreedy(); case GREEDY -> optimizeGreedy(); }; if (result == null) { @@ -121,12 +137,16 @@ PlanOutcome plan(JoinOrderPlanner.Algorithm algorithm) { orderedArgs.add(factors.get(index.intValue()).tupleExpr()); } recordDebug("result: order=" + describeExprOrder(orderedArgs) + " estimate=" + result.estimate().summary() - + " totalWork=" + result.totalWork()); - Map summaryStringMetrics = Map.of( - TelemetryMetricNames.PLANNER_ID, "sketch", - TelemetryMetricNames.PLANNER_ALGORITHM, algorithm.name(), - TelemetryMetricNames.PLANNER_PATH, + + " workRows=" + result.totalWork()); + Map summaryStringMetrics = new HashMap<>(); + summaryStringMetrics.put(TelemetryMetricNames.PLANNER_ID, "sketch"); + summaryStringMetrics.put(TelemetryMetricNames.PLANNER_ALGORITHM, algorithm.name()); + summaryStringMetrics.put(TelemetryMetricNames.PLANNER_PATH, SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED.name()); + if (traceDiagnostics && !diagnostics.isEmpty()) { + summaryStringMetrics.put(TelemetryMetricNames.OPTIMIZER_PLANNER_DIAGNOSTICS, + summarizeDiagnostics(diagnostics)); + } Map summaryDoubleMetrics = Map.of( TelemetryMetricNames.PLANNED_WORK_ROWS, result.totalWork()); return new PlanOutcome(Optional.of(new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), @@ -136,40 +156,66 @@ summaryDoubleMetrics, buildPlanSteps(result.order()))), } private FactorBuildResult buildFactors(List expressions) { - List builtFactors = new ArrayList<>(expressions.size()); + List pendingFactors = new ArrayList<>(expressions.size()); + LinkedHashSet providedVars = new LinkedHashSet<>(initiallyBoundVars); for (int i = 0; i < expressions.size(); i++) { TupleExpr tupleExpr = expressions.get(i); SketchBasedJoinEstimator.TuplePlanEstimate estimate = estimator.factorEstimateForJoinOrdering(tupleExpr, initiallyBoundVars); if (estimate == null) { - return new FactorBuildResult(List.copyOf(builtFactors), unsupportedPath(tupleExpr), tupleExpr); + return new FactorBuildResult(List.of(), unsupportedPath(tupleExpr), tupleExpr); } if (estimate.joinVars().isEmpty() || estimate.joinVars().size() > 2) { - return new FactorBuildResult(List.copyOf(builtFactors), - SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, tupleExpr); + return new FactorBuildResult(List.of(), SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE, + tupleExpr); } - builtFactors.add(new PlanFactor(i, tupleExpr, estimate)); + providedVars.addAll(estimate.joinVars()); + pendingFactors.add(new PendingPlanFactor(i, tupleExpr, estimate)); + } + List builtFactors = new ArrayList<>(pendingFactors.size()); + for (PendingPlanFactor pending : pendingFactors) { + Set connectivityVars = connectivityVars(pending.tupleExpr(), pending.estimate().joinVars(), + providedVars); + builtFactors.add(new PlanFactor(pending.index(), pending.tupleExpr(), pending.estimate(), + connectivityVars, Set.copyOf(pending.tupleExpr().getBindingNames()))); } return new FactorBuildResult(List.copyOf(builtFactors), null, null); } + private static Set connectivityVars(TupleExpr tupleExpr, Set joinVars, Set providedVars) { + LinkedHashSet variables = new LinkedHashSet<>(joinVars); + addProvidedFilterConditionVars(tupleExpr, providedVars, variables); + return Set.copyOf(variables); + } + + private static void addProvidedFilterConditionVars(TupleExpr tupleExpr, Set providedVars, + Set variables) { + if (!(tupleExpr instanceof Filter filter)) { + return; + } + for (String conditionVar : VarNameCollector.process(filter.getCondition())) { + if (providedVars.contains(conditionVar)) { + variables.add(conditionVar); + } + } + addProvidedFilterConditionVars(filter.getArg(), providedVars, variables); + } + private SketchBasedJoinEstimator.SketchPlannerPath classifyGraph() { int physicalComponents = physicalComponentCount(); if (physicalComponents > 1 && !isConnectedWithDeferredFilters()) { return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_SHAPE; } - if (hasMultiSharedVariableAttachment()) { - return SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_MULTI_SHARED_VAR; - } int edgeCount = 0; Set variables = new LinkedHashSet<>(); for (PlanFactor factor : factors) { edgeCount += factor.arity(); - variables.addAll(factor.joinVars()); + variables.addAll(factor.connectivityVars()); } - return edgeCount == factors.size() + variables.size() - physicalComponents - ? null - : SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE; + boolean cyclicOrDense = edgeCount != factors.size() + variables.size() - physicalComponents; + recordDebug("graph classification: physicalComponents=" + physicalComponents + " variables=" + + new TreeSet<>(variables) + " edgeCount=" + edgeCount + " cyclicOrDense=" + cyclicOrDense); + return null; } private int physicalComponentCount() { @@ -193,7 +239,7 @@ private void visitPhysicalComponent(int startFactor, Set seenFactors) { while (!queue.isEmpty()) { Object next = queue.removeFirst(); if (next instanceof Integer factorIndex) { - for (String variable : factors.get(factorIndex.intValue()).joinVars()) { + for (String variable : factors.get(factorIndex.intValue()).connectivityVars()) { if (seenVariables.add(variable)) { queue.addLast(variable); } @@ -202,7 +248,7 @@ private void visitPhysicalComponent(int startFactor, Set seenFactors) { } String variable = (String) next; for (int i = 0; i < factors.size(); i++) { - if (!seenFactors.contains(i) && factors.get(i).joinVars().contains(variable)) { + if (!seenFactors.contains(i) && factors.get(i).connectivityVars().contains(variable)) { seenFactors.add(i); queue.addLast(Integer.valueOf(i)); } @@ -219,7 +265,7 @@ private boolean isConnectedWithDeferredFilters() { while (!queue.isEmpty()) { Object next = queue.removeFirst(); if (next instanceof Integer factorIndex) { - for (String variable : factors.get(factorIndex.intValue()).joinVars()) { + for (String variable : factors.get(factorIndex.intValue()).connectivityVars()) { if (seenVariables.add(variable)) { queue.addLast(variable); } @@ -228,7 +274,7 @@ private boolean isConnectedWithDeferredFilters() { } String variable = (String) next; for (int i = 0; i < factors.size(); i++) { - if (!seenFactors.contains(i) && factors.get(i).joinVars().contains(variable)) { + if (!seenFactors.contains(i) && factors.get(i).connectivityVars().contains(variable)) { seenFactors.add(i); queue.addLast(Integer.valueOf(i)); } @@ -261,34 +307,37 @@ private List deferredFilterVariablesConnectedTo(String variable) { return List.copyOf(connected); } - private boolean hasMultiSharedVariableAttachment() { - for (int i = 0; i < factors.size(); i++) { - for (int j = i + 1; j < factors.size(); j++) { - Set shared = new TreeSet<>(factors.get(i).joinVars()); - shared.retainAll(factors.get(j).joinVars()); - if (shared.size() > 1) { - return true; - } - } - } - return false; - } - private StatePlan optimizeGreedy() { int seed = -1; - double bestSeedWork = Double.POSITIVE_INFINITY; + double bestSeedScore = Double.POSITIVE_INFINITY; + double bestSeedWorkRows = Double.POSITIVE_INFINITY; double bestSeedRows = Double.POSITIVE_INFINITY; + boolean hasNonSmallBindingSetAssignmentFactor = hasUnorderedNonSmallBindingSetAssignmentFactor(0L); for (int i = 0; i < factors.size(); i++) { + if (hasNonSmallBindingSetAssignmentFactor && isSkippableSmallBindingSetAssignmentSeed(i)) { + continue; + } PlanFactor factor = factors.get(i); + long seedMask = bit(i); double adjustedWorkRows = adjustedWorkRows(i, initiallyBoundVars, factor.estimate().outputRows()); - recordDebug("greedy seed candidate: factor=" + describeFactor(i) + " estimate=" - + factor.estimate().summary() + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" - + new TreeSet<>(initiallyBoundVars)); - if (adjustedWorkRows < bestSeedWork - || adjustedWorkRows == bestSeedWork - && (factor.estimate().outputRows() < bestSeedRows - || factor.estimate().outputRows() == bestSeedRows && i < seed)) { - bestSeedWork = adjustedWorkRows; + adjustedWorkRows = applyUnlockedFilterWorkRows(0L, seedMask, adjustedWorkRows); + SketchBasedJoinEstimator.TuplePlanEstimate seedEstimate = applyUnlockedFilters(0L, seedMask, + factor.estimate()); + double scoreRows = orderingScoreRows(i, 0L, seedMask, adjustedWorkRows, seedEstimate.outputRows(), + Double.NaN); + if (traceDiagnostics) { + recordDebug("greedy seed candidate: factor=" + describeFactor(i) + " estimate=" + + factor.estimate().summary() + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" + + new TreeSet<>(initiallyBoundVars) + " scoreRows=" + scoreRows); + } + if (scoreRows < bestSeedScore + || scoreRows == bestSeedScore + && (adjustedWorkRows < bestSeedWorkRows + || adjustedWorkRows == bestSeedWorkRows + && (factor.estimate().outputRows() < bestSeedRows + || factor.estimate().outputRows() == bestSeedRows && i < seed))) { + bestSeedScore = scoreRows; + bestSeedWorkRows = adjustedWorkRows; bestSeedRows = factor.estimate().outputRows(); seed = i; } @@ -298,40 +347,51 @@ private StatePlan optimizeGreedy() { } long mask = bit(seed); - double totalWork = bestSeedWork; + double totalWork = bestSeedWorkRows; + double totalScore = bestSeedScore; List order = new ArrayList<>(); order.add(seed); SketchBasedJoinEstimator.TuplePlanEstimate currentEstimate = applyUnlockedFilters(0L, mask, factors.get(seed).estimate()); recordDebug("greedy seed: chosen=" + describeFactor(seed) + " estimate=" + currentEstimate.summary() - + " adjustedWorkRows=" + bestSeedWork); + + " adjustedWorkRows=" + bestSeedWorkRows + " scoreRows=" + bestSeedScore); while (mask != allMask()) { int bestNext = -1; String bestSharedVar = null; + double bestScoreRows = Double.POSITIVE_INFINITY; double bestAdjustedWorkRows = Double.POSITIVE_INFINITY; double bestStepRows = Double.POSITIVE_INFINITY; SketchBasedJoinEstimator.JoinStepEstimate bestStep = null; Set currentBoundVars = boundVariables(mask); for (int candidate : candidates(mask)) { - String connection = connectionReason(mask, candidate); - if (connection == null) { - continue; + String connection = traceDiagnostics ? connectionReason(mask, candidate) : null; + SketchBasedJoinEstimator.JoinStepEstimate step = estimateTransition(mask, currentEstimate, candidate, + currentBoundVars); + double adjustedWorkRows = adjustedTransitionWorkRows(candidate, currentBoundVars, currentEstimate, + step.workRows()); + long nextMask = mask | bit(candidate); + adjustedWorkRows = applyUnlockedFilterWorkRows(mask, nextMask, adjustedWorkRows); + SketchBasedJoinEstimator.TuplePlanEstimate nextEstimate = applyUnlockedFilters(mask, nextMask, + estimator.joinedPlanEstimate(step)); + double scoreRows = orderingScoreRows(candidate, mask, nextMask, adjustedWorkRows, + nextEstimate.outputRows(), currentEstimate.outputRows()); + if (traceDiagnostics) { + recordDebug("greedy candidate: prefixOrder=" + describeFactorOrder(order) + " candidate=" + + describeFactor(candidate) + " sharedVar=" + connection + " step=" + step.summary() + + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" + + new TreeSet<>(currentBoundVars) + " scoreRows=" + scoreRows); } - PlanFactor candidateFactor = factors.get(candidate); - SketchBasedJoinEstimator.JoinStepEstimate step = estimator - .estimateJoinStepForJoinOrdering(currentEstimate, candidateFactor.estimate()); - double adjustedWorkRows = adjustedWorkRows(candidate, currentBoundVars, step.workRows()); - recordDebug("greedy candidate: prefixOrder=" + describeFactorOrder(order) + " candidate=" - + describeFactor(candidate) + " sharedVar=" + connection + " step=" + step.summary() - + " adjustedWorkRows=" + adjustedWorkRows + " boundVars=" - + new TreeSet<>(currentBoundVars)); - if (adjustedWorkRows < bestAdjustedWorkRows - || adjustedWorkRows == bestAdjustedWorkRows - && (step.outputRows() < bestStepRows - || step.outputRows() == bestStepRows && candidate < bestNext)) { + if (scoreRows < bestScoreRows + || scoreRows == bestScoreRows + && (adjustedWorkRows < bestAdjustedWorkRows + || adjustedWorkRows == bestAdjustedWorkRows + && (step.outputRows() < bestStepRows + || step.outputRows() == bestStepRows + && candidate < bestNext))) { bestNext = candidate; bestSharedVar = connection; + bestScoreRows = scoreRows; bestAdjustedWorkRows = adjustedWorkRows; bestStepRows = step.outputRows(); bestStep = step; @@ -342,33 +402,47 @@ private StatePlan optimizeGreedy() { } long previousMask = mask; + if (bestSharedVar == null) { + bestSharedVar = connectionReason(previousMask, bestNext); + } mask |= bit(bestNext); totalWork += bestAdjustedWorkRows; + totalScore += bestScoreRows; order.add(bestNext); currentEstimate = applyUnlockedFilters(previousMask, mask, estimator.joinedPlanEstimate(bestStep)); recordDebug("greedy choose: order=" + describeFactorOrder(order) + " chosen=" + describeFactor(bestNext) + " sharedVar=" + bestSharedVar + " estimate=" + currentEstimate.summary() + " adjustedWorkRows=" + bestAdjustedWorkRows + " totalWork=" - + totalWork); + + totalWork + " scoreRows=" + bestScoreRows + " totalScore=" + totalScore); } - return new StatePlan(List.copyOf(order), currentEstimate, totalWork); + return new StatePlan(List.copyOf(order), currentEstimate, totalWork, totalScore); } private StatePlan optimizeDynamicProgramming() { long all = allMask(); Map bestByMask = new HashMap<>(); Map> statesBySize = new HashMap<>(); + boolean hasNonSmallBindingSetAssignmentFactor = hasUnorderedNonSmallBindingSetAssignmentFactor(0L); for (int i = 0; i < factors.size(); i++) { + if (hasNonSmallBindingSetAssignmentFactor && isSkippableSmallBindingSetAssignmentSeed(i)) { + continue; + } PlanFactor factor = factors.get(i); double adjustedWorkRows = adjustedWorkRows(i, initiallyBoundVars, factor.estimate().outputRows()); long seedMask = bit(i); - StatePlan seedPlan = new StatePlan(List.of(i), applyUnlockedFilters(0L, seedMask, factor.estimate()), - adjustedWorkRows); + adjustedWorkRows = applyUnlockedFilterWorkRows(0L, seedMask, adjustedWorkRows); + SketchBasedJoinEstimator.TuplePlanEstimate seedEstimate = applyUnlockedFilters(0L, seedMask, + factor.estimate()); + double scoreRows = orderingScoreRows(i, 0L, seedMask, adjustedWorkRows, seedEstimate.outputRows(), + Double.NaN); + StatePlan seedPlan = new StatePlan(List.of(i), seedEstimate, adjustedWorkRows, scoreRows); bestByMask.put(seedMask, seedPlan); statesBySize.computeIfAbsent(1, ignored -> new LinkedHashSet<>()).add(seedMask); - recordDebug("dp seed: factor=" + describeFactor(i) + " estimate=" + factor.estimate().summary() - + " adjustedWorkRows=" + adjustedWorkRows); + if (traceDiagnostics) { + recordDebug("dp seed: factor=" + describeFactor(i) + " estimate=" + factor.estimate().summary() + + " adjustedWorkRows=" + adjustedWorkRows + " scoreRows=" + scoreRows); + } } for (int size = 1; size < factors.size(); size++) { @@ -379,30 +453,38 @@ private StatePlan optimizeDynamicProgramming() { } Set currentBoundVars = boundVariables(mask); for (int candidate : candidates(mask)) { - String connection = connectionReason(mask, candidate); - if (connection == null) { - continue; - } - SketchBasedJoinEstimator.JoinStepEstimate step = estimator - .estimateJoinStepForJoinOrdering(prefix.estimate(), factors.get(candidate).estimate()); - double adjustedWorkRows = adjustedWorkRows(candidate, currentBoundVars, step.workRows()); + String connection = traceDiagnostics ? connectionReason(mask, candidate) : null; + SketchBasedJoinEstimator.JoinStepEstimate step = estimateTransition(mask, prefix.estimate(), + candidate, currentBoundVars); + double adjustedWorkRows = adjustedTransitionWorkRows(candidate, currentBoundVars, prefix.estimate(), + step.workRows()); long nextMask = mask | bit(candidate); + adjustedWorkRows = applyUnlockedFilterWorkRows(mask, nextMask, adjustedWorkRows); + SketchBasedJoinEstimator.TuplePlanEstimate nextEstimate = applyUnlockedFilters(mask, nextMask, + estimator.joinedPlanEstimate(step)); + double scoreRows = orderingScoreRows(candidate, mask, nextMask, adjustedWorkRows, + nextEstimate.outputRows(), prefix.estimate().outputRows()); List nextOrder = new ArrayList<>(prefix.order().size() + 1); nextOrder.addAll(prefix.order()); nextOrder.add(candidate); - StatePlan candidatePlan = new StatePlan(List.copyOf(nextOrder), - applyUnlockedFilters(mask, nextMask, estimator.joinedPlanEstimate(step)), - prefix.totalWork() + adjustedWorkRows); + StatePlan candidatePlan = new StatePlan(List.copyOf(nextOrder), nextEstimate, + prefix.totalWork() + adjustedWorkRows, prefix.totalScore() + scoreRows); StatePlan incumbent = bestByMask.get(nextMask); - recordDebug("dp candidate: prefixOrder=" + describeFactorOrder(prefix.order()) + " candidate=" - + describeFactor(candidate) + " sharedVar=" + connection + " step=" - + step.summary() + " adjustedWorkRows=" + adjustedWorkRows + " totalWork=" - + candidatePlan.totalWork()); + if (traceDiagnostics) { + recordDebug("dp candidate: prefixOrder=" + describeFactorOrder(prefix.order()) + " candidate=" + + describeFactor(candidate) + " sharedVar=" + connection + " step=" + + step.summary() + " adjustedWorkRows=" + adjustedWorkRows + " totalWork=" + + candidatePlan.totalWork() + " scoreRows=" + scoreRows + " totalScore=" + + candidatePlan.totalScore()); + } if (isBetter(candidatePlan, incumbent)) { bestByMask.put(nextMask, candidatePlan); statesBySize.computeIfAbsent(size + 1, ignored -> new LinkedHashSet<>()).add(nextMask); - recordDebug("dp choose: order=" + describeFactorOrder(candidatePlan.order()) + " estimate=" - + candidatePlan.estimate().summary() + " totalWork=" + candidatePlan.totalWork()); + if (traceDiagnostics) { + recordDebug("dp choose: order=" + describeFactorOrder(candidatePlan.order()) + " estimate=" + + candidatePlan.estimate().summary() + " totalWork=" + candidatePlan.totalWork() + + " totalScore=" + candidatePlan.totalScore()); + } } } } @@ -412,27 +494,183 @@ private StatePlan optimizeDynamicProgramming() { } private List candidates(long mask) { - List result = new ArrayList<>(); + return candidatesMemo.computeIfAbsent(mask, ignored -> { + List candidates = new ArrayList<>(); + for (int i = 0; i < factors.size(); i++) { + if (!contains(mask, i) && connectionReason(mask, i) != null) { + candidates.add(i); + } + } + return List.copyOf(candidates); + }); + } + + private SketchBasedJoinEstimator.JoinStepEstimate estimateTransition(long mask, + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, int candidate, Set currentBoundVars) { + TransitionKey key = new TransitionKey(mask, candidate, prefixEstimate); + return transitionEstimateMemo.computeIfAbsent(key, + ignored -> estimateTransitionUncached(mask, prefixEstimate, candidate, currentBoundVars)); + } + + private SketchBasedJoinEstimator.JoinStepEstimate estimateTransitionUncached(long mask, + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, int candidate, Set currentBoundVars) { + if (isSmallBindingSetAssignment(candidate)) { + return estimateSmallBindingSetAssignmentTransition(mask, prefixEstimate, candidate); + } + SketchBasedJoinEstimator.JoinStepEstimate boundLookupStep = estimateBoundLookupTransition(prefixEstimate, + candidate, currentBoundVars); + if (boundLookupStep != null) { + return capSmallValuesAnchoredLookup(mask, prefixEstimate, candidate, boundLookupStep); + } + SketchBasedJoinEstimator.JoinStepEstimate step = estimator.estimateJoinStepForJoinOrdering(prefixEstimate, + factors.get(candidate).estimate(), + sketchIntersectionCache); + return capSmallValuesAnchoredLookup(mask, prefixEstimate, candidate, step); + } + + private SketchBasedJoinEstimator.JoinStepEstimate estimateSmallBindingSetAssignmentTransition(long mask, + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, int candidate) { + SketchBasedJoinEstimator.TuplePlanEstimate bindingEstimate = factors.get(candidate).estimate(); + if (sharedVariables(mask, candidate).isEmpty() + && smallBindingSetAssignmentAnchorsFutureLookup(mask, candidate)) { + return estimator.joinStepWithOutputRowsForJoinOrdering(prefixEstimate, bindingEstimate, + prefixEstimate.outputRows(), bindingEstimate.outputRows()); + } + if (!sharedVariables(mask, candidate).isEmpty()) { + return estimator.joinStepWithOutputRowsForJoinOrdering(prefixEstimate, bindingEstimate, + prefixEstimate.outputRows(), bindingEstimate.outputRows()); + } + return estimator.distinctCountJoinStepForJoinOrdering(prefixEstimate, bindingEstimate); + } + + private SketchBasedJoinEstimator.JoinStepEstimate capSmallValuesAnchoredLookup(long mask, + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, int candidate, + SketchBasedJoinEstimator.JoinStepEstimate step) { + OptionalDouble lookupRows = smallValuesAnchoredLookupRows(mask, candidate); + if (lookupRows.isEmpty()) { + return step; + } + double lookupOutputRows = lookupRows.getAsDouble(); + double cappedOutputRows = Math.min(step.outputRows(), Math.max(prefixEstimate.outputRows(), lookupOutputRows)); + if (!Double.isFinite(cappedOutputRows) || cappedOutputRows < 0.0d || cappedOutputRows >= step.outputRows()) { + return step; + } + double cappedWorkRows = Math.min(step.workRows(), lookupOutputRows); + return estimator.joinStepWithOutputRowsForJoinOrdering(prefixEstimate, factors.get(candidate).estimate(), + cappedOutputRows, cappedWorkRows); + } + + private boolean smallBindingSetAssignmentAnchorsFutureLookup(long mask, int assignmentIndex) { + Set assignmentVars = factors.get(assignmentIndex).joinVars(); for (int i = 0; i < factors.size(); i++) { - if (!contains(mask, i) && connectionReason(mask, i) != null) { - result.add(i); + if (i == assignmentIndex || contains(mask, i) || isSmallBindingSetAssignment(i)) { + continue; + } + if (intersects(assignmentVars, factors.get(i).connectivityVars())) { + return true; } } - return result; + return false; + } + + private OptionalDouble smallValuesAnchoredLookupRows(long mask, int candidate) { + if (mask == 0L || isSmallBindingSetAssignment(candidate)) { + return OptionalDouble.empty(); + } + SketchBasedJoinEstimator.TuplePlanEstimate candidateEstimate = factors.get(candidate).estimate(); + double lookupRows = candidateEstimate.outputRows(); + boolean anchored = false; + Set candidateVars = factors.get(candidate).joinVars(); + for (int i = 0; i < factors.size(); i++) { + if (!contains(mask, i) || !isSmallBindingSetAssignment(i)) { + continue; + } + for (String varName : factors.get(i).joinVars()) { + if (!candidateVars.contains(varName)) { + continue; + } + double bindingDistinct = factors.get(i).estimate().distinct(varName); + double candidateDistinct = candidateEstimate.distinct(varName); + if (!(Double.isFinite(bindingDistinct) && bindingDistinct > 0.0d + && Double.isFinite(candidateDistinct) && candidateDistinct > 0.0d)) { + continue; + } + lookupRows *= Math.min(1.0d, bindingDistinct / candidateDistinct); + anchored = true; + } + } + if (!anchored || !Double.isFinite(lookupRows) || lookupRows < 0.0d) { + return OptionalDouble.empty(); + } + return OptionalDouble.of(lookupRows); + } + + private SketchBasedJoinEstimator.JoinStepEstimate estimateBoundLookupTransition( + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, int candidate, Set currentBoundVars) { + PlanFactor factor = factors.get(candidate); + if (!currentBoundVars.containsAll(factor.joinVars())) { + return null; + } + SketchBasedJoinEstimator.AccessShape accessShape = estimator.accessShapeForJoinOrdering(factor.tupleExpr(), + currentBoundVars); + if (accessShape == null) { + return null; + } + double factorRows = factor.estimate().outputRows(); + double adjustedWorkRows = workAdjuster.adjustedWorkRows(accessShape, factorRows); + boolean directLookup = !accessShape.lookupBoundComponents().isEmpty() + && accessShape.isDirectLookup(accessShape.lookupBoundComponents()); + if (adjustedWorkRows >= Math.max(1.0d, factorRows) && directLookup) { + adjustedWorkRows = 1.0d; + } + if (!Double.isFinite(adjustedWorkRows) || adjustedWorkRows < 0.0d) { + return null; + } + if (!directLookup && adjustedWorkRows >= Math.max(1.0d, factorRows)) { + return null; + } + if (traceDiagnostics) { + recordDebug("shortcut: bound lookup candidate=" + describeFactor(candidate) + " adjustedWorkRows=" + + adjustedWorkRows + " factorRows=" + factorRows); + } + return estimator.boundLookupJoinStepForJoinOrdering(prefixEstimate, factor.estimate(), + repeatedLookupWorkRows(prefixEstimate, adjustedWorkRows)); } private String connectionReason(long mask, int candidateIndex) { - String sharedVariable = uniqueSharedVariable(mask, candidateIndex); - if (sharedVariable != null) { - return sharedVariable; + Set sharedVariables = sharedVariables(mask, candidateIndex); + if (!sharedVariables.isEmpty()) { + return sharedVariables.size() == 1 ? sharedVariables.iterator().next() : "shared:" + sharedVariables; + } + if (mask != 0L && isSmallBindingSetAssignment(candidateIndex)) { + return "small-values-anchor"; + } + if (isSmallBindingSetOnlyMask(mask)) { + return "small-values-prefix-seed"; + } + String filterConnection = deferredFilterConnection(mask, candidateIndex); + if (filterConnection != null) { + return filterConnection; + } + return null; + } + + private boolean isSmallBindingSetOnlyMask(long mask) { + if (mask == 0L) { + return false; + } + for (int i = 0; i < factors.size(); i++) { + if (contains(mask, i) && !isSmallBindingSetAssignment(i)) { + return false; + } } - return deferredFilterConnection(mask, candidateIndex); + return true; } - private String uniqueSharedVariable(long mask, int candidateIndex) { + private Set sharedVariables(long mask, int candidateIndex) { Set shared = new TreeSet<>(variables(mask)); - shared.retainAll(factors.get(candidateIndex).joinVars()); - return shared.size() == 1 ? shared.iterator().next() : null; + shared.retainAll(factors.get(candidateIndex).connectivityVars()); + return shared; } private String deferredFilterConnection(long mask, int candidateIndex) { @@ -440,7 +678,7 @@ private String deferredFilterConnection(long mask, int candidateIndex) { return null; } Set prefixVars = boundVariables(mask); - Set candidateVars = factors.get(candidateIndex).joinVars(); + Set candidateVars = factors.get(candidateIndex).bindingVars(); LinkedHashSet combinedVars = new LinkedHashSet<>(prefixVars); combinedVars.addAll(candidateVars); for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { @@ -476,16 +714,402 @@ private Set variables(long mask) { } private Set boundVariables(long mask) { - LinkedHashSet bound = new LinkedHashSet<>(initiallyBoundVars); - bound.addAll(variables(mask)); - return Set.copyOf(bound); + return boundVariablesMemo.computeIfAbsent(mask, ignored -> { + LinkedHashSet bound = new LinkedHashSet<>(initiallyBoundVars); + for (int i = 0; i < factors.size(); i++) { + if (contains(mask, i)) { + bound.addAll(factors.get(i).bindingVars()); + } + } + return Set.copyOf(bound); + }); } private double adjustedWorkRows(int factorIndex, Set currentlyBoundVars, double defaultWorkRows) { SketchBasedJoinEstimator.AccessShape accessShape = estimator .accessShapeForJoinOrdering(factors.get(factorIndex).tupleExpr(), currentlyBoundVars); double adjustedWorkRows = workAdjuster.adjustedWorkRows(accessShape, defaultWorkRows); - return Double.isFinite(adjustedWorkRows) && adjustedWorkRows > 0.0d ? adjustedWorkRows : defaultWorkRows; + if (!(Double.isFinite(adjustedWorkRows) && adjustedWorkRows > 0.0d)) { + return defaultWorkRows; + } + return Double.isFinite(defaultWorkRows) && defaultWorkRows >= 0.0d + ? Math.min(adjustedWorkRows, defaultWorkRows) + : adjustedWorkRows; + } + + private double adjustedTransitionWorkRows(int factorIndex, Set currentlyBoundVars, + SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, double defaultWorkRows) { + double adjustedWorkRows = adjustedWorkRows(factorIndex, currentlyBoundVars, defaultWorkRows); + PlanFactor factor = factors.get(factorIndex); + SketchBasedJoinEstimator.AccessShape accessShape = estimator.accessShapeForJoinOrdering(factor.tupleExpr(), + currentlyBoundVars); + if (accessShape == null || accessShape.joinBoundVarNamesByComponent().isEmpty()) { + return adjustedWorkRows; + } + + double prefixRows = prefixEstimate.outputRows(); + if (!Double.isFinite(prefixRows) || prefixRows <= 1.0d) { + return adjustedWorkRows; + } + + double repeatedLookupWorkRows = repeatedLookupWorkRows(prefixEstimate, adjustedWorkRows); + if (!Double.isFinite(repeatedLookupWorkRows) || repeatedLookupWorkRows <= adjustedWorkRows) { + return adjustedWorkRows; + } + return Double.isFinite(defaultWorkRows) && defaultWorkRows >= 0.0d + ? Math.min(defaultWorkRows, repeatedLookupWorkRows) + : repeatedLookupWorkRows; + } + + private double repeatedLookupWorkRows(SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate, + double lookupWorkRows) { + double prefixRows = prefixEstimate.outputRows(); + if (!Double.isFinite(prefixRows) || prefixRows <= 1.0d) { + return lookupWorkRows; + } + double repeatedLookupWorkRows = lookupWorkRows * prefixRows; + return Double.isFinite(repeatedLookupWorkRows) && repeatedLookupWorkRows > lookupWorkRows + ? repeatedLookupWorkRows + : lookupWorkRows; + } + + private double applyUnlockedFilterWorkRows(long previousMask, long nextMask, double workRows) { + double passRatio = newlyUnlockedFilterPassRatio(previousMask, nextMask); + if (passRatio >= 1.0d) { + return workRows; + } + double filteredWorkRows = workRows * passRatio; + if (!Double.isFinite(filteredWorkRows) || filteredWorkRows < 0.0d) { + return workRows; + } + return filteredWorkRows; + } + + private double orderingScoreRows(int factorIndex, long previousMask, long nextMask, double workRows, + double outputRows, double prefixRows) { + double scoreRows = workRows * newlyUnlockedFilterScoreRatio(previousMask, nextMask); + if (!Double.isFinite(scoreRows) || scoreRows < 0.0d) { + scoreRows = workRows; + } + double pendingConstraintPenalty = pendingCheapConstraintBeforeBroadEdgePenalty(previousMask, factorIndex, + prefixRows); + if (pendingConstraintPenalty > 1.0d) { + scoreRows *= pendingConstraintPenalty; + } + double localFilterMultiplier = selectiveLocalFilterMultiplier(factorIndex); + if (localFilterMultiplier < 1.0d && Double.isFinite(outputRows) && outputRows >= 0.0d) { + scoreRows = Math.min(scoreRows, outputRows); + scoreRows *= Math.max(localFilterMultiplier, CHEAP_UNLOCKED_FILTER_SCORE_RATIO); + } + scoreRows *= pendingCheapFilterUnlockBeforeBroadEdgePenalty(previousMask, factorIndex); + if (hasSelectiveLocalFilter(factorIndex) && hasPendingSmallValuesAnchoredSibling(previousMask, factorIndex)) { + scoreRows *= PENDING_SMALL_VALUES_ANCHOR_FILTER_PENALTY; + } + if (hasSelectiveLocalFilter(factorIndex) && hasValuesAnchoredStructuralBridge(previousMask, factorIndex)) { + scoreRows *= PENDING_SMALL_VALUES_ANCHOR_FILTER_PENALTY; + } + double reachableSelectiveFilterRatio = newlyReachableSelectiveLocalFilterRatio(previousMask, nextMask); + if (reachableSelectiveFilterRatio < 1.0d) { + scoreRows *= reachableSelectiveFilterRatio; + } + if (connectsSmallBindingSetAssignment(previousMask, factorIndex) + && Double.isFinite(outputRows) && outputRows >= 0.0d) { + scoreRows = Math.min(scoreRows, outputRows); + } + if (isSmallBindingSetAssignment(factorIndex)) { + double bindingRows = factors.get(factorIndex).estimate().outputRows(); + double bindingScoreRows = bindingRows * SMALL_BINDING_SET_ASSIGNMENT_SCORE_RATIO; + if (Double.isFinite(bindingScoreRows) && bindingScoreRows >= 0.0d) { + scoreRows = Math.min(scoreRows, bindingScoreRows); + } + } + return scoreRows; + } + + private double pendingCheapFilterUnlockBeforeBroadEdgePenalty(long previousMask, int factorIndex) { + if (previousMask == 0L || contains(previousMask, factorIndex) || isSmallBindingSetAssignment(factorIndex)) { + return 1.0d; + } + PlanFactor candidate = factors.get(factorIndex); + if (candidate.joinVars().size() < 2) { + return 1.0d; + } + double candidateRows = candidate.estimate().outputRows(); + if (!(Double.isFinite(candidateRows) && candidateRows >= BROAD_EDGE_MIN_ROWS)) { + return 1.0d; + } + Set prefixVars = boundVariables(previousMask); + Set candidateVars = boundVariables(previousMask | bit(factorIndex)); + if (unlocksCheapDeferredFilter(prefixVars, candidateVars)) { + return 1.0d; + } + + for (int i = 0; i < factors.size(); i++) { + if (i == factorIndex || contains(previousMask, i) || isSmallBindingSetAssignment(i) + || connectionReason(previousMask, i) == null) { + continue; + } + if (unlocksCheapDeferredFilter(prefixVars, boundVariables(previousMask | bit(i)))) { + return BROAD_EDGE_PENDING_CONSTRAINT_PENALTY; + } + } + return 1.0d; + } + + private boolean unlocksCheapDeferredFilter(Set previousVars, Set nextVars) { + for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { + if (filter.getConditionCost() == 0 + && !previousVars.containsAll(filter.getRequiredVars()) + && nextVars.containsAll(filter.getRequiredVars())) { + return true; + } + } + return false; + } + + private double pendingCheapConstraintBeforeBroadEdgePenalty(long previousMask, int factorIndex, double prefixRows) { + if (previousMask == 0L || contains(previousMask, factorIndex) || isSmallBindingSetAssignment(factorIndex) + || (maskHasSelectiveLocalFilter(previousMask) && !maskContainsSmallBindingSetAssignment(previousMask)) + || !(Double.isFinite(prefixRows) && prefixRows > 0.0d)) { + return 1.0d; + } + PlanFactor candidate = factors.get(factorIndex); + if (candidate.joinVars().size() < 2) { + return 1.0d; + } + double candidateRows = candidate.estimate().outputRows(); + if (!(Double.isFinite(candidateRows) && candidateRows >= BROAD_EDGE_MIN_ROWS)) { + return 1.0d; + } + + Set prefixVars = variables(previousMask); + Set candidateVars = candidate.joinVars(); + if (!intersects(prefixVars, candidateVars)) { + return 1.0d; + } + + LinkedHashSet introducedVars = new LinkedHashSet<>(candidateVars); + introducedVars.removeAll(prefixVars); + if (introducedVars.isEmpty()) { + return 1.0d; + } + + for (int i = 0; i < factors.size(); i++) { + if (i == factorIndex || contains(previousMask, i) || !isCheapSingleVariableConstraint(i)) { + continue; + } + PlanFactor pending = factors.get(i); + if (!pendingConstraintShouldDelayBroadEdge(previousMask, factorIndex, pending.joinVars())) { + continue; + } + if (intersects(pending.joinVars(), introducedVars) + || pendingConstraintReachableThroughCandidate(previousMask, factorIndex, i)) { + double rowsRatioPenalty = candidateRows / Math.max(1.0d, prefixRows); + if (!Double.isFinite(rowsRatioPenalty) || rowsRatioPenalty < BROAD_EDGE_PENDING_CONSTRAINT_PENALTY) { + rowsRatioPenalty = BROAD_EDGE_PENDING_CONSTRAINT_PENALTY; + } + return Math.min(rowsRatioPenalty, MAX_BROAD_EDGE_PENDING_CONSTRAINT_PENALTY); + } + } + return 1.0d; + } + + private boolean maskHasSelectiveLocalFilter(long mask) { + for (int i = 0; i < factors.size(); i++) { + if (contains(mask, i) && hasSelectiveLocalFilter(i)) { + return true; + } + } + return false; + } + + private boolean pendingConstraintShouldDelayBroadEdge(long previousMask, int broadEdgeIndex, + Set pendingVars) { + boolean connectsSmallValues = connectsSmallBindingSetAssignment(previousMask, broadEdgeIndex); + return !connectsSmallValues || !intersects(pendingVars, factors.get(broadEdgeIndex).joinVars()); + } + + private boolean pendingConstraintReachableThroughCandidate(long previousMask, int broadEdgeIndex, + int constraintIndex) { + LinkedHashSet bridgeVars = new LinkedHashSet<>(variables(previousMask)); + bridgeVars.addAll(factors.get(broadEdgeIndex).joinVars()); + return reachableThroughPendingFactors(previousMask | bit(broadEdgeIndex), bridgeVars, + factors.get(constraintIndex).joinVars(), constraintIndex); + } + + private boolean reachableThroughPendingFactors(long mask, Set startVars, Set targetVars, + int excludedFactorIndex) { + LinkedHashSet reached = new LinkedHashSet<>(startVars); + boolean changed; + do { + changed = false; + for (int i = 0; i < factors.size(); i++) { + if (i == excludedFactorIndex || contains(mask, i) || isSmallBindingSetAssignment(i)) { + continue; + } + Set factorVars = factors.get(i).joinVars(); + if (!intersects(reached, factorVars)) { + continue; + } + if (reached.addAll(factorVars)) { + changed = true; + } + if (intersects(reached, targetVars)) { + return true; + } + } + } while (changed); + return intersects(reached, targetVars); + } + + private boolean isCheapSingleVariableConstraint(int factorIndex) { + if (isSmallBindingSetAssignment(factorIndex) || factors.get(factorIndex).joinVars().size() != 1) { + return false; + } + double outputRows = factors.get(factorIndex).estimate().outputRows(); + return Double.isFinite(outputRows) && outputRows >= 0.0d && outputRows <= BROAD_EDGE_MIN_ROWS; + } + + private boolean hasSelectiveLocalFilter(int factorIndex) { + return selectiveLocalFilterMultiplier(factorIndex) < 1.0d; + } + + private double selectiveLocalFilterMultiplier(int factorIndex) { + double filterMultiplier = factors.get(factorIndex).estimate().localFilterMultiplier(); + return Double.isFinite(filterMultiplier) && filterMultiplier >= 0.0d && filterMultiplier < 1.0d + ? filterMultiplier + : 1.0d; + } + + private double newlyReachableSelectiveLocalFilterRatio(long previousMask, long nextMask) { + Set previousBound = boundVariables(previousMask); + Set nextBound = boundVariables(nextMask); + double ratio = 1.0d; + for (int i = 0; i < factors.size(); i++) { + if (contains(nextMask, i) || !hasSelectiveLocalFilter(i)) { + continue; + } + Set joinVars = factors.get(i).joinVars(); + if (previousBound.containsAll(joinVars) || !nextBound.containsAll(joinVars)) { + continue; + } + ratio *= selectiveLocalFilterMultiplier(i); + } + return ratio; + } + + private boolean connectsSmallBindingSetAssignment(long previousMask, int factorIndex) { + if (previousMask == 0L || isSmallBindingSetAssignment(factorIndex)) { + return false; + } + Set candidateVars = factors.get(factorIndex).joinVars(); + for (int i = 0; i < factors.size(); i++) { + if (contains(previousMask, i) && isSmallBindingSetAssignment(i) + && intersects(factors.get(i).joinVars(), candidateVars)) { + return true; + } + } + return false; + } + + private boolean hasValuesAnchoredStructuralBridge(long previousMask, int factorIndex) { + if (previousMask == 0L || contains(previousMask, factorIndex) + || !maskContainsSmallBindingSetAssignment(previousMask)) { + return false; + } + for (int i = 0; i < factors.size(); i++) { + if (i == factorIndex || contains(previousMask, i) || isSmallBindingSetAssignment(i) + || hasSelectiveLocalFilter(i)) { + continue; + } + if (connectionReason(previousMask, i) != null) { + return true; + } + } + return false; + } + + private boolean maskContainsSmallBindingSetAssignment(long mask) { + for (int i = 0; i < factors.size(); i++) { + if (contains(mask, i) && isSmallBindingSetAssignment(i)) { + return true; + } + } + return false; + } + + private boolean hasPendingSmallValuesAnchoredSibling(long previousMask, int factorIndex) { + if (contains(previousMask, factorIndex)) { + return false; + } + Set candidateVars = factors.get(factorIndex).joinVars(); + for (int valuesIndex = 0; valuesIndex < factors.size(); valuesIndex++) { + if (contains(previousMask, valuesIndex) || !isSmallBindingSetAssignment(valuesIndex)) { + continue; + } + Set valuesVars = factors.get(valuesIndex).joinVars(); + for (int siblingIndex = 0; siblingIndex < factors.size(); siblingIndex++) { + if (siblingIndex == factorIndex || siblingIndex == valuesIndex || contains(previousMask, siblingIndex) + || isSmallBindingSetAssignment(siblingIndex)) { + continue; + } + PlanFactor sibling = factors.get(siblingIndex); + if (intersects(candidateVars, sibling.joinVars()) && intersects(valuesVars, sibling.joinVars())) { + return true; + } + } + } + return false; + } + + private boolean hasUnorderedNonSmallBindingSetAssignmentFactor(long mask) { + for (int i = 0; i < factors.size(); i++) { + if (!contains(mask, i) && !isSmallBindingSetAssignment(i)) { + return true; + } + } + return false; + } + + private boolean isSkippableSmallBindingSetAssignmentSeed(int factorIndex) { + return isSmallBindingSetAssignment(factorIndex) && factors.get(factorIndex).joinVars().size() <= 1 + && !smallBindingSetAssignmentAnchorsFutureLookup(0L, factorIndex); + } + + private boolean isSmallBindingSetAssignment(int factorIndex) { + PlanFactor factor = factors.get(factorIndex); + if (!(factor.tupleExpr() instanceof BindingSetAssignment)) { + return false; + } + double outputRows = factor.estimate().outputRows(); + return Double.isFinite(outputRows) && outputRows >= 0.0d + && outputRows <= SMALL_BINDING_SET_ASSIGNMENT_MAX_ROWS; + } + + private double newlyUnlockedFilterScoreRatio(long previousMask, long nextMask) { + if (deferredFilters.isEmpty()) { + return 1.0d; + } + Set previousBound = boundVariables(previousMask); + Set nextBound = boundVariables(nextMask); + double ratio = 1.0d; + boolean found = false; + for (JoinOrderPlanner.FilterConstraint filter : deferredFilters) { + if (previousBound.containsAll(filter.getRequiredVars()) + || !nextBound.containsAll(filter.getRequiredVars())) { + continue; + } + double filterRatio = filter.getEstimatedPassRatio(); + if (!(Double.isFinite(filterRatio) && filterRatio >= 0.0d && filterRatio <= 1.0d)) { + filterRatio = 1.0d; + } + if (filter.getConditionCost() == 0) { + filterRatio = Math.min(filterRatio, CHEAP_UNLOCKED_FILTER_SCORE_RATIO); + } + ratio *= filterRatio; + found = true; + } + return found ? ratio : 1.0d; } private SketchBasedJoinEstimator.TuplePlanEstimate applyUnlockedFilters(long previousMask, long nextMask, @@ -569,12 +1193,14 @@ private List buildPlanSteps(List order) { SketchBasedJoinEstimator.TuplePlanEstimate factorEstimate = factors.get(factorIndex).estimate(); factorOutputRows = factorEstimate.outputRows(); stepWorkRows = adjustedWorkRows(factorIndex, boundBefore, factorOutputRows); + stepWorkRows = applyUnlockedFilterWorkRows(mask, nextMask, stepWorkRows); nextEstimate = applyUnlockedFilters(mask, nextMask, factorEstimate); } else { - SketchBasedJoinEstimator.JoinStepEstimate step = estimator - .estimateJoinStepForJoinOrdering(prefixEstimate, factors.get(factorIndex).estimate()); + SketchBasedJoinEstimator.JoinStepEstimate step = estimateTransition(mask, prefixEstimate, factorIndex, + boundBefore); factorOutputRows = step.outputRows(); - stepWorkRows = adjustedWorkRows(factorIndex, boundBefore, step.workRows()); + stepWorkRows = adjustedTransitionWorkRows(factorIndex, boundBefore, prefixEstimate, step.workRows()); + stepWorkRows = applyUnlockedFilterWorkRows(mask, nextMask, stepWorkRows); nextEstimate = applyUnlockedFilters(mask, nextMask, estimator.joinedPlanEstimate(step)); } @@ -626,6 +1252,16 @@ private void recordDebug(String message) { logger.debug("Sketch join reorder {}", message); } + private String summarizeDiagnostics(List diagnostics) { + if (diagnostics.size() == 1) { + return diagnostics.get(0); + } + if (traceDiagnostics) { + return String.join("; ", diagnostics); + } + return diagnostics.get(0) + "; " + diagnostics.get(diagnostics.size() - 1); + } + private String describeFactor(int index) { PlanFactor factor = factors.get(index); return factor.index() + ":" + describeTupleExpr(factor.tupleExpr()); @@ -643,6 +1279,14 @@ private long allMask() { return (1L << factors.size()) - 1L; } + private static long maskOf(List order) { + long mask = 0L; + for (Integer index : order) { + mask |= bit(index.intValue()); + } + return mask; + } + private static boolean contains(long mask, int index) { return (mask & bit(index)) != 0L; } @@ -651,13 +1295,17 @@ private static long bit(int index) { return 1L << index; } - private static boolean isBetter(StatePlan candidate, StatePlan incumbent) { + private boolean isBetter(StatePlan candidate, StatePlan incumbent) { if (candidate == null) { return false; } if (incumbent == null) { return true; } + int scoreComparison = Double.compare(candidate.totalScore(), incumbent.totalScore()); + if (scoreComparison != 0) { + return scoreComparison < 0; + } int workComparison = Double.compare(candidate.totalWork(), incumbent.totalWork()); if (workComparison != 0) { return workComparison < 0; @@ -666,9 +1314,51 @@ private static boolean isBetter(StatePlan candidate, StatePlan incumbent) { if (rowsComparison != 0) { return rowsComparison < 0; } + int connectivityComparison = compareOrderConnectivity(candidate.order(), incumbent.order()); + if (connectivityComparison != 0) { + return connectivityComparison < 0; + } return compareOrder(candidate.order(), incumbent.order()) < 0; } + private int compareOrderConnectivity(List left, List right) { + int size = Math.min(left.size(), right.size()); + long leftMask = 0L; + long rightMask = 0L; + for (int i = 0; i < size; i++) { + int leftIndex = left.get(i); + int rightIndex = right.get(i); + if (leftIndex != rightIndex) { + int leftConnections = futureJoinConnectionCount(leftIndex, leftMask | bit(leftIndex), leftMask); + int rightConnections = futureJoinConnectionCount(rightIndex, rightMask | bit(rightIndex), rightMask); + int comparison = Integer.compare(rightConnections, leftConnections); + if (comparison != 0) { + return comparison; + } + } + leftMask |= bit(leftIndex); + rightMask |= bit(rightIndex); + } + return 0; + } + + private int futureJoinConnectionCount(int factorIndex, long nextMask, long previousMask) { + Set previousBound = boundVariables(previousMask); + LinkedHashSet introducedVars = new LinkedHashSet<>(factors.get(factorIndex).joinVars()); + introducedVars.removeAll(previousBound); + if (introducedVars.isEmpty()) { + return 0; + } + + int futureConnections = 0; + for (int i = 0; i < factors.size(); i++) { + if (!contains(nextMask, i) && intersects(factors.get(i).joinVars(), introducedVars)) { + futureConnections++; + } + } + return futureConnections; + } + private static int compareOrder(List left, List right) { int size = Math.min(left.size(), right.size()); for (int i = 0; i < size; i++) { @@ -748,10 +1438,17 @@ record PlanOutcome(Optional plan, String rejectedFactor) { } - private record PlanFactor(int index, TupleExpr tupleExpr, SketchBasedJoinEstimator.TuplePlanEstimate estimate) { + private record PendingPlanFactor(int index, TupleExpr tupleExpr, + SketchBasedJoinEstimator.TuplePlanEstimate estimate) { + } + + private record PlanFactor(int index, TupleExpr tupleExpr, SketchBasedJoinEstimator.TuplePlanEstimate estimate, + Set connectivityVars, Set bindingVars) { private PlanFactor { Objects.requireNonNull(tupleExpr, "tupleExpr"); Objects.requireNonNull(estimate, "estimate"); + Objects.requireNonNull(connectivityVars, "connectivityVars"); + Objects.requireNonNull(bindingVars, "bindingVars"); } Set joinVars() { @@ -759,12 +1456,12 @@ Set joinVars() { } int arity() { - return joinVars().size(); + return connectivityVars().size(); } } private record StatePlan(List order, SketchBasedJoinEstimator.TuplePlanEstimate estimate, - double totalWork) { + double totalWork, double totalScore) { private StatePlan { Objects.requireNonNull(order, "order"); Objects.requireNonNull(estimate, "estimate"); @@ -775,4 +1472,7 @@ private record FactorBuildResult(List factors, SketchBasedJoinEstimator.SketchPlannerPath rejectionPath, TupleExpr rejectedFactor) { } + + private record TransitionKey(long mask, int candidate, SketchBasedJoinEstimator.TuplePlanEstimate prefixEstimate) { + } } diff --git a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java index 0fbfecd18bf..1529b7ef8c9 100644 --- a/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java +++ b/core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderReorderer.java @@ -16,16 +16,17 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; -import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Filter; import org.eclipse.rdf4j.query.algebra.TupleExpr; -import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.query.algebra.evaluation.optimizer.JoinOrderPlanner; +import org.eclipse.rdf4j.query.algebra.helpers.collectors.VarNameCollector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -112,85 +113,112 @@ JoinOrderPlanner.PlanningAttempt planAttempt(List args, Set i } private PlanningInputs promoteFilterLookupBindings(List expressions, Set initiallyBoundVars) { - if (expressions.isEmpty()) { - return new PlanningInputs(List.of(), Set.copyOf(initiallyBoundVars), List.of()); + LinkedHashSet prefixIndices = new LinkedHashSet<>(); + List smallBindingAssignments = smallBindingAssignmentIndices(expressions); + Set smallBindingVars = bindingVars(expressions, smallBindingAssignments); + if (smallBindingAssignments.size() > 1 && allGraphExpressionsTouchBindingVars(expressions, smallBindingVars)) { + prefixIndices.addAll(smallBindingAssignments); } - List nonBindingExpressions = new ArrayList<>(expressions.size()); - for (TupleExpr expression : expressions) { - if (!(expression instanceof BindingSetAssignment)) { - nonBindingExpressions.add(expression); + Set graphBindingVars = graphBindingVars(expressions); + Set filterConditionVars = filterConditionVars(expressions); + for (Integer index : smallBindingAssignments) { + if (prefixIndices.contains(index)) { + continue; + } + Set assignmentVars = expressions.get(index.intValue()).getBindingNames(); + if (!intersects(assignmentVars, graphBindingVars) && intersects(assignmentVars, filterConditionVars)) { + prefixIndices.add(index); } } - List prefixExpressions = new ArrayList<>(); - List remainingExpressions = new ArrayList<>(expressions.size()); - LinkedHashSet promotedBoundVars = new LinkedHashSet<>(initiallyBoundVars); - for (TupleExpr expression : expressions) { - if (!(expression instanceof BindingSetAssignment assignment)) { - remainingExpressions.add(expression); - continue; + if (prefixIndices.isEmpty()) { + return new PlanningInputs(List.copyOf(expressions), Set.copyOf(initiallyBoundVars), List.of()); + } + + List prefixExpressions = new ArrayList<>(prefixIndices.size()); + List plannedExpressions = new ArrayList<>(expressions.size() - prefixIndices.size()); + LinkedHashSet boundVars = new LinkedHashSet<>(initiallyBoundVars); + for (int i = 0; i < expressions.size(); i++) { + TupleExpr expression = expressions.get(i); + if (prefixIndices.contains(Integer.valueOf(i))) { + prefixExpressions.add(expression); + boundVars.addAll(expression.getBindingNames()); + } else { + plannedExpressions.add(expression); } + } + return new PlanningInputs(List.copyOf(plannedExpressions), Set.copyOf(boundVars), + List.copyOf(prefixExpressions)); + } - String bindingName = singleBindingName(assignment); - if (bindingName == null || bindingVarAppearsInPattern(bindingName, nonBindingExpressions) - || !bindingEnablesLookup(bindingName, nonBindingExpressions, promotedBoundVars)) { - remainingExpressions.add(expression); - continue; + private List smallBindingAssignmentIndices(List expressions) { + List indices = new ArrayList<>(); + for (int i = 0; i < expressions.size(); i++) { + TupleExpr expression = expressions.get(i); + if (expression instanceof BindingSetAssignment assignment + && bindingRows(assignment) <= SketchJoinOrderPlanner.SMALL_BINDING_SET_ASSIGNMENT_MAX_ROWS) { + indices.add(Integer.valueOf(i)); } + } + return indices; + } - prefixExpressions.add(expression); - promotedBoundVars.add(bindingName); + private Set bindingVars(List expressions, List indices) { + LinkedHashSet bindingVars = new LinkedHashSet<>(); + for (Integer index : indices) { + bindingVars.addAll(expressions.get(index.intValue()).getBindingNames()); } - return new PlanningInputs(List.copyOf(remainingExpressions), Set.copyOf(promotedBoundVars), - List.copyOf(prefixExpressions)); + return Set.copyOf(bindingVars); } - private boolean bindingEnablesLookup(String bindingName, List expressions, - Set currentBoundVars) { - Set withoutBinding = Set.copyOf(currentBoundVars); - LinkedHashSet withBinding = new LinkedHashSet<>(currentBoundVars); - withBinding.add(bindingName); + private boolean allGraphExpressionsTouchBindingVars(List expressions, Set bindingVars) { + boolean hasGraphExpression = false; for (TupleExpr expression : expressions) { - SketchBasedJoinEstimator.AccessShape before = estimator.accessShapeForJoinOrdering(expression, - withoutBinding); - SketchBasedJoinEstimator.AccessShape after = estimator.accessShapeForJoinOrdering(expression, - Set.copyOf(withBinding)); - if (before == null || after == null) { + if (expression instanceof BindingSetAssignment) { continue; } - if (!before.lookupBoundComponents().equals(after.lookupBoundComponents())) { - return true; + hasGraphExpression = true; + if (!intersects(bindingVars, expression.getBindingNames())) { + return false; } } - return false; + return hasGraphExpression; } - private boolean bindingVarAppearsInPattern(String bindingName, List expressions) { + private Set graphBindingVars(List expressions) { + LinkedHashSet graphVars = new LinkedHashSet<>(); for (TupleExpr expression : expressions) { - SketchBasedJoinEstimator.AccessShape accessShape = estimator.accessShapeForJoinOrdering(expression, - Set.of()); - if (accessShape == null || !containsUnboundPatternVar(accessShape.pattern(), bindingName)) { - continue; + if (!(expression instanceof BindingSetAssignment)) { + graphVars.addAll(expression.getBindingNames()); } - return true; } - return false; + return Set.copyOf(graphVars); } - private boolean containsUnboundPatternVar(StatementPattern pattern, String bindingName) { - return matches(pattern.getSubjectVar(), bindingName) - || matches(pattern.getPredicateVar(), bindingName) - || matches(pattern.getObjectVar(), bindingName) - || matches(pattern.getContextVar(), bindingName); + private Set filterConditionVars(List expressions) { + LinkedHashSet conditionVars = new LinkedHashSet<>(); + for (TupleExpr expression : expressions) { + addFilterConditionVars(expression, conditionVars); + } + return Set.copyOf(conditionVars); } - private boolean matches(Var var, String bindingName) { - return var != null && !var.hasValue() && bindingName.equals(var.getName()); + private void addFilterConditionVars(TupleExpr expression, Set conditionVars) { + if (!(expression instanceof Filter filter)) { + return; + } + conditionVars.addAll(VarNameCollector.process(filter.getCondition())); + addFilterConditionVars(filter.getArg(), conditionVars); } - private String singleBindingName(BindingSetAssignment assignment) { - return assignment.getBindingNames().size() == 1 ? assignment.getBindingNames().iterator().next() : null; + private boolean intersects(Set left, Set right) { + for (String value : left) { + if (right.contains(value)) { + return true; + } + } + return false; } private JoinOrderPlanner.JoinOrderPlan prependBindingPrefixes(JoinOrderPlanner.JoinOrderPlan plan, @@ -213,9 +241,29 @@ private JoinOrderPlanner.JoinOrderPlan prependBindingPrefixes(JoinOrderPlanner.J diagnostics.addAll(inputDiagnostics); diagnostics.add("prefix promotion: prefixes=" + SketchJoinOrderPlanner.describeExprOrder(prefixExpressions)); diagnostics.addAll(plan.getDiagnostics()); + List steps = prependBindingPrefixSteps(prefixExpressions, plan.getSteps()); return new JoinOrderPlanner.JoinOrderPlan(List.copyOf(orderedArgs), plan.getEstimatedFinalRows(), plan.getEstimatedTotalWork() + totalBindingRows(prefixExpressions), diagnostics, - plan.getSummaryStringMetrics(), plan.getSummaryDoubleMetrics(), plan.getSteps()); + plan.getSummaryStringMetrics(), plan.getSummaryDoubleMetrics(), steps); + } + + private List prependBindingPrefixSteps(List prefixExpressions, + List plannedSteps) { + if (plannedSteps.isEmpty()) { + return plannedSteps; + } + List steps = new ArrayList<>(prefixExpressions.size() + plannedSteps.size()); + LinkedHashSet boundVars = new LinkedHashSet<>(); + double prefixRows = 0.0d; + for (TupleExpr prefixExpression : prefixExpressions) { + double rows = prefixExpression instanceof BindingSetAssignment assignment ? bindingRows(assignment) : 0.0d; + prefixRows = prefixRows <= 0.0d ? rows : prefixRows * Math.max(1.0d, rows); + steps.add(new JoinOrderPlanner.PlanStep(Set.copyOf(boundVars), rows, prefixRows, rows, Map.of(), + Map.of())); + boundVars.addAll(prefixExpression.getBindingNames()); + } + steps.addAll(plannedSteps); + return List.copyOf(steps); } private double totalBindingRows(List prefixExpressions) { @@ -224,13 +272,19 @@ private double totalBindingRows(List prefixExpressions) { if (!(prefixExpression instanceof BindingSetAssignment assignment)) { continue; } - for (BindingSet ignored : assignment.getBindingSets()) { - totalRows += 1.0d; - } + totalRows += bindingRows(assignment); } return totalRows; } + private double bindingRows(BindingSetAssignment assignment) { + double rows = 0.0d; + for (BindingSet ignored : assignment.getBindingSets()) { + rows += 1.0d; + } + return rows; + } + private record PlanningInputs(List expressions, Set boundVars, List prefixExpressions) { } diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java index b470f516f30..dfb38915224 100644 --- a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorJoinOrderPlannerTest.java @@ -16,6 +16,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -176,6 +177,124 @@ void planJoinOrderHandlesMultipleJoinVariablesWithoutGlobalCommonVar() { "Supported flat segments should go through the robust planner"); } + @Test + void planJoinOrderSupportsMultiSharedValuesClique() { + StubSailStore store = new StubSailStore(); + IRI follows = VF.createIRI("urn:follows"); + List users = List.of(VF.createIRI("urn:user:0"), VF.createIRI("urn:user:1"), + VF.createIRI("urn:user:2")); + for (Resource left : users) { + for (Resource right : users) { + if (!left.equals(right)) { + store.add(VF.createStatement(left, follows, right)); + } + } + } + + BindingSetAssignment userPairs = new BindingSetAssignment(); + List pairRows = new ArrayList<>(); + for (Resource u1 : users) { + for (Resource u2 : users) { + if (!u1.equals(u2)) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("u1", u1); + row.addBinding("u2", u2); + pairRows.add(row); + } + } + } + userPairs.setBindingSets(pairRows); + + BindingSetAssignment u3Values = new BindingSetAssignment(); + List u3Rows = new ArrayList<>(); + for (Resource user : users) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("u3", user); + u3Rows.add(row); + } + u3Values.setBindingSets(u3Rows); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern u1FollowsU2 = pattern("u1", follows, "u2"); + StatementPattern u1FollowsU3 = pattern("u1", follows, "u3"); + StatementPattern u2FollowsU1 = pattern("u2", follows, "u1"); + StatementPattern u3FollowsU1 = pattern("u3", follows, "u1"); + StatementPattern u2FollowsU3 = pattern("u2", follows, "u3"); + StatementPattern u3FollowsU2 = pattern("u3", follows, "u2"); + List args = List.of(userPairs, u3Values, u1FollowsU2, u1FollowsU3, u2FollowsU1, + u3FollowsU1, u2FollowsU3, u3FollowsU2); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.GREEDY); + + assertTrue(plan.isPresent(), "Dense multi-shared VALUES cliques should stay on the sketch planner path"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastJoinOrderPlannerPath(), + "Multi-shared VALUES cliques should no longer fall back to clone-based greedy scoring"); + assertTrue(plan.get().getOrderedArgs().get(0) instanceof BindingSetAssignment, + "A bounded VALUES factor should anchor the dense clique before broad edge scans"); + assertTrue(plan.get().getOrderedArgs().containsAll(args)); + } + + @Test + void dynamicProgrammingAvoidsSketchJoinsWhenSmallValuesBindClique() { + StubSailStore store = new StubSailStore(); + IRI follows = VF.createIRI("urn:follows"); + List users = List.of(VF.createIRI("urn:user:0"), VF.createIRI("urn:user:1"), + VF.createIRI("urn:user:2")); + for (Resource left : users) { + for (Resource right : users) { + if (!left.equals(right)) { + store.add(VF.createStatement(left, follows, right)); + } + } + } + + BindingSetAssignment userPairs = new BindingSetAssignment(); + List pairRows = new ArrayList<>(); + for (Resource u1 : users) { + for (Resource u2 : users) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("u1", u1); + row.addBinding("u2", u2); + pairRows.add(row); + } + } + userPairs.setBindingSets(pairRows); + + BindingSetAssignment u3Values = new BindingSetAssignment(); + List u3Rows = new ArrayList<>(); + for (Resource user : users) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("u3", user); + u3Rows.add(row); + } + u3Values.setBindingSets(u3Rows); + + CountingSketchBasedJoinEstimator estimator = new CountingSketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern u1FollowsU2 = pattern("u1", follows, "u2"); + StatementPattern u1FollowsU3 = pattern("u1", follows, "u3"); + StatementPattern u2FollowsU1 = pattern("u2", follows, "u1"); + StatementPattern u3FollowsU1 = pattern("u3", follows, "u1"); + StatementPattern u2FollowsU3 = pattern("u2", follows, "u3"); + StatementPattern u3FollowsU2 = pattern("u3", follows, "u2"); + List args = List.of(userPairs, u3Values, u1FollowsU2, u1FollowsU3, u2FollowsU1, + u3FollowsU1, u2FollowsU3, u3FollowsU2); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected DP planner to support dense values-bound cliques"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastJoinOrderPlannerPath()); + assertEquals(0, estimator.sketchJoinEstimateCalls, + "VALUES-bound clique planning should use direct lookup work rows instead of sketch intersections"); + assertEquals(userPairs, plan.get().getOrderedArgs().get(0)); + assertEquals(u3Values, plan.get().getOrderedArgs().get(1)); + } + @Test void planJoinOrderPrefersMostSelectiveConnectedSeedOverLargeBindingSetAssignment() { StubSailStore store = new StubSailStore(); @@ -533,6 +652,115 @@ void planJoinOrderSeedsFromMostSelectiveCorrelatedChainEnd() { "Planner should seed from the most selective correlated chain end"); } + @Test + void planJoinOrderUsesDeferredFilterVarsProducedByCandidate() { + StubSailStore store = new StubSailStore(); + IRI rdfType = VF.createIRI("urn:rdfType"); + IRI clinicalTrial = VF.createIRI("urn:ClinicalTrial"); + IRI studiesDisease = VF.createIRI("urn:studiesDisease"); + IRI hasArm = VF.createIRI("urn:hasArm"); + IRI hasResult = VF.createIRI("urn:hasResult"); + IRI responseRate = VF.createIRI("urn:responseRate"); + IRI armDrug = VF.createIRI("urn:armDrug"); + + for (int trialIndex = 0; trialIndex < 100; trialIndex++) { + Resource trial = VF.createIRI("urn:trial:" + trialIndex); + store.add(VF.createStatement(trial, rdfType, clinicalTrial)); + store.add(VF.createStatement(trial, studiesDisease, VF.createIRI("urn:disease:" + trialIndex))); + for (int armIndex = 0; armIndex < 3; armIndex++) { + Resource arm = VF.createIRI("urn:arm:" + trialIndex + ':' + armIndex); + Resource result = VF.createIRI("urn:result:" + trialIndex + ':' + armIndex); + store.add(VF.createStatement(trial, hasArm, arm)); + store.add(VF.createStatement(arm, hasResult, result)); + store.add(VF.createStatement(result, responseRate, VF.createLiteral(armIndex == 0 ? 0.7d : 0.2d))); + store.add(VF.createStatement(arm, armDrug, VF.createIRI("urn:drug:" + trialIndex + ':' + armIndex))); + } + } + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern trialTypePattern = new StatementPattern(Var.of("trial"), Var.of("rdfType", rdfType), + Var.of("clinicalTrial", clinicalTrial)); + StatementPattern studiesDiseasePattern = pattern("trial", studiesDisease, "disease"); + StatementPattern trialArmPattern = pattern("trial", hasArm, "arm"); + StatementPattern armResultPattern = pattern("arm", hasResult, "result"); + StatementPattern responseRatePattern = pattern("result", responseRate, "rate"); + StatementPattern armDrugPattern = pattern("arm", armDrug, "drug"); + List args = List.of(trialTypePattern, studiesDiseasePattern, trialArmPattern, armResultPattern, + responseRatePattern, armDrugPattern); + List deferredFilters = List.of( + new JoinOrderPlanner.FilterConstraint(Set.of("rate"), 0.39d, 0, "?rate > 0.6", "learned_filter", + 300L)); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING, SketchBasedJoinEstimator.JoinOrderWorkAdjuster.NO_OP, + deferredFilters); + + assertTrue(plan.isPresent(), "Expected planner to produce a clinical-trial chain plan"); + assertEquals(responseRatePattern, plan.get().getOrderedArgs().get(0), + "Candidate-produced filter variables should let learned local filters anchor the chain"); + } + + @Test + void planJoinOrderKeepsSmallValuesAnchorBeforeBroadBridgeScan() { + StubSailStore store = new StubSailStore(); + IRI rdfType = VF.createIRI("urn:rdfType"); + IRI clinicalTrial = VF.createIRI("urn:ClinicalTrial"); + IRI hasArm = VF.createIRI("urn:hasArm"); + IRI hasResult = VF.createIRI("urn:hasResult"); + IRI biomarker = VF.createIRI("urn:biomarker"); + IRI pValue = VF.createIRI("urn:pValue"); + List markers = new ArrayList<>(); + for (int i = 0; i < 12; i++) { + markers.add(VF.createIRI("urn:marker:" + i)); + } + for (int trialIndex = 0; trialIndex < 96; trialIndex++) { + Resource trial = VF.createIRI("urn:trial:" + trialIndex); + store.add(VF.createStatement(trial, rdfType, clinicalTrial)); + for (int armIndex = 0; armIndex < 3; armIndex++) { + Resource arm = VF.createIRI("urn:arm:" + trialIndex + ':' + armIndex); + Resource result = VF.createIRI("urn:result:" + trialIndex + ':' + armIndex); + store.add(VF.createStatement(trial, hasArm, arm)); + store.add(VF.createStatement(arm, hasResult, result)); + store.add(VF.createStatement(result, biomarker, markers.get((trialIndex + armIndex) % markers.size()))); + store.add(VF.createStatement(result, pValue, VF.createLiteral(armIndex == 0 ? 0.04d : 0.08d))); + } + } + + BindingSetAssignment markerValues = new BindingSetAssignment(); + List markerRows = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + QueryBindingSet row = new QueryBindingSet(); + row.addBinding("marker", markers.get(i)); + markerRows.add(row); + } + markerValues.setBindingSets(markerRows); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern trialTypePattern = new StatementPattern(Var.of("trial"), Var.of("rdfType", rdfType), + Var.of("clinicalTrial", clinicalTrial)); + StatementPattern trialArmPattern = pattern("trial", hasArm, "arm"); + StatementPattern armResultPattern = pattern("arm", hasResult, "result"); + StatementPattern biomarkerPattern = pattern("result", biomarker, "marker"); + Filter pValueFilter = new Filter(pattern("result", pValue, "p"), + new Compare(Var.of("p"), new ValueConstant(VF.createLiteral(0.05d)), Compare.CompareOp.LT)); + List args = List.of(markerValues, trialTypePattern, trialArmPattern, armResultPattern, + biomarkerPattern, pValueFilter); + + Optional plan = estimator.planJoinOrder(args, Set.of(), + JoinOrderPlanner.Algorithm.DYNAMIC_PROGRAMMING); + + assertTrue(plan.isPresent(), "Expected planner to produce a pharma-shaped values-anchor plan"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastJoinOrderPlannerPath(), + "Small VALUES anchors should stay on the compact planner path"); + List orderedArgs = plan.get().getOrderedArgs(); + assertTrue(orderedArgs.indexOf(markerValues) < orderedArgs.indexOf(trialArmPattern), + "Small VALUES filters should be applied before the broad hasArm bridge scan"); + } + @Test void cardinalityJoinSupportsBindingSetAssignment() { StubSailStore store = new StubSailStore(); @@ -731,7 +959,7 @@ void cardinalityListReturnsNegativeOneForUnsupportedTupleExpr() { } @Test - void cardinalityListReturnsNegativeOneWhenRobustEstimatorRejectsCycle() { + void cardinalityListSupportsCycleWithCompactPlanner() { StubSailStore store = new StubSailStore(); IRI pA = VF.createIRI("urn:pA"); IRI pB = VF.createIRI("urn:pB"); @@ -752,11 +980,10 @@ void cardinalityListReturnsNegativeOneWhenRobustEstimatorRejectsCycle() { double rows = estimator.cardinality(List.of(pattern("x", pA, "y"), pattern("y", pB, "z"), pattern("z", pC, "x"))); - assertEquals(-1.0d, rows, - "Cycle-shaped join lists should now return -1 so higher-level cardinality fallback can take over"); - assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE, + assertTrue(rows >= 0.0d, "Cycle-shaped join lists should use compact sketch cardinality planning"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastRobustCardinalityPath(), - "Rejected cycle estimates should report the explicit unsupported reason"); + "Cycle estimates should no longer report an unsupported reason"); } @Test @@ -793,7 +1020,7 @@ void cardinalityJoinDelegatesToListEstimatorForFlattenableJoinTree() { } @Test - void cardinalityJoinReturnsNegativeOneWhenFlattenedCycleIsUnsupported() { + void cardinalityJoinSupportsFlattenedCycle() { StubSailStore store = new StubSailStore(); IRI pA = VF.createIRI("urn:pA"); IRI pB = VF.createIRI("urn:pB"); @@ -815,11 +1042,11 @@ void cardinalityJoinReturnsNegativeOneWhenFlattenedCycleIsUnsupported() { StatementPattern b = pattern("y", pB, "z"); StatementPattern c = pattern("z", pC, "x"); - assertEquals(-1.0d, estimator.cardinality(new Join(new Join(a, b), c)), - "Flattened cycle joins should return -1 so evaluation statistics can use the generic fallback"); - assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE, + assertTrue(estimator.cardinality(new Join(new Join(a, b), c)) >= 0.0d, + "Flattened cycle joins should use compact sketch cardinality planning"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastRobustCardinalityPath(), - "Rejected flattened cycles should report the explicit unsupported reason"); + "Flattened cycles should no longer report an unsupported reason"); } @Test @@ -845,7 +1072,7 @@ void planJoinOrderReturnsEmptyWhenDynamicProgrammingRequestExceedsSupportedSize( } @Test - void planJoinOrderFallsBackWhenRobustPlannerRejectsCycle() { + void planJoinOrderSupportsCycleWithCompactPlanner() { StubSailStore store = new StubSailStore(); IRI pA = VF.createIRI("urn:pA"); IRI pB = VF.createIRI("urn:pB"); @@ -871,10 +1098,12 @@ void planJoinOrderFallsBackWhenRobustPlannerRejectsCycle() { Optional plan = estimator.planJoinOrder(args, Set.of(), JoinOrderPlanner.Algorithm.GREEDY); - assertTrue(plan.isEmpty(), "Cycle-shaped joins should now fall back through Optional.empty()"); - assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.UNSUPPORTED_CYCLE, + assertTrue(plan.isPresent(), "Cycle-shaped joins should stay on the compact sketch planner path"); + assertEquals(SketchBasedJoinEstimator.SketchPlannerPath.ROBUST_USED, estimator.lastJoinOrderPlannerPath(), - "Rejected cycle plans should report the explicit unsupported reason"); + "Cycle plans should no longer fall back to clone-based greedy scoring"); + assertEquals(args.size(), plan.get().getOrderedArgs().size()); + assertTrue(plan.get().getOrderedArgs().containsAll(args)); } @Test @@ -955,6 +1184,27 @@ public long getTotalCalls() { } } + private static final class CountingSketchBasedJoinEstimator extends SketchBasedJoinEstimator { + private int sketchJoinEstimateCalls; + + private CountingSketchBasedJoinEstimator(SailStore sailStore, Config cfg) { + super(sailStore, cfg); + } + + @Override + JoinStepEstimate estimateJoinStepForJoinOrdering(TuplePlanEstimate left, TuplePlanEstimate right) { + sketchJoinEstimateCalls++; + return super.estimateJoinStepForJoinOrdering(left, right); + } + + @Override + JoinStepEstimate estimateJoinStepForJoinOrdering(TuplePlanEstimate left, TuplePlanEstimate right, + JoinOrderingSketchIntersectionCache sketchIntersectionCache) { + sketchJoinEstimateCalls++; + return super.estimateJoinStepForJoinOrdering(left, right, sketchIntersectionCache); + } + } + private static ListMemberOperator listMemberCondition(String varName, int... values) { ListMemberOperator operator = new ListMemberOperator(); operator.addArgument(Var.of(varName)); diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java index 1e83e625577..4d59574cd97 100644 --- a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchBasedJoinEstimatorPersistenceTest.java @@ -108,6 +108,30 @@ void persistSnapshotThenLazyLoadOnDemand(@TempDir Path tempDir) { assertEquals(1.0, card, 1.0); } + @Test + void unloadReloadsPersistedSnapshotOnDemand(@TempDir Path tempDir) { + Resource s = VF.createIRI("urn:s"); + IRI p = VF.createIRI("urn:p"); + Value o = VF.createIRI("urn:o"); + + StubSailStore sourceStore = new StubSailStore(); + sourceStore.add(st(s, p, o)); + SketchBasedJoinEstimator writer = new SketchBasedJoinEstimator(sourceStore, smallConfig()); + writer.rebuildOnceSlow(); + + Path snapshot = tempDir.resolve("join-estimator.rjes"); + writer.configurePersistence(snapshot, false); + assertTrue(writer.persistIfDirty(), "Expected dirty snapshot write"); + + SketchBasedJoinEstimator reader = new SketchBasedJoinEstimator(new StubSailStore(), smallConfig()); + reader.configurePersistence(snapshot, true); + assertTrue(reader.isReady(), "Expected lazy load on first readiness check"); + + reader.unload(); + + assertTrue(reader.isReady(), "Expected persisted snapshot to lazy reload after unloading resident sketches"); + } + @Test void unloadAndOfflineWritesRequireRebuild() { Resource s = VF.createIRI("urn:s"); diff --git a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java index 71349b6ebaf..6307644ed78 100644 --- a/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java +++ b/core/sail/base/src/test/java/org/eclipse/rdf4j/sail/base/SketchJoinOrderPlannerLoggingTest.java @@ -40,12 +40,14 @@ class SketchJoinOrderPlannerLoggingTest { private static final ValueFactory VF = SimpleValueFactory.getInstance(); + private static final String TRACE_DIAGNOSTICS_PROPERTY = "rdf4j.optimizer.sketchPlanner.traceDiagnostics"; private Logger plannerLogger; private Logger reordererLogger; private Level originalPlannerLevel; private Level originalReordererLevel; private ListAppender listAppender; + private String originalTraceDiagnosticsProperty; @BeforeEach void attachAppender() { @@ -59,6 +61,8 @@ void attachAppender() { reordererLogger.setLevel(Level.DEBUG); plannerLogger.addAppender(listAppender); reordererLogger.addAppender(listAppender); + originalTraceDiagnosticsProperty = System.getProperty(TRACE_DIAGNOSTICS_PROPERTY); + System.clearProperty(TRACE_DIAGNOSTICS_PROPERTY); } @AfterEach @@ -67,35 +71,48 @@ void detachAppender() { reordererLogger.detachAppender(listAppender); plannerLogger.setLevel(originalPlannerLevel); reordererLogger.setLevel(originalReordererLevel); + if (originalTraceDiagnosticsProperty == null) { + System.clearProperty(TRACE_DIAGNOSTICS_PROPERTY); + } else { + System.setProperty(TRACE_DIAGNOSTICS_PROPERTY, originalTraceDiagnosticsProperty); + } } @Test - void debugLoggingExplainsGreedyReorderDecision() throws Exception { - StubSailStore store = new StubSailStore(); - IRI pA = VF.createIRI("urn:pA"); - IRI pB = VF.createIRI("urn:pB"); - IRI y = VF.createIRI("urn:y"); + void debugLoggingKeepsNormalDiagnosticsCompact() throws Exception { + JoinOrderPlanner.JoinOrderPlan plan = planTwoFactorGreedyJoin(); - for (int i = 0; i < 512; i++) { - Resource s = VF.createIRI("urn:s" + i); - IRI x = VF.createIRI("urn:x" + i); - store.add(VF.createStatement(s, pA, x)); - } - store.add(VF.createStatement(VF.createIRI("urn:x0"), pB, y)); + String logOutput = logOutput(); - SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); - estimator.rebuildOnceSlow(); + assertThat(logOutput) + .contains("Sketch join reorder input:") + .contains("originalOrder=") + .contains("factor[0]") + .contains("factor[1]") + .contains("greedy seed") + .contains("greedy choose") + .contains("result: order=") + .contains("outputRows=") + .contains("workRows=") + .contains("SP(?x urn:pB ?y)") + .doesNotContain("greedy seed candidate") + .doesNotContain("greedy candidate"); - StatementPattern a = pattern("s", pA, "x"); - StatementPattern b = pattern("x", pB, "y"); - List args = List.of(a, b); + assertThat(diagnostics(plan)) + .anySatisfy(line -> assertThat(line).contains("greedy seed")) + .anySatisfy(line -> assertThat(line).contains("greedy choose")) + .anySatisfy(line -> assertThat(line).contains("result: order=")) + .noneSatisfy(line -> assertThat(line).contains("greedy seed candidate")) + .noneSatisfy(line -> assertThat(line).contains("greedy candidate")); + } - JoinOrderPlanner.JoinOrderPlan plan = estimator.planJoinOrder(args, Set.of(), - JoinOrderPlanner.Algorithm.GREEDY).orElseThrow(); + @Test + void traceDiagnosticsExplainGreedyReorderDecision() throws Exception { + System.setProperty(TRACE_DIAGNOSTICS_PROPERTY, "true"); - String logOutput = listAppender.list.stream() - .map(ILoggingEvent::getFormattedMessage) - .collect(Collectors.joining("\n")); + JoinOrderPlanner.JoinOrderPlan plan = planTwoFactorGreedyJoin(); + + String logOutput = logOutput(); assertThat(logOutput) .contains("Sketch join reorder input:") @@ -103,6 +120,7 @@ void debugLoggingExplainsGreedyReorderDecision() throws Exception { .contains("factor[0]") .contains("factor[1]") .contains("greedy seed") + .contains("greedy seed candidate") .contains("greedy candidate") .contains("greedy choose") .contains("result: order=") @@ -112,11 +130,41 @@ void debugLoggingExplainsGreedyReorderDecision() throws Exception { assertThat(diagnostics(plan)) .anySatisfy(line -> assertThat(line).contains("greedy seed")) + .anySatisfy(line -> assertThat(line).contains("greedy seed candidate")) .anySatisfy(line -> assertThat(line).contains("greedy candidate")) .anySatisfy(line -> assertThat(line).contains("greedy choose")) .anySatisfy(line -> assertThat(line).contains("result: order=")); } + private static JoinOrderPlanner.JoinOrderPlan planTwoFactorGreedyJoin() { + StubSailStore store = new StubSailStore(); + IRI pA = VF.createIRI("urn:pA"); + IRI pB = VF.createIRI("urn:pB"); + IRI y = VF.createIRI("urn:y"); + + for (int i = 0; i < 512; i++) { + Resource s = VF.createIRI("urn:s" + i); + IRI x = VF.createIRI("urn:x" + i); + store.add(VF.createStatement(s, pA, x)); + } + store.add(VF.createStatement(VF.createIRI("urn:x0"), pB, y)); + + SketchBasedJoinEstimator estimator = new SketchBasedJoinEstimator(store, config()); + estimator.rebuildOnceSlow(); + + StatementPattern a = pattern("s", pA, "x"); + StatementPattern b = pattern("x", pB, "y"); + List args = List.of(a, b); + + return estimator.planJoinOrder(args, Set.of(), JoinOrderPlanner.Algorithm.GREEDY).orElseThrow(); + } + + private String logOutput() { + return listAppender.list.stream() + .map(ILoggingEvent::getFormattedMessage) + .collect(Collectors.joining("\n")); + } + @SuppressWarnings("unchecked") private static List diagnostics(JoinOrderPlanner.JoinOrderPlan plan) throws Exception { Method method = plan.getClass().getMethod("getDiagnostics"); diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java index cb03f972624..4fd28a192ad 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbEvaluationStatistics.java @@ -52,6 +52,7 @@ class LmdbEvaluationStatistics extends EvaluationStatistics implements JoinOrder private static final Logger log = LoggerFactory.getLogger(LmdbEvaluationStatistics.class); private static final int SHARED_CACHE_MAX_ENTRIES = 262_144; private static final long JOIN_SUPPORT_CACHE_TTL_MS = 100; + private static final double DIRECT_LOOKUP_WORK_ROW_FLOOR = 1.0d; private static final Map sharedCardinalityCache = new ConcurrentHashMap<>(); private final ValueStore valueStore; @@ -318,6 +319,9 @@ && canApplyFilterAtAccess(accessShape, prefixSelection.prefixComponents())) { filterAppliedAtAccess = true; } } + if (accessShape.isDirectLookup(prefixSelection.prefixComponents())) { + return Math.max(DIRECT_LOOKUP_WORK_ROW_FLOOR, adjustedWorkRows); + } double workFloor = filterAppliedAtAccess ? 0.0d : defaultWorkRows; double filterMultiplier = accessShape.filterMultiplier(); if (!filterAppliedAtAccess && Double.isFinite(filterMultiplier) && filterMultiplier > 0.0d diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java index 5e8030df858..dbb8aba1841 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkJoinEstimatorSupport.java @@ -58,6 +58,7 @@ public static void persistEstimatorAfterBulkLoad(SailRepository repository, Lmdb repository.init(); SketchBasedJoinEstimator estimator = resolveEstimator(store); estimator.rebuildOnceSlow(); + awaitEstimatorReady(estimator, "bulk-load rebuild"); persistReusableEstimatorSnapshot(estimator); } @@ -109,9 +110,26 @@ private static SketchBasedJoinEstimator resolveEstimator(LmdbStore store) throws return (SketchBasedJoinEstimator) invoke(getSketchBasedJoinEstimator, backingStore); } - private static void persistReusableEstimatorSnapshot(SketchBasedJoinEstimator estimator) { + private static void persistReusableEstimatorSnapshot(SketchBasedJoinEstimator estimator) throws IOException { estimator.persistIfDirty(); + estimator.unload(); + awaitEstimatorReady(estimator, "persisted snapshot reload"); + } + private static void awaitEstimatorReady(SketchBasedJoinEstimator estimator, String phase) throws IOException { + long deadlineNanos = System.nanoTime() + ROBUST_READY_TIMEOUT_NANOS; + while (System.nanoTime() < deadlineNanos) { + if (estimator.isReady()) { + return; + } + try { + Thread.sleep(ROBUST_READY_POLL_MILLIS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IOException("Interrupted while waiting for join estimator readiness after " + phase, e); + } + } + throw new IOException("Join estimator was not ready after " + phase); } private static void writeExpectedDbFileSizes(File storeDirectory) throws IOException { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbPharmaOptimizedQueryRegressionTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbPharmaOptimizedQueryRegressionTest.java new file mode 100644 index 00000000000..14c34180ca8 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbPharmaOptimizedQueryRegressionTest.java @@ -0,0 +1,280 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.lmdb.benchmark; + +import static java.util.Map.entry; +import static org.junit.jupiter.api.Assertions.fail; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator; +import org.eclipse.rdf4j.benchmark.rio.util.ThemeDataSetGenerator.Theme; +import org.eclipse.rdf4j.common.transaction.IsolationLevels; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.queryrender.sparql.TupleExprIRRenderer; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.repository.util.RDFInserter; +import org.eclipse.rdf4j.sail.lmdb.LmdbStore; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class LmdbPharmaOptimizedQueryRegressionTest { + + private static final Theme THEME = Theme.PHARMA; + private static final int MAX_QUERY_INDEX = 10; + private static final String QUERY_INDEXES_PROPERTY = "rdf4j.lmdb.pharmaRegression.queryIndexes"; + private static final String DEBUG_PLANS_PROPERTY = "rdf4j.lmdb.pharmaRegression.debugPlans"; + private static final String RESULT_DIRECTORY = "src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark"; + private static final Map FASTEST_OPTIMIZED_QUERY_SOURCE = Map.ofEntries( + entry(0, "results-2026-04-16.md"), + entry(1, "results-2026-04-16-4.md"), + entry(2, "results-2026-04-16-4.md"), + entry(3, "results-2026-04-16-4.md"), + entry(4, "results-2026-04-16-4.md"), + entry(5, "results-2026-04-16.md"), + entry(6, "results-2026-04-16-3.md"), + entry(7, "results-2026-04-16-3.md"), + entry(8, "results-2026-04-16-3.md"), + entry(9, "results-2026-04-16-3.md"), + entry(10, "results-2026-04-16.md")); + + @Test + void pharmaQueriesUseFastestKnownOptimizedQueryShapes(@TempDir Path dataDir) throws Exception { + Path themeDir = dataDir.resolve(THEME.name()); + LmdbStore store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); + try { + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(repository); + BenchmarkJoinEstimatorSupport.persistEstimatorAfterBulkLoad(repository, store); + primeLearnedFilterStats(repository); + BenchmarkJoinEstimatorSupport.persistStoreStatistics(store); + } finally { + shutdownAndRelease(repository, store); + } + + store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + repository = new SailRepository(store); + try { + List mismatches = new ArrayList<>(); + for (int queryIndex : queryIndexes()) { + String expected = fastestObservedOptimizedQuery(queryIndex); + OptimizerSnapshot snapshot = explainOptimized(repository, queryIndex); + if (!normalize(expected).equals(normalize(snapshot.renderedQuery))) { + mismatches.add(mismatch(queryIndex, expected, snapshot)); + } + BenchmarkJoinEstimatorSupport.releaseEstimatorMemory(store); + } + if (!mismatches.isEmpty()) { + fail("PHARMA optimized query shape drifted from fastest observed benchmark runs:\n\n" + + String.join("\n\n", mismatches)); + } + } finally { + shutdownAndRelease(repository, store); + } + } + + private static void loadData(SailRepository repository) throws IOException { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.begin(IsolationLevels.NONE); + RDFInserter inserter = new RDFInserter(connection); + for (Theme themeDataset : Theme.values()) { + ThemeDataSetGenerator.generate(themeDataset, inserter); + } + connection.commit(); + } + } + + private static void primeLearnedFilterStats(SailRepository repository) { + for (int queryIndex = 0; queryIndex <= MAX_QUERY_INDEX; queryIndex++) { + String query = ThemeQueryCatalog.queryFor(THEME, queryIndex); + long expected = ThemeQueryCatalog.expectedCountFor(THEME, queryIndex); + long actual = executeQuery(repository, query); + if (actual != expected) { + throw new AssertionError("Unable to prime learned filter stats for PHARMA query " + queryIndex + + ": expected=" + expected + ", actual=" + actual); + } + } + } + + private static long executeQuery(SailRepository repository, String query) { + try (SailRepositoryConnection connection = repository.getConnection()) { + return connection.prepareTupleQuery(query) + .evaluate() + .stream() + .count(); + } + } + + private static List queryIndexes() { + String property = System.getProperty(QUERY_INDEXES_PROPERTY); + if (property == null || property.isBlank()) { + return IntStream.rangeClosed(0, MAX_QUERY_INDEX) + .boxed() + .collect(Collectors.toList()); + } + return Arrays.stream(property.split(",")) + .map(String::trim) + .filter(value -> !value.isEmpty()) + .map(Integer::parseInt) + .collect(Collectors.toList()); + } + + private static OptimizerSnapshot explainOptimized(SailRepository repository, int queryIndex) { + String query = ThemeQueryCatalog.queryFor(THEME, queryIndex); + try (SailRepositoryConnection connection = repository.getConnection()) { + Explanation explanation = connection.prepareTupleQuery(query) + .explain(Explanation.Level.Optimized); + return new OptimizerSnapshot( + explanation.toString(), + new TupleExprIRRenderer().render((TupleExpr) explanation.tupleExpr())); + } + } + + private static String fastestObservedOptimizedQuery(int queryIndex) throws IOException { + String fileName = FASTEST_OPTIMIZED_QUERY_SOURCE.get(queryIndex); + if (fileName == null) { + throw new AssertionError("No fastest optimized query source configured for PHARMA query " + queryIndex); + } + + List lines = Files.readAllLines(resultFile(fileName)); + int parameterLine = indexOfContaining(lines, + "# Parameters: (themeName = PHARMA, z_queryIndex = " + queryIndex + ")", 0); + int optimizedLine = indexOfContaining(lines, "### Optimized Query ###", parameterLine + 1); + + List queryLines = new ArrayList<>(); + for (int i = optimizedLine + 1; i < lines.size(); i++) { + String line = lines.get(i); + if (line.isBlank()) { + break; + } + queryLines.add(line); + } + if (queryLines.isEmpty()) { + throw new AssertionError("No optimized query block found for PHARMA query " + queryIndex + + " in " + fileName); + } + return String.join("\n", queryLines); + } + + private static Path resultFile(String fileName) { + Path basedirFile = Path.of(System.getProperty("basedir", "."), RESULT_DIRECTORY, fileName); + if (Files.isRegularFile(basedirFile)) { + return basedirFile; + } + + Path repositoryFile = Path.of("core/sail/lmdb", RESULT_DIRECTORY, fileName); + if (Files.isRegularFile(repositoryFile)) { + return repositoryFile; + } + + throw new AssertionError("Unable to locate benchmark result file " + fileName); + } + + private static int indexOfContaining(List lines, String expected, int startIndex) { + return IntStream.range(startIndex, lines.size()) + .filter(i -> lines.get(i).contains(expected)) + .findFirst() + .orElseThrow(() -> new AssertionError("Unable to find `" + expected + "`")); + } + + private static List normalize(String query) { + return query.lines() + .map(String::trim) + .filter(line -> !line.isEmpty()) + .map(LmdbPharmaOptimizedQueryRegressionTest::normalizeCommutativeExistsFilter) + .collect(Collectors.toList()); + } + + private static String normalizeCommutativeExistsFilter(String line) { + if (!line.startsWith("FILTER (") || !line.endsWith(")")) { + return line; + } + + String condition = line.substring("FILTER (".length(), line.length() - 1); + int andIndex = topLevelAndIndex(condition); + if (andIndex < 0) { + return line; + } + + String left = condition.substring(0, andIndex).trim(); + String right = condition.substring(andIndex + "&&".length()).trim(); + if (isExistsCondition(right) && !isExistsCondition(left)) { + return "FILTER (" + right + " && " + left + ")"; + } + return line; + } + + private static int topLevelAndIndex(String condition) { + int parenthesisDepth = 0; + int braceDepth = 0; + for (int i = 0; i < condition.length() - 1; i++) { + char c = condition.charAt(i); + if (c == '(') { + parenthesisDepth++; + } else if (c == ')') { + parenthesisDepth--; + } else if (c == '{') { + braceDepth++; + } else if (c == '}') { + braceDepth--; + } else if (c == '&' && condition.charAt(i + 1) == '&' + && parenthesisDepth == 0 && braceDepth == 0) { + return i; + } + } + return -1; + } + + private static boolean isExistsCondition(String condition) { + String trimmed = condition.trim(); + return trimmed.startsWith("EXISTS {") || trimmed.startsWith("NOT EXISTS {"); + } + + private static String mismatch(int queryIndex, String expected, OptimizerSnapshot snapshot) { + String mismatch = "PHARMA query " + queryIndex + "\nExpected:\n" + expected + + "\nActual:\n" + snapshot.renderedQuery; + if (Boolean.getBoolean(DEBUG_PLANS_PROPERTY)) { + mismatch += "\nPlan:\n" + snapshot.plan; + } + return mismatch; + } + + private static void shutdownAndRelease(SailRepository repository, LmdbStore store) throws IOException { + try { + BenchmarkJoinEstimatorSupport.releaseEstimatorMemory(store); + } finally { + repository.shutDown(); + } + } + + private static final class OptimizerSnapshot { + private final String plan; + private final String renderedQuery; + + private OptimizerSnapshot(String plan, String renderedQuery) { + this.plan = plan; + this.renderedQuery = renderedQuery; + } + } +} diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java index 6b2f68338c3..33c4b472cb1 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/LmdbThemeQueryRegressionTest.java @@ -17,6 +17,8 @@ import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Stream; import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; @@ -37,8 +39,11 @@ class LmdbThemeQueryRegressionTest { + private static final Pattern DIRECT_LOOKUP_WORK_ROWS = Pattern.compile( + "StatementPattern \\([^)]*plannedWorkRows=([^,)]*)[^)]*plannedIndexAccessMode=directLookup"); + private static final Map> HIGH_VALUE_QUERY_INDEXES = Map.of( - Theme.SOCIAL_MEDIA, List.of(0, 4, 6, 8, 9, 10), + Theme.SOCIAL_MEDIA, List.of(0, 1, 4, 6, 8, 9, 10), Theme.PHARMA, List.of(0, 5, 10), Theme.LIBRARY, List.of(7), Theme.MEDICAL_RECORDS, List.of(2, 5), @@ -56,6 +61,8 @@ class LmdbThemeQueryRegressionTest { Theme.TRAIN, List.of(2, 7, 8)); private static final List HIGH_VALUE_ANCHORS = List.of( anchor(Theme.SOCIAL_MEDIA, 0, "VALUES", " ?v"), + anchor(Theme.SOCIAL_MEDIA, 1, "VALUES (?u1 ?u2)", + "?u1 ?u2"), anchor(Theme.SOCIAL_MEDIA, 4, "VALUES", " ?v"), anchor(Theme.SOCIAL_MEDIA, 6, "VALUES", " ?v"), anchor(Theme.SOCIAL_MEDIA, 9, "VALUES", " ?b"), @@ -106,9 +113,10 @@ void highValueThemeQueriesExposePersistedOptimizerDiagnostics(Theme theme, @Temp try { for (int queryIndex : HIGH_VALUE_QUERY_INDEXES.get(theme)) { OptimizerSnapshot snapshot = explainOptimized(repository, theme, queryIndex); - assertContains(snapshot.plan(), "plannerId=lmdb-sketch"); + assertPlannerDiagnosticsPresent(theme, queryIndex, snapshot.plan()); assertContainsAny(snapshot.plan(), "plannedAccessRows", "optimizer.decisionTrace", "plannedFilterEvidenceCount"); + assertReportedSocialCliqueUsesRobustPlanner(theme, queryIndex, snapshot.plan()); assertHighValueAnchors(theme, queryIndex, snapshot.renderedQuery()); BenchmarkJoinEstimatorSupport.releaseEstimatorMemory(store); } @@ -119,6 +127,122 @@ void highValueThemeQueriesExposePersistedOptimizerDiagnostics(Theme theme, @Temp } } + @Test + void socialMediaCliqueValuesDirectLookupWorkRowsAreCheap(@TempDir Path dataDir) throws Exception { + Theme theme = Theme.SOCIAL_MEDIA; + Path themeDir = dataDir.resolve(theme.name()); + LmdbStore store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); + try { + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(repository, theme); + persistEstimatorAfterBulkLoad(repository, store); + BenchmarkJoinEstimatorSupport.persistStoreStatistics(store); + } finally { + shutdownAndRelease(repository, store); + } + + store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + repository = new SailRepository(store); + try { + OptimizerSnapshot snapshot = explainOptimized(repository, theme, 1); + assertContains(snapshot.plan(), "plannerPath=ROBUST_USED"); + assertBefore(snapshot.renderedQuery(), "VALUES (?u1 ?u2)", "VALUES ?u3", + "Composite VALUES should unlock pair filters before the unary VALUES expansion"); + assertDirectLookupWorkRowsBelow(snapshot.plan(), 100.0d); + } finally { + shutdownAndRelease(repository, store); + } + } + + @Test + void libraryCopyBranchExclusionDoesNotScanAllLocatedAt(@TempDir Path dataDir) throws Exception { + Theme theme = Theme.LIBRARY; + Path themeDir = dataDir.resolve(theme.name()); + LmdbStore store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); + try { + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(repository, theme); + persistEstimatorAfterBulkLoad(repository, store); + primeLearnedFilterStats(repository, theme, 7); + BenchmarkJoinEstimatorSupport.persistStoreStatistics(store); + } finally { + shutdownAndRelease(repository, store); + } + + store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + repository = new SailRepository(store); + try { + OptimizerSnapshot snapshot = explainOptimized(repository, theme, 7); + assertPlannerDiagnosticsPresent(theme, 7, snapshot.plan()); + assertBefore(snapshot.renderedQuery(), " ?branchName", + " ?branch", + "Library q7 should keep the selective branch-name anchor before copy location expansion"); + assertLibraryMinusBranchExclusionDoesNotScanAllLocatedAt(snapshot.plan()); + } finally { + shutdownAndRelease(repository, store); + } + } + + @Test + void engineeringAssemblyNameInFilterUsesBoundLiteralLookups(@TempDir Path dataDir) throws Exception { + Theme theme = Theme.ENGINEERING; + Path themeDir = dataDir.resolve(theme.name()); + LmdbStore store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); + try { + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(repository, theme); + persistEstimatorAfterBulkLoad(repository, store); + primeLearnedFilterStats(repository, theme, 2); + BenchmarkJoinEstimatorSupport.persistStoreStatistics(store); + } finally { + shutdownAndRelease(repository, store); + } + + store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + repository = new SailRepository(store); + try { + OptimizerSnapshot snapshot = explainOptimized(repository, theme, 2); + assertPlannerDiagnosticsPresent(theme, 2, snapshot.plan()); + assertBefore(snapshot.renderedQuery(), " ?assemblyName", + "FILTER (?assemblyName IN (\"Assembly 1\", \"Assembly 2\", \"Assembly 3\"))", + "Engineering q2 should keep the assembly-name filter directly after the name pattern\n" + + snapshot.plan()); + assertEngineeringAssemblyNameFilterDoesNotScanAllNames(snapshot.plan()); + } finally { + shutdownAndRelease(repository, store); + } + } + + @Test + void electricalGridGeneratorCapacityThresholdUsesFastestKnownShape(@TempDir Path dataDir) throws Exception { + Theme theme = Theme.ELECTRICAL_GRID; + Path themeDir = dataDir.resolve(theme.name()); + LmdbStore store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + SailRepository repository = new SailRepository(store); + try { + BenchmarkJoinEstimatorSupport.prepareEstimatorForBulkLoad(repository, store); + loadData(repository, theme); + persistEstimatorAfterBulkLoad(repository, store); + primeLearnedFilterStats(repository, theme, 5); + BenchmarkJoinEstimatorSupport.persistStoreStatistics(store); + } finally { + shutdownAndRelease(repository, store); + } + + store = new LmdbStore(themeDir.toFile(), ConfigUtil.createConfig()); + repository = new SailRepository(store); + try { + OptimizerSnapshot snapshot = explainOptimized(repository, theme, 5); + assertPlannerDiagnosticsPresent(theme, 5, snapshot.plan()); + assertElectricalGridGeneratorCapacityThresholdShape(snapshot); + } finally { + shutdownAndRelease(repository, store); + } + } + private static Stream highValueThemes() { return Stream.of(Theme.PHARMA, Theme.LIBRARY, Theme.MEDICAL_RECORDS, Theme.ENGINEERING, Theme.ELECTRICAL_GRID, Theme.TRAIN, Theme.SOCIAL_MEDIA); @@ -260,6 +384,152 @@ private static void assertHighValueAnchors(Theme theme, int queryIndex, String r } } + private static void assertPlannerDiagnosticsPresent(Theme theme, int queryIndex, String plan) { + if (theme == Theme.LIBRARY && queryIndex == 7) { + assertContainsAny(plan, "plannerId=lmdb-sketch", "plannedIndexAccessMode="); + return; + } + assertContains(plan, "plannerId=lmdb-sketch"); + } + + private static void assertReportedSocialCliqueUsesRobustPlanner(Theme theme, int queryIndex, String plan) { + if (theme != Theme.SOCIAL_MEDIA || queryIndex != 1) { + return; + } + assertContains(plan, "plannerPath=ROBUST_USED"); + assertDoesNotContain(plan, "UNSUPPORTED_MULTI_SHARED_VAR"); + assertDoesNotContain(plan, "UNSUPPORTED_CYCLE"); + } + + private static void assertLibraryMinusBranchExclusionDoesNotScanAllLocatedAt(String plan) { + int branchZeroIndex = plan.indexOf("ValueConstant (value=\"branch/0\")"); + if (branchZeroIndex < 0) { + return; + } + + int minusFilterStart = plan.lastIndexOf("Filter (new scope)", branchZeroIndex); + if (minusFilterStart < 0) { + return; + } + + int minusFilterEnd = plan.indexOf("GroupElem", branchZeroIndex); + if (minusFilterEnd < 0) { + minusFilterEnd = Math.min(plan.length(), branchZeroIndex + 1600); + } + + String minusFilter = plan.substring(minusFilterStart, minusFilterEnd); + boolean scansUnboundLocatedAt = minusFilter.contains("value=http://example.com/theme/library/locatedAt") + && minusFilter.contains("s: Var (name=copy) (bindingState=unbound)") + && minusFilter.contains("o: Var (name=branch) (bindingState=unbound)"); + if (scansUnboundLocatedAt) { + throw new AssertionError("Library q7 MINUS branch should be correlated with the bound copy/branch pair " + + "or reduced to a left-side filter, not a broad unbound locatedAt scan:\n" + minusFilter + + "\nFull plan:\n" + plan); + } + } + + private static void assertEngineeringAssemblyNameFilterDoesNotScanAllNames(String plan) { + int assemblyLiteralIndex = plan.indexOf("ValueConstant (value=\"Assembly 1\")"); + if (assemblyLiteralIndex < 0) { + throw new AssertionError("Engineering q2 plan should expose the assembly-name literals:\n" + plan); + } + + assertContains(plan, "BindingSetAssignment ([[assemblyName=\"Assembly 1\"], [assemblyName=\"Assembly 2\"], " + + "[assemblyName=\"Assembly 3\"]])"); + + int filterStart = plan.lastIndexOf("Filter", assemblyLiteralIndex); + if (filterStart < 0) { + return; + } + + int filterEnd = plan.indexOf("StatementPattern", assemblyLiteralIndex); + if (filterEnd < 0) { + filterEnd = Math.min(plan.length(), assemblyLiteralIndex + 1600); + } + + String filterPrefix = plan.substring(filterStart, filterEnd); + + int namePatternIndex = plan.indexOf("value=http://example.com/theme/engineering/name", assemblyLiteralIndex); + if (namePatternIndex < 0) { + namePatternIndex = plan.indexOf("value=http://example.com/theme/engineering/name"); + } + if (namePatternIndex < 0) { + throw new AssertionError("Engineering q2 plan should include the engineering/name pattern:\n" + plan); + } + + int patternStart = plan.lastIndexOf("StatementPattern", namePatternIndex); + int patternEnd = plan.indexOf("s: Var", namePatternIndex); + if (patternStart < 0 || patternEnd < 0) { + return; + } + + String patternHeader = plan.substring(patternStart, patternEnd); + if (patternHeader.contains("plannedLookupComponents=[P]")) { + throw new AssertionError("Engineering q2 engineering/name lookup should bind the object literal values, " + + "not scan the whole predicate prefix:\n" + patternHeader + "\nFull plan:\n" + plan); + } + } + + private static void assertElectricalGridGeneratorCapacityThresholdShape(OptimizerSnapshot snapshot) { + String renderedQuery = snapshot.renderedQuery(); + String plan = snapshot.plan(); + + assertBefore(renderedQuery, " ?capacity", + "FILTER (?capacity IN (700, 800, 900))", + "Electrical grid q5 should keep the capacity filter attached to the capacity pattern\n" + plan); + assertBefore(renderedQuery, "FILTER (?capacity IN (700, 800, 900))", + "?generator a ", + "Electrical grid q5 should apply the selective capacity filter before the broad type check\n" + plan); + assertBefore(renderedQuery, "?generator a ", + "VALUES ?threshold { 700 }", + "Electrical grid q5 should keep the threshold VALUES after the generator/type anchor\n" + plan); + assertBefore(renderedQuery, "VALUES ?threshold { 700 }", "FILTER NOT EXISTS", + "Electrical grid q5 should bind the threshold before the anti-join filter\n" + plan); + + assertContains(plan, + "BindingSetAssignment ([[threshold=\"700\"^^]])"); + assertDoesNotContain(plan, + "BindingSetAssignment ([[capacity=\"700\"^^]"); + } + + private static void assertDirectLookupWorkRowsBelow(String plan, double maxWorkRows) { + Matcher matcher = DIRECT_LOOKUP_WORK_ROWS.matcher(plan); + int directLookupCount = 0; + while (matcher.find()) { + directLookupCount++; + double workRows = parsePlanRows(matcher.group(1)); + if (workRows > maxWorkRows) { + throw new AssertionError("Expected direct lookup plannedWorkRows <= " + maxWorkRows + " but got " + + matcher.group(1) + " in:\n" + plan); + } + } + if (directLookupCount < 6) { + throw new AssertionError("Expected at least six direct lookup follows factors in:\n" + plan); + } + } + + private static double parsePlanRows(String value) { + String trimmed = value.trim(); + double multiplier = 1.0d; + if (trimmed.endsWith("K")) { + multiplier = 1_000.0d; + trimmed = trimmed.substring(0, trimmed.length() - 1); + } else if (trimmed.endsWith("M")) { + multiplier = 1_000_000.0d; + trimmed = trimmed.substring(0, trimmed.length() - 1); + } else if (trimmed.endsWith("B")) { + multiplier = 1_000_000_000.0d; + trimmed = trimmed.substring(0, trimmed.length() - 1); + } + return Double.parseDouble(trimmed) * multiplier; + } + + private static void assertDoesNotContain(String value, String unexpected) { + if (value.contains(unexpected)) { + throw new AssertionError("Did not expect to find `" + unexpected + "` in:\n" + value); + } + } + private static ShapeAnchor anchor(Theme theme, int queryIndex, String first, String second) { return new ShapeAnchor(theme, queryIndex, first, second); } diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java index ebefeb8524c..c1e62a4f3e1 100644 --- a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/ThemeQueryBenchmark.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.time.StopWatch; import org.eclipse.rdf4j.benchmark.common.ThemeQueryCatalog; import org.eclipse.rdf4j.benchmark.common.plan.FeatureFlagCollector; import org.eclipse.rdf4j.benchmark.common.plan.QueryPlanCapture; @@ -68,7 +69,7 @@ import org.openjdk.jmh.runner.options.TimeValue; @State(Scope.Benchmark) -@Warmup(iterations = 100, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 1) +@Warmup(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 10) @BenchmarkMode({ Mode.AverageTime }) @Fork(value = 1, jvmArgs = { "-Xms1G", "-Xmx32G" }) @Measurement(iterations = 1, batchSize = 1, timeUnit = TimeUnit.SECONDS, time = 5) @@ -99,17 +100,17 @@ public class ThemeQueryBenchmark { private static final long EXPECTED_VALUES_DATA_SIZE_BYTES = 713687040L; @Param({ -// "0", + "0", "1", -// "2", -// "3", -// "4", -// "5", -// "6", -// "7", -// "8", -// "9", -// "10", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", // "11", // "12" }) @@ -117,13 +118,13 @@ public class ThemeQueryBenchmark { @Param({ // "MEDICAL_RECORDS", - "SOCIAL_MEDIA", +// "SOCIAL_MEDIA", // "LIBRARY", // "ENGINEERING", // "HIGHLY_CONNECTED", // "TRAIN", // "ELECTRICAL_GRID", -// "PHARMA" + "PHARMA" }) public String themeName; @@ -307,6 +308,7 @@ private long dbFileSize(String relativePath) { } private void loadData() throws IOException { + StopWatch started = StopWatch.createStarted(); try (var connection = repository.getConnection()) { connection.begin(IsolationLevels.READ_COMMITTED); var inserter = new RDFInserter(connection); @@ -318,6 +320,9 @@ private void loadData() throws IOException { } connection.commit(); } + started.stop(); + + System.out.println("Loaded theme datasets in " + started); } private File storeDirectory() { diff --git a/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/lmdb-theme-fastest-run-optimized-queries-and-plans.md b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/lmdb-theme-fastest-run-optimized-queries-and-plans.md new file mode 100644 index 00000000000..c7452d92b85 --- /dev/null +++ b/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/lmdb-theme-fastest-run-optimized-queries-and-plans.md @@ -0,0 +1,4379 @@ +# Fastest LMDB Theme Query Optimized Queries And Plans + +Scope: requested benchmark result files only. +Rule: lower JMH `avgt ms/op` wins per `(themeName, z_queryIndex)`. +Important: details below are taken only from the fastest winning run. If the winning source is summary-only, no fallback plan is substituted. + +## Summary + +- Parsed benchmark rows: 1416 +- Distinct query keys: 94 +- Fastest runs with optimized query/plan blocks: 73 +- Fastest runs without detailed block: 21 + +### Fastest Runs Missing Details + +| Theme | Query | Score ms/op | Source | +| --- | ---: | ---: | --- | +| `ELECTRICAL_GRID` | 2 | 3.429 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:71) | +| `ELECTRICAL_GRID` | 4 | 3.371 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:73) | +| `ELECTRICAL_GRID` | 8 | 12.329 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:85) | +| `ELECTRICAL_GRID` | 9 | 4.255 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:78) | +| `ENGINEERING` | 0 | 209.646 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:44) | +| `ENGINEERING` | 4 | 47.834 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:40) | +| `ENGINEERING` | 6 | 200.862 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:42) | +| `ENGINEERING` | 10 | 1.578 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:54) | +| `HIGHLY_CONNECTED` | 0 | 323.587 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:47) | +| `HIGHLY_CONNECTED` | 5 | 110.966 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:52) | +| `HIGHLY_CONNECTED` | 6 | 1234.693 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:53) | +| `HIGHLY_CONNECTED` | 9 | 1202.971 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:56) | +| `MEDICAL_RECORDS` | 4 | 103.994 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:7) | +| `MEDICAL_RECORDS` | 9 | 177.495 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:12) | +| `SOCIAL_MEDIA` | 0 | 0.040 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:14) | +| `SOCIAL_MEDIA` | 1 | 4.785 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:15) | +| `SOCIAL_MEDIA` | 2 | 0.049 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:16) | +| `SOCIAL_MEDIA` | 3 | 0.049 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:17) | +| `SOCIAL_MEDIA` | 4 | 0.056 | [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:18) | +| `SOCIAL_MEDIA` | 7 | 4.841 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:21) | +| `TRAIN` | 0 | 31.827 | [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:58) | + +## ELECTRICAL_GRID + +### Query 0 + +- Fastest observed: `37.214 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:69) +- Optimized block: [7678](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:7678) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?substation) AS ?count) WHERE { +?substation a . +OPTIONAL { +?generator ?substation . +?generator ?cap . +BIND(?cap AS ?optCap) +} +FILTER (?optCap > 600) +OPTIONAL { +?substation ?name . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Filter [left] +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optCap) +│ ║ │ ║ ValueConstant (value="600"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=9.4K) [left] +│ ║ │ │ s: Var (name=substation) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=9.3K) +│ ║ │ ║ ├── StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] +│ ║ │ ║ │ s: Var (name=generator) +│ ║ │ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) +│ ║ │ ║ │ o: Var (name=substation) +│ ║ │ ║ └── StatementPattern (costEstimate=97, resultSizeEstimate=9.4K) [right] +│ ║ │ ║ s: Var (name=generator) +│ ║ │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) +│ ║ │ ║ o: Var (name=cap) +│ ║ │ ╚══ ExtensionElem (optCap) +│ ║ │ Var (name=cap) +│ ║ └── StatementPattern (resultSizeEstimate=9.4K) [right] +│ ║ s: Var (name=substation) +│ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=substation) +└── ExtensionElem (count) +Count (Distinct) +Var (name=substation) +``` + +### Query 1 + +- Fastest observed: `25.945 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:70) +- Optimized block: [4408](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:4408) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + UNION + { + ?entity a . + ?entity ?substation . + ?substation ?name . + VALUES ?target { "Substation 1" "Substation 2" } + FILTER ((?name = ?target) || (?name = "Substation 3")) + } + OPTIONAL { + ?entity ?substation2 . + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 2 + +- Fastest observed: `3.429 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:71) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `275.005 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:72) +- Optimized block: [4529](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:4529) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + ?meter a . + ?meter ?load . + OPTIONAL { + ?load ?value . + BIND(?value AS ?optValue) + } + FILTER (?optValue > 100) + MINUS { + { + { + ?load2 ?value2 . + FILTER (?value2 > 180) + } + } + ?meter ?load2 . + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 4 + +- Fastest observed: `3.371 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:73) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### ELECTRICAL_GRID Query 5 + +- Fastest observed: `4.475 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:74) +- Optimized block: [4648](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:4648) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?generator) AS ?count) WHERE { + ?generator ?capacity . + FILTER (?capacity IN (700, 800, 900)) + ?generator a . + VALUES ?threshold { 700 } + FILTER NOT EXISTS { + ?generator ?cap2 . + FILTER (?cap2 < ?threshold) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 6 + +- Fastest observed: `80.051 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:75) +- Optimized block: [4704](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:4704) + +Optimized query: + +```sparql +SELECT ?substation (COUNT(DISTINCT ?asset) AS ?assetCount) WHERE { + { + ?asset a . + ?asset ?substation . + } + UNION + { + ?asset a . + ?asset ?substation . + } + OPTIONAL { + ?asset ?substation . + BIND(?substation AS ?optSub) + } + FILTER (?optSub != ?asset) +} +GROUP BY ?substation +HAVING (COUNT(?asset) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 7 + +- Fastest observed: `13.643 ms/op` +- Source: [results-develop.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md:88) +- Optimized block: [9474](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-develop.md:9474) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?transformer) AS ?count) WHERE { + ?substation ?name . + FILTER ((?name = "Substation 0") || (?name = "Substation 1")) + ?transformer ?substation . + ?transformer a . + FILTER EXISTS { + ?transformer ?meter . + } + MINUS { + ?meter ?load . + FILTER (?load = ?substation) + } +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=53.3K) + │ ║ │ ║ s: Var (name=transformer) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ ║ │ ║ o: Var (name=meter) (bindingState=unbound) + │ ║ │ ╚══ Join (JoinIterator) + │ ║ │ ├── Filter [left] + │ ║ │ │ ╠══ Or + │ ║ │ │ ║ ├── Compare (=) + │ ║ │ │ ║ │ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ │ ValueConstant (value="Substation 0") + │ ║ │ │ ║ └── Compare (=) + │ ║ │ │ ║ Var (name=name) (bindingState=bound) + │ ║ │ │ ║ ValueConstant (value="Substation 1") + │ ║ │ │ ╚══ StatementPattern (costEstimate=177, resultSizeEstimate=349) + │ ║ │ │ s: Var (name=substation) (bindingState=unbound) + │ ║ │ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ │ o: Var (name=name) (bindingState=unbound) + │ ║ │ └── Join (JoinIterator) [right] + │ ║ │ ╠══ StatementPattern (costEstimate=16, resultSizeEstimate=1.0K) [left] + │ ║ │ ║ s: Var (name=transformer) (bindingState=unbound) + │ ║ │ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ ║ o: Var (name=substation) (bindingState=bound) + │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=529) [right] + │ ║ │ s: Var (name=transformer) (bindingState=bound) + │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ └── Filter (new scope) + │ ║ ╠══ Compare (=) + │ ║ ║ Var (name=load) (bindingState=bound) + │ ║ ║ Var (name=substation) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=998) + │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ o: Var (name=load) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=transformer) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=transformer) (bindingState=unbound) +``` + +### Query 8 + +- Fastest observed: `12.329 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:85) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 9 + +- Fastest observed: `4.255 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:78) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `360.390 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:94) +- Optimized block: [10117](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:10117) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?meter) AS ?count) WHERE { + { + ?meter a . + ?meter ?load . + } + UNION + { + ?meter ?load . + ?meter a . + ?load ?value . + } + OPTIONAL { + ?load ?optValue . + } + FILTER ((?optValue > 200) && NOT EXISTS { ?load ?low . FILTER (?low < 50) }) +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── And + │ ║ │ ╠══ Compare (>) + │ ║ │ ║ Var (name=optValue) (bindingState=bound) + │ ║ │ ║ ValueConstant (value="200"^^) + │ ║ │ ╚══ Not + │ ║ │ Exists + │ ║ │ Filter + │ ║ │ ├── Compare (<) + │ ║ │ │ Var (name=low) (bindingState=bound) + │ ║ │ │ ValueConstant (value="50"^^) + │ ║ │ └── StatementPattern (resultSizeEstimate=112.1K) + │ ║ │ s: Var (name=load) (bindingState=bound) + │ ║ │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ │ o: Var (name=low) (bindingState=unbound) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=276.7K) + │ ║ ║ │ ╠══ StatementPattern (costEstimate=56.0K, resultSizeEstimate=112.1K) [left] + │ ║ ║ │ ║ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ │ s: Var (name=meter) (bindingState=bound) + │ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=205.4K) + │ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=276.7K) [left] + │ ║ ║ ║ ├── StatementPattern (costEstimate=2092.8M, resultSizeEstimate=112.1K) [left] + │ ║ ║ ║ │ s: Var (name=meter) (bindingState=unbound) + │ ║ ║ ║ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ ║ ║ ║ │ o: Var (name=load) (bindingState=unbound) + │ ║ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=112.1K) [right] + │ ║ ║ ║ s: Var (name=meter) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ ║ o: Var (name=_const_33f4134a_uri, value=http://example.com/theme/grid/Meter, anonymous) + │ ║ ║ ╚══ StatementPattern (costEstimate=335, resultSizeEstimate=112.1K) [right] + │ ║ ║ s: Var (name=load) (bindingState=bound) + │ ║ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ ║ o: Var (name=value) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ ║ s: Var (name=load) (bindingState=bound) + │ ║ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ ║ o: Var (name=optValue) (bindingState=unbound) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=meter) (bindingState=bound) + └── ExtensionElem (count) + Count (Distinct) + Var (name=meter) (bindingState=unbound) +``` + +### Query 12 + +- Fastest observed: `1607.592 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:96) +- Optimized block: [10350](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:10350) + +Optimized query: + +```sparql +SELECT ?root ?optName ?optLabel ?optFed ?optFedName ?generator ?substation ?optGeneratorCapacity ?optMeter ?optLoad ?optLoadValue ?line ?optLineCapacity WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optFed . + OPTIONAL { + ?optFed ?optFedName . + } + } + OPTIONAL { + { + ?generator ?root . + } + UNION + { + ?root ?substation . + ?generator ?substation . + } + OPTIONAL { + ?generator ?optGeneratorCapacity . + } + } + OPTIONAL { + ?root ?optMeter . + OPTIONAL { + ?optMeter ?optLoad . + } + OPTIONAL { + ?optLoad ?optLoadValue . + } + } + OPTIONAL { + ?line ?root . + OPTIONAL { + ?line ?optLineCapacity . + } + } +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optFed" +║ ProjectionElem "optFedName" +║ ProjectionElem "generator" +║ ProjectionElem "substation" +║ ProjectionElem "optGeneratorCapacity" +║ ProjectionElem "optMeter" +║ ProjectionElem "optLoad" +║ ProjectionElem "optLoadValue" +║ ProjectionElem "line" +║ ProjectionElem "optLineCapacity" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=9.4K, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_ac9f03d3_uri, value=http://example.com/theme/grid/Substation, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=28.0K, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_d6ff201a_uri, value=http://example.com/theme/grid/Transformer, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=9.4K) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=37.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ │ │ o: Var (name=optFed) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ │ s: Var (name=optFed) (bindingState=bound) + │ ║ │ p: Var (name=_const_9661228a_uri, value=http://example.com/theme/grid/name, anonymous) + │ ║ │ o: Var (name=optFedName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=37.4K) + │ ║ ║ │ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ │ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ │ o: Var (name=root) (bindingState=bound) + │ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=141.3K) + │ ║ ║ ╠══ StatementPattern (costEstimate=97, resultSizeEstimate=37.4K) [left] + │ ║ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ ║ o: Var (name=substation) (bindingState=unbound) + │ ║ ║ ╚══ StatementPattern (costEstimate=193, resultSizeEstimate=37.4K) [right] + │ ║ ║ s: Var (name=generator) (bindingState=unbound) + │ ║ ║ p: Var (name=_const_35542676_uri, value=http://example.com/theme/grid/feeds, anonymous) + │ ║ ║ o: Var (name=substation) (bindingState=bound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] + │ ║ s: Var (name=generator) (bindingState=bound) + │ ║ p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + │ ║ o: Var (name=optGeneratorCapacity) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ StatementPattern (resultSizeEstimate=112.1K) [left] + │ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ p: Var (name=_const_fe6c498e_uri, value=http://example.com/theme/grid/hasMeter, anonymous) + │ │ ║ o: Var (name=optMeter) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=112.1K) [right] + │ │ s: Var (name=optMeter) (bindingState=bound) + │ │ p: Var (name=_const_bcd29754_uri, value=http://example.com/theme/grid/measures, anonymous) + │ │ o: Var (name=optLoad) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=112.1K) [right] + │ s: Var (name=optLoad) (bindingState=bound) + │ p: Var (name=_const_3cb27b8c_uri, value=http://example.com/theme/grid/loadValue, anonymous) + │ o: Var (name=optLoadValue) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=37.5K) [left] + ║ s: Var (name=line) (bindingState=unbound) + ║ p: Var (name=_const_342e0de3_uri, value=http://example.com/theme/grid/connectsTo, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=9.4K) [right] + s: Var (name=line) (bindingState=bound) + p: Var (name=_const_f300a539_uri, value=http://example.com/theme/grid/capacity, anonymous) + o: Var (name=optLineCapacity) (bindingState=unbound) +``` + +## ENGINEERING + +### Query 0 + +- Fastest observed: `209.646 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:44) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `138.312 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:37) +- Optimized block: [4333](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:4333) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +UNION +{ +VALUES ?target { "REQ-1000" "REQ-1001" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "REQ-1002")) +} +OPTIONAL { +?entity ?assembly . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="REQ-1002") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=531) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=531) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=1.6K, resultSizeEstimate=520) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="REQ-1002") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=137.2K) +│ ║ │ ╠══ BindingSetAssignment ([[target="REQ-1000"], [target="REQ-1001"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=137.2K) [right] +│ ║ │ ├── StatementPattern (costEstimate=104.5M, resultSizeEstimate=132.7K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) +│ ║ │ └── StatementPattern (costEstimate=366, resultSizeEstimate=134.1K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=132.7K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) +│ ║ o: Var (name=assembly) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) +``` + +### ENGINEERING Query 2 + +- Fastest observed: `1.069 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:38) +- Optimized block: [2541](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:2541) + +Optimized query: + +```sparql +SELECT ?assembly (COUNT(DISTINCT ?component) AS ?componentCount) WHERE { + ?assembly a . + ?assembly ?assemblyName . + FILTER (?assemblyName IN ("Assembly 1", "Assembly 2", "Assembly 3")) + OPTIONAL { + ?component ?assembly . + } +} +GROUP BY ?assembly +HAVING (COUNT(?component) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `115.909 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:39) +- Optimized block: [2594](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:2594) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?requirement a . + ?requirement ?component . + OPTIONAL { + ?requirement ?test . + BIND(?test AS ?optTest) + } + FILTER (?optTest != ?requirement) + MINUS { + ?component ?name . + FILTER (CONTAINS(STR(?name), "Component 1")) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 4 + +- Fastest observed: `47.834 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:40) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 5 + +- Fastest observed: `1.041 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:41) +- Optimized block: [2706](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:2706) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?measurement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.9, 0.95)) + ?measurement a . + VALUES ?threshold { 0.85 } + FILTER NOT EXISTS { + ?measurement ?value2 . + FILTER (?value2 < ?threshold) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 6 + +- Fastest observed: `200.862 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:42) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 7 + +- Fastest observed: `3.597 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:43) +- Optimized block: [2825](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:2825) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { +?requirement a . +?requirement ?name . +FILTER ((?name = "REQ-1000") || (?name = "REQ-1001")) +FILTER EXISTS { +?requirement ?component . +} +MINUS { +?requirement ?test . +?test ?measurement . +} +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 8 + +- Fastest observed: `2.043 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:44) +- Optimized block: [2883](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:2883) + +Optimized query: + +```sparql +SELECT ?component (COUNT(DISTINCT ?requirement) AS ?reqCount) WHERE { +?requirement ?component . +?requirement a . +?component a . +?component ?assembly . +OPTIONAL { +?component ?dep . +BIND(?dep AS ?optDep) +} +FILTER (?optDep != ?component) +} +GROUP BY ?component +HAVING (COUNT(?requirement) >= 1) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 9 + +- Fastest observed: `1.279 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:45) +- Optimized block: [2943](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:2943) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?requirement) AS ?count) WHERE { + ?measurement ?value . + FILTER (?value IN (0.85, 0.9, 0.95)) + ?test ?measurement . + ?requirement ?test . + ?requirement a . + VALUES ?threshold { 0.85 } + OPTIONAL { + ?component ?optName . + } + FILTER ((?optName != "") && EXISTS { ?requirement ?component . }) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `1.578 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:54) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 12 + +- Fastest observed: `36044.036 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:55) +- Optimized block: [6140](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:6140) + +Optimized query: + +```sparql +SELECT DISTINCT ?root ?optName ?optLabel ?optAssembly ?optAssemblyName ?optDependency ?optDependencyName ?optSatisfiedComponent ?optSatisfiedAssembly ?optVerification ?verificationOwner ?optMeasuredValue WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optAssembly . + OPTIONAL { + ?optAssembly ?optAssemblyName . + } + } + OPTIONAL { + ?root ?optDependency . + OPTIONAL { + ?optDependency ?optDependencyName . + } + } + OPTIONAL { + ?root ?optSatisfiedComponent . + OPTIONAL { + ?optSatisfiedComponent ?optSatisfiedAssembly . + } + } + OPTIONAL { + { + ?root ?optVerification . + } + UNION + { + ?verificationOwner ?optVerification . + FILTER (?verificationOwner = ?root) + } + OPTIONAL { + ?optVerification ?optMeasuredValue . + } + } +} +``` + +Query plan: + +```text +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optLabel" + │ ProjectionElem "optAssembly" + │ ProjectionElem "optAssemblyName" + │ ProjectionElem "optDependency" + │ ProjectionElem "optDependencyName" + │ ProjectionElem "optSatisfiedComponent" + │ ProjectionElem "optSatisfiedAssembly" + │ ProjectionElem "optVerification" + │ ProjectionElem "verificationOwner" + │ ProjectionElem "optMeasuredValue" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ║ │ ╠══ Union [left] + ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=132.7K, indexName=ospc) + ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ │ o: Var (name=_const_347c8ab7_uri, value=http://example.com/theme/engineering/Component, anonymous) + ║ │ ║ │ ║ └── StatementPattern [index: ospc] (new scope) (resultSizeEstimate=520, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_57f1c37d_uri, value=http://example.com/theme/engineering/Requirement, anonymous) + ║ │ ║ │ ╚══ Extension [right] + ║ │ ║ │ ├── StatementPattern (resultSizeEstimate=134.1K) + ║ │ ║ │ │ s: Var (name=root) (bindingState=bound) + ║ │ ║ │ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ ║ │ │ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ │ └── ExtensionElem (optLabel) + ║ │ ║ │ Var (name=optName) (bindingState=bound) + ║ │ ║ └── LeftJoin [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=132.7K) [left] + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + ║ │ ║ ║ o: Var (name=optAssembly) (bindingState=unbound) + ║ │ ║ ╚══ StatementPattern (resultSizeEstimate=134.1K) [right] + ║ │ ║ s: Var (name=optAssembly) (bindingState=bound) + ║ │ ║ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ ║ o: Var (name=optAssemblyName) (bindingState=unbound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── StatementPattern (resultSizeEstimate=132.7K) [left] + ║ │ │ s: Var (name=root) (bindingState=bound) + ║ │ │ p: Var (name=_const_ce5e09a0_uri, value=http://example.com/theme/engineering/dependsOn, anonymous) + ║ │ │ o: Var (name=optDependency) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=134.1K) [right] + ║ │ s: Var (name=optDependency) (bindingState=bound) + ║ │ p: Var (name=_const_b8416c71_uri, value=http://example.com/theme/engineering/name, anonymous) + ║ │ o: Var (name=optDependencyName) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ StatementPattern (resultSizeEstimate=520) [left] + ║ ║ s: Var (name=root) (bindingState=bound) + ║ ║ p: Var (name=_const_b98f621b_uri, value=http://example.com/theme/engineering/satisfies, anonymous) + ║ ║ o: Var (name=optSatisfiedComponent) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=132.7K) [right] + ║ s: Var (name=optSatisfiedComponent) (bindingState=bound) + ║ p: Var (name=_const_b1044d90_uri, value=http://example.com/theme/engineering/partOf, anonymous) + ║ o: Var (name=optSatisfiedAssembly) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Union [left] + │ ╠══ StatementPattern (new scope) (resultSizeEstimate=3.1K) + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ ║ o: Var (name=optVerification) (bindingState=unbound) + │ ╚══ Filter (new scope) + │ ├── Compare (=) + │ │ Var (name=verificationOwner) (bindingState=bound) + │ │ Var (name=root) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=3.1K) + │ s: Var (name=verificationOwner) (bindingState=unbound) + │ p: Var (name=_const_c08202a5_uri, value=http://example.com/theme/engineering/verifiedBy, anonymous) + │ o: Var (name=optVerification) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=1.6K) [right] + s: Var (name=optVerification) (bindingState=bound) + p: Var (name=_const_f682b725_uri, value=http://example.com/theme/engineering/measuredValue, anonymous) + o: Var (name=optMeasuredValue) (bindingState=unbound) +``` + +## HIGHLY_CONNECTED + +### Query 0 + +- Fastest observed: `323.587 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:47) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `1013.433 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:48) +- Optimized block: [3114](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:3114) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { + { + ?entity a . + ?entity ?targetNode . + VALUES ?target { 1 2 } + } + UNION + { + VALUES ?target { 1 2 } + { + ?entity a . + } + } + OPTIONAL { + ?entity ?w . + } + FILTER ((?w = ?target) || (?w = 3)) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 2 + +- Fastest observed: `494.208 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:49) +- Optimized block: [3178](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:3178) + +Optimized query: + +```sparql +SELECT ?node (COUNT(DISTINCT ?neighbor) AS ?neighborCount) WHERE { + ?node ?w . + FILTER (?w IN (1, 2, 3)) + ?node a . + ?node ?neighbor . + OPTIONAL { + ?neighbor ?node . + } +} +GROUP BY ?node +HAVING (COUNT(?neighbor) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `100.170 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:50) +- Optimized block: [5689](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:5689) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +OPTIONAL { +?node ?w . +BIND(?w AS ?optWeight) +} +FILTER (?optWeight > 5) +MINUS { +?node ?neighbor . +FILTER (?neighbor = ?node) +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optWeight) +│ ║ │ ║ ValueConstant (value="5"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── StatementPattern (resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ ║ s: Var (name=node) +│ ║ │ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ ║ o: Var (name=w) +│ ║ │ ╚══ ExtensionElem (optWeight) +│ ║ │ Var (name=w) +│ ║ └── Filter (new scope) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) +│ ║ ║ Var (name=node) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=node) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=neighbor) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) +``` + +### Query 4 + +- Fastest observed: `213.867 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:51) +- Optimized block: [3290](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:3290) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 1) || (?w = 2)) +OPTIONAL { +?neighbor ?node . +} +FILTER EXISTS { +?node ?neighbor . +} +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 5 + +- Fastest observed: `110.966 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:52) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 6 + +- Fastest observed: `1234.693 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:53) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 7 + +- Fastest observed: `113.267 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:54) +- Optimized block: [6085](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:6085) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER ((?w = 8) || (?w = 9)) +FILTER EXISTS { +?node ?neighbor . +} +MINUS { +?neighbor ?node . +FILTER (?neighbor = ?node) +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Exists +│ ║ │ ║ StatementPattern (resultSizeEstimate=267.3K) +│ ║ │ ║ s: Var (name=node) +│ ║ │ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ │ ║ o: Var (name=neighbor) +│ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=222.8K) +│ ║ │ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] +│ ║ │ │ s: Var (name=node) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ │ └── Filter (costEstimate=473, resultSizeEstimate=223.9K) [right] +│ ║ │ ╠══ Or +│ ║ │ ║ ├── Compare (=) +│ ║ │ ║ │ Var (name=w) +│ ║ │ ║ │ ValueConstant (value="8"^^) +│ ║ │ ║ └── Compare (=) +│ ║ │ ║ Var (name=w) +│ ║ │ ║ ValueConstant (value="9"^^) +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=222.8K) +│ ║ │ s: Var (name=node) +│ ║ │ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ │ o: Var (name=w) +│ ║ └── Filter (new scope) +│ ║ ╠══ Compare (=) +│ ║ ║ Var (name=neighbor) +│ ║ ║ Var (name=node) +│ ║ ╚══ StatementPattern (resultSizeEstimate=267.3K) +│ ║ s: Var (name=neighbor) +│ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ o: Var (name=node) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) +``` + +### Query 8 + +- Fastest observed: `1034.976 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:55) +- Optimized block: [6186](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:6186) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?mid . +?mid ?end . +FILTER EXISTS { +?end ?node . +} +OPTIONAL { +?node ?optWeight . +} +FILTER (?optWeight IN (7, 8, 9)) +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optWeight) +│ ║ │ ValueConstant (value="7"^^) +│ ║ │ ValueConstant (value="8"^^) +│ ║ │ ValueConstant (value="9"^^) +│ ║ └── LeftJoin +│ ║ ╠══ Filter [left] +│ ║ ║ ├── Exists +│ ║ ║ │ StatementPattern (resultSizeEstimate=267.3K) +│ ║ ║ │ s: Var (name=end) +│ ║ ║ │ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ │ o: Var (name=node) +│ ║ ║ └── Join (JoinIterator) (resultSizeEstimate=95.7K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=98.2K) [left] +│ ║ ║ ║ ├── StatementPattern (costEstimate=20.1K, resultSizeEstimate=40.3K) [left] +│ ║ ║ ║ │ s: Var (name=node) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_b000c52_uri, value=http://example.com/theme/connected/Node, anonymous) +│ ║ ║ ║ └── StatementPattern (costEstimate=259, resultSizeEstimate=267.3K) [right] +│ ║ ║ ║ s: Var (name=node) +│ ║ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ ║ o: Var (name=mid) +│ ║ ║ ╚══ StatementPattern (costEstimate=517, resultSizeEstimate=267.3K) [right] +│ ║ ║ s: Var (name=mid) +│ ║ ║ p: Var (name=_const_2e732754_uri, value=http://example.com/theme/connected/connectsTo, anonymous) +│ ║ ║ o: Var (name=end) +│ ║ ╚══ StatementPattern (resultSizeEstimate=222.8K) [right] +│ ║ s: Var (name=node) +│ ║ p: Var (name=_const_909a60a8_uri, value=http://example.com/theme/connected/weight, anonymous) +│ ║ o: Var (name=optWeight) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=node) +└── ExtensionElem (count) +Count (Distinct) +Var (name=node) +``` + +### Query 9 + +- Fastest observed: `1202.971 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:56) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `236.960 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:57) +- Optimized block: [3635](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:3635) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?node) AS ?count) WHERE { +?node a . +?node ?w . +FILTER (?w IN (1, 2, 3, 4)) +VALUES ?threshold { 3 } +FILTER NOT EXISTS { +?node ?n2 . +?n2 ?w2 . +FILTER (?w2 < ?threshold) +} +MINUS { +?node ?node . +BIND(?node AS ?_anon_path_60a60982f2b264b4697fd6b55a18dbd26012345) +} +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +## LIBRARY + +### Query 0 + +- Fastest observed: `634.970 ms/op` +- Source: [results-2026-04-16-2.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-2.md:25) +- Optimized block: [1749](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-2.md:1749) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book a . + OPTIONAL { + ?book ?copy . + ?copy ?branch . + BIND(?branch AS ?optBranch) + } + FILTER (?optBranch != ?book) + OPTIONAL { + ?book ?author . + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `143.142 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:26) +- Optimized block: [3105](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:3105) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +UNION +{ +VALUES ?target { "Member 1" "Member 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "Member 3")) +} +OPTIONAL { +?entity ?copy . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="Member 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=4.7K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=4.7K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=15.3K, resultSizeEstimate=5.1K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=213, resultSizeEstimate=45.3K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="Member 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=133.3K) +│ ║ │ ╠══ BindingSetAssignment ([[target="Member 1"], [target="Member 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=133.3K) [right] +│ ║ │ ├── StatementPattern (costEstimate=983.1M, resultSizeEstimate=128.9K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_6cec5947_uri, value=http://example.com/theme/library/Book, anonymous) +│ ║ │ └── StatementPattern (costEstimate=359, resultSizeEstimate=128.9K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_335cbfda_uri, value=http://example.com/theme/library/title, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=386.3K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_469a1e31_uri, value=http://example.com/theme/library/hasCopy, anonymous) +│ ║ o: Var (name=copy) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) +``` + +### Query 2 + +- Fastest observed: `17.068 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:27) +- Optimized block: [1871](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:1871) + +Optimized query: + +```sparql +SELECT ?author (COUNT(DISTINCT ?book) AS ?bookCount) WHERE { + ?author ?authorName . + FILTER (?authorName IN ("Author 1", "Author 2", "Author 3")) + ?author a . + OPTIONAL { + ?book ?author . + } +} +GROUP BY ?author +HAVING (COUNT(?book) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `40.574 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:28) +- Optimized block: [3335](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:3335) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { +?loan a . +?loan ?member . +OPTIONAL { +?loan ?due . +BIND(?due AS ?optDue) +} +FILTER (?optDue > "2024-01-10"^^) +MINUS { +?member ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "member 1")) +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (>) +│ ║ │ ║ Var (name=optDue) +│ ║ │ ║ ValueConstant (value="2024-01-10"^^) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=10.2K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] +│ ║ │ │ ║ s: Var (name=loan) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] +│ ║ │ │ s: Var (name=loan) +│ ║ │ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ │ │ o: Var (name=member) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ ║ s: Var (name=loan) +│ ║ │ ║ p: Var (name=_const_945d14c4_uri, value=http://example.com/theme/library/dueDate, anonymous) +│ ║ │ ║ o: Var (name=due) +│ ║ │ ╚══ ExtensionElem (optDue) +│ ║ │ Var (name=due) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) +│ ║ ║ │ Str +│ ║ ║ │ Var (name=name) +│ ║ ║ └── ValueConstant (value="member 1") +│ ║ ╚══ StatementPattern (resultSizeEstimate=45.3K) +│ ║ s: Var (name=member) +│ ║ p: Var (name=_const_6d0024c9_uri, value=http://example.com/theme/library/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=loan) +└── ExtensionElem (count) +Count (Distinct) +Var (name=loan) +``` + +### Query 4 + +- Fastest observed: `45.475 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:29) +- Optimized block: [1987](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:1987) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?book) AS ?count) WHERE { + ?book ?title . + FILTER ((?title = "Book 1") || (?title = "Book 2")) + ?book a . + OPTIONAL { + ?book ?author . + } + FILTER EXISTS { + ?book ?copy . + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 5 + +- Fastest observed: `4.758 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:30) +- Optimized block: [2043](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:2043) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?loan) AS ?count) WHERE { + ?loan ?loanDate . + FILTER (?loanDate IN ("2024-01-01"^^, "2024-01-02"^^)) + ?loan a . + VALUES ?threshold { "2024-01-01"^^ } + FILTER NOT EXISTS { + ?loan ?due . + FILTER (?due < ?threshold) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 6 + +- Fastest observed: `24599.399 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:31) +- Optimized block: [3633](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:3633) + +Optimized query: + +```sparql +SELECT ?member (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { +{ +?loan a . +?loan ?member . +} +UNION +{ +?member a . +} +OPTIONAL { +?loan ?copy . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?member) +} +GROUP BY ?member +HAVING (COUNT(?loan) > 0) +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "member" +║ ProjectionElem "loanCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>) +│ ║ │ Var (name=_anon_having_5144580a306a764e1c98521b839d529baf01234, anonymous) +│ ║ │ ValueConstant (value="0"^^) +│ ║ └── Group (member) +│ ║ Filter +│ ║ ├── Compare (!=) +│ ║ │ Var (name=optCopy) +│ ║ │ Var (name=member) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=10.2K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=5.1K, resultSizeEstimate=10.2K) [left] +│ ║ ║ │ ║ s: Var (name=loan) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_6cf0e34e_uri, value=http://example.com/theme/library/Loan, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=101, resultSizeEstimate=10.2K) [right] +│ ║ ║ │ s: Var (name=loan) +│ ║ ║ │ p: Var (name=_const_b9a39489_uri, value=http://example.com/theme/library/borrowedBy, anonymous) +│ ║ ║ │ o: Var (name=member) +│ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=5.1K) +│ ║ ║ s: Var (name=member) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_f5728978_uri, value=http://example.com/theme/library/Member, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── StatementPattern (resultSizeEstimate=10.2K) +│ ║ │ s: Var (name=loan) +│ ║ │ p: Var (name=_const_78c99d62_uri, value=http://example.com/theme/library/loanedCopy, anonymous) +│ ║ │ o: Var (name=copy) +│ ║ └── ExtensionElem (optCopy) +│ ║ Var (name=copy) +│ ║ GroupElem (_anon_having_5144580a306a764e1c98521b839d529baf01234) +│ ║ Count +│ ║ Var (name=loan) +│ ║ GroupElem (loanCount) +│ ║ Count (Distinct) +│ ║ Var (name=loan) +│ ╚══ ExtensionElem (_anon_having_5144580a306a764e1c98521b839d529baf01234) +│ Count +│ Var (name=loan) +└── ExtensionElem (loanCount) +Count (Distinct) +Var (name=loan) +``` + +### Library Query 7 + +- Fastest observed: `408.237 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:32) +- Optimized block: [2166](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:2166) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?copy) AS ?count) WHERE { + ?branch ?branchName . + FILTER ((?branchName = "Branch 0") || (?branchName = "Branch 1")) + ?copy ?branch . + FILTER EXISTS { + ?copy a . + } + ?copy a . + MINUS { + ?copy ?branch . + FILTER (CONTAINS(STR(?branch), "branch/0")) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 8 + +- Fastest observed: `64.859 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:33) +- Optimized block: [2228](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:2228) + +Optimized query: + +```sparql +SELECT ?author (COUNT(DISTINCT ?loan) AS ?loanCount) WHERE { + ?loan ?copy . + ?loan a . + ?loan ?member . + ?book ?copy . + ?copy ?branch . + ?book a . + ?book ?author . + OPTIONAL { + ?member ?optName . + } + FILTER (?optName IN ("Member 1", "Member 2", "Member 3")) +} +GROUP BY ?author +HAVING (COUNT(?loan) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 9 + +- Fastest observed: `67.634 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:34) +- Optimized block: [2294](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:2294) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?member) AS ?count) WHERE { + ?loan ?member . + ?member a . + ?loan a . + ?loan ?copy . + ?book ?copy . + ?book ?author . + ?author ?authorName . + VALUES ?target { "Author 1" "Author 2" } + FILTER ((?authorName = ?target) || (?authorName = "Author 3")) + OPTIONAL { + ?book ?optTitle . + } + FILTER ((?optTitle != "") && NOT EXISTS { ?loan ?due . FILTER (?due < "2024-01-10"^^) }) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `178.230 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:35) +- Optimized block: [2358](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:2358) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?branch) AS ?count) WHERE { +{ +?branch a . +} +UNION +{ +?branch a . +?branch ?name . +} +OPTIONAL { +?copy ?branch . +BIND(?copy AS ?optCopy) +} +FILTER (?optCopy != ?branch) +MINUS { +?branch ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "branch 0")) +} +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +## MEDICAL_RECORDS + +### Query 0 + +- Fastest observed: `44.359 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:3) +- Optimized block: [134](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:134) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { + ?patient a . + OPTIONAL { + ?patient ?enc . + ?enc ?date . + BIND(?date AS ?optDate) + } + FILTER (?optDate >= "2024-06-01"^^) + OPTIONAL { + ?patient ?med . + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `99.712 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:4) +- Optimized block: [355](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:355) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity a . +?entity ?code . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +UNION +{ +VALUES ?target { "DX-200" "DX-201" } +{ +{ +?entity a . +?entity ?code . +} +} +FILTER ((?code = ?target) || (?code = "DX-202")) +} +OPTIONAL { +?entity ?alt . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=code) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=code) +│ ║ │ ║ │ ValueConstant (value="DX-202") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=50.4K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=50.4K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=149.5K, resultSizeEstimate=49.8K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_d05fbbd3_uri, value=http://example.com/theme/medical/Condition, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ ║ o: Var (name=code) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=code) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=code) +│ ║ │ │ ValueConstant (value="DX-202") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=16.3K) +│ ║ │ ╠══ BindingSetAssignment ([[target="DX-200"], [target="DX-201"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=16.3K) [right] +│ ║ │ ├── StatementPattern (costEstimate=1248.3M, resultSizeEstimate=16.7K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) +│ ║ │ └── StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=code) +│ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ o: Var (name=alt) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) +``` + +### Query 2 + +- Fastest observed: `14.487 ms/op` +- Source: [results-2026-04-09-2-full.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:5648) +- Optimized block: [188](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:188) + +Optimized query: + +```sparql +SELECT ?practitioner (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?enc ?date . +FILTER (?date IN ("2024-01-01"^^, "2024-02-01"^^)) +?enc a . +?enc ?practitioner . +OPTIONAL { +?enc ?cond . +} +} +GROUP BY ?practitioner +HAVING (COUNT(?enc) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `76.840 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:6) +- Optimized block: [317](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:317) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?patient a . +OPTIONAL { +?patient / ?obs . +?obs ?value . +BIND(?value AS ?optValue) +} +FILTER (?optValue > 60) +MINUS { +?patient ?name . +FILTER (CONTAINS(LCASE(STR(?name)), "test")) +} +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 4 + +- Fastest observed: `103.994 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:7) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 5 + +- Fastest observed: `22.715 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:8) +- Optimized block: [803](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:803) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +?obs ?value . +FILTER (?value IN (50, 60, 70)) +?enc ?obs . +?patient ?enc . +?patient a . +VALUES ?limit { 55 } +FILTER NOT EXISTS { +?enc ?cond . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Not +│ ║ │ Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ o: Var (name=cond) +│ ║ └── Join (JoinIterator) (resultSizeEstimate=25.4K) +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.4K) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=3.1K) [left] +│ ║ ║ │ ║ ├── Filter (costEstimate=9.0K, resultSizeEstimate=3.0K) [left] +│ ║ ║ │ ║ │ ╠══ ListMemberOperator +│ ║ ║ │ ║ │ ║ Var (name=value) +│ ║ ║ │ ║ │ ║ ValueConstant (value="50"^^) +│ ║ ║ │ ║ │ ║ ValueConstant (value="60"^^) +│ ║ ║ │ ║ │ ║ ValueConstant (value="70"^^) +│ ║ ║ │ ║ │ ╚══ StatementPattern (resultSizeEstimate=49.7K) +│ ║ ║ │ ║ │ s: Var (name=obs) +│ ║ ║ │ ║ │ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) +│ ║ ║ │ ║ │ o: Var (name=value) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=111, resultSizeEstimate=49.7K) [right] +│ ║ ║ │ ║ s: Var (name=enc) +│ ║ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ │ ║ o: Var (name=obs) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] +│ ║ ║ │ s: Var (name=patient) +│ ║ ║ │ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ │ o: Var (name=enc) +│ ║ ║ └── StatementPattern (costEstimate=1.00, resultSizeEstimate=8.3K) [right] +│ ║ ║ s: Var (name=patient) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ╚══ BindingSetAssignment ([[limit="55"^^]]) (costEstimate=6.00, resultSizeEstimate=1.00) [right] +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) +``` + +### Query 6 + +- Fastest observed: `53.192 ms/op` +- Source: [results-2026-04-16-6.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-6.md:9) +- Optimized block: [780](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-6.md:780) + +Optimized query: + +```sparql +SELECT ?patient (COUNT(DISTINCT ?med) AS ?medCount) WHERE { + { + ?patient a . + } + UNION + { + ?patient ?enc . + } + OPTIONAL { + ?patient ?med . + BIND(?med AS ?optMed) + } + FILTER (?optMed != ?patient) +} +GROUP BY ?patient +HAVING (COUNT(?med) > 0) +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "medCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_0892072562930147436390697a179857743a, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (patient) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optMed) + │ ║ │ Var (name=patient) + │ ║ └── LeftJoin + │ ║ ╠══ Union [left] + │ ║ ║ ├── StatementPattern (new scope) (resultSizeEstimate=8.3K) + │ ║ ║ │ s: Var (name=patient) + │ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ ║ └── StatementPattern (new scope) (resultSizeEstimate=25.0K) + │ ║ ║ s: Var (name=patient) + │ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ ║ o: Var (name=enc) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ s: Var (name=patient) + │ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ o: Var (name=med) + │ ║ └── ExtensionElem (optMed) + │ ║ Var (name=med) + │ ║ GroupElem (_anon_having_0892072562930147436390697a179857743a) + │ ║ Count + │ ║ Var (name=med) + │ ║ GroupElem (medCount) + │ ║ Count (Distinct) + │ ║ Var (name=med) + │ ╚══ ExtensionElem (_anon_having_0892072562930147436390697a179857743a) + │ Count + │ Var (name=med) + └── ExtensionElem (medCount) + Count (Distinct) + Var (name=med) +``` + +### Query 7 + +- Fastest observed: `41.131 ms/op` +- Source: [results-2026-04-16-5.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md:10) +- Optimized block: [886](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md:886) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?med) AS ?count) WHERE { + ?med a . + ?med ?code . + FILTER ((?code = "MED-1000") || (?code = "MED-1001")) + FILTER EXISTS { + ?patient ?med . + } + MINUS { + ?med ?dose . + FILTER (CONTAINS(LCASE(STR(?dose)), "x")) + } +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Difference + │ ║ ├── Filter + │ ║ │ ╠══ Exists + │ ║ │ ║ StatementPattern (resultSizeEstimate=16.7K) + │ ║ │ ║ s: Var (name=patient) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=med) + │ ║ │ ╚══ Join (JoinIterator) (resultSizeEstimate=16.3K) + │ ║ │ ├── StatementPattern (costEstimate=8.3K, resultSizeEstimate=16.7K) [left] + │ ║ │ │ s: Var (name=med) + │ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ │ o: Var (name=_const_ea395317_uri, value=http://example.com/theme/medical/Medication, anonymous) + │ ║ │ └── Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] + │ ║ │ ╠══ Or + │ ║ │ ║ ├── Compare (=) + │ ║ │ ║ │ Var (name=code) + │ ║ │ ║ │ ValueConstant (value="MED-1000") + │ ║ │ ║ └── Compare (=) + │ ║ │ ║ Var (name=code) + │ ║ │ ║ ValueConstant (value="MED-1001") + │ ║ │ ╚══ StatementPattern (costEstimate=258, resultSizeEstimate=66.5K) + │ ║ │ s: Var (name=med) + │ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ o: Var (name=code) + │ ║ └── Filter (new scope) + │ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) + │ ║ ║ ├── FunctionCall (http://www.w3.org/2005/xpath-functions#lower-case) + │ ║ ║ │ Str + │ ║ ║ │ Var (name=dose) + │ ║ ║ └── ValueConstant (value="x") + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) + │ ║ s: Var (name=med) + │ ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ o: Var (name=dose) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=med) + └── ExtensionElem (count) + Count (Distinct) + Var (name=med) +``` + +### Query 8 + +- Fastest observed: `51.735 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:11) +- Optimized block: [1126](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:1126) + +Optimized query: + +```sparql +SELECT ?patient (COUNT(DISTINCT ?enc) AS ?encCount) WHERE { +?patient a . +OPTIONAL { +?patient ?enc . +?enc ?practitioner . +BIND(?practitioner AS ?optPractitioner) +} +FILTER ((?optPractitioner != ?patient) && EXISTS { ?enc ?cond . }) +} +GROUP BY ?patient +HAVING (COUNT(?enc) >= 2) +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "patient" +║ ProjectionElem "encCount" +╚══ Extension +├── Extension +│ ╠══ Filter +│ ║ ├── Compare (>=) +│ ║ │ Var (name=_anon_having_5911754ba04afef348bb8da5249da1b84b3301234, anonymous) +│ ║ │ ValueConstant (value="2"^^) +│ ║ └── Group (patient) +│ ║ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optPractitioner) +│ ║ │ ║ Var (name=patient) +│ ║ │ ╚══ Exists +│ ║ │ StatementPattern (resultSizeEstimate=49.8K) +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) +│ ║ │ o: Var (name=cond) +│ ║ └── LeftJoin +│ ║ ╠══ StatementPattern (resultSizeEstimate=8.3K) [left] +│ ║ ║ s: Var (name=patient) +│ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ╚══ Extension [right] +│ ║ ├── Join (JoinIterator) (resultSizeEstimate=25.7K) +│ ║ │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] +│ ║ │ ║ s: Var (name=patient) +│ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ │ ║ o: Var (name=enc) +│ ║ │ ╚══ StatementPattern (costEstimate=158, resultSizeEstimate=25.0K) [right] +│ ║ │ s: Var (name=enc) +│ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) +│ ║ │ o: Var (name=practitioner) +│ ║ └── ExtensionElem (optPractitioner) +│ ║ Var (name=practitioner) +│ ║ GroupElem (_anon_having_5911754ba04afef348bb8da5249da1b84b3301234) +│ ║ Count +│ ║ Var (name=enc) +│ ║ GroupElem (encCount) +│ ║ Count (Distinct) +│ ║ Var (name=enc) +│ ╚══ ExtensionElem (_anon_having_5911754ba04afef348bb8da5249da1b84b3301234) +│ Count +│ Var (name=enc) +└── ExtensionElem (encCount) +Count (Distinct) +Var (name=enc) +``` + +### Query 9 + +- Fastest observed: `177.495 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:12) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `194.412 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:13) +- Optimized block: [1355](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:1355) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?patient) AS ?count) WHERE { +{ +?patient a . +?patient ?med . +} +UNION +{ +?patient a . +?patient ?enc . +?enc ?obs . +} +OPTIONAL { +?patient ?optName . +} +FILTER ((?optName != "") && NOT EXISTS { ?patient ?m2 . ?m2 ?c . FILTER (?c = "MED-1005") }) +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="") +│ ║ │ ╚══ Not +│ ║ │ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=16.3K) +│ ║ │ ├── StatementPattern (costEstimate=65, resultSizeEstimate=16.7K) [left] +│ ║ │ │ s: Var (name=patient) +│ ║ │ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ │ │ o: Var (name=m2) +│ ║ │ └── Filter (costEstimate=258, resultSizeEstimate=66.8K) [right] +│ ║ │ ╠══ Compare (=) +│ ║ │ ║ Var (name=c) +│ ║ │ ║ ValueConstant (value="MED-1005") +│ ║ │ ╚══ StatementPattern (resultSizeEstimate=66.5K) +│ ║ │ s: Var (name=m2) +│ ║ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) +│ ║ │ o: Var (name=c) +│ ║ └── LeftJoin +│ ║ ╠══ Union [left] +│ ║ ║ ├── Join (new scope) (JoinIterator) (resultSizeEstimate=16.6K) +│ ║ ║ │ ╠══ StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.3K) [left] +│ ║ ║ │ ║ s: Var (name=patient) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=129, resultSizeEstimate=16.7K) [right] +│ ║ ║ │ s: Var (name=patient) +│ ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) +│ ║ ║ │ o: Var (name=med) +│ ║ ║ └── Join (new scope) (JoinIterator) (resultSizeEstimate=51.7K) +│ ║ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] +│ ║ ║ ║ ├── StatementPattern (costEstimate=17.4M, resultSizeEstimate=8.3K) [left] +│ ║ ║ ║ │ s: Var (name=patient) +│ ║ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) +│ ║ ║ ║ └── StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [right] +│ ║ ║ ║ s: Var (name=patient) +│ ║ ║ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) +│ ║ ║ ║ o: Var (name=enc) +│ ║ ║ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] +│ ║ ║ s: Var (name=enc) +│ ║ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) +│ ║ ║ o: Var (name=obs) +│ ║ ╚══ StatementPattern (resultSizeEstimate=21.4K) [right] +│ ║ s: Var (name=patient) +│ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=patient) +└── ExtensionElem (count) +Count (Distinct) +Var (name=patient) +``` + +### Query 11 + +- Fastest observed: `1483.784 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:14) +- Optimized block: [1402](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:1402) + +Optimized query: + +```sparql +SELECT REDUCED ?root ?encounter ?observation ?patientName ?medication ?medicationCode ?medicationDosage ?recordedOn ?practitioner ?practitionerName ?condition ?conditionCode ?conditionDescription ?observationValue ?observationUnit WHERE { + ?root a . + ?root ?encounter . + ?encounter a . + ?encounter ?observation . + OPTIONAL { + ?root ?patientName . + OPTIONAL { + ?root ?medication . + OPTIONAL { + ?medication ?medicationCode . + OPTIONAL { + ?medication ?medicationDosage . + } + } + } + } + OPTIONAL { + ?encounter ?recordedOn . + OPTIONAL { + ?encounter ?practitioner . + OPTIONAL { + ?practitioner ?practitionerName . + } + } + } + OPTIONAL { + ?encounter ?condition . + OPTIONAL { + ?condition ?conditionCode . + OPTIONAL { + ?condition ?conditionDescription . + } + } + } + OPTIONAL { + ?observation ?observationValue . + OPTIONAL { + ?observation ?observationUnit . + } + } +} +ORDER BY ?root ?encounter ?observation +``` + +Query plan: + +```text +Reduced + Order + OrderElem (ASC) + Var (name=root) (bindingState=unbound) + OrderElem (ASC) + Var (name=encounter) (bindingState=unbound) + OrderElem (ASC) + Var (name=observation) (bindingState=unbound) + Projection + ╠══ ProjectionElemList + ║ ProjectionElem "root" + ║ ProjectionElem "encounter" + ║ ProjectionElem "observation" + ║ ProjectionElem "patientName" + ║ ProjectionElem "medication" + ║ ProjectionElem "medicationCode" + ║ ProjectionElem "medicationDosage" + ║ ProjectionElem "recordedOn" + ║ ProjectionElem "practitioner" + ║ ProjectionElem "practitionerName" + ║ ProjectionElem "condition" + ║ ProjectionElem "conditionCode" + ║ ProjectionElem "conditionDescription" + ║ ProjectionElem "observationValue" + ║ ProjectionElem "observationUnit" + ╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=53.4K) [left] + │ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.3K) [left] + │ ║ │ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=25.2K) [left] + │ ║ │ ║ │ ║ ├── StatementPattern [index: ospc] (costEstimate=4.2K, resultSizeEstimate=8.3K, indexName=ospc) [left] + │ ║ │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ │ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + │ ║ │ ║ │ ║ └── StatementPattern (costEstimate=53, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ │ ║ │ ║ o: Var (name=encounter) (bindingState=unbound) + │ ║ │ ║ │ ╚══ StatementPattern (costEstimate=1.00, resultSizeEstimate=25.0K) [right] + │ ║ │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + │ ║ │ ║ └── StatementPattern (costEstimate=223, resultSizeEstimate=49.7K) [right] + │ ║ │ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_6f00815a_uri, value=http://example.com/theme/medical/hasObservation, anonymous) + │ ║ │ ║ o: Var (name=observation) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=21.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ │ │ o: Var (name=patientName) (bindingState=unbound) + │ ║ │ └── LeftJoin [right] + │ ║ │ ╠══ StatementPattern (resultSizeEstimate=16.7K) [left] + │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + │ ║ │ ║ o: Var (name=medication) (bindingState=unbound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=66.5K) [left] + │ ║ │ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ │ │ o: Var (name=medicationCode) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=16.7K) [right] + │ ║ │ s: Var (name=medication) (bindingState=bound) + │ ║ │ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + │ ║ │ o: Var (name=medicationDosage) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] + │ ║ ║ s: Var (name=encounter) (bindingState=bound) + │ ║ ║ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + │ ║ ║ o: Var (name=recordedOn) (bindingState=unbound) + │ ║ ╚══ LeftJoin [right] + │ ║ ├── StatementPattern (resultSizeEstimate=25.0K) [left] + │ ║ │ s: Var (name=encounter) (bindingState=bound) + │ ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + │ ║ │ o: Var (name=practitioner) (bindingState=unbound) + │ ║ └── StatementPattern (resultSizeEstimate=21.4K) [right] + │ ║ s: Var (name=practitioner) (bindingState=bound) + │ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + │ ║ o: Var (name=practitionerName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── StatementPattern (resultSizeEstimate=49.8K) [left] + │ │ s: Var (name=encounter) (bindingState=bound) + │ │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ │ o: Var (name=condition) (bindingState=unbound) + │ └── LeftJoin [right] + │ ╠══ StatementPattern (resultSizeEstimate=66.5K) [left] + │ ║ s: Var (name=condition) (bindingState=bound) + │ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + │ ║ o: Var (name=conditionCode) (bindingState=unbound) + │ ╚══ StatementPattern (resultSizeEstimate=0) [right] + │ s: Var (name=condition) (bindingState=bound) + │ p: Var (name=_const_25295cd4_uri, value=http://example.com/theme/medical/description, anonymous) + │ o: Var (name=conditionDescription) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=49.7K) [left] + ║ s: Var (name=observation) (bindingState=bound) + ║ p: Var (name=_const_2949ec49_uri, value=http://example.com/theme/medical/value, anonymous) + ║ o: Var (name=observationValue) (bindingState=unbound) + ╚══ StatementPattern (resultSizeEstimate=0) [right] + s: Var (name=observation) (bindingState=bound) + p: Var (name=_const_996c3ac_uri, value=http://example.com/theme/medical/unit, anonymous) + o: Var (name=observationUnit) (bindingState=unbound) +``` + +### Query 12 + +- Fastest observed: `643.729 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:15) +- Optimized block: [1613](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:1613) + +Optimized query: + +```sparql +SELECT DISTINCT ?root ?optName ?optConditionCode ?optEncounter2 ?optLabel ?optEncounter ?optPractitioner ?optMedicationCode ?optDosage WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optEncounter . + OPTIONAL { + ?optEncounter ?optDate . + } + OPTIONAL { + ?optEncounter ?optPractitioner . + } + } + OPTIONAL { + ?root ?optMedication . + OPTIONAL { + ?optMedication ?optMedicationCode . + } + OPTIONAL { + ?optMedication ?optDosage . + } + } + OPTIONAL { + ?root ?optEncounter2 . + ?optEncounter2 ?optCondition . + OPTIONAL { + ?optCondition ?optConditionCode . + } + } +} +``` + +Query plan: + +```text +Distinct + Projection + ├── ProjectionElemList + │ ProjectionElem "root" + │ ProjectionElem "optName" + │ ProjectionElem "optConditionCode" + │ ProjectionElem "optEncounter2" + │ ProjectionElem "optLabel" + │ ProjectionElem "optEncounter" + │ ProjectionElem "optPractitioner" + │ ProjectionElem "optMedicationCode" + │ ProjectionElem "optDosage" + └── LeftJoin (LeftJoinIterator) + ╠══ LeftJoin (LeftJoinIterator) [left] + ║ ├── LeftJoin (LeftJoinIterator) [left] + ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + ║ │ ║ ├── Union [left] + ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.3K, indexName=ospc) + ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ ║ o: Var (name=_const_24be87bd_uri, value=http://example.com/theme/medical/Patient, anonymous) + ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=25.0K, indexName=ospc) + ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + ║ │ ║ │ o: Var (name=_const_5e8eb7eb_uri, value=http://example.com/theme/medical/Encounter, anonymous) + ║ │ ║ └── Extension [right] + ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=21.4K) + ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + ║ │ ║ ║ p: Var (name=_const_99364b3_uri, value=http://example.com/theme/medical/name, anonymous) + ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + ║ │ ║ ╚══ ExtensionElem (optLabel) + ║ │ ║ Var (name=optName) (bindingState=bound) + ║ │ ╚══ LeftJoin [right] + ║ │ ├── LeftJoin [left] + ║ │ │ ╠══ StatementPattern (resultSizeEstimate=25.0K) [left] + ║ │ │ ║ s: Var (name=root) (bindingState=bound) + ║ │ │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + ║ │ │ ║ o: Var (name=optEncounter) (bindingState=unbound) + ║ │ │ ╚══ StatementPattern (resultSizeEstimate=25.0K) [right] + ║ │ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ │ p: Var (name=_const_2816f2d7_uri, value=http://example.com/theme/medical/recordedOn, anonymous) + ║ │ │ o: Var (name=optDate) (bindingState=unbound) + ║ │ └── StatementPattern (resultSizeEstimate=25.0K) [right] + ║ │ s: Var (name=optEncounter) (bindingState=bound) + ║ │ p: Var (name=_const_9016af8b_uri, value=http://example.com/theme/medical/handledBy, anonymous) + ║ │ o: Var (name=optPractitioner) (bindingState=unbound) + ║ └── LeftJoin [right] + ║ ╠══ LeftJoin [left] + ║ ║ ├── StatementPattern (resultSizeEstimate=16.7K) [left] + ║ ║ │ s: Var (name=root) (bindingState=bound) + ║ ║ │ p: Var (name=_const_fe9f43e1_uri, value=http://example.com/theme/medical/hasMedication, anonymous) + ║ ║ │ o: Var (name=optMedication) (bindingState=unbound) + ║ ║ └── StatementPattern (resultSizeEstimate=66.5K) [right] + ║ ║ s: Var (name=optMedication) (bindingState=bound) + ║ ║ p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + ║ ║ o: Var (name=optMedicationCode) (bindingState=unbound) + ║ ╚══ StatementPattern (resultSizeEstimate=16.7K) [right] + ║ s: Var (name=optMedication) (bindingState=bound) + ║ p: Var (name=_const_e2048edf_uri, value=http://example.com/theme/medical/dosage, anonymous) + ║ o: Var (name=optDosage) (bindingState=unbound) + ╚══ LeftJoin [right] + ├── Join (JoinIterator) (resultSizeEstimate=51.9K) [left] + │ ╠══ StatementPattern (costEstimate=79, resultSizeEstimate=25.0K) [left] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_ca285e1_uri, value=http://example.com/theme/medical/hasEncounter, anonymous) + │ ║ o: Var (name=optEncounter2) (bindingState=unbound) + │ ╚══ StatementPattern (costEstimate=223, resultSizeEstimate=49.8K) [right] + │ s: Var (name=optEncounter2) (bindingState=bound) + │ p: Var (name=_const_7e7389c9_uri, value=http://example.com/theme/medical/hasCondition, anonymous) + │ o: Var (name=optCondition) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=66.5K) [right] + s: Var (name=optCondition) (bindingState=bound) + p: Var (name=_const_98e9815_uri, value=http://example.com/theme/medical/code, anonymous) + o: Var (name=optConditionCode) (bindingState=unbound) +``` + +## PHARMA + +### Query 0 + +- Fastest observed: `0.157 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:80) +- Optimized block: [5006](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:5006) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { +VALUES ?disease { } +?trial ?disease . +?trial a . +?trial ?arm . +?arm ?result . +?arm ?drug . +?result ?p . +?result ?effect . +FILTER ((?p < 0.05) || (?effect > 0.7)) +OPTIONAL { +?result ?marker . +BIND(?marker AS ?optMarker) +} +FILTER (?optMarker != ) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `1.314 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:81) +- Optimized block: [5072](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:5072) + +Optimized query: + +```sparql +SELECT ?combo (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?combo ?score . + FILTER (?score > 0.7) + ?combo a . + ?combo ?drug . + OPTIONAL { + ?drug ?sideEffect . + ?sideEffect ?sev . + BIND(?sev AS ?optSeverity) + } + FILTER (?optSeverity IN ("Mild", "Moderate")) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?drug) >= 2) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 2 + +- Fastest observed: `25.231 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:82) +- Optimized block: [5135](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:5135) + +Optimized query: + +```sparql +SELECT ?target (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { + ?target a . + ?target ?pathway . + ?drug ?target . + ?drug a . + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?arm ?drug . ?trial ?arm . }) +} +GROUP BY ?target +HAVING (COUNT(DISTINCT ?drug) > 2) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `8.314 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:83) +- Optimized block: [5196](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:5196) + +Optimized query: + +```sparql +SELECT ?drug ?disease WHERE { + ?result ?rate . + FILTER (?rate > 0.6) + ?arm ?result . + ?trial ?arm . + ?trial a . + ?trial ?disease . + ?arm ?drug . + FILTER NOT EXISTS { + ?drug ?disease . + } + OPTIONAL { + ?drug ?target . + BIND(?target AS ?optTarget) + } + FILTER (?optTarget != ) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 4 + +- Fastest observed: `26.885 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:84) +- Optimized block: [5264](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:5264) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + ?drug a . + ?drug ?mol . + ?mol ?class . + } + UNION + { + ?combo a . + ?combo ?drug . + ?drug ?mol . + ?mol ?class . + } + OPTIONAL { + ?class ?optName . + BIND(?optName AS ?optClassName) + } + FILTER (?optClassName != "") + MINUS { + ?drug ?disease . + FILTER (?disease IN (, )) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 5 + +- Fastest observed: `0.330 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:85) +- Optimized block: [5338](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:5338) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?trial) AS ?count) WHERE { +?trial a . +VALUES ?marker { } +?result ?marker . +?arm ?result . +?trial ?arm . +?result ?p . +FILTER ((?p < 0.05) || (?p = 0.05)) +OPTIONAL { +?result ?effect . +BIND(?effect AS ?optEffect) +} +FILTER (?optEffect > 0.3) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 6 + +- Fastest observed: `3.024 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:86) +- Optimized block: [5400](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:5400) + +Optimized query: + +```sparql +SELECT ?combo (COUNT(DISTINCT ?target) AS ?sharedTargets) WHERE { + ?combo a . + ?combo ?drugA . + ?combo ?drugB . + FILTER (?drugA != ?drugB) + ?drugA ?target . + ?drugB ?target . + OPTIONAL { + ?drugA ?sideEffect . + BIND(?sideEffect AS ?optSideEffect) + } + FILTER (EXISTS { ?drugB ?sideEffect2 . } && (?optSideEffect != )) +} +GROUP BY ?combo +HAVING (COUNT(DISTINCT ?target) > 1) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 7 + +- Fastest observed: `18.945 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:87) +- Optimized block: [5464](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:5464) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?arm) AS ?count) WHERE { + ?trial a . + ?trial ?arm . + ?arm (|) ?comp . + OPTIONAL { + ?comp ?optName . + BIND(?optName AS ?optCompName) + } + FILTER (NOT EXISTS { ?arm ?r . ?r ?p . FILTER (?p IN (0.08, 0.09)) } && (?optCompName != "")) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 8 + +- Fastest observed: `24.760 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:88) +- Optimized block: [5523](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:5523) + +Optimized query: + +```sparql +SELECT ?drug (COUNT(DISTINCT ?target) AS ?targetCount) WHERE { + ?drug a . + ?drug ?target . + OPTIONAL { + ?drug ?mol . + BIND(?mol AS ?optMol) + } + FILTER (?optMol != ) + MINUS { + { + ?drug . + FILTER (sameTerm(?disease, )) + } + UNION + { + ?drug . + FILTER (sameTerm(?disease, )) + } + } +} +GROUP BY ?drug +HAVING (COUNT(DISTINCT ?target) >= 3) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 9 + +- Fastest observed: `13.204 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:89) +- Optimized block: [5601](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:5601) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?drug) AS ?count) WHERE { + { + SELECT ?drug (AVG(?effect) AS ?avgEffect) WHERE { + ?trial a . + ?trial ?arm . + ?arm ?result . + ?arm ?drug . + ?result ?effect . + OPTIONAL { + ?result ?rate . + BIND(?rate AS ?optRate) + } + FILTER (?optRate > 0.2) + } + GROUP BY ?drug + HAVING (AVG(?effect) > 0.4) + } + OPTIONAL { + ?drug ?disease . + BIND(?disease AS ?optDisease) + } + FILTER ((?optDisease IN (, )) && EXISTS { ?drug ?se . }) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `226.964 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:90) +- Optimized block: [5677](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:5677) + +Optimized query: + +```sparql +SELECT ?pathway (COUNT(DISTINCT ?drug) AS ?drugCount) WHERE { +?target ?pathway . +?drug a . +?drug ?target . +VALUES ?marker { } +OPTIONAL { +?drug ?trial . +BIND(?trial AS ?optTrial) +} +FILTER (EXISTS { ?result ?marker . ?arm ?result . ?trial ?arm . } && (?optTrial != )) +} +GROUP BY ?pathway +HAVING (COUNT(DISTINCT ?drug) > 1) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 12 + +- Fastest observed: `146.343 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:110) +- Optimized block: [12126](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:12126) + +Optimized query: + +```sparql +SELECT ?root ?optName ?optLabel ?optTarget ?optPathway ?optIndication ?optContraindication ?optArm ?trial ?optResult ?optPValue ?optEffectSize ?combo ?optSynergy WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optTarget . + OPTIONAL { + ?optTarget ?optPathway . + } + } + OPTIONAL { + ?root ?optIndication . + OPTIONAL { + ?root ?optContraindication . + } + } + OPTIONAL { + { + ?root ?optArm . + } + UNION + { + ?optArm ?root . + ?trial ?optArm . + } + OPTIONAL { + ?optArm ?optResult . + } + OPTIONAL { + ?optResult ?optPValue . + } + OPTIONAL { + ?optResult ?optEffectSize . + } + } + OPTIONAL { + ?combo ?root . + OPTIONAL { + ?combo ?optSynergy . + } + } +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optTarget" +║ ProjectionElem "optPathway" +║ ProjectionElem "optIndication" +║ ProjectionElem "optContraindication" +║ ProjectionElem "optArm" +║ ProjectionElem "trial" +║ ProjectionElem "optResult" +║ ProjectionElem "optPValue" +║ ProjectionElem "optEffectSize" +║ ProjectionElem "combo" +║ ProjectionElem "optSynergy" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=5.0K, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_f6bbe068_uri, value=http://example.com/theme/pharma/Drug, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=955, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_4795bbfb_uri, value=http://example.com/theme/pharma/ClinicalTrial, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=13.2K) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_f6ceb733_uri, value=http://example.com/theme/pharma/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=20.0K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_7f67635a_uri, value=http://example.com/theme/pharma/targets, anonymous) + │ ║ │ │ o: Var (name=optTarget) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=666) [right] + │ ║ │ s: Var (name=optTarget) (bindingState=bound) + │ ║ │ p: Var (name=_const_1a978c1d_uri, value=http://example.com/theme/pharma/inPathway, anonymous) + │ ║ │ o: Var (name=optPathway) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=9.9K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_e46c34a6_uri, value=http://example.com/theme/pharma/indicatedFor, anonymous) + │ ║ ║ o: Var (name=optIndication) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=5.0K) [right] + │ ║ s: Var (name=root) (bindingState=bound) + │ ║ p: Var (name=_const_28b88607_uri, value=http://example.com/theme/pharma/contraindicatedFor, anonymous) + │ ║ o: Var (name=optContraindication) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── LeftJoin [left] + │ │ ╠══ LeftJoin [left] + │ │ ║ ├── Union [left] + │ │ ║ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=2.9K) + │ │ ║ │ ║ s: Var (name=root) (bindingState=bound) + │ │ ║ │ ║ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ ║ o: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=2.9K) + │ │ ║ │ ├── StatementPattern (costEstimate=27, resultSizeEstimate=2.9K) [left] + │ │ ║ │ │ s: Var (name=optArm) (bindingState=unbound) + │ │ ║ │ │ p: Var (name=_const_aefd3274_uri, value=http://example.com/theme/pharma/armDrug, anonymous) + │ │ ║ │ │ o: Var (name=root) (bindingState=bound) + │ │ ║ │ └── StatementPattern (costEstimate=54, resultSizeEstimate=2.9K) [right] + │ │ ║ │ s: Var (name=trial) (bindingState=unbound) + │ │ ║ │ p: Var (name=_const_73c2e40a_uri, value=http://example.com/theme/pharma/hasArm, anonymous) + │ │ ║ │ o: Var (name=optArm) (bindingState=bound) + │ │ ║ └── StatementPattern (resultSizeEstimate=2.9K) [right] + │ │ ║ s: Var (name=optArm) (bindingState=bound) + │ │ ║ p: Var (name=_const_60f6d7af_uri, value=http://example.com/theme/pharma/hasResult, anonymous) + │ │ ║ o: Var (name=optResult) (bindingState=unbound) + │ │ ╚══ StatementPattern (resultSizeEstimate=2.9K) [right] + │ │ s: Var (name=optResult) (bindingState=bound) + │ │ p: Var (name=_const_80c71989_uri, value=http://example.com/theme/pharma/pValue, anonymous) + │ │ o: Var (name=optPValue) (bindingState=unbound) + │ └── StatementPattern (resultSizeEstimate=2.9K) [right] + │ s: Var (name=optResult) (bindingState=bound) + │ p: Var (name=_const_6999fbda_uri, value=http://example.com/theme/pharma/effectSize, anonymous) + │ o: Var (name=optEffectSize) (bindingState=unbound) + └── LeftJoin [right] + ╠══ StatementPattern (resultSizeEstimate=949) [left] + ║ s: Var (name=combo) (bindingState=unbound) + ║ p: Var (name=_const_94a74d5e_uri, value=http://example.com/theme/pharma/combinationOf, anonymous) + ║ o: Var (name=root) (bindingState=bound) + ╚══ StatementPattern (resultSizeEstimate=477) [right] + s: Var (name=combo) (bindingState=bound) + p: Var (name=_const_2c1ec653_uri, value=http://example.com/theme/pharma/synergyScore, anonymous) + o: Var (name=optSynergy) (bindingState=unbound) +``` + +## SOCIAL_MEDIA + +### Query 0 + +- Fastest observed: `0.040 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:14) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `4.785 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:15) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 2 + +- Fastest observed: `0.049 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:16) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `0.049 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:17) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 4 + +- Fastest observed: `0.056 ms/op` +- Source: [results-2026-04-15.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-15.md:18) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 5 + +- Fastest observed: `642.956 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:19) +- Optimized block: [2142](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:2142) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?activity) AS ?count) WHERE { +VALUES ?u { } +{ +?u ?v . +?v ?u . +BIND(?v AS ?activity) +} +UNION +{ +?post ?u . +BIND(?post AS ?activity) +} +OPTIONAL { +?u ?optName . +} +FILTER (?optName IN ("user7", "user8", "user9", "user10", "user11")) +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── ListMemberOperator +│ ║ │ Var (name=optName) +│ ║ │ ValueConstant (value="user7") +│ ║ │ ValueConstant (value="user8") +│ ║ │ ValueConstant (value="user9") +│ ║ │ ValueConstant (value="user10") +│ ║ │ ValueConstant (value="user11") +│ ║ └── LeftJoin +│ ║ ╠══ Join (HashJoinIteration) [left] +│ ║ ║ ├── BindingSetAssignment ([[u=http://example.com/theme/social/user/7], [u=http://example.com/theme/social/user/8], [u=http://example.com/theme/social/user/9], [u=http://example.com/theme/social/user/10], [u=http://example.com/theme/social/user/11]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ ║ └── Union (new scope) [right] +│ ║ ║ ╠══ Extension (new scope) +│ ║ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=20663.5M) +│ ║ ║ ║ │ ╠══ StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [left] +│ ║ ║ ║ │ ║ s: Var (name=u) +│ ║ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ ║ o: Var (name=v) +│ ║ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] +│ ║ ║ ║ │ s: Var (name=v) +│ ║ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) +│ ║ ║ ║ │ o: Var (name=u) +│ ║ ║ ║ └── ExtensionElem (activity) +│ ║ ║ ║ Var (name=v) +│ ║ ║ ╚══ Extension (new scope) +│ ║ ║ ├── StatementPattern (resultSizeEstimate=1.4M) +│ ║ ║ │ s: Var (name=post) +│ ║ ║ │ p: Var (name=_const_34211a22_uri, value=http://example.com/theme/social/authored, anonymous) +│ ║ ║ │ o: Var (name=u) +│ ║ ║ └── ExtensionElem (activity) +│ ║ ║ Var (name=post) +│ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] +│ ║ s: Var (name=u) +│ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=activity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=activity) +``` + +### Query 6 + +- Fastest observed: `0.069 ms/op` +- Source: [results-2026-04-09-2-full.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:5663) +- Optimized block: [1228](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:1228) + +Optimized query: + +```sparql +SELECT ?u (COUNT(DISTINCT ?v) AS ?connections) WHERE { +VALUES (?u ?v) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?u != ?v) +?u ?v . +OPTIONAL { +?u ?optName . +} +FILTER (?optName != "") +} +GROUP BY ?u +HAVING (COUNT(DISTINCT ?v) >= 5) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 7 + +- Fastest observed: `4.841 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:21) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 8 + +- Fastest observed: `667.115 ms/op` +- Source: [results-2026-04-16-5.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md:22) +- Optimized block: [2442](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md:2442) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { + ?a ?b . + ?b ?c . + ?c ?a . + BIND(?a AS ?cycleStart) + OPTIONAL { + ?a ?optName . + } + FILTER (?optName IN ("user0", "user1", "user2")) +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension + ├── Group () + │ ╠══ Filter + │ ║ ├── ListMemberOperator + │ ║ │ Var (name=optName) + │ ║ │ ValueConstant (value="user0") + │ ║ │ ValueConstant (value="user1") + │ ║ │ ValueConstant (value="user2") + │ ║ └── LeftJoin + │ ║ ╠══ Extension [left] + │ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=188738.0M) + │ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=1.3M) [left] + │ ║ ║ │ ║ ├── StatementPattern (costEstimate=47.9K, resultSizeEstimate=143.7K) [left] + │ ║ ║ │ ║ │ s: Var (name=a) + │ ║ ║ │ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ │ o: Var (name=b) + │ ║ ║ │ ║ └── StatementPattern (costEstimate=190, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ ║ s: Var (name=b) + │ ║ ║ │ ║ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ ║ o: Var (name=c) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=143.7K) [right] + │ ║ ║ │ s: Var (name=c) + │ ║ ║ │ p: Var (name=_const_9c68e12a_uri, value=http://example.com/theme/social/follows, anonymous) + │ ║ ║ │ o: Var (name=a) + │ ║ ║ └── ExtensionElem (cycleStart) + │ ║ ║ Var (name=a) + │ ║ ╚══ StatementPattern (resultSizeEstimate=16.0K) [right] + │ ║ s: Var (name=a) + │ ║ p: Var (name=_const_7d17b943_uri, value=http://example.com/theme/social/name, anonymous) + │ ║ o: Var (name=optName) + │ ╚══ GroupElem (count) + │ Count (Distinct) + │ Var (name=a) + └── ExtensionElem (count) + Count (Distinct) + Var (name=a) +``` + +### Query 9 + +- Fastest observed: `5.792 ms/op` +- Source: [results-2026-04-09-2-full.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:5666) +- Optimized block: [1494](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:1494) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES ?b { } +?a ?b . +FILTER (?a != ?b) +?b ?c . +FILTER (?b != ?c) +?c ?d . +FILTER (?c != ?d) +FILTER (?d != ?a) +?d ?a . +OPTIONAL { +?b ?optName . +BIND(?optName AS ?optAlias) +} +FILTER (?optAlias != "") +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 10 + +- Fastest observed: `0.243 ms/op` +- Source: [results-2026-04-09-2-full.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:5667) +- Optimized block: [1586](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-09-2-full.md:1586) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?a) AS ?count) WHERE { +VALUES (?a ?b) { +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +( ) +} +FILTER (?a != ?b) +?a ?b . +VALUES ?c { } +FILTER ((?b != ?c) && (?a != ?c)) +?b ?c . +VALUES ?d { } +FILTER (?c != ?d) +?c ?d . +VALUES ?e { } +FILTER (?d != ?e) +?d ?e . +?e ?a . +OPTIONAL { +?e ?optName . +} +FILTER ((?optName IN ("user7", "user8", "user9", "user10", "user11")) && EXISTS { ?a ?name . FILTER ((?name = "user7") || (?name = "user8")) }) +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +## TRAIN + +### Query 0 + +- Fastest observed: `31.827 ms/op` +- Source: [results-main-branch.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-main-branch.md:58) +- Optimized block: not present in fastest-run source file + +Optimized query: + +_Not present in fastest-run source file._ + +Query plan: + +_Not present in fastest-run source file._ + +### Query 1 + +- Fastest observed: `39.073 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:59) +- Optimized block: [6597](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:6597) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?entity) AS ?count) WHERE { +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +UNION +{ +VALUES ?target { "OP 1" "OP 2" } +{ +{ +?entity a . +?entity ?name . +} +} +FILTER ((?name = ?target) || (?name = "OP 3")) +} +OPTIONAL { +?entity ?op . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ LeftJoin +│ ║ ├── Union [left] +│ ║ │ ╠══ Filter +│ ║ │ ║ ├── Or +│ ║ │ ║ │ ╠══ Compare (=) +│ ║ │ ║ │ ║ Var (name=name) +│ ║ │ ║ │ ║ Var (name=target) +│ ║ │ ║ │ ╚══ Compare (=) +│ ║ │ ║ │ Var (name=name) +│ ║ │ ║ │ ValueConstant (value="OP 3") +│ ║ │ ║ └── Join (HashJoinIteration) (resultSizeEstimate=30.7K) +│ ║ │ ║ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ║ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=30.7K) [right] +│ ║ │ ║ ├── StatementPattern (costEstimate=89.7K, resultSizeEstimate=29.9K) [left] +│ ║ │ ║ │ s: Var (name=entity) +│ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ ║ │ o: Var (name=_const_9807bf0f_uri, value=http://example.com/theme/train/OperationalPoint, anonymous) +│ ║ │ ║ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] +│ ║ │ ║ s: Var (name=entity) +│ ║ │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ ║ o: Var (name=name) +│ ║ │ ╚══ Filter +│ ║ │ ├── Or +│ ║ │ │ ╠══ Compare (=) +│ ║ │ │ ║ Var (name=name) +│ ║ │ │ ║ Var (name=target) +│ ║ │ │ ╚══ Compare (=) +│ ║ │ │ Var (name=name) +│ ║ │ │ ValueConstant (value="OP 3") +│ ║ │ └── Join (HashJoinIteration) (resultSizeEstimate=8.9K) +│ ║ │ ╠══ BindingSetAssignment ([[target="OP 1"], [target="OP 2"]]) (costEstimate=6.00, resultSizeEstimate=1.00) [left] +│ ║ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=8.9K) [right] +│ ║ │ ├── StatementPattern (costEstimate=379.7M, resultSizeEstimate=8.5K) [left] +│ ║ │ │ s: Var (name=entity) +│ ║ │ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ │ └── StatementPattern (costEstimate=217, resultSizeEstimate=47.0K) [right] +│ ║ │ s: Var (name=entity) +│ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ │ o: Var (name=name) +│ ║ └── StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=entity) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=entity) +└── ExtensionElem (count) +Count (Distinct) +Var (name=entity) +``` + +### Query 2 + +- Fastest observed: `7.426 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:60) +- Optimized block: [3818](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:3818) + +Optimized query: + +```sparql +SELECT ?line (COUNT(DISTINCT ?section) AS ?sectionCount) WHERE { + ?line a . + ?line ?lineName . + FILTER (?lineName IN ("Line 0", "Line 1", "Line 2")) + OPTIONAL { + ?section ?line . + } +} +GROUP BY ?line +HAVING (COUNT(?section) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 3 + +- Fastest observed: `143.416 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:61) +- Optimized block: [6824](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:6824) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?section) AS ?count) WHERE { +?section a . +?section ?line . +OPTIONAL { +?section ?track . +BIND(?track AS ?optTrack) +} +FILTER (?optTrack != ?section) +MINUS { +?line ?name . +FILTER (CONTAINS(STR(?name), "Line 0")) +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Difference +│ ║ ├── Filter +│ ║ │ ╠══ Compare (!=) +│ ║ │ ║ Var (name=optTrack) +│ ║ │ ║ Var (name=section) +│ ║ │ ╚══ LeftJoin +│ ║ │ ├── Join (JoinIterator) (resultSizeEstimate=67.5K) [left] +│ ║ │ │ ╠══ StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [left] +│ ║ │ │ ║ s: Var (name=section) +│ ║ │ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ │ │ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) +│ ║ │ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) [right] +│ ║ │ │ s: Var (name=section) +│ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ │ o: Var (name=line) +│ ║ │ └── Extension [right] +│ ║ │ ╠══ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ ║ s: Var (name=section) +│ ║ │ ║ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) +│ ║ │ ║ o: Var (name=track) +│ ║ │ ╚══ ExtensionElem (optTrack) +│ ║ │ Var (name=track) +│ ║ └── Filter (new scope) +│ ║ ╠══ FunctionCall (http://www.w3.org/2005/xpath-functions#contains) +│ ║ ║ ├── Str +│ ║ ║ │ Var (name=name) +│ ║ ║ └── ValueConstant (value="Line 0") +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=name) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=section) +└── ExtensionElem (count) +Count (Distinct) +Var (name=section) +``` + +### Query 4 + +- Fastest observed: `130.920 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:62) +- Optimized block: [6925](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:6925) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?line) AS ?count) WHERE { +?line a . +?line ?name . +FILTER ((?name = "Line 1") || (?name = "Line 2")) +OPTIONAL { +?section ?op . +} +FILTER EXISTS { +?section ?line . +} +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── Exists +│ ║ │ StatementPattern (resultSizeEstimate=67.4K) +│ ║ │ s: Var (name=section) +│ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ │ o: Var (name=line) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=8.9K) [left] +│ ║ ║ ├── StatementPattern (costEstimate=4.2K, resultSizeEstimate=8.5K) [left] +│ ║ ║ │ s: Var (name=line) +│ ║ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) +│ ║ ║ └── Filter (costEstimate=216, resultSizeEstimate=46.6K) [right] +│ ║ ║ ╠══ Or +│ ║ ║ ║ ├── Compare (=) +│ ║ ║ ║ │ Var (name=name) +│ ║ ║ ║ │ ValueConstant (value="Line 1") +│ ║ ║ ║ └── Compare (=) +│ ║ ║ ║ Var (name=name) +│ ║ ║ ║ ValueConstant (value="Line 2") +│ ║ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) +│ ║ ║ s: Var (name=line) +│ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ ║ o: Var (name=name) +│ ║ ╚══ StatementPattern (resultSizeEstimate=134.8K) [right] +│ ║ s: Var (name=section) +│ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ o: Var (name=op) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=line) +└── ExtensionElem (count) +Count (Distinct) +Var (name=line) +``` + +### Query 5 + +- Fastest observed: `13.063 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:63) +- Optimized block: [3988](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:3988) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { + ?service ?time . + FILTER (?time IN ("08:00:00"^^, "09:00:00"^^)) + ?service a . + VALUES ?threshold { "10:00:00"^^ } + FILTER NOT EXISTS { + ?service ?late . + FILTER (?late > ?threshold) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 6 + +- Fastest observed: `81.059 ms/op` +- Source: [results-2026-04-16-3.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:64) +- Optimized block: [4046](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-3.md:4046) + +Optimized query: + +```sparql +SELECT ?line (COUNT(DISTINCT ?service) AS ?serviceCount) WHERE { + { + ?service a . + ?service ?section . + ?section ?line . + } + UNION + { + ?line a . + } + OPTIONAL { + ?line ?optName . + } + FILTER (?optName != "") +} +GROUP BY ?line +HAVING (COUNT(?service) > 0) +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 7 + +- Fastest observed: `36.313 ms/op` +- Source: [results-2026-04-16-4.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:65) +- Optimized block: [4109](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-4.md:4109) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { + ?op ?name . + FILTER ((?name = "OP 1") || (?name = "OP 2")) + ?op a . + FILTER EXISTS { + ?service ?op . + } + MINUS { + ?op ?name2 . + FILTER (CONTAINS(LCASE(STR(?name2)), "op 0")) + } +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 8 + +- Fastest observed: `127.294 ms/op` +- Source: [results-2026-04-17.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:66) +- Optimized block: [7339](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-17.md:7339) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?service) AS ?count) WHERE { +?service ?s1 . +?s1 ?line . +?service a . +?service ?s2 . +?s2 ?line . +OPTIONAL { +?line ?optName . +} +FILTER ((?optName IN ("Line 0", "Line 1")) && EXISTS { ?s1 ?op . ?s2 ?op . }) +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "count" +╚══ Extension +├── Group () +│ ╠══ Filter +│ ║ ├── And +│ ║ │ ╠══ ListMemberOperator +│ ║ │ ║ Var (name=optName) +│ ║ │ ║ ValueConstant (value="Line 0") +│ ║ │ ║ ValueConstant (value="Line 1") +│ ║ │ ╚══ Exists +│ ║ │ Join (JoinIterator) (resultSizeEstimate=595.5K) +│ ║ │ ╠══ StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] +│ ║ │ ║ s: Var (name=s1) +│ ║ │ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ ║ o: Var (name=op) +│ ║ │ ╚══ StatementPattern (costEstimate=0.50, resultSizeEstimate=134.8K) [right] +│ ║ │ s: Var (name=s2) +│ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) +│ ║ │ o: Var (name=op) +│ ║ └── LeftJoin +│ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=5565.7M) [left] +│ ║ ║ ├── Join (JoinIterator) (resultSizeEstimate=82.6K) [left] +│ ║ ║ │ ╠══ Join (JoinIterator) (resultSizeEstimate=26.9K) [left] +│ ║ ║ │ ║ ├── Join (JoinIterator) (resultSizeEstimate=26.5K) [left] +│ ║ ║ │ ║ │ ╠══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [left] +│ ║ ║ │ ║ │ ║ s: Var (name=service) +│ ║ ║ │ ║ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ ║ │ ║ o: Var (name=s1) +│ ║ ║ │ ║ │ ╚══ StatementPattern (costEstimate=130, resultSizeEstimate=67.4K) [right] +│ ║ ║ │ ║ │ s: Var (name=s1) +│ ║ ║ │ ║ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ │ ║ │ o: Var (name=line) +│ ║ ║ │ ║ └── StatementPattern (costEstimate=2.9K, resultSizeEstimate=8.6K) [right] +│ ║ ║ │ ║ s: Var (name=service) +│ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) +│ ║ ║ │ ║ o: Var (name=_const_a703e3e_uri, value=http://example.com/theme/train/TrainService, anonymous) +│ ║ ║ │ ╚══ StatementPattern (costEstimate=80, resultSizeEstimate=25.9K) [right] +│ ║ ║ │ s: Var (name=service) +│ ║ ║ │ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) +│ ║ ║ │ o: Var (name=s2) +│ ║ ║ └── StatementPattern (costEstimate=0.50, resultSizeEstimate=67.4K) [right] +│ ║ ║ s: Var (name=s2) +│ ║ ║ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) +│ ║ ║ o: Var (name=line) +│ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] +│ ║ s: Var (name=line) +│ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) +│ ║ o: Var (name=optName) +│ ╚══ GroupElem (count) +│ Count (Distinct) +│ Var (name=service) +└── ExtensionElem (count) +Count (Distinct) +Var (name=service) +``` + +### Query 9 + +- Fastest observed: `223.739 ms/op` +- Source: [results-2026-04-16-5.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md:67) +- Optimized block: [7311](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16-5.md:7311) + +Optimized query: + +```sparql +SELECT ?section (COUNT(DISTINCT ?track) AS ?trackCount) WHERE { + ?section ?track . + FILTER EXISTS { + ?track a . + } + ?section a . + OPTIONAL { + ?section ?op . + BIND(?op AS ?optOp) + } + FILTER (?optOp != ?section) +} +GROUP BY ?section +HAVING (COUNT(?track) > 0) +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "section" +║ ProjectionElem "trackCount" +╚══ Extension + ├── Extension + │ ╠══ Filter + │ ║ ├── Compare (>) + │ ║ │ Var (name=_anon_having_501ca9f329e637c40eeb518c2c2d3f6593601234, anonymous) + │ ║ │ ValueConstant (value="0"^^) + │ ║ └── Group (section) + │ ║ Filter + │ ║ ├── Compare (!=) + │ ║ │ Var (name=optOp) + │ ║ │ Var (name=section) + │ ║ └── LeftJoin + │ ║ ╠══ Join (JoinIterator) (resultSizeEstimate=67.5K) [left] + │ ║ ║ ├── Filter (costEstimate=33.1K, resultSizeEstimate=66.3K) [left] + │ ║ ║ │ ╠══ Exists + │ ║ ║ │ ║ StatementPattern (resultSizeEstimate=67.4K) + │ ║ ║ │ ║ s: Var (name=track) + │ ║ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ │ ║ o: Var (name=_const_585dd5cb_uri, value=http://example.com/theme/train/TrackSection, anonymous) + │ ║ ║ │ ╚══ StatementPattern (costEstimate=260, resultSizeEstimate=67.4K) + │ ║ ║ │ s: Var (name=section) + │ ║ ║ │ p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + │ ║ ║ │ o: Var (name=track) + │ ║ ║ └── StatementPattern (costEstimate=33.7K, resultSizeEstimate=67.4K) [right] + │ ║ ║ s: Var (name=section) + │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ ║ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ ╚══ Extension [right] + │ ║ ├── StatementPattern (resultSizeEstimate=134.8K) + │ ║ │ s: Var (name=section) + │ ║ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ │ o: Var (name=op) + │ ║ └── ExtensionElem (optOp) + │ ║ Var (name=op) + │ ║ GroupElem (_anon_having_501ca9f329e637c40eeb518c2c2d3f6593601234) + │ ║ Count + │ ║ Var (name=track) + │ ║ GroupElem (trackCount) + │ ║ Count (Distinct) + │ ║ Var (name=track) + │ ╚══ ExtensionElem (_anon_having_501ca9f329e637c40eeb518c2c2d3f6593601234) + │ Count + │ Var (name=track) + └── ExtensionElem (trackCount) + Count (Distinct) + Var (name=track) +``` + +### Query 10 + +- Fastest observed: `176.286 ms/op` +- Source: [results-2026-04-16.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:68) +- Optimized block: [4289](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-16.md:4289) + +Optimized query: + +```sparql +SELECT (COUNT(DISTINCT ?op) AS ?count) WHERE { +{ +?op a . +} +UNION +{ +?op a . +?op ?name . +} +OPTIONAL { +?section ?op . +BIND(?section AS ?optSection) +} +FILTER (?optSection != ?op) +MINUS { +?op ?name2 . +FILTER (CONTAINS(LCASE(STR(?name2)), "op 1")) +} +} +``` + +Query plan: + +_Not present in fastest-run source file._ + +### Query 12 + +- Fastest observed: `1935.462 ms/op` +- Source: [results-2026-04-18.md](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:82) +- Optimized block: [8883](/Users/havardottestad/Documents/Programming/rdf4j-stf/core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/results-2026-04-18.md:8883) + +Optimized query: + +```sparql +SELECT ?root ?optName ?optLabel ?optLine ?optLineName ?optOperationalPoint ?optOperationalPointName ?service ?optOperationalPoint2 ?optScheduledTime ?optTrackSection WHERE { + { + ?root a . + } + UNION + { + ?root a . + } + OPTIONAL { + ?root ?optName . + BIND(?optName AS ?optLabel) + } + OPTIONAL { + ?root ?optLine . + OPTIONAL { + ?optLine ?optLineName . + } + } + OPTIONAL { + ?root ?optOperationalPoint . + OPTIONAL { + ?optOperationalPoint ?optOperationalPointName . + } + } + OPTIONAL { + { + ?service ?root . + } + UNION + { + ?root ?optOperationalPoint2 . + ?service ?optOperationalPoint2 . + } + OPTIONAL { + ?service ?optScheduledTime . + } + } + OPTIONAL { + ?root ?optTrackSection . + } +} +``` + +Query plan: + +```text +Projection +╠══ ProjectionElemList +║ ProjectionElem "root" +║ ProjectionElem "optName" +║ ProjectionElem "optLabel" +║ ProjectionElem "optLine" +║ ProjectionElem "optLineName" +║ ProjectionElem "optOperationalPoint" +║ ProjectionElem "optOperationalPointName" +║ ProjectionElem "service" +║ ProjectionElem "optOperationalPoint2" +║ ProjectionElem "optScheduledTime" +║ ProjectionElem "optTrackSection" +╚══ LeftJoin (LeftJoinIterator) + ├── LeftJoin (LeftJoinIterator) [left] + │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ ├── LeftJoin (LeftJoinIterator) [left] + │ ║ │ ╠══ LeftJoin (LeftJoinIterator) [left] + │ ║ │ ║ ├── Union [left] + │ ║ │ ║ │ ╠══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=8.5K, indexName=ospc) + │ ║ │ ║ │ ║ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ ║ o: Var (name=_const_cef39ba5_uri, value=http://example.com/theme/train/Line, anonymous) + │ ║ │ ║ │ ╚══ StatementPattern [index: ospc] (new scope) (resultSizeEstimate=67.4K, indexName=ospc) + │ ║ │ ║ │ s: Var (name=root) (bindingState=unbound) + │ ║ │ ║ │ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous) + │ ║ │ ║ │ o: Var (name=_const_b0bb051f_uri, value=http://example.com/theme/train/SectionOfLine, anonymous) + │ ║ │ ║ └── Extension [right] + │ ║ │ ║ ╠══ StatementPattern (resultSizeEstimate=47.0K) + │ ║ │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ │ ║ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ ║ ║ o: Var (name=optName) (bindingState=unbound) + │ ║ │ ║ ╚══ ExtensionElem (optLabel) + │ ║ │ ║ Var (name=optName) (bindingState=bound) + │ ║ │ ╚══ LeftJoin [right] + │ ║ │ ├── StatementPattern (resultSizeEstimate=67.4K) [left] + │ ║ │ │ s: Var (name=root) (bindingState=bound) + │ ║ │ │ p: Var (name=_const_8ba830f_uri, value=http://example.com/theme/train/partOfLine, anonymous) + │ ║ │ │ o: Var (name=optLine) (bindingState=unbound) + │ ║ │ └── StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ │ s: Var (name=optLine) (bindingState=bound) + │ ║ │ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ │ o: Var (name=optLineName) (bindingState=unbound) + │ ║ └── LeftJoin [right] + │ ║ ╠══ StatementPattern (resultSizeEstimate=134.8K) [left] + │ ║ ║ s: Var (name=root) (bindingState=bound) + │ ║ ║ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ ║ ║ o: Var (name=optOperationalPoint) (bindingState=unbound) + │ ║ ╚══ StatementPattern (resultSizeEstimate=47.0K) [right] + │ ║ s: Var (name=optOperationalPoint) (bindingState=bound) + │ ║ p: Var (name=_const_cf02f21c_uri, value=http://example.com/theme/train/name, anonymous) + │ ║ o: Var (name=optOperationalPointName) (bindingState=unbound) + │ ╚══ LeftJoin [right] + │ ├── Union [left] + │ │ ╠══ StatementPattern (new scope) (resultSizeEstimate=25.9K) + │ │ ║ s: Var (name=service) (bindingState=unbound) + │ │ ║ p: Var (name=_const_9993352d_uri, value=http://example.com/theme/train/runsOnSection, anonymous) + │ │ ║ o: Var (name=root) (bindingState=bound) + │ │ ╚══ Join (new scope) (JoinIterator) (resultSizeEstimate=117.0K) + │ │ ├── StatementPattern (costEstimate=184, resultSizeEstimate=134.8K) [left] + │ │ │ s: Var (name=root) (bindingState=bound) + │ │ │ p: Var (name=_const_26ff10d8_uri, value=http://example.com/theme/train/connectsOperationalPoint, anonymous) + │ │ │ o: Var (name=optOperationalPoint2) (bindingState=unbound) + │ │ └── StatementPattern (costEstimate=161, resultSizeEstimate=25.9K) [right] + │ │ s: Var (name=service) (bindingState=unbound) + │ │ p: Var (name=_const_b4130d5_uri, value=http://example.com/theme/train/passesThrough, anonymous) + │ │ o: Var (name=optOperationalPoint2) (bindingState=bound) + │ └── StatementPattern (resultSizeEstimate=25.8K) [right] + │ s: Var (name=service) (bindingState=bound) + │ p: Var (name=_const_4f78e4a9_uri, value=http://example.com/theme/train/scheduledTime, anonymous) + │ o: Var (name=optScheduledTime) (bindingState=unbound) + └── StatementPattern (resultSizeEstimate=67.4K) [right] + s: Var (name=root) (bindingState=bound) + p: Var (name=_const_5289cea3_uri, value=http://example.com/theme/train/hasTrackSection, anonymous) + o: Var (name=optTrackSection) (bindingState=unbound) +``` diff --git a/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/FilterInValuesRewriteRegressionTest.java b/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/FilterInValuesRewriteRegressionTest.java new file mode 100644 index 00000000000..80b75ffc04e --- /dev/null +++ b/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/FilterInValuesRewriteRegressionTest.java @@ -0,0 +1,488 @@ +/******************************************************************************* + * Copyright (c) 2026 Eclipse RDF4J contributors. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Distribution License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + *******************************************************************************/ +// Some portions generated by Codex +package org.eclipse.rdf4j.sail.memory; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.QueryLanguage; +import org.eclipse.rdf4j.query.QueryResults; +import org.eclipse.rdf4j.query.TupleQueryResult; +import org.eclipse.rdf4j.query.explanation.Explanation; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; +import org.eclipse.rdf4j.rio.RDFFormat; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +public class FilterInValuesRewriteRegressionTest { + + private static final String PREFIXES = """ + PREFIX ex: + PREFIX xsd: + PREFIX exdt: + """; + + @ParameterizedTest(name = "{0}") + @MethodSource("safeRewriteCases") + public void safeRewriteMatchesOriginalWithBagSemantics(RewriteCase testCase) throws Exception { + assertThat(evaluate(testCase.data(), testCase.original())) + .as(testCase.id() + " original result") + .isEqualTo(testCase.expectedOriginal()); + assertThat(evaluate(testCase.data(), testCase.rewrite())) + .as(testCase.id() + " safe rewrite result") + .isEqualTo(testCase.expectedOriginal()); + String optimizedPlan = optimizedPlan(testCase.data(), testCase.original()); + if ("P2".equals(testCase.id())) { + assertThat(optimizedPlan) + .as(testCase.id() + " empty IN may fold to an empty algebra result") + .contains("EmptySet"); + } else { + assertThat(optimizedPlan) + .as(testCase.id() + " should expose a VALUES semijoin anchor") + .contains("BindingSetAssignment"); + } + } + + @ParameterizedTest(name = "{0}") + @MethodSource("unsoundRewriteCases") + public void unsoundRewriteDiffersFromOriginalWithBagSemantics(RewriteCase testCase) throws Exception { + Map original = evaluate(testCase.data(), testCase.original()); + Map badRewrite = evaluate(testCase.data(), testCase.rewrite()); + + assertThat(original) + .as(testCase.id() + " original result") + .isEqualTo(testCase.expectedOriginal()); + assertThat(badRewrite) + .as(testCase.id() + " bad rewrite result") + .isEqualTo(testCase.expectedRewrite()); + assertThat(badRewrite) + .as(testCase.id() + " must demonstrate a semantic difference") + .isNotEqualTo(original); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("optimizerRefusalCases") + public void optimizerDoesNotIntroduceValuesAnchorForUnsafeDirectRewrite(RewriteCase testCase) throws Exception { + assertThat(evaluate(testCase.data(), testCase.original())) + .as(testCase.id() + " original result") + .isEqualTo(testCase.expectedOriginal()); + assertThat(optimizedPlan(testCase.data(), testCase.original())) + .as(testCase.id() + " must not introduce a VALUES semijoin anchor") + .doesNotContain("BindingSetAssignment"); + } + + static Stream safeRewriteCases() { + return Stream.of( + c("P1", """ + @prefix ex: . + ex:s1 ex:p ex:a . + ex:s2 ex:p ex:b . + ex:s3 ex:p ex:c . + """, """ + SELECT ?s ?o WHERE { + ?s ex:p ?o . + FILTER(?o IN (ex:a, ex:c)) + } + ORDER BY ?s + """, """ + SELECT ?s ?o WHERE { + { ?s ex:p ?o . } + VALUES ?o { ex:a ex:c } + } + ORDER BY ?s + """, rows("s=http://example/s1|o=http://example/a", "s=http://example/s3|o=http://example/c")), + c("P2", """ + @prefix ex: . + ex:s1 a ex:T . + ex:s2 a ex:T ; ex:p "x" . + """, """ + SELECT ?s ?o WHERE { + ?s a ex:T . + OPTIONAL { ?s ex:p ?o } + FILTER(?o IN ()) + } + ORDER BY ?s + """, """ + SELECT ?s ?o WHERE { + { ?s a ex:T . OPTIONAL { ?s ex:p ?o } } + VALUES ?o {} + } + ORDER BY ?s + """, rows()), + c("P3", """ + @prefix ex: . + ex:s1 ex:p "a" . + ex:s2 ex:p "b" . + ex:s3 ex:p "c" . + """, """ + SELECT ?s ?o WHERE { + ?s ex:p ?o . + FILTER(?o IN ("a", "c")) + } + ORDER BY ?s + """, """ + SELECT ?s ?o WHERE { + { ?s ex:p ?o . } + VALUES ?o { "a" "c" } + } + ORDER BY ?s + """, rows("s=http://example/s1|o=\"a\"", "s=http://example/s3|o=\"c\"")), + c("P4", """ + @prefix ex: . + @prefix xsd: . + ex:s1 ex:p "a"^^xsd:string . + ex:s2 ex:p "b"^^xsd:string . + ex:s3 ex:p "c"^^xsd:string . + """, """ + SELECT ?s ?o WHERE { + ?s ex:p ?o . + FILTER(?o IN ("a"^^xsd:string, "c"^^xsd:string)) + } + ORDER BY ?s + """, """ + SELECT ?s ?o WHERE { + { ?s ex:p ?o . } + VALUES ?o { "a"^^xsd:string "c"^^xsd:string } + } + ORDER BY ?s + """, rows("s=http://example/s1|o=\"a\"", "s=http://example/s3|o=\"c\"")), + c("P5", """ + @prefix ex: . + ex:s1 ex:p "chat"@fr . + ex:s2 ex:p "chat"@en . + ex:s3 ex:p "chien"@fr . + """, """ + SELECT ?s ?o WHERE { + ?s ex:p ?o . + FILTER(?o IN ("chat"@fr)) + } + ORDER BY ?s + """, """ + SELECT ?s ?o WHERE { + { ?s ex:p ?o . } + VALUES ?o { "chat"@fr } + } + ORDER BY ?s + """, rows("s=http://example/s1|o=\"chat\"@fr")), + c("P6", """ + @prefix ex: . + ex:s1 ex:p ex:a . + ex:s2 ex:q ex:a . + ex:s3 ex:q ex:b . + """, """ + SELECT ?s ?v WHERE { + { ?s ex:p ?v } UNION { ?s ex:q ?v } + FILTER(?v IN (ex:a)) + } + ORDER BY ?s + """, """ + SELECT ?s ?v WHERE { + { + { ?s ex:p ?v } UNION { ?s ex:q ?v } + } + VALUES ?v { ex:a } + } + ORDER BY ?s + """, rows("s=http://example/s1|v=http://example/a", "s=http://example/s2|v=http://example/a"))); + } + + static Stream unsoundRewriteCases() { + return Stream.of( + c("N1", """ + @prefix ex: . + ex:s ex:p ex:a . + """, """ + SELECT (COUNT(*) AS ?n) WHERE { + ?s ex:p ?o . + FILTER(?o IN (ex:a, ex:a)) + } + """, """ + SELECT (COUNT(*) AS ?n) WHERE { + { ?s ex:p ?o . } + VALUES ?o { ex:a ex:a } + } + """, rows("n=\"1\"^^"), + rows("n=\"2\"^^")), + c("N2", """ + @prefix ex: . + ex:s1 a ex:T . + ex:s2 a ex:T ; ex:name "Alice" . + """, """ + SELECT ?s ?name WHERE { + ?s a ex:T . + OPTIONAL { ?s ex:name ?name } + FILTER(?name IN ("Alice")) + } + ORDER BY ?s + """, """ + SELECT ?s ?name WHERE { + ?s a ex:T . + OPTIONAL { ?s ex:name ?name } + VALUES ?name { "Alice" } + } + ORDER BY ?s + """, rows("s=http://example/s2|name=\"Alice\""), + rows("s=http://example/s1|name=\"Alice\"", "s=http://example/s2|name=\"Alice\"")), + c("N3", """ + @prefix ex: . + @prefix xsd: . + ex:s1 ex:n "2"^^xsd:integer . + ex:s2 ex:n "2.0"^^xsd:decimal . + ex:s3 ex:n "2"^^xsd:int . + """, """ + SELECT ?s ?n WHERE { + ?s ex:n ?n . + FILTER(?n IN ("2.0"^^xsd:decimal)) + } + ORDER BY ?s + """, """ + SELECT ?s ?n WHERE { + { ?s ex:n ?n . } + VALUES ?n { "2.0"^^xsd:decimal } + } + ORDER BY ?s + """, rows("s=http://example/s1|n=\"2\"^^", + "s=http://example/s2|n=\"2.0\"^^", + "s=http://example/s3|n=\"2\"^^"), + rows("s=http://example/s2|n=\"2.0\"^^")), + c("N4", """ + @prefix ex: . + @prefix xsd: . + ex:s1 ex:b "true"^^xsd:boolean . + ex:s2 ex:b "1"^^xsd:boolean . + ex:s3 ex:b "false"^^xsd:boolean . + """, """ + SELECT ?s ?b WHERE { + ?s ex:b ?b . + FILTER(?b IN ("true"^^xsd:boolean)) + } + ORDER BY ?s + """, """ + SELECT ?s ?b WHERE { + { ?s ex:b ?b . } + VALUES ?b { "true"^^xsd:boolean } + } + ORDER BY ?s + """, rows("s=http://example/s1|b=\"true\"^^", + "s=http://example/s2|b=\"1\"^^"), + rows("s=http://example/s1|b=\"true\"^^")), + c("N5", """ + @prefix ex: . + @prefix xsd: . + ex:s1 ex:t "2005-01-01T00:00:00Z"^^xsd:dateTime . + ex:s2 ex:t "2004-12-31T19:00:00-05:00"^^xsd:dateTime . + ex:s3 ex:t "2005-01-01T00:00:01Z"^^xsd:dateTime . + """, """ + SELECT ?s ?t WHERE { + ?s ex:t ?t . + FILTER(?t IN ("2005-01-01T00:00:00Z"^^xsd:dateTime)) + } + ORDER BY ?s + """, """ + SELECT ?s ?t WHERE { + { ?s ex:t ?t . } + VALUES ?t { "2005-01-01T00:00:00Z"^^xsd:dateTime } + } + ORDER BY ?s + """, rows( + "s=http://example/s1|t=\"2005-01-01T00:00:00Z\"^^", + "s=http://example/s2|t=\"2004-12-31T19:00:00-05:00\"^^"), + rows("s=http://example/s1|t=\"2005-01-01T00:00:00Z\"^^")), + c("N6", """ + @prefix ex: . + ex:s1 ex:p "a" ; ex:keep true . + ex:s2 ex:p "b" ; ex:keep true . + ex:s3 ex:p "b" ; ex:keep false . + """, """ + SELECT ?s WHERE { + ?s ex:p ?v ; ex:keep ?keep . + FILTER(?keep || ?v IN ("a")) + } + ORDER BY ?s + """, """ + SELECT ?s WHERE { + ?s ex:p ?v ; ex:keep ?keep . + VALUES ?v { "a" } + } + ORDER BY ?s + """, rows("s=http://example/s1", "s=http://example/s2"), rows("s=http://example/s1")), + c("N7", """ + @prefix ex: . + ex:s1 a ex:T ; ex:tag "a" . + ex:s2 a ex:T . + ex:s3 a ex:T ; ex:tag "b" . + """, """ + SELECT ?s (COALESCE(?tag, "UNBOUND") AS ?out) WHERE { + ?s a ex:T . + OPTIONAL { ?s ex:tag ?tag } + FILTER(?tag IN ("a")) + } + ORDER BY ?s + """, """ + SELECT ?s (COALESCE(?tag, "UNBOUND") AS ?out) WHERE { + ?s a ex:T . + OPTIONAL { + ?s ex:tag ?tag . + VALUES ?tag { "a" } + } + } + ORDER BY ?s + """, rows("s=http://example/s1|out=\"a\""), + rows("s=http://example/s1|out=\"a\"", "s=http://example/s2|out=\"UNBOUND\"", + "s=http://example/s3|out=\"UNBOUND\"")), + c("N8", """ + @prefix ex: . + ex:s1 ex:p ex:a . + ex:s2 ex:q ex:a . + ex:s3 ex:q ex:b . + """, """ + SELECT ?s ?v WHERE { + { ?s ex:p ?v } UNION { ?s ex:q ?v } + FILTER(?v IN (ex:a)) + } + ORDER BY ?s + """, """ + SELECT ?s ?v WHERE { + { ?s ex:p ?v . VALUES ?v { ex:a } } + UNION + { ?s ex:q ?v } + } + ORDER BY ?s + """, rows("s=http://example/s1|v=http://example/a", "s=http://example/s2|v=http://example/a"), + rows("s=http://example/s1|v=http://example/a", "s=http://example/s2|v=http://example/a", + "s=http://example/s3|v=http://example/b")), + c("N9", """ + @prefix ex: . + ex:s1 ex:p "a" . + ex:s2 ex:p "b" . + """, """ + SELECT ?v WHERE { + { SELECT ?v WHERE { ?s ex:p ?v } ORDER BY ?v LIMIT 1 } + FILTER(?v IN ("b")) + } + """, """ + SELECT ?v WHERE { + { SELECT ?v WHERE { ?s ex:p ?v . VALUES ?v { "b" } } ORDER BY ?v LIMIT 1 } + } + """, rows(), rows("v=\"b\""))); + } + + static Stream optimizerRefusalCases() { + return Stream.concat(unsoundRewriteCases() + .filter(testCase -> List.of("N2", "N3", "N4", "N5", "N6", "N7").contains(testCase.id())), + Stream.of(c("N10", """ + @prefix ex: . + ex:s1 ex:n 0 . + ex:s2 ex:n 1 . + """, """ + SELECT ?s WHERE { + ?s ex:n ?n . + FILTER(IF(?n = 0, 1/0, "ok") IN ("ok")) + } + ORDER BY ?s + """, "", rows()), c("N11", """ + @prefix ex: . + ex:s ex:n 2 . + """, """ + SELECT ?s WHERE { + ?s ex:n ?v . + FILTER(?v IN (1/0, 2)) + } + """, "", rows("s=http://example/s")))); + } + + private static RewriteCase c(String id, String data, String original, String rewrite, + Map expectedOriginal) { + return c(id, data, original, rewrite, expectedOriginal, expectedOriginal); + } + + private static RewriteCase c(String id, String data, String original, String rewrite, + Map expectedOriginal, Map expectedRewrite) { + return new RewriteCase(id, data, PREFIXES + original, PREFIXES + rewrite, expectedOriginal, expectedRewrite); + } + + private static Map evaluate(String data, String query) throws Exception { + SailRepository repository = new SailRepository(new MemoryStore()); + repository.init(); + try { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.add(new StringReader(data), "", RDFFormat.TURTLE); + try (TupleQueryResult result = connection.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate()) { + return bag(result); + } + } + } finally { + repository.shutDown(); + } + } + + private static String optimizedPlan(String data, String query) throws Exception { + SailRepository repository = new SailRepository(new MemoryStore()); + repository.init(); + try { + try (SailRepositoryConnection connection = repository.getConnection()) { + connection.add(new StringReader(data), "", RDFFormat.TURTLE); + return connection.prepareTupleQuery(QueryLanguage.SPARQL, query) + .explain(Explanation.Level.Optimized) + .toString(); + } + } finally { + repository.shutDown(); + } + } + + private static Map bag(TupleQueryResult result) { + List bindingNames = new ArrayList<>(result.getBindingNames()); + Map rows = new LinkedHashMap<>(); + for (BindingSet bindingSet : QueryResults.asList(result)) { + String row = row(bindingNames, bindingSet); + rows.merge(row, 1L, Long::sum); + } + return rows; + } + + private static String row(List bindingNames, BindingSet bindingSet) { + List values = new ArrayList<>(bindingNames.size()); + for (String bindingName : bindingNames) { + if (bindingSet.hasBinding(bindingName)) { + values.add(bindingName + "=" + bindingSet.getValue(bindingName)); + } else { + values.add(bindingName + "=UNBOUND"); + } + } + return String.join("|", values); + } + + private static Map rows(String... rows) { + Map result = new LinkedHashMap<>(); + for (String row : rows) { + result.merge(row, 1L, Long::sum); + } + return result; + } + + private record RewriteCase(String id, String data, String original, String rewrite, + Map expectedOriginal, Map expectedRewrite) { + @Override + public String toString() { + return id; + } + } +} diff --git a/core/sail/memory/src/test/resources/filter-in-values-rewrite-regression-suite.tsv b/core/sail/memory/src/test/resources/filter-in-values-rewrite-regression-suite.tsv new file mode 100644 index 00000000000..0f7d8aaa5cb --- /dev/null +++ b/core/sail/memory/src/test/resources/filter-in-values-rewrite-regression-suite.tsv @@ -0,0 +1,19 @@ +id category coverage expected_optimizer_action +P1 portable-pass bound IRI with non-empty constant RHS add values semijoin anchor +P2 portable-pass empty RHS with possibly unbound variable empty result or empty values semijoin +P3 core-pass simple literal constants add values semijoin anchor +P4 core-pass xsd:string literal constants add values semijoin anchor +P5 core-pass language-tagged literal constants add values semijoin anchor +P6 core-pass containing group is UNION add semijoin at containing-group output +N1 negative duplicate RHS terms deduplicate before values generation +N2 negative non-empty RHS with possibly unbound variable refuse values semijoin anchor +N3 negative numeric value equality refuse values semijoin anchor +N4 negative boolean lexical value equality refuse values semijoin anchor +N5 negative dateTime value equality refuse values semijoin anchor +N6 negative IN under OR refuse values semijoin anchor +N7 negative optional right-side pushdown refuse pushed values semijoin +N8 negative partial UNION-arm pushdown refuse pushed values semijoin +N9 negative subquery ORDER BY LIMIT pushdown refuse pushed values semijoin +N10 negative expression left-hand side refuse direct values rewrite +N11 negative non-constant RHS expression refuse direct values rewrite +E1 sentinel custom datatype equality extension document portability canary From 3f0d4c4b6e3be04353f28c9f6b4816fdc1f42ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Tue, 21 Apr 2026 21:54:59 +0200 Subject: [PATCH 30/43] remove some skills --- .codex/skills/adapt/SKILL.md | 199 ------------- .codex/skills/animate/SKILL.md | 190 ------------- .codex/skills/audit/SKILL.md | 129 --------- .codex/skills/bolder/SKILL.md | 132 --------- .codex/skills/clarify/SKILL.md | 180 ------------ .codex/skills/colorize/SKILL.md | 158 ----------- .codex/skills/critique/SKILL.md | 118 -------- .codex/skills/delight/SKILL.md | 317 --------------------- .codex/skills/distill/SKILL.md | 137 --------- .codex/skills/extract/SKILL.md | 95 ------- .codex/skills/harden/SKILL.md | 358 ------------------------ .codex/skills/normalize/SKILL.md | 67 ----- .codex/skills/plan-eng-review/SKILL.md | 162 ----------- .codex/skills/polish/SKILL.md | 202 ------------- .codex/skills/quieter/SKILL.md | 118 -------- .codex/skills/teach-impeccable/SKILL.md | 69 ----- 16 files changed, 2631 deletions(-) delete mode 100644 .codex/skills/adapt/SKILL.md delete mode 100644 .codex/skills/animate/SKILL.md delete mode 100644 .codex/skills/audit/SKILL.md delete mode 100644 .codex/skills/bolder/SKILL.md delete mode 100644 .codex/skills/clarify/SKILL.md delete mode 100644 .codex/skills/colorize/SKILL.md delete mode 100644 .codex/skills/critique/SKILL.md delete mode 100644 .codex/skills/delight/SKILL.md delete mode 100644 .codex/skills/distill/SKILL.md delete mode 100644 .codex/skills/extract/SKILL.md delete mode 100644 .codex/skills/harden/SKILL.md delete mode 100644 .codex/skills/normalize/SKILL.md delete mode 100644 .codex/skills/plan-eng-review/SKILL.md delete mode 100644 .codex/skills/polish/SKILL.md delete mode 100644 .codex/skills/quieter/SKILL.md delete mode 100644 .codex/skills/teach-impeccable/SKILL.md diff --git a/.codex/skills/adapt/SKILL.md b/.codex/skills/adapt/SKILL.md deleted file mode 100644 index 9bbea89d066..00000000000 --- a/.codex/skills/adapt/SKILL.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -name: adapt -description: Adapt designs to work across different screen sizes, devices, contexts, or platforms. Ensures consistent experience across varied environments. -args: - - name: target - description: The feature or component to adapt (optional) - required: false - - name: context - description: What to adapt for (mobile, tablet, desktop, print, email, etc.) - required: false -user-invokable: true ---- - -Adapt existing designs to work effectively across different contexts - different screen sizes, devices, platforms, or use cases. - -## Assess Adaptation Challenge - -Understand what needs adaptation and why: - -1. **Identify the source context**: - - What was it designed for originally? (Desktop web? Mobile app?) - - What assumptions were made? (Large screen? Mouse input? Fast connection?) - - What works well in current context? - -2. **Understand target context**: - - **Device**: Mobile, tablet, desktop, TV, watch, print? - - **Input method**: Touch, mouse, keyboard, voice, gamepad? - - **Screen constraints**: Size, resolution, orientation? - - **Connection**: Fast wifi, slow 3G, offline? - - **Usage context**: On-the-go vs desk, quick glance vs focused reading? - - **User expectations**: What do users expect on this platform? - -3. **Identify adaptation challenges**: - - What won't fit? (Content, navigation, features) - - What won't work? (Hover states on touch, tiny touch targets) - - What's inappropriate? (Desktop patterns on mobile, mobile patterns on desktop) - -**CRITICAL**: Adaptation is not just scaling - it's rethinking the experience for the new context. - -## Plan Adaptation Strategy - -Create context-appropriate strategy: - -### Mobile Adaptation (Desktop → Mobile) - -**Layout Strategy**: -- Single column instead of multi-column -- Vertical stacking instead of side-by-side -- Full-width components instead of fixed widths -- Bottom navigation instead of top/side navigation - -**Interaction Strategy**: -- Touch targets 44x44px minimum (not hover-dependent) -- Swipe gestures where appropriate (lists, carousels) -- Bottom sheets instead of dropdowns -- Thumbs-first design (controls within thumb reach) -- Larger tap areas with more spacing - -**Content Strategy**: -- Progressive disclosure (don't show everything at once) -- Prioritize primary content (secondary content in tabs/accordions) -- Shorter text (more concise) -- Larger text (16px minimum) - -**Navigation Strategy**: -- Hamburger menu or bottom navigation -- Reduce navigation complexity -- Sticky headers for context -- Back button in navigation flow - -### Tablet Adaptation (Hybrid Approach) - -**Layout Strategy**: -- Two-column layouts (not single or three-column) -- Side panels for secondary content -- Master-detail views (list + detail) -- Adaptive based on orientation (portrait vs landscape) - -**Interaction Strategy**: -- Support both touch and pointer -- Touch targets 44x44px but allow denser layouts than phone -- Side navigation drawers -- Multi-column forms where appropriate - -### Desktop Adaptation (Mobile → Desktop) - -**Layout Strategy**: -- Multi-column layouts (use horizontal space) -- Side navigation always visible -- Multiple information panels simultaneously -- Fixed widths with max-width constraints (don't stretch to 4K) - -**Interaction Strategy**: -- Hover states for additional information -- Keyboard shortcuts -- Right-click context menus -- Drag and drop where helpful -- Multi-select with Shift/Cmd - -**Content Strategy**: -- Show more information upfront (less progressive disclosure) -- Data tables with many columns -- Richer visualizations -- More detailed descriptions - -### Print Adaptation (Screen → Print) - -**Layout Strategy**: -- Page breaks at logical points -- Remove navigation, footer, interactive elements -- Black and white (or limited color) -- Proper margins for binding - -**Content Strategy**: -- Expand shortened content (show full URLs, hidden sections) -- Add page numbers, headers, footers -- Include metadata (print date, page title) -- Convert charts to print-friendly versions - -### Email Adaptation (Web → Email) - -**Layout Strategy**: -- Narrow width (600px max) -- Single column only -- Inline CSS (no external stylesheets) -- Table-based layouts (for email client compatibility) - -**Interaction Strategy**: -- Large, obvious CTAs (buttons not text links) -- No hover states (not reliable) -- Deep links to web app for complex interactions - -## Implement Adaptations - -Apply changes systematically: - -### Responsive Breakpoints - -Choose appropriate breakpoints: -- Mobile: 320px-767px -- Tablet: 768px-1023px -- Desktop: 1024px+ -- Or content-driven breakpoints (where design breaks) - -### Layout Adaptation Techniques - -- **CSS Grid/Flexbox**: Reflow layouts automatically -- **Container Queries**: Adapt based on container, not viewport -- **`clamp()`**: Fluid sizing between min and max -- **Media queries**: Different styles for different contexts -- **Display properties**: Show/hide elements per context - -### Touch Adaptation - -- Increase touch target sizes (44x44px minimum) -- Add more spacing between interactive elements -- Remove hover-dependent interactions -- Add touch feedback (ripples, highlights) -- Consider thumb zones (easier to reach bottom than top) - -### Content Adaptation - -- Use `display: none` sparingly (still downloads) -- Progressive enhancement (core content first, enhancements on larger screens) -- Lazy loading for off-screen content -- Responsive images (`srcset`, `picture` element) - -### Navigation Adaptation - -- Transform complex nav to hamburger/drawer on mobile -- Bottom nav bar for mobile apps -- Persistent side navigation on desktop -- Breadcrumbs on smaller screens for context - -**IMPORTANT**: Test on real devices, not just browser DevTools. Device emulation is helpful but not perfect. - -**NEVER**: -- Hide core functionality on mobile (if it matters, make it work) -- Assume desktop = powerful device (consider accessibility, older machines) -- Use different information architecture across contexts (confusing) -- Break user expectations for platform (mobile users expect mobile patterns) -- Forget landscape orientation on mobile/tablet -- Use generic breakpoints blindly (use content-driven breakpoints) -- Ignore touch on desktop (many desktop devices have touch) - -## Verify Adaptations - -Test thoroughly across contexts: - -- **Real devices**: Test on actual phones, tablets, desktops -- **Different orientations**: Portrait and landscape -- **Different browsers**: Safari, Chrome, Firefox, Edge -- **Different OS**: iOS, Android, Windows, macOS -- **Different input methods**: Touch, mouse, keyboard -- **Edge cases**: Very small screens (320px), very large screens (4K) -- **Slow connections**: Test on throttled network - -Remember: You're a cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly. - diff --git a/.codex/skills/animate/SKILL.md b/.codex/skills/animate/SKILL.md deleted file mode 100644 index c6563c15e84..00000000000 --- a/.codex/skills/animate/SKILL.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -name: animate -description: Review a feature and enhance it with purposeful animations, micro-interactions, and motion effects that improve usability and delight. -args: - - name: target - description: The feature or component to animate (optional) - required: false -user-invokable: true ---- - -Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight. - -## MANDATORY PREPARATION - -### Context Gathering (Do This First) - -You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), brand personality/tone (playful vs serious, energetic vs calm), and performance constraints. - -Attempt to gather these from the current thread or codebase. - -1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and {{ask_instruction}} whether you got it right. -2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST {{ask_instruction}} clarifying questions first to complete your context. - -Do NOT proceed until you have answers. Guessing leads to inappropriate or excessive animation. - -### Use frontend-design skill - -Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts. - ---- - -## Assess Animation Opportunities - -Analyze where motion would improve the experience: - -1. **Identify static areas**: - - **Missing feedback**: Actions without visual acknowledgment (button clicks, form submission, etc.) - - **Jarring transitions**: Instant state changes that feel abrupt (show/hide, page loads, route changes) - - **Unclear relationships**: Spatial or hierarchical relationships that aren't obvious - - **Lack of delight**: Functional but joyless interactions - - **Missed guidance**: Opportunities to direct attention or explain behavior - -2. **Understand the context**: - - What's the personality? (Playful vs serious, energetic vs calm) - - What's the performance budget? (Mobile-first? Complex page?) - - Who's the audience? (Motion-sensitive users? Power users who want speed?) - - What matters most? (One hero animation vs many micro-interactions?) - -If any of these are unclear from the codebase, {{ask_instruction}} - -**CRITICAL**: Respect `prefers-reduced-motion`. Always provide non-animated alternatives for users who need them. - -## Plan Animation Strategy - -Create a purposeful animation plan: - -- **Hero moment**: What's the ONE signature animation? (Page load? Hero section? Key interaction?) -- **Feedback layer**: Which interactions need acknowledgment? -- **Transition layer**: Which state changes need smoothing? -- **Delight layer**: Where can we surprise and delight? - -**IMPORTANT**: One well-orchestrated experience beats scattered animations everywhere. Focus on high-impact moments. - -## Implement Animations - -Add motion systematically across these categories: - -### Entrance Animations -- **Page load choreography**: Stagger element reveals (100-150ms delays), fade + slide combinations -- **Hero section**: Dramatic entrance for primary content (scale, parallax, or creative effects) -- **Content reveals**: Scroll-triggered animations using intersection observer -- **Modal/drawer entry**: Smooth slide + fade, backdrop fade, focus management - -### Micro-interactions -- **Button feedback**: - - Hover: Subtle scale (1.02-1.05), color shift, shadow increase - - Click: Quick scale down then up (0.95 → 1), ripple effect - - Loading: Spinner or pulse state -- **Form interactions**: - - Input focus: Border color transition, slight scale or glow - - Validation: Shake on error, check mark on success, smooth color transitions -- **Toggle switches**: Smooth slide + color transition (200-300ms) -- **Checkboxes/radio**: Check mark animation, ripple effect -- **Like/favorite**: Scale + rotation, particle effects, color transition - -### State Transitions -- **Show/hide**: Fade + slide (not instant), appropriate timing (200-300ms) -- **Expand/collapse**: Height transition with overflow handling, icon rotation -- **Loading states**: Skeleton screen fades, spinner animations, progress bars -- **Success/error**: Color transitions, icon animations, gentle scale pulse -- **Enable/disable**: Opacity transitions, cursor changes - -### Navigation & Flow -- **Page transitions**: Crossfade between routes, shared element transitions -- **Tab switching**: Slide indicator, content fade/slide -- **Carousel/slider**: Smooth transforms, snap points, momentum -- **Scroll effects**: Parallax layers, sticky headers with state changes, scroll progress indicators - -### Feedback & Guidance -- **Hover hints**: Tooltip fade-ins, cursor changes, element highlights -- **Drag & drop**: Lift effect (shadow + scale), drop zone highlights, smooth repositioning -- **Copy/paste**: Brief highlight flash on paste, "copied" confirmation -- **Focus flow**: Highlight path through form or workflow - -### Delight Moments -- **Empty states**: Subtle floating animations on illustrations -- **Completed actions**: Confetti, check mark flourish, success celebrations -- **Easter eggs**: Hidden interactions for discovery -- **Contextual animation**: Weather effects, time-of-day themes, seasonal touches - -## Technical Implementation - -Use appropriate techniques for each animation: - -### Timing & Easing - -**Durations by purpose:** -- **100-150ms**: Instant feedback (button press, toggle) -- **200-300ms**: State changes (hover, menu open) -- **300-500ms**: Layout changes (accordion, modal) -- **500-800ms**: Entrance animations (page load) - -**Easing curves (use these, not CSS defaults):** -```css -/* Recommended - natural deceleration */ ---ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1); /* Smooth, refined */ ---ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1); /* Slightly snappier */ ---ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Confident, decisive */ - -/* AVOID - feel dated and tacky */ -/* bounce: cubic-bezier(0.34, 1.56, 0.64, 1); */ -/* elastic: cubic-bezier(0.68, -0.6, 0.32, 1.6); */ -``` - -**Exit animations are faster than entrances.** Use ~75% of enter duration. - -### CSS Animations -```css -/* Prefer for simple, declarative animations */ -- transitions for state changes -- @keyframes for complex sequences -- transform + opacity only (GPU-accelerated) -``` - -### JavaScript Animation -```javascript -/* Use for complex, interactive animations */ -- Web Animations API for programmatic control -- Framer Motion for React -- GSAP for complex sequences -``` - -### Performance -- **GPU acceleration**: Use `transform` and `opacity`, avoid layout properties -- **will-change**: Add sparingly for known expensive animations -- **Reduce paint**: Minimize repaints, use `contain` where appropriate -- **Monitor FPS**: Ensure 60fps on target devices - -### Accessibility -```css -@media (prefers-reduced-motion: reduce) { - * { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - } -} -``` - -**NEVER**: -- Use bounce or elastic easing curves—they feel dated and draw attention to the animation itself -- Animate layout properties (width, height, top, left)—use transform instead -- Use durations over 500ms for feedback—it feels laggy -- Animate without purpose—every animation needs a reason -- Ignore `prefers-reduced-motion`—this is an accessibility violation -- Animate everything—animation fatigue makes interfaces feel exhausting -- Block interaction during animations unless intentional - -## Verify Quality - -Test animations thoroughly: - -- **Smooth at 60fps**: No jank on target devices -- **Feels natural**: Easing curves feel organic, not robotic -- **Appropriate timing**: Not too fast (jarring) or too slow (laggy) -- **Reduced motion works**: Animations disabled or simplified appropriately -- **Doesn't block**: Users can interact during/after animations -- **Adds value**: Makes interface clearer or more delightful - -Remember: Motion should enhance understanding and provide feedback, not just add decoration. Animate with purpose, respect performance constraints, and always consider accessibility. Great animation is invisible - it just makes everything feel right. diff --git a/.codex/skills/audit/SKILL.md b/.codex/skills/audit/SKILL.md deleted file mode 100644 index e30b036f6b1..00000000000 --- a/.codex/skills/audit/SKILL.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -name: audit -description: Perform comprehensive audit of interface quality across accessibility, performance, theming, and responsive design. Generates detailed report of issues with severity ratings and recommendations. -args: - - name: area - description: The feature or area to audit (optional) - required: false -user-invokable: true ---- - -Run systematic quality checks and generate a comprehensive audit report with prioritized issues and actionable recommendations. Don't fix issues - document them for other commands to address. - -**First**: Use the frontend-design skill for design principles and anti-patterns. - -## Diagnostic Scan - -Run comprehensive checks across multiple dimensions: - -1. **Accessibility (A11y)** - Check for: - - **Contrast issues**: Text contrast ratios < 4.5:1 (or 7:1 for AAA) - - **Missing ARIA**: Interactive elements without proper roles, labels, or states - - **Keyboard navigation**: Missing focus indicators, illogical tab order, keyboard traps - - **Semantic HTML**: Improper heading hierarchy, missing landmarks, divs instead of buttons - - **Alt text**: Missing or poor image descriptions - - **Form issues**: Inputs without labels, poor error messaging, missing required indicators - -2. **Performance** - Check for: - - **Layout thrashing**: Reading/writing layout properties in loops - - **Expensive animations**: Animating layout properties (width, height, top, left) instead of transform/opacity - - **Missing optimization**: Images without lazy loading, unoptimized assets, missing will-change - - **Bundle size**: Unnecessary imports, unused dependencies - - **Render performance**: Unnecessary re-renders, missing memoization - -3. **Theming** - Check for: - - **Hard-coded colors**: Colors not using design tokens - - **Broken dark mode**: Missing dark mode variants, poor contrast in dark theme - - **Inconsistent tokens**: Using wrong tokens, mixing token types - - **Theme switching issues**: Values that don't update on theme change - -4. **Responsive Design** - Check for: - - **Fixed widths**: Hard-coded widths that break on mobile - - **Touch targets**: Interactive elements < 44x44px - - **Horizontal scroll**: Content overflow on narrow viewports - - **Text scaling**: Layouts that break when text size increases - - **Missing breakpoints**: No mobile/tablet variants - -5. **Anti-Patterns (CRITICAL)** - Check against ALL the **DON'T** guidelines in the frontend-design skill. Look for AI slop tells (AI color palette, gradient text, glassmorphism, hero metrics, card grids, generic fonts) and general design anti-patterns (gray on color, nested cards, bounce easing, redundant copy). - -**CRITICAL**: This is an audit, not a fix. Document issues thoroughly with clear explanations of impact. Use other commands (normalize, optimize, harden, etc.) to fix issues after audit. - -## Generate Comprehensive Report - -Create a detailed audit report with the following structure: - -### Anti-Patterns Verdict -**Start here.** Pass/fail: Does this look AI-generated? List specific tells from the skill's Anti-Patterns section. Be brutally honest. - -### Executive Summary -- Total issues found (count by severity) -- Most critical issues (top 3-5) -- Overall quality score (if applicable) -- Recommended next steps - -### Detailed Findings by Severity - -For each issue, document: -- **Location**: Where the issue occurs (component, file, line) -- **Severity**: Critical / High / Medium / Low -- **Category**: Accessibility / Performance / Theming / Responsive -- **Description**: What the issue is -- **Impact**: How it affects users -- **WCAG/Standard**: Which standard it violates (if applicable) -- **Recommendation**: How to fix it -- **Suggested command**: Which command to use (prefer: {{available_commands}} — or other installed skills you're sure exist) - -#### Critical Issues -[Issues that block core functionality or violate WCAG A] - -#### High-Severity Issues -[Significant usability/accessibility impact, WCAG AA violations] - -#### Medium-Severity Issues -[Quality issues, WCAG AAA violations, performance concerns] - -#### Low-Severity Issues -[Minor inconsistencies, optimization opportunities] - -### Patterns & Systemic Issues - -Identify recurring problems: -- "Hard-coded colors appear in 15+ components, should use design tokens" -- "Touch targets consistently too small (<44px) throughout mobile experience" -- "Missing focus indicators on all custom interactive components" - -### Positive Findings - -Note what's working well: -- Good practices to maintain -- Exemplary implementations to replicate elsewhere - -### Recommendations by Priority - -Create actionable plan: -1. **Immediate**: Critical blockers to fix first -2. **Short-term**: High-severity issues (this sprint) -3. **Medium-term**: Quality improvements (next sprint) -4. **Long-term**: Nice-to-haves and optimizations - -### Suggested Commands for Fixes - -Map issues to available commands. Prefer these: {{available_commands}}. You may also suggest other installed skills you're sure exist, but never invent commands. - -Examples: -- "Use `/normalize` to align with design system (addresses N theming issues)" -- "Use `/optimize` to improve performance (addresses N performance issues)" -- "Use `/harden` to improve resilience (addresses N edge cases)" - -**IMPORTANT**: Be thorough but actionable. Too many low-priority issues creates noise. Focus on what actually matters. - -**NEVER**: -- Report issues without explaining impact (why does this matter?) -- Mix severity levels inconsistently -- Skip positive findings (celebrate what works) -- Provide generic recommendations (be specific and actionable) -- Forget to prioritize (everything can't be critical) -- Report false positives without verification - -Remember: You're a quality auditor with exceptional attention to detail. Document systematically, prioritize ruthlessly, and provide clear paths to improvement. A good audit makes fixing easy. - diff --git a/.codex/skills/bolder/SKILL.md b/.codex/skills/bolder/SKILL.md deleted file mode 100644 index 4ae1d73c3c3..00000000000 --- a/.codex/skills/bolder/SKILL.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -name: bolder -description: Amplify safe or boring designs to make them more visually interesting and stimulating. Increases impact while maintaining usability. -args: - - name: target - description: The feature or component to make bolder (optional) - required: false -user-invokable: true ---- - -Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences. - -## MANDATORY PREPARATION - -### Context Gathering (Do This First) - -You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), brand personality/tone, and everything else that a great human designer would need as well. - -Attempt to gather these from the current thread or codebase. - -1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and {{ask_instruction}} whether you got it right. -2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST {{ask_instruction}} clarifying questions first to complete your context. - -Do NOT proceed until you have answers. Guessing leads to generic AI slop. - -### Use frontend-design skill - -Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts. - ---- - -## Assess Current State - -Analyze what makes the design feel too safe or boring: - -1. **Identify weakness sources**: - - **Generic choices**: System fonts, basic colors, standard layouts - - **Timid scale**: Everything is medium-sized with no drama - - **Low contrast**: Everything has similar visual weight - - **Static**: No motion, no energy, no life - - **Predictable**: Standard patterns with no surprises - - **Flat hierarchy**: Nothing stands out or commands attention - -2. **Understand the context**: - - What's the brand personality? (How far can we push?) - - What's the purpose? (Marketing can be bolder than financial dashboards) - - Who's the audience? (What will resonate?) - - What are the constraints? (Brand guidelines, accessibility, performance) - -If any of these are unclear from the codebase, {{ask_instruction}} - -**CRITICAL**: "Bolder" doesn't mean chaotic or garish. It means distinctive, memorable, and confident. Think intentional drama, not random chaos. - -**WARNING - AI SLOP TRAP**: When making things "bolder," AI defaults to the same tired tricks: cyan/purple gradients, glassmorphism, neon accents on dark backgrounds, gradient text on metrics. These are the OPPOSITE of bold—they're generic. Review ALL the DON'T guidelines in the frontend-design skill before proceeding. Bold means distinctive, not "more effects." - -## Plan Amplification - -Create a strategy to increase impact while maintaining coherence: - -- **Focal point**: What should be the hero moment? (Pick ONE, make it amazing) -- **Personality direction**: Maximalist chaos? Elegant drama? Playful energy? Dark moody? Choose a lane. -- **Risk budget**: How experimental can we be? Push boundaries within constraints. -- **Hierarchy amplification**: Make big things BIGGER, small things smaller (increase contrast) - -**IMPORTANT**: Bold design must still be usable. Impact without function is just decoration. - -## Amplify the Design - -Systematically increase impact across these dimensions: - -### Typography Amplification -- **Replace generic fonts**: Swap system fonts for distinctive choices (see frontend-design skill for inspiration) -- **Extreme scale**: Create dramatic size jumps (3x-5x differences, not 1.5x) -- **Weight contrast**: Pair 900 weights with 200 weights, not 600 with 400 -- **Unexpected choices**: Variable fonts, display fonts for headlines, condensed/extended widths, monospace as intentional accent (not as lazy "dev tool" default) - -### Color Intensification -- **Increase saturation**: Shift to more vibrant, energetic colors (but not neon) -- **Bold palette**: Introduce unexpected color combinations—avoid the purple-blue gradient AI slop -- **Dominant color strategy**: Let one bold color own 60% of the design -- **Sharp accents**: High-contrast accent colors that pop -- **Tinted neutrals**: Replace pure grays with tinted grays that harmonize with your palette -- **Rich gradients**: Intentional multi-stop gradients (not generic purple-to-blue) - -### Spatial Drama -- **Extreme scale jumps**: Make important elements 3-5x larger than surroundings -- **Break the grid**: Let hero elements escape containers and cross boundaries -- **Asymmetric layouts**: Replace centered, balanced layouts with tension-filled asymmetry -- **Generous space**: Use white space dramatically (100-200px gaps, not 20-40px) -- **Overlap**: Layer elements intentionally for depth - -### Visual Effects -- **Dramatic shadows**: Large, soft shadows for elevation (but not generic drop shadows on rounded rectangles) -- **Background treatments**: Mesh patterns, noise textures, geometric patterns, intentional gradients (not purple-to-blue) -- **Texture & depth**: Grain, halftone, duotone, layered elements—NOT glassmorphism (it's overused AI slop) -- **Borders & frames**: Thick borders, decorative frames, custom shapes (not rounded rectangles with colored border on one side) -- **Custom elements**: Illustrative elements, custom icons, decorative details that reinforce brand - -### Motion & Animation -- **Entrance choreography**: Staggered, dramatic page load animations with 50-100ms delays -- **Scroll effects**: Parallax, reveal animations, scroll-triggered sequences -- **Micro-interactions**: Satisfying hover effects, click feedback, state changes -- **Transitions**: Smooth, noticeable transitions using ease-out-quart/quint/expo (not bounce or elastic—they cheapen the effect) - -### Composition Boldness -- **Hero moments**: Create clear focal points with dramatic treatment -- **Diagonal flows**: Escape horizontal/vertical rigidity with diagonal arrangements -- **Full-bleed elements**: Use full viewport width/height for impact -- **Unexpected proportions**: Golden ratio? Throw it out. Try 70/30, 80/20 splits - -**NEVER**: -- Add effects randomly without purpose (chaos ≠ bold) -- Sacrifice readability for aesthetics (body text must be readable) -- Make everything bold (then nothing is bold - need contrast) -- Ignore accessibility (bold design must still meet WCAG standards) -- Overwhelm with motion (animation fatigue is real) -- Copy trendy aesthetics blindly (bold means distinctive, not derivative) - -## Verify Quality - -Ensure amplification maintains usability and coherence: - -- **NOT AI slop**: Does this look like every other AI-generated "bold" design? If yes, start over. -- **Still functional**: Can users accomplish tasks without distraction? -- **Coherent**: Does everything feel intentional and unified? -- **Memorable**: Will users remember this experience? -- **Performant**: Do all these effects run smoothly? -- **Accessible**: Does it still meet accessibility standards? - -**The test**: If you showed this to someone and said "AI made this bolder," would they believe you immediately? If yes, you've failed. Bold means distinctive, not "more AI effects." - -Remember: Bold design is confident design. It takes risks, makes statements, and creates memorable experiences. But bold without strategy is just loud. Be intentional, be dramatic, be unforgettable. diff --git a/.codex/skills/clarify/SKILL.md b/.codex/skills/clarify/SKILL.md deleted file mode 100644 index c39e4f73fb1..00000000000 --- a/.codex/skills/clarify/SKILL.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -name: clarify -description: Improve unclear UX copy, error messages, microcopy, labels, and instructions. Makes interfaces easier to understand and use. -args: - - name: target - description: The feature or component with unclear copy (optional) - required: false -user-invokable: true ---- - -Identify and improve unclear, confusing, or poorly written interface text to make the product easier to understand and use. - -## Assess Current Copy - -Identify what makes the text unclear or ineffective: - -1. **Find clarity problems**: - - **Jargon**: Technical terms users won't understand - - **Ambiguity**: Multiple interpretations possible - - **Passive voice**: "Your file has been uploaded" vs "We uploaded your file" - - **Length**: Too wordy or too terse - - **Assumptions**: Assuming user knowledge they don't have - - **Missing context**: Users don't know what to do or why - - **Tone mismatch**: Too formal, too casual, or inappropriate for situation - -2. **Understand the context**: - - Who's the audience? (Technical? General? First-time users?) - - What's the user's mental state? (Stressed during error? Confident during success?) - - What's the action? (What do we want users to do?) - - What's the constraint? (Character limits? Space limitations?) - -**CRITICAL**: Clear copy helps users succeed. Unclear copy creates frustration, errors, and support tickets. - -## Plan Copy Improvements - -Create a strategy for clearer communication: - -- **Primary message**: What's the ONE thing users need to know? -- **Action needed**: What should users do next (if anything)? -- **Tone**: How should this feel? (Helpful? Apologetic? Encouraging?) -- **Constraints**: Length limits, brand voice, localization considerations - -**IMPORTANT**: Good UX writing is invisible. Users should understand immediately without noticing the words. - -## Improve Copy Systematically - -Refine text across these common areas: - -### Error Messages -**Bad**: "Error 403: Forbidden" -**Good**: "You don't have permission to view this page. Contact your admin for access." - -**Bad**: "Invalid input" -**Good**: "Email addresses need an @ symbol. Try: name@example.com" - -**Principles**: -- Explain what went wrong in plain language -- Suggest how to fix it -- Don't blame the user -- Include examples when helpful -- Link to help/support if applicable - -### Form Labels & Instructions -**Bad**: "DOB (MM/DD/YYYY)" -**Good**: "Date of birth" (with placeholder showing format) - -**Bad**: "Enter value here" -**Good**: "Your email address" or "Company name" - -**Principles**: -- Use clear, specific labels (not generic placeholders) -- Show format expectations with examples -- Explain why you're asking (when not obvious) -- Put instructions before the field, not after -- Keep required field indicators clear - -### Button & CTA Text -**Bad**: "Click here" | "Submit" | "OK" -**Good**: "Create account" | "Save changes" | "Got it, thanks" - -**Principles**: -- Describe the action specifically -- Use active voice (verb + noun) -- Match user's mental model -- Be specific ("Save" is better than "OK") - -### Help Text & Tooltips -**Bad**: "This is the username field" -**Good**: "Choose a username. You can change this later in Settings." - -**Principles**: -- Add value (don't just repeat the label) -- Answer the implicit question ("What is this?" or "Why do you need this?") -- Keep it brief but complete -- Link to detailed docs if needed - -### Empty States -**Bad**: "No items" -**Good**: "No projects yet. Create your first project to get started." - -**Principles**: -- Explain why it's empty (if not obvious) -- Show next action clearly -- Make it welcoming, not dead-end - -### Success Messages -**Bad**: "Success" -**Good**: "Settings saved! Your changes will take effect immediately." - -**Principles**: -- Confirm what happened -- Explain what happens next (if relevant) -- Be brief but complete -- Match the user's emotional moment (celebrate big wins) - -### Loading States -**Bad**: "Loading..." (for 30+ seconds) -**Good**: "Analyzing your data... this usually takes 30-60 seconds" - -**Principles**: -- Set expectations (how long?) -- Explain what's happening (when it's not obvious) -- Show progress when possible -- Offer escape hatch if appropriate ("Cancel") - -### Confirmation Dialogs -**Bad**: "Are you sure?" -**Good**: "Delete 'Project Alpha'? This can't be undone." - -**Principles**: -- State the specific action -- Explain consequences (especially for destructive actions) -- Use clear button labels ("Delete project" not "Yes") -- Don't overuse confirmations (only for risky actions) - -### Navigation & Wayfinding -**Bad**: Generic labels like "Items" | "Things" | "Stuff" -**Good**: Specific labels like "Your projects" | "Team members" | "Settings" - -**Principles**: -- Be specific and descriptive -- Use language users understand (not internal jargon) -- Make hierarchy clear -- Consider information scent (breadcrumbs, current location) - -## Apply Clarity Principles - -Every piece of copy should follow these rules: - -1. **Be specific**: "Enter email" not "Enter value" -2. **Be concise**: Cut unnecessary words (but don't sacrifice clarity) -3. **Be active**: "Save changes" not "Changes will be saved" -4. **Be human**: "Oops, something went wrong" not "System error encountered" -5. **Be helpful**: Tell users what to do, not just what happened -6. **Be consistent**: Use same terms throughout (don't vary for variety) - -**NEVER**: -- Use jargon without explanation -- Blame users ("You made an error" → "This field is required") -- Be vague ("Something went wrong" without explanation) -- Use passive voice unnecessarily -- Write overly long explanations (be concise) -- Use humor for errors (be empathetic instead) -- Assume technical knowledge -- Vary terminology (pick one term and stick with it) -- Repeat information (headers restating intros, redundant explanations) -- Use placeholders as the only labels (they disappear when users type) - -## Verify Improvements - -Test that copy improvements work: - -- **Comprehension**: Can users understand without context? -- **Actionability**: Do users know what to do next? -- **Brevity**: Is it as short as possible while remaining clear? -- **Consistency**: Does it match terminology elsewhere? -- **Tone**: Is it appropriate for the situation? - -Remember: You're a clarity expert with excellent communication skills. Write like you're explaining to a smart friend who's unfamiliar with the product. Be clear, be helpful, be human. - diff --git a/.codex/skills/colorize/SKILL.md b/.codex/skills/colorize/SKILL.md deleted file mode 100644 index 905782fb530..00000000000 --- a/.codex/skills/colorize/SKILL.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -name: colorize -description: Add strategic color to features that are too monochromatic or lack visual interest. Makes interfaces more engaging and expressive. -args: - - name: target - description: The feature or component to colorize (optional) - required: false -user-invokable: true ---- - -Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality. - -## MANDATORY PREPARATION - -### Context Gathering (Do This First) - -You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), brand personality/tone, and especially existing brand colors. - -Attempt to gather these from the current thread or codebase. - -1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and {{ask_instruction}} whether you got it right. -2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST {{ask_instruction}} clarifying questions first to complete your context. - -Do NOT proceed until you have answers. Guessing leads to generic AI slop colors. - -### Use frontend-design skill - -Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts. - ---- - -## Assess Color Opportunity - -Analyze the current state and identify opportunities: - -1. **Understand current state**: - - **Color absence**: Pure grayscale? Limited neutrals? One timid accent? - - **Missed opportunities**: Where could color add meaning, hierarchy, or delight? - - **Context**: What's appropriate for this domain and audience? - - **Brand**: Are there existing brand colors we should use? - -2. **Identify where color adds value**: - - **Semantic meaning**: Success (green), error (red), warning (yellow/orange), info (blue) - - **Hierarchy**: Drawing attention to important elements - - **Categorization**: Different sections, types, or states - - **Emotional tone**: Warmth, energy, trust, creativity - - **Wayfinding**: Helping users navigate and understand structure - - **Delight**: Moments of visual interest and personality - -If any of these are unclear from the codebase, {{ask_instruction}} - -**CRITICAL**: More color ≠ better. Strategic color beats rainbow vomit every time. Every color should have a purpose. - -## Plan Color Strategy - -Create a purposeful color introduction plan: - -- **Color palette**: What colors match the brand/context? (Choose 2-4 colors max beyond neutrals) -- **Dominant color**: Which color owns 60% of colored elements? -- **Accent colors**: Which colors provide contrast and highlights? (30% and 10%) -- **Application strategy**: Where does each color appear and why? - -**IMPORTANT**: Color should enhance hierarchy and meaning, not create chaos. Less is more when it matters more. - -## Introduce Color Strategically - -Add color systematically across these dimensions: - -### Semantic Color -- **State indicators**: - - Success: Green tones (emerald, forest, mint) - - Error: Red/pink tones (rose, crimson, coral) - - Warning: Orange/amber tones - - Info: Blue tones (sky, ocean, indigo) - - Neutral: Gray/slate for inactive states - -- **Status badges**: Colored backgrounds or borders for states (active, pending, completed, etc.) -- **Progress indicators**: Colored bars, rings, or charts showing completion or health - -### Accent Color Application -- **Primary actions**: Color the most important buttons/CTAs -- **Links**: Add color to clickable text (maintain accessibility) -- **Icons**: Colorize key icons for recognition and personality -- **Headers/titles**: Add color to section headers or key labels -- **Hover states**: Introduce color on interaction - -### Background & Surfaces -- **Tinted backgrounds**: Replace pure gray (`#f5f5f5`) with warm neutrals (`oklch(97% 0.01 60)`) or cool tints (`oklch(97% 0.01 250)`) -- **Colored sections**: Use subtle background colors to separate areas -- **Gradient backgrounds**: Add depth with subtle, intentional gradients (not generic purple-blue) -- **Cards & surfaces**: Tint cards or surfaces slightly for warmth - -**Use OKLCH for color**: It's perceptually uniform, meaning equal steps in lightness *look* equal. Great for generating harmonious scales. - -### Data Visualization -- **Charts & graphs**: Use color to encode categories or values -- **Heatmaps**: Color intensity shows density or importance -- **Comparison**: Color coding for different datasets or timeframes - -### Borders & Accents -- **Accent borders**: Add colored left/top borders to cards or sections -- **Underlines**: Color underlines for emphasis or active states -- **Dividers**: Subtle colored dividers instead of gray lines -- **Focus rings**: Colored focus indicators matching brand - -### Typography Color -- **Colored headings**: Use brand colors for section headings (maintain contrast) -- **Highlight text**: Color for emphasis or categories -- **Labels & tags**: Small colored labels for metadata or categories - -### Decorative Elements -- **Illustrations**: Add colored illustrations or icons -- **Shapes**: Geometric shapes in brand colors as background elements -- **Gradients**: Colorful gradient overlays or mesh backgrounds -- **Blobs/organic shapes**: Soft colored shapes for visual interest - -## Balance & Refinement - -Ensure color addition improves rather than overwhelms: - -### Maintain Hierarchy -- **Dominant color** (60%): Primary brand color or most used accent -- **Secondary color** (30%): Supporting color for variety -- **Accent color** (10%): High contrast for key moments -- **Neutrals** (remaining): Gray/black/white for structure - -### Accessibility -- **Contrast ratios**: Ensure WCAG compliance (4.5:1 for text, 3:1 for UI components) -- **Don't rely on color alone**: Use icons, labels, or patterns alongside color -- **Test for color blindness**: Verify red/green combinations work for all users - -### Cohesion -- **Consistent palette**: Use colors from defined palette, not arbitrary choices -- **Systematic application**: Same color meanings throughout (green always = success) -- **Temperature consistency**: Warm palette stays warm, cool stays cool - -**NEVER**: -- Use every color in the rainbow (choose 2-4 colors beyond neutrals) -- Apply color randomly without semantic meaning -- Put gray text on colored backgrounds—it looks washed out; use a darker shade of the background color or transparency instead -- Use pure gray for neutrals—add subtle color tint (warm or cool) for sophistication -- Use pure black (`#000`) or pure white (`#fff`) for large areas -- Violate WCAG contrast requirements -- Use color as the only indicator (accessibility issue) -- Make everything colorful (defeats the purpose) -- Default to purple-blue gradients (AI slop aesthetic) - -## Verify Color Addition - -Test that colorization improves the experience: - -- **Better hierarchy**: Does color guide attention appropriately? -- **Clearer meaning**: Does color help users understand states/categories? -- **More engaging**: Does the interface feel warmer and more inviting? -- **Still accessible**: Do all color combinations meet WCAG standards? -- **Not overwhelming**: Is color balanced and purposeful? - -Remember: Color is emotional and powerful. Use it to create warmth, guide attention, communicate meaning, and express personality. But restraint and strategy matter more than saturation and variety. Be colorful, but be intentional. diff --git a/.codex/skills/critique/SKILL.md b/.codex/skills/critique/SKILL.md deleted file mode 100644 index ec2009d91fc..00000000000 --- a/.codex/skills/critique/SKILL.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -name: critique -description: Evaluate design effectiveness from a UX perspective. Assesses visual hierarchy, information architecture, emotional resonance, and overall design quality with actionable feedback. -args: - - name: area - description: The feature or area to critique (optional) - required: false -user-invokable: true ---- - -Conduct a holistic design critique, evaluating whether the interface actually works—not just technically, but as a designed experience. Think like a design director giving feedback. - -**First**: Use the frontend-design skill for design principles and anti-patterns. - -## Design Critique - -Evaluate the interface across these dimensions: - -### 1. AI Slop Detection (CRITICAL) - -**This is the most important check.** Does this look like every other AI-generated interface from 2024-2025? - -Review the design against ALL the **DON'T** guidelines in the frontend-design skill—they are the fingerprints of AI-generated work. Check for the AI color palette, gradient text, dark mode with glowing accents, glassmorphism, hero metric layouts, identical card grids, generic fonts, and all other tells. - -**The test**: If you showed this to someone and said "AI made this," would they believe you immediately? If yes, that's the problem. - -### 2. Visual Hierarchy -- Does the eye flow to the most important element first? -- Is there a clear primary action? Can you spot it in 2 seconds? -- Do size, color, and position communicate importance correctly? -- Is there visual competition between elements that should have different weights? - -### 3. Information Architecture -- Is the structure intuitive? Would a new user understand the organization? -- Is related content grouped logically? -- Are there too many choices at once? (cognitive overload) -- Is the navigation clear and predictable? - -### 4. Emotional Resonance -- What emotion does this interface evoke? Is that intentional? -- Does it match the brand personality? -- Does it feel trustworthy, approachable, premium, playful—whatever it should feel? -- Would the target user feel "this is for me"? - -### 5. Discoverability & Affordance -- Are interactive elements obviously interactive? -- Would a user know what to do without instructions? -- Are hover/focus states providing useful feedback? -- Are there hidden features that should be more visible? - -### 6. Composition & Balance -- Does the layout feel balanced or uncomfortably weighted? -- Is whitespace used intentionally or just leftover? -- Is there visual rhythm in spacing and repetition? -- Does asymmetry feel designed or accidental? - -### 7. Typography as Communication -- Does the type hierarchy clearly signal what to read first, second, third? -- Is body text comfortable to read? (line length, spacing, size) -- Do font choices reinforce the brand/tone? -- Is there enough contrast between heading levels? - -### 8. Color with Purpose -- Is color used to communicate, not just decorate? -- Does the palette feel cohesive? -- Are accent colors drawing attention to the right things? -- Does it work for colorblind users? (not just technically—does meaning still come through?) - -### 9. States & Edge Cases -- Empty states: Do they guide users toward action, or just say "nothing here"? -- Loading states: Do they reduce perceived wait time? -- Error states: Are they helpful and non-blaming? -- Success states: Do they confirm and guide next steps? - -### 10. Microcopy & Voice -- Is the writing clear and concise? -- Does it sound like a human (the right human for this brand)? -- Are labels and buttons unambiguous? -- Does error copy help users fix the problem? - -## Generate Critique Report - -Structure your feedback as a design director would: - -### Anti-Patterns Verdict -**Start here.** Pass/fail: Does this look AI-generated? List specific tells from the skill's Anti-Patterns section. Be brutally honest. - -### Overall Impression -A brief gut reaction—what works, what doesn't, and the single biggest opportunity. - -### What's Working -Highlight 2-3 things done well. Be specific about why they work. - -### Priority Issues -The 3-5 most impactful design problems, ordered by importance: - -For each issue: -- **What**: Name the problem clearly -- **Why it matters**: How this hurts users or undermines goals -- **Fix**: What to do about it (be concrete) -- **Command**: Which command to use (prefer: {{available_commands}} — or other installed skills you're sure exist) - -### Minor Observations -Quick notes on smaller issues worth addressing. - -### Questions to Consider -Provocative questions that might unlock better solutions: -- "What if the primary action were more prominent?" -- "Does this need to feel this complex?" -- "What would a confident version of this look like?" - -**Remember**: -- Be direct—vague feedback wastes everyone's time -- Be specific—"the submit button" not "some elements" -- Say what's wrong AND why it matters to users -- Give concrete suggestions, not just "consider exploring..." -- Prioritize ruthlessly—if everything is important, nothing is -- Don't soften criticism—developers need honest feedback to ship great design diff --git a/.codex/skills/delight/SKILL.md b/.codex/skills/delight/SKILL.md deleted file mode 100644 index 0835f7b48ed..00000000000 --- a/.codex/skills/delight/SKILL.md +++ /dev/null @@ -1,317 +0,0 @@ ---- -name: delight -description: Add moments of joy, personality, and unexpected touches that make interfaces memorable and enjoyable to use. Elevates functional to delightful. -args: - - name: target - description: The feature or area to add delight to (optional) - required: false -user-invokable: true ---- - -Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences. - -## MANDATORY PREPARATION - -### Context Gathering (Do This First) - -You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), brand personality (playful vs professional vs quirky vs elegant), and what's appropriate for the domain. - -Attempt to gather these from the current thread or codebase. - -1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and {{ask_instruction}} whether you got it right. -2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST {{ask_instruction}} clarifying questions first to complete your context. - -Do NOT proceed until you have answers. Delight that's wrong for the context is worse than no delight at all. - -### Use frontend-design skill - -Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts. - ---- - -## Assess Delight Opportunities - -Identify where delight would enhance (not distract from) the experience: - -1. **Find natural delight moments**: - - **Success states**: Completed actions (save, send, publish) - - **Empty states**: First-time experiences, onboarding - - **Loading states**: Waiting periods that could be entertaining - - **Achievements**: Milestones, streaks, completions - - **Interactions**: Hover states, clicks, drags - - **Errors**: Softening frustrating moments - - **Easter eggs**: Hidden discoveries for curious users - -2. **Understand the context**: - - What's the brand personality? (Playful? Professional? Quirky? Elegant?) - - Who's the audience? (Tech-savvy? Creative? Corporate?) - - What's the emotional context? (Accomplishment? Exploration? Frustration?) - - What's appropriate? (Banking app ≠ gaming app) - -3. **Define delight strategy**: - - **Subtle sophistication**: Refined micro-interactions (luxury brands) - - **Playful personality**: Whimsical illustrations and copy (consumer apps) - - **Helpful surprises**: Anticipating needs before users ask (productivity tools) - - **Sensory richness**: Satisfying sounds, smooth animations (creative tools) - -If any of these are unclear from the codebase, {{ask_instruction}} - -**CRITICAL**: Delight should enhance usability, never obscure it. If users notice the delight more than accomplishing their goal, you've gone too far. - -## Delight Principles - -Follow these guidelines: - -### Delight Amplifies, Never Blocks -- Delight moments should be quick (< 1 second) -- Never delay core functionality for delight -- Make delight skippable or subtle -- Respect user's time and task focus - -### Surprise and Discovery -- Hide delightful details for users to discover -- Reward exploration and curiosity -- Don't announce every delight moment -- Let users share discoveries with others - -### Appropriate to Context -- Match delight to emotional moment (celebrate success, empathize with errors) -- Respect the user's state (don't be playful during critical errors) -- Match brand personality and audience expectations -- Cultural sensitivity (what's delightful varies by culture) - -### Compound Over Time -- Delight should remain fresh with repeated use -- Vary responses (not same animation every time) -- Reveal deeper layers with continued use -- Build anticipation through patterns - -## Delight Techniques - -Add personality and joy through these methods: - -### Micro-interactions & Animation - -**Button delight**: -```css -/* Satisfying button press */ -.button { - transition: transform 0.1s, box-shadow 0.1s; -} -.button:active { - transform: translateY(2px); - box-shadow: 0 2px 4px rgba(0,0,0,0.2); -} - -/* Ripple effect on click */ -/* Smooth lift on hover */ -.button:hover { - transform: translateY(-2px); - transition: transform 0.2s cubic-bezier(0.25, 1, 0.5, 1); /* ease-out-quart */ -} -``` - -**Loading delight**: -- Playful loading animations (not just spinners) -- Personality in loading messages ("Herding pixels..." "Teaching robots to dance...") -- Progress indication with encouraging messages -- Skeleton screens with subtle animations - -**Success animations**: -- Checkmark draw animation -- Confetti burst for major achievements -- Gentle scale + fade for confirmation -- Satisfying sound effects (subtle) - -**Hover surprises**: -- Icons that animate on hover -- Color shifts or glow effects -- Tooltip reveals with personality -- Cursor changes (custom cursors for branded experiences) - -### Personality in Copy - -**Playful error messages**: -``` -"Error 404" -"This page is playing hide and seek. (And winning)" - -"Connection failed" -"Looks like the internet took a coffee break. Want to retry?" -``` - -**Encouraging empty states**: -``` -"No projects" -"Your canvas awaits. Create something amazing." - -"No messages" -"Inbox zero! You're crushing it today." -``` - -**Playful labels & tooltips**: -``` -"Delete" -"Send to void" (for playful brand) - -"Help" -"Rescue me" (tooltip) -``` - -**IMPORTANT**: Match copy personality to brand. Banks shouldn't be wacky, but they can be warm. - -### Illustrations & Visual Personality - -**Custom illustrations**: -- Empty state illustrations (not stock icons) -- Error state illustrations (friendly monsters, quirky characters) -- Loading state illustrations (animated characters) -- Success state illustrations (celebrations) - -**Icon personality**: -- Custom icon set matching brand personality -- Animated icons (subtle motion on hover/click) -- Illustrative icons (more detailed than generic) -- Consistent style across all icons - -**Background effects**: -- Subtle particle effects -- Gradient mesh backgrounds -- Geometric patterns -- Parallax depth -- Time-of-day themes (morning vs night) - -### Satisfying Interactions - -**Drag and drop delight**: -- Lift effect on drag (shadow, scale) -- Snap animation when dropped -- Satisfying placement sound -- Undo toast ("Dropped in wrong place? [Undo]") - -**Toggle switches**: -- Smooth slide with spring physics -- Color transition -- Haptic feedback on mobile -- Optional sound effect - -**Progress & achievements**: -- Streak counters with celebratory milestones -- Progress bars that "celebrate" at 100% -- Badge unlocks with animation -- Playful stats ("You're on fire! 5 days in a row") - -**Form interactions**: -- Input fields that animate on focus -- Checkboxes that bounce when checked -- Success state that celebrates valid input -- Auto-grow textareas - -### Sound Design - -**Subtle audio cues** (when appropriate): -- Notification sounds (distinctive but not annoying) -- Success sounds (satisfying "ding") -- Error sounds (empathetic, not harsh) -- Typing sounds for chat/messaging -- Ambient background audio (very subtle) - -**IMPORTANT**: -- Respect system sound settings -- Provide mute option -- Keep volumes quiet (subtle cues, not alarms) -- Don't play on every interaction (sound fatigue is real) - -### Easter Eggs & Hidden Delights - -**Discovery rewards**: -- Konami code unlocks special theme -- Hidden keyboard shortcuts (Cmd+K for special features) -- Hover reveals on logos or illustrations -- Alt text jokes on images (for screen reader users too!) -- Console messages for developers ("Like what you see? We're hiring!") - -**Seasonal touches**: -- Holiday themes (subtle, tasteful) -- Seasonal color shifts -- Weather-based variations -- Time-based changes (dark at night, light during day) - -**Contextual personality**: -- Different messages based on time of day -- Responses to specific user actions -- Randomized variations (not same every time) -- Progressive reveals with continued use - -### Loading & Waiting States - -**Make waiting engaging**: -- Interesting loading messages that rotate -- Progress bars with personality -- Mini-games during long loads -- Fun facts or tips while waiting -- Countdown with encouraging messages - -``` -Loading messages rotation: -- "Waking up the servers..." -- "Teaching robots to dance..." -- "Consulting the magic 8-ball..." -- "Counting backwards from infinity..." -``` - -### Celebration Moments - -**Success celebrations**: -- Confetti for major milestones -- Animated checkmarks for completions -- Progress bar celebrations at 100% -- "Achievement unlocked" style notifications -- Personalized messages ("You published your 10th article!") - -**Milestone recognition**: -- First-time actions get special treatment -- Streak tracking and celebration -- Progress toward goals -- Anniversary celebrations - -## Implementation Patterns - -**Animation libraries**: -- Framer Motion (React) -- GSAP (universal) -- Lottie (After Effects animations) -- Canvas confetti (party effects) - -**Sound libraries**: -- Howler.js (audio management) -- Use-sound (React hook) - -**Physics libraries**: -- React Spring (spring physics) -- Popmotion (animation primitives) - -**IMPORTANT**: File size matters. Compress images, optimize animations, lazy load delight features. - -**NEVER**: -- Delay core functionality for delight -- Force users through delightful moments (make skippable) -- Use delight to hide poor UX -- Overdo it (less is more) -- Ignore accessibility (animate responsibly, provide alternatives) -- Make every interaction delightful (special moments should be special) -- Sacrifice performance for delight -- Be inappropriate for context (read the room) - -## Verify Delight Quality - -Test that delight actually delights: - -- **User reactions**: Do users smile? Share screenshots? -- **Doesn't annoy**: Still pleasant after 100th time? -- **Doesn't block**: Can users opt out or skip? -- **Performant**: No jank, no slowdown -- **Appropriate**: Matches brand and context -- **Accessible**: Works with reduced motion, screen readers - -Remember: Delight is the difference between a tool and an experience. Add personality, surprise users positively, and create moments worth sharing. But always respect usability - delight should enhance, never obstruct. diff --git a/.codex/skills/distill/SKILL.md b/.codex/skills/distill/SKILL.md deleted file mode 100644 index 6ff81ad0ec6..00000000000 --- a/.codex/skills/distill/SKILL.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -name: distill -description: Strip designs to their essence by removing unnecessary complexity. Great design is simple, powerful, and clean. -args: - - name: target - description: The feature or component to distill (optional) - required: false -user-invokable: true ---- - -Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification. - -## MANDATORY PREPARATION - -### Context Gathering (Do This First) - -You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), and understanding what's truly essential vs nice-to-have for this product. - -Attempt to gather these from the current thread or codebase. - -1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and {{ask_instruction}} whether you got it right. -2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST {{ask_instruction}} clarifying questions first to complete your context. - -Do NOT proceed until you have answers. Simplifying the wrong things destroys usability. - -### Use frontend-design skill - -Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts. - ---- - -## Assess Current State - -Analyze what makes the design feel complex or cluttered: - -1. **Identify complexity sources**: - - **Too many elements**: Competing buttons, redundant information, visual clutter - - **Excessive variation**: Too many colors, fonts, sizes, styles without purpose - - **Information overload**: Everything visible at once, no progressive disclosure - - **Visual noise**: Unnecessary borders, shadows, backgrounds, decorations - - **Confusing hierarchy**: Unclear what matters most - - **Feature creep**: Too many options, actions, or paths forward - -2. **Find the essence**: - - What's the primary user goal? (There should be ONE) - - What's actually necessary vs nice-to-have? - - What can be removed, hidden, or combined? - - What's the 20% that delivers 80% of value? - -If any of these are unclear from the codebase, {{ask_instruction}} - -**CRITICAL**: Simplicity is not about removing features - it's about removing obstacles between users and their goals. Every element should justify its existence. - -## Plan Simplification - -Create a ruthless editing strategy: - -- **Core purpose**: What's the ONE thing this should accomplish? -- **Essential elements**: What's truly necessary to achieve that purpose? -- **Progressive disclosure**: What can be hidden until needed? -- **Consolidation opportunities**: What can be combined or integrated? - -**IMPORTANT**: Simplification is hard. It requires saying no to good ideas to make room for great execution. Be ruthless. - -## Simplify the Design - -Systematically remove complexity across these dimensions: - -### Information Architecture -- **Reduce scope**: Remove secondary actions, optional features, redundant information -- **Progressive disclosure**: Hide complexity behind clear entry points (accordions, modals, step-through flows) -- **Combine related actions**: Merge similar buttons, consolidate forms, group related content -- **Clear hierarchy**: ONE primary action, few secondary actions, everything else tertiary or hidden -- **Remove redundancy**: If it's said elsewhere, don't repeat it here - -### Visual Simplification -- **Reduce color palette**: Use 1-2 colors plus neutrals, not 5-7 colors -- **Limit typography**: One font family, 3-4 sizes maximum, 2-3 weights -- **Remove decorations**: Eliminate borders, shadows, backgrounds that don't serve hierarchy or function -- **Flatten structure**: Reduce nesting, remove unnecessary containers—never nest cards inside cards -- **Remove unnecessary cards**: Cards aren't needed for basic layout; use spacing and alignment instead -- **Consistent spacing**: Use one spacing scale, remove arbitrary gaps - -### Layout Simplification -- **Linear flow**: Replace complex grids with simple vertical flow where possible -- **Remove sidebars**: Move secondary content inline or hide it -- **Full-width**: Use available space generously instead of complex multi-column layouts -- **Consistent alignment**: Pick left or center, stick with it -- **Generous white space**: Let content breathe, don't pack everything tight - -### Interaction Simplification -- **Reduce choices**: Fewer buttons, fewer options, clearer path forward (paradox of choice is real) -- **Smart defaults**: Make common choices automatic, only ask when necessary -- **Inline actions**: Replace modal flows with inline editing where possible -- **Remove steps**: Can signup be one step instead of three? Can checkout be simplified? -- **Clear CTAs**: ONE obvious next step, not five competing actions - -### Content Simplification -- **Shorter copy**: Cut every sentence in half, then do it again -- **Active voice**: "Save changes" not "Changes will be saved" -- **Remove jargon**: Plain language always wins -- **Scannable structure**: Short paragraphs, bullet points, clear headings -- **Essential information only**: Remove marketing fluff, legalese, hedging -- **Remove redundant copy**: No headers restating intros, no repeated explanations, say it once - -### Code Simplification -- **Remove unused code**: Dead CSS, unused components, orphaned files -- **Flatten component trees**: Reduce nesting depth -- **Consolidate styles**: Merge similar styles, use utilities consistently -- **Reduce variants**: Does that component need 12 variations, or can 3 cover 90% of cases? - -**NEVER**: -- Remove necessary functionality (simplicity ≠ feature-less) -- Sacrifice accessibility for simplicity (clear labels and ARIA still required) -- Make things so simple they're unclear (mystery ≠ minimalism) -- Remove information users need to make decisions -- Eliminate hierarchy completely (some things should stand out) -- Oversimplify complex domains (match complexity to actual task complexity) - -## Verify Simplification - -Ensure simplification improves usability: - -- **Faster task completion**: Can users accomplish goals more quickly? -- **Reduced cognitive load**: Is it easier to understand what to do? -- **Still complete**: Are all necessary features still accessible? -- **Clearer hierarchy**: Is it obvious what matters most? -- **Better performance**: Does simpler design load faster? - -## Document Removed Complexity - -If you removed features or options: -- Document why they were removed -- Consider if they need alternative access points -- Note any user feedback to monitor - -Remember: You have great taste and judgment. Simplification is an act of confidence - knowing what to keep and courage to remove the rest. As Antoine de Saint-Exupéry said: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away." diff --git a/.codex/skills/extract/SKILL.md b/.codex/skills/extract/SKILL.md deleted file mode 100644 index 58592ab1db9..00000000000 --- a/.codex/skills/extract/SKILL.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -name: extract -description: Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library. -args: - - name: target - description: The feature, component, or area to extract from (optional) - required: false -user-invokable: true ---- - -Identify reusable patterns, components, and design tokens, then extract and consolidate them into the design system for systematic reuse. - -## Discover - -Analyze the target area to identify extraction opportunities: - -1. **Find the design system**: Locate your design system, component library, or shared UI directory (grep for "design system", "ui", "components", etc.). Understand its structure: - - Component organization and naming conventions - - Design token structure (if any) - - Documentation patterns - - Import/export conventions - - **CRITICAL**: If no design system exists, ask before creating one. Understand the preferred location and structure first. - -2. **Identify patterns**: Look for: - - **Repeated components**: Similar UI patterns used multiple times (buttons, cards, inputs, etc.) - - **Hard-coded values**: Colors, spacing, typography, shadows that should be tokens - - **Inconsistent variations**: Multiple implementations of the same concept (3 different button styles) - - **Reusable patterns**: Layout patterns, composition patterns, interaction patterns worth systematizing - -3. **Assess value**: Not everything should be extracted. Consider: - - Is this used 3+ times, or likely to be reused? - - Would systematizing this improve consistency? - - Is this a general pattern or context-specific? - - What's the maintenance cost vs benefit? - -## Plan Extraction - -Create a systematic extraction plan: - -- **Components to extract**: Which UI elements become reusable components? -- **Tokens to create**: Which hard-coded values become design tokens? -- **Variants to support**: What variations does each component need? -- **Naming conventions**: Component names, token names, prop names that match existing patterns -- **Migration path**: How to refactor existing uses to consume the new shared versions - -**IMPORTANT**: Design systems grow incrementally. Extract what's clearly reusable now, not everything that might someday be reusable. - -## Extract & Enrich - -Build improved, reusable versions: - -- **Components**: Create well-designed components with: - - Clear props API with sensible defaults - - Proper variants for different use cases - - Accessibility built in (ARIA, keyboard navigation, focus management) - - Documentation and usage examples - -- **Design tokens**: Create tokens with: - - Clear naming (primitive vs semantic) - - Proper hierarchy and organization - - Documentation of when to use each token - -- **Patterns**: Document patterns with: - - When to use this pattern - - Code examples - - Variations and combinations - -**NEVER**: -- Extract one-off, context-specific implementations without generalization -- Create components so generic they're useless -- Extract without considering existing design system conventions -- Skip proper TypeScript types or prop documentation -- Create tokens for every single value (tokens should have semantic meaning) - -## Migrate - -Replace existing uses with the new shared versions: - -- **Find all instances**: Search for the patterns you've extracted -- **Replace systematically**: Update each use to consume the shared version -- **Test thoroughly**: Ensure visual and functional parity -- **Delete dead code**: Remove the old implementations - -## Document - -Update design system documentation: - -- Add new components to the component library -- Document token usage and values -- Add examples and guidelines -- Update any Storybook or component catalog - -Remember: A good design system is a living system. Extract patterns as they emerge, enrich them thoughtfully, and maintain them consistently. - diff --git a/.codex/skills/harden/SKILL.md b/.codex/skills/harden/SKILL.md deleted file mode 100644 index 3ba23eac0bc..00000000000 --- a/.codex/skills/harden/SKILL.md +++ /dev/null @@ -1,358 +0,0 @@ ---- -name: harden -description: Improve interface resilience through better error handling, i18n support, text overflow handling, and edge case management. Makes interfaces robust and production-ready. -args: - - name: target - description: The feature or area to harden (optional) - required: false -user-invokable: true ---- - -Strengthen interfaces against edge cases, errors, internationalization issues, and real-world usage scenarios that break idealized designs. - -## Assess Hardening Needs - -Identify weaknesses and edge cases: - -1. **Test with extreme inputs**: - - Very long text (names, descriptions, titles) - - Very short text (empty, single character) - - Special characters (emoji, RTL text, accents) - - Large numbers (millions, billions) - - Many items (1000+ list items, 50+ options) - - No data (empty states) - -2. **Test error scenarios**: - - Network failures (offline, slow, timeout) - - API errors (400, 401, 403, 404, 500) - - Validation errors - - Permission errors - - Rate limiting - - Concurrent operations - -3. **Test internationalization**: - - Long translations (German is often 30% longer than English) - - RTL languages (Arabic, Hebrew) - - Character sets (Chinese, Japanese, Korean, emoji) - - Date/time formats - - Number formats (1,000 vs 1.000) - - Currency symbols - -**CRITICAL**: Designs that only work with perfect data aren't production-ready. Harden against reality. - -## Hardening Dimensions - -Systematically improve resilience: - -### Text Overflow & Wrapping - -**Long text handling**: -```css -/* Single line with ellipsis */ -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* Multi-line with clamp */ -.line-clamp { - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden; -} - -/* Allow wrapping */ -.wrap { - word-wrap: break-word; - overflow-wrap: break-word; - hyphens: auto; -} -``` - -**Flex/Grid overflow**: -```css -/* Prevent flex items from overflowing */ -.flex-item { - min-width: 0; /* Allow shrinking below content size */ - overflow: hidden; -} - -/* Prevent grid items from overflowing */ -.grid-item { - min-width: 0; - min-height: 0; -} -``` - -**Responsive text sizing**: -- Use `clamp()` for fluid typography -- Set minimum readable sizes (14px on mobile) -- Test text scaling (zoom to 200%) -- Ensure containers expand with text - -### Internationalization (i18n) - -**Text expansion**: -- Add 30-40% space budget for translations -- Use flexbox/grid that adapts to content -- Test with longest language (usually German) -- Avoid fixed widths on text containers - -```jsx -// ❌ Bad: Assumes short English text - - -// ✅ Good: Adapts to content - -``` - -**RTL (Right-to-Left) support**: -```css -/* Use logical properties */ -margin-inline-start: 1rem; /* Not margin-left */ -padding-inline: 1rem; /* Not padding-left/right */ -border-inline-end: 1px solid; /* Not border-right */ - -/* Or use dir attribute */ -[dir="rtl"] .arrow { transform: scaleX(-1); } -``` - -**Character set support**: -- Use UTF-8 encoding everywhere -- Test with Chinese/Japanese/Korean (CJK) characters -- Test with emoji (they can be 2-4 bytes) -- Handle different scripts (Latin, Cyrillic, Arabic, etc.) - -**Date/Time formatting**: -```javascript -// ✅ Use Intl API for proper formatting -new Intl.DateTimeFormat('en-US').format(date); // 1/15/2024 -new Intl.DateTimeFormat('de-DE').format(date); // 15.1.2024 - -new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD' -}).format(1234.56); // $1,234.56 -``` - -**Pluralization**: -```javascript -// ❌ Bad: Assumes English pluralization -`${count} item${count !== 1 ? 's' : ''}` - -// ✅ Good: Use proper i18n library -t('items', { count }) // Handles complex plural rules -``` - -### Error Handling - -**Network errors**: -- Show clear error messages -- Provide retry button -- Explain what happened -- Offer offline mode (if applicable) -- Handle timeout scenarios - -```jsx -// Error states with recovery -{error && ( - -

Failed to load data. {error.message}

- -
-)} -``` - -**Form validation errors**: -- Inline errors near fields -- Clear, specific messages -- Suggest corrections -- Don't block submission unnecessarily -- Preserve user input on error - -**API errors**: -- Handle each status code appropriately - - 400: Show validation errors - - 401: Redirect to login - - 403: Show permission error - - 404: Show not found state - - 429: Show rate limit message - - 500: Show generic error, offer support - -**Graceful degradation**: -- Core functionality works without JavaScript -- Images have alt text -- Progressive enhancement -- Fallbacks for unsupported features - -### Edge Cases & Boundary Conditions - -**Empty states**: -- No items in list -- No search results -- No notifications -- No data to display -- Provide clear next action - -**Loading states**: -- Initial load -- Pagination load -- Refresh -- Show what's loading ("Loading your projects...") -- Time estimates for long operations - -**Large datasets**: -- Pagination or virtual scrolling -- Search/filter capabilities -- Performance optimization -- Don't load all 10,000 items at once - -**Concurrent operations**: -- Prevent double-submission (disable button while loading) -- Handle race conditions -- Optimistic updates with rollback -- Conflict resolution - -**Permission states**: -- No permission to view -- No permission to edit -- Read-only mode -- Clear explanation of why - -**Browser compatibility**: -- Polyfills for modern features -- Fallbacks for unsupported CSS -- Feature detection (not browser detection) -- Test in target browsers - -### Input Validation & Sanitization - -**Client-side validation**: -- Required fields -- Format validation (email, phone, URL) -- Length limits -- Pattern matching -- Custom validation rules - -**Server-side validation** (always): -- Never trust client-side only -- Validate and sanitize all inputs -- Protect against injection attacks -- Rate limiting - -**Constraint handling**: -```html - - - - Letters and numbers only, up to 100 characters - -``` - -### Accessibility Resilience - -**Keyboard navigation**: -- All functionality accessible via keyboard -- Logical tab order -- Focus management in modals -- Skip links for long content - -**Screen reader support**: -- Proper ARIA labels -- Announce dynamic changes (live regions) -- Descriptive alt text -- Semantic HTML - -**Motion sensitivity**: -```css -@media (prefers-reduced-motion: reduce) { - * { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - } -} -``` - -**High contrast mode**: -- Test in Windows high contrast mode -- Don't rely only on color -- Provide alternative visual cues - -### Performance Resilience - -**Slow connections**: -- Progressive image loading -- Skeleton screens -- Optimistic UI updates -- Offline support (service workers) - -**Memory leaks**: -- Clean up event listeners -- Cancel subscriptions -- Clear timers/intervals -- Abort pending requests on unmount - -**Throttling & Debouncing**: -```javascript -// Debounce search input -const debouncedSearch = debounce(handleSearch, 300); - -// Throttle scroll handler -const throttledScroll = throttle(handleScroll, 100); -``` - -## Testing Strategies - -**Manual testing**: -- Test with extreme data (very long, very short, empty) -- Test in different languages -- Test offline -- Test slow connection (throttle to 3G) -- Test with screen reader -- Test keyboard-only navigation -- Test on old browsers - -**Automated testing**: -- Unit tests for edge cases -- Integration tests for error scenarios -- E2E tests for critical paths -- Visual regression tests -- Accessibility tests (axe, WAVE) - -**IMPORTANT**: Hardening is about expecting the unexpected. Real users will do things you never imagined. - -**NEVER**: -- Assume perfect input (validate everything) -- Ignore internationalization (design for global) -- Leave error messages generic ("Error occurred") -- Forget offline scenarios -- Trust client-side validation alone -- Use fixed widths for text -- Assume English-length text -- Block entire interface when one component errors - -## Verify Hardening - -Test thoroughly with edge cases: - -- **Long text**: Try names with 100+ characters -- **Emoji**: Use emoji in all text fields -- **RTL**: Test with Arabic or Hebrew -- **CJK**: Test with Chinese/Japanese/Korean -- **Network issues**: Disable internet, throttle connection -- **Large datasets**: Test with 1000+ items -- **Concurrent actions**: Click submit 10 times rapidly -- **Errors**: Force API errors, test all error states -- **Empty**: Remove all data, test empty states - -Remember: You're hardening for production reality, not demo perfection. Expect users to input weird data, lose connection mid-flow, and use your product in unexpected ways. Build resilience into every component. - diff --git a/.codex/skills/normalize/SKILL.md b/.codex/skills/normalize/SKILL.md deleted file mode 100644 index b818d8603e4..00000000000 --- a/.codex/skills/normalize/SKILL.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -name: normalize -description: Normalize design to match your design system and ensure consistency -args: - - name: feature - description: The page, route, or feature to normalize (optional) - required: false -user-invokable: true ---- - -Analyze and redesign the feature to perfectly match our design system standards, aesthetics, and established patterns. - -## Plan - -Before making changes, deeply understand the context: - -1. **Discover the design system**: Search for design system documentation, UI guidelines, component libraries, or style guides (grep for "design system", "ui guide", "style guide", etc.). Study it thoroughly until you understand: - - Core design principles and aesthetic direction - - Target audience and personas - - Component patterns and conventions - - Design tokens (colors, typography, spacing) - - **CRITICAL**: If something isn't clear, ask. Don't guess at design system principles. - -2. **Analyze the current feature**: Assess what works and what doesn't: - - Where does it deviate from design system patterns? - - Which inconsistencies are cosmetic vs. functional? - - What's the root cause—missing tokens, one-off implementations, or conceptual misalignment? - -3. **Create a normalization plan**: Define specific changes that will align the feature with the design system: - - Which components can be replaced with design system equivalents? - - Which styles need to use design tokens instead of hard-coded values? - - How can UX patterns match established user flows? - - **IMPORTANT**: Great design is effective design. Prioritize UX consistency and usability over visual polish alone. Think through the best possible experience for your use case and personas first. - -## Execute - -Systematically address all inconsistencies across these dimensions: - -- **Typography**: Use design system fonts, sizes, weights, and line heights. Replace hard-coded values with typographic tokens or classes. -- **Color & Theme**: Apply design system color tokens. Remove one-off color choices that break the palette. -- **Spacing & Layout**: Use spacing tokens (margins, padding, gaps). Align with grid systems and layout patterns used elsewhere. -- **Components**: Replace custom implementations with design system components. Ensure props and variants match established patterns. -- **Motion & Interaction**: Match animation timing, easing, and interaction patterns to other features. -- **Responsive Behavior**: Ensure breakpoints and responsive patterns align with design system standards. -- **Accessibility**: Verify contrast ratios, focus states, ARIA labels match design system requirements. -- **Progressive Disclosure**: Match information hierarchy and complexity management to established patterns. - -**NEVER**: -- Create new one-off components when design system equivalents exist -- Hard-code values that should use design tokens -- Introduce new patterns that diverge from the design system -- Compromise accessibility for visual consistency - -This is not an exhaustive list—apply judgment to identify all areas needing normalization. - -## Clean Up - -After normalization, ensure code quality: - -- **Consolidate reusable components**: If you created new components that should be shared, move them to the design system or shared UI component path. -- **Remove orphaned code**: Delete unused implementations, styles, or files made obsolete by normalization. -- **Verify quality**: Lint, type-check, and test according to repository guidelines. Ensure normalization didn't introduce regressions. -- **Ensure DRYness**: Look for duplication introduced during refactoring and consolidate. - -Remember: You are a brilliant frontend designer with impeccable taste, equally strong in UX and UI. Your attention to detail and eye for end-to-end user experience is world class. Execute with precision and thoroughness. diff --git a/.codex/skills/plan-eng-review/SKILL.md b/.codex/skills/plan-eng-review/SKILL.md deleted file mode 100644 index dfa049b8935..00000000000 --- a/.codex/skills/plan-eng-review/SKILL.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -name: plan-eng-review -version: 1.0.0 -description: | - Eng manager-mode plan review. Lock in the execution plan — architecture, - data flow, diagrams, edge cases, test coverage, performance. Walks through - issues interactively with opinionated recommendations. -allowed-tools: - - Read - - Grep - - Glob - - AskUserQuestion ---- - -# Plan Review Mode - -Review this plan thoroughly before making any code changes. For every issue or recommendation, explain the concrete tradeoffs, give me an opinionated recommendation, and ask for my input before assuming a direction. - -## Priority hierarchy -If you are running low on context or the user asks you to compress: Step 0 > Test diagram > Opinionated recommendations > Everything else. Never skip Step 0 or the test diagram. - -## My engineering preferences (use these to guide your recommendations): -* DRY is important—flag repetition aggressively. -* Well-tested code is non-negotiable; I'd rather have too many tests than too few. -* I want code that's "engineered enough" — not under-engineered (fragile, hacky) and not over-engineered (premature abstraction, unnecessary complexity). -* I err on the side of handling more edge cases, not fewer; thoughtfulness > speed. -* Bias toward explicit over clever. -* Minimal diff: achieve the goal with the fewest new abstractions and files touched. - -## Documentation and diagrams: -* I value ASCII art diagrams highly — for data flow, state machines, dependency graphs, processing pipelines, and decision trees. Use them liberally in plans and design docs. -* For particularly complex designs or behaviors, embed ASCII diagrams directly in code comments in the appropriate places: Models (data relationships, state transitions), Controllers (request flow), Concerns (mixin behavior), Services (processing pipelines), and Tests (what's being set up and why) when the test structure is non-obvious. -* **Diagram maintenance is part of the change.** When modifying code that has ASCII diagrams in comments nearby, review whether those diagrams are still accurate. Update them as part of the same commit. Stale diagrams are worse than no diagrams — they actively mislead. Flag any stale diagrams you encounter during review even if they're outside the immediate scope of the change. - -## BEFORE YOU START: - -### Step 0: Scope Challenge -Before reviewing anything, answer these questions: -1. **What existing code already partially or fully solves each sub-problem?** Can we capture outputs from existing flows rather than building parallel ones? -2. **What is the minimum set of changes that achieves the stated goal?** Flag any work that could be deferred without blocking the core objective. Be ruthless about scope creep. -3. **Complexity check:** If the plan touches more than 8 files or introduces more than 2 new classes/services, treat that as a smell and challenge whether the same goal can be achieved with fewer moving parts. - -Then ask if I want one of three options: -1. **SCOPE REDUCTION:** The plan is overbuilt. Propose a minimal version that achieves the core goal, then review that. -2. **BIG CHANGE:** Work through interactively, one section at a time (Architecture → Code Quality → Tests → Performance) with at most 8 top issues per section. -3. **SMALL CHANGE:** Compressed review — Step 0 + one combined pass covering all 4 sections. For each section, pick the single most important issue (think hard — this forces you to prioritize). Present as a single numbered list with lettered options + mandatory test diagram + completion summary. One AskUserQuestion round at the end. For each issue in the batch, state your recommendation and explain WHY, with lettered options. - -**Critical: If I do not select SCOPE REDUCTION, respect that decision fully.** Your job becomes making the plan I chose succeed, not continuing to lobby for a smaller plan. Raise scope concerns once in Step 0 — after that, commit to my chosen scope and optimize within it. Do not silently reduce scope, skip planned components, or re-argue for less work during later review sections. - -## Review Sections (after scope is agreed) - -### 1. Architecture review -Evaluate: -* Overall system design and component boundaries. -* Dependency graph and coupling concerns. -* Data flow patterns and potential bottlenecks. -* Scaling characteristics and single points of failure. -* Security architecture (auth, data access, API boundaries). -* Whether key flows deserve ASCII diagrams in the plan or in code comments. -* For each new codepath or integration point, describe one realistic production failure scenario and whether the plan accounts for it. - -**STOP.** For each issue found in this section, call AskUserQuestion individually. One issue per call. Present options, state your recommendation, explain WHY. Do NOT batch multiple issues into one AskUserQuestion. Only proceed to the next section after ALL issues in this section are resolved. - -### 2. Code quality review -Evaluate: -* Code organization and module structure. -* DRY violations—be aggressive here. -* Error handling patterns and missing edge cases (call these out explicitly). -* Technical debt hotspots. -* Areas that are over-engineered or under-engineered relative to my preferences. -* Existing ASCII diagrams in touched files — are they still accurate after this change? - -**STOP.** For each issue found in this section, call AskUserQuestion individually. One issue per call. Present options, state your recommendation, explain WHY. Do NOT batch multiple issues into one AskUserQuestion. Only proceed to the next section after ALL issues in this section are resolved. - -### 3. Test review -Make a diagram of all new UX, new data flow, new codepaths, and new branching if statements or outcomes. For each, note what is new about the features discussed in this branch and plan. Then, for each new item in the diagram, make sure there is a JS or Rails test. - -For LLM/prompt changes: check the "Prompt/LLM changes" file patterns listed in AGENTS.md. If this plan touches ANY of those patterns, state which eval suites must be run, which cases should be added, and what baselines to compare against. Then use AskUserQuestion to confirm the eval scope with the user. - -**STOP.** For each issue found in this section, call AskUserQuestion individually. One issue per call. Present options, state your recommendation, explain WHY. Do NOT batch multiple issues into one AskUserQuestion. Only proceed to the next section after ALL issues in this section are resolved. - -### 4. Performance review -Evaluate: -* N+1 queries and database access patterns. -* Memory-usage concerns. -* Caching opportunities. -* Slow or high-complexity code paths. - -**STOP.** For each issue found in this section, call AskUserQuestion individually. One issue per call. Present options, state your recommendation, explain WHY. Do NOT batch multiple issues into one AskUserQuestion. Only proceed to the next section after ALL issues in this section are resolved. - -## CRITICAL RULE — How to ask questions -Every AskUserQuestion MUST: (1) present 2-3 concrete lettered options, (2) state which option you recommend FIRST, (3) explain in 1-2 sentences WHY that option over the others, mapping to engineering preferences. No batching multiple issues into one question. No yes/no questions. Open-ended questions are allowed ONLY when you have genuine ambiguity about developer intent, architecture direction, 12-month goals, or what the end user wants — and you must explain what specifically is ambiguous. **Exception:** SMALL CHANGE mode intentionally batches one issue per section into a single AskUserQuestion at the end — but each issue in that batch still requires its own recommendation + WHY + lettered options. - -## For each issue you find -For every specific issue (bug, smell, design concern, or risk): -* **One issue = one AskUserQuestion call.** Never combine multiple issues into one question. -* Describe the problem concretely, with file and line references. -* Present 2–3 options, including "do nothing" where that's reasonable. -* For each option, specify in one line: effort, risk, and maintenance burden. -* **Lead with your recommendation.** State it as a directive: "Do B. Here's why:" — not "Option B might be worth considering." Be opinionated. I'm paying for your judgment, not a menu. -* **Map the reasoning to my engineering preferences above.** One sentence connecting your recommendation to a specific preference (DRY, explicit > clever, minimal diff, etc.). -* **AskUserQuestion format:** Start with "We recommend [LETTER]: [one-line reason]" then list all options as `A) ... B) ... C) ...`. Label with issue NUMBER + option LETTER (e.g., "3A", "3B"). -* **Escape hatch:** If a section has no issues, say so and move on. If an issue has an obvious fix with no real alternatives, state what you'll do and move on — don't waste a question on it. Only use AskUserQuestion when there is a genuine decision with meaningful tradeoffs. - -## Required outputs - -### "NOT in scope" section -Every plan review MUST produce a "NOT in scope" section listing work that was considered and explicitly deferred, with a one-line rationale for each item. - -### "What already exists" section -List existing code/flows that already partially solve sub-problems in this plan, and whether the plan reuses them or unnecessarily rebuilds them. - -### TODOS.md updates -After all review sections are complete, present each potential TODO as its own individual AskUserQuestion. Never batch TODOs — one per question. Never silently skip this step. - -For each TODO, describe: -* **What:** One-line description of the work. -* **Why:** The concrete problem it solves or value it unlocks. -* **Pros:** What you gain by doing this work. -* **Cons:** Cost, complexity, or risks of doing it. -* **Context:** Enough detail that someone picking this up in 3 months understands the motivation, the current state, and where to start. -* **Depends on / blocked by:** Any prerequisites or ordering constraints. - -Then present options: **A)** Add to TODOS.md **B)** Skip — not valuable enough **C)** Build it now in this PR instead of deferring. - -Do NOT just append vague bullet points. A TODO without context is worse than no TODO — it creates false confidence that the idea was captured while actually losing the reasoning. - -### Diagrams -The plan itself should use ASCII diagrams for any non-trivial data flow, state machine, or processing pipeline. Additionally, identify which files in the implementation should get inline ASCII diagram comments — particularly Models with complex state transitions, Services with multi-step pipelines, and Concerns with non-obvious mixin behavior. - -### Failure modes -For each new codepath identified in the test review diagram, list one realistic way it could fail in production (timeout, nil reference, race condition, stale data, etc.) and whether: -1. A test covers that failure -2. Error handling exists for it -3. The user would see a clear error or a silent failure - -If any failure mode has no test AND no error handling AND would be silent, flag it as a **critical gap**. - -### Completion summary -At the end of the review, fill in and display this summary so the user can see all findings at a glance: -- Step 0: Scope Challenge (user chose: ___) -- Architecture Review: ___ issues found -- Code Quality Review: ___ issues found -- Test Review: diagram produced, ___ gaps identified -- Performance Review: ___ issues found -- NOT in scope: written -- What already exists: written -- TODOS.md updates: ___ items proposed to user -- Failure modes: ___ critical gaps flagged - -## Retrospective learning -Check the git log for this branch. If there are prior commits suggesting a previous review cycle (e.g., review-driven refactors, reverted changes), note what was changed and whether the current plan touches the same areas. Be more aggressive reviewing areas that were previously problematic. - -## Formatting rules -* NUMBER issues (1, 2, 3...) and give LETTERS for options (A, B, C...). -* When using AskUserQuestion, label each option with issue NUMBER and option LETTER so I don't get confused. -* Recommended option is always listed first. -* Keep each option to one sentence max. I should be able to pick in under 5 seconds. -* After each review section, pause and ask for feedback before moving on. - -## Unresolved decisions -If the user does not respond to an AskUserQuestion or interrupts to move on, note which decisions were left unresolved. At the end of the review, list these as "Unresolved decisions that may bite you later" — never silently default to an option. diff --git a/.codex/skills/polish/SKILL.md b/.codex/skills/polish/SKILL.md deleted file mode 100644 index ff4aa5312af..00000000000 --- a/.codex/skills/polish/SKILL.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -name: polish -description: Final quality pass before shipping. Fixes alignment, spacing, consistency, and detail issues that separate good from great. -args: - - name: target - description: The feature or area to polish (optional) - required: false -user-invokable: true ---- - -**First**: Use the frontend-design skill for design principles and anti-patterns. - -Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished. - -## Pre-Polish Assessment - -Understand the current state and goals: - -1. **Review completeness**: - - Is it functionally complete? - - Are there known issues to preserve (mark with TODOs)? - - What's the quality bar? (MVP vs flagship feature?) - - When does it ship? (How much time for polish?) - -2. **Identify polish areas**: - - Visual inconsistencies - - Spacing and alignment issues - - Interaction state gaps - - Copy inconsistencies - - Edge cases and error states - - Loading and transition smoothness - -**CRITICAL**: Polish is the last step, not the first. Don't polish work that's not functionally complete. - -## Polish Systematically - -Work through these dimensions methodically: - -### Visual Alignment & Spacing - -- **Pixel-perfect alignment**: Everything lines up to grid -- **Consistent spacing**: All gaps use spacing scale (no random 13px gaps) -- **Optical alignment**: Adjust for visual weight (icons may need offset for optical centering) -- **Responsive consistency**: Spacing and alignment work at all breakpoints -- **Grid adherence**: Elements snap to baseline grid - -**Check**: -- Enable grid overlay and verify alignment -- Check spacing with browser inspector -- Test at multiple viewport sizes -- Look for elements that "feel" off - -### Typography Refinement - -- **Hierarchy consistency**: Same elements use same sizes/weights throughout -- **Line length**: 45-75 characters for body text -- **Line height**: Appropriate for font size and context -- **Widows & orphans**: No single words on last line -- **Hyphenation**: Appropriate for language and column width -- **Kerning**: Adjust letter spacing where needed (especially headlines) -- **Font loading**: No FOUT/FOIT flashes - -### Color & Contrast - -- **Contrast ratios**: All text meets WCAG standards -- **Consistent token usage**: No hard-coded colors, all use design tokens -- **Theme consistency**: Works in all theme variants -- **Color meaning**: Same colors mean same things throughout -- **Accessible focus**: Focus indicators visible with sufficient contrast -- **Tinted neutrals**: No pure gray or pure black—add subtle color tint (0.01 chroma) -- **Gray on color**: Never put gray text on colored backgrounds—use a shade of that color or transparency - -### Interaction States - -Every interactive element needs all states: - -- **Default**: Resting state -- **Hover**: Subtle feedback (color, scale, shadow) -- **Focus**: Keyboard focus indicator (never remove without replacement) -- **Active**: Click/tap feedback -- **Disabled**: Clearly non-interactive -- **Loading**: Async action feedback -- **Error**: Validation or error state -- **Success**: Successful completion - -**Missing states create confusion and broken experiences**. - -### Micro-interactions & Transitions - -- **Smooth transitions**: All state changes animated appropriately (150-300ms) -- **Consistent easing**: Use ease-out-quart/quint/expo for natural deceleration. Never bounce or elastic—they feel dated. -- **No jank**: 60fps animations, only animate transform and opacity -- **Appropriate motion**: Motion serves purpose, not decoration -- **Reduced motion**: Respects `prefers-reduced-motion` - -### Content & Copy - -- **Consistent terminology**: Same things called same names throughout -- **Consistent capitalization**: Title Case vs Sentence case applied consistently -- **Grammar & spelling**: No typos -- **Appropriate length**: Not too wordy, not too terse -- **Punctuation consistency**: Periods on sentences, not on labels (unless all labels have them) - -### Icons & Images - -- **Consistent style**: All icons from same family or matching style -- **Appropriate sizing**: Icons sized consistently for context -- **Proper alignment**: Icons align with adjacent text optically -- **Alt text**: All images have descriptive alt text -- **Loading states**: Images don't cause layout shift, proper aspect ratios -- **Retina support**: 2x assets for high-DPI screens - -### Forms & Inputs - -- **Label consistency**: All inputs properly labeled -- **Required indicators**: Clear and consistent -- **Error messages**: Helpful and consistent -- **Tab order**: Logical keyboard navigation -- **Auto-focus**: Appropriate (don't overuse) -- **Validation timing**: Consistent (on blur vs on submit) - -### Edge Cases & Error States - -- **Loading states**: All async actions have loading feedback -- **Empty states**: Helpful empty states, not just blank space -- **Error states**: Clear error messages with recovery paths -- **Success states**: Confirmation of successful actions -- **Long content**: Handles very long names, descriptions, etc. -- **No content**: Handles missing data gracefully -- **Offline**: Appropriate offline handling (if applicable) - -### Responsiveness - -- **All breakpoints**: Test mobile, tablet, desktop -- **Touch targets**: 44x44px minimum on touch devices -- **Readable text**: No text smaller than 14px on mobile -- **No horizontal scroll**: Content fits viewport -- **Appropriate reflow**: Content adapts logically - -### Performance - -- **Fast initial load**: Optimize critical path -- **No layout shift**: Elements don't jump after load (CLS) -- **Smooth interactions**: No lag or jank -- **Optimized images**: Appropriate formats and sizes -- **Lazy loading**: Off-screen content loads lazily - -### Code Quality - -- **Remove console logs**: No debug logging in production -- **Remove commented code**: Clean up dead code -- **Remove unused imports**: Clean up unused dependencies -- **Consistent naming**: Variables and functions follow conventions -- **Type safety**: No TypeScript `any` or ignored errors -- **Accessibility**: Proper ARIA labels and semantic HTML - -## Polish Checklist - -Go through systematically: - -- [ ] Visual alignment perfect at all breakpoints -- [ ] Spacing uses design tokens consistently -- [ ] Typography hierarchy consistent -- [ ] All interactive states implemented -- [ ] All transitions smooth (60fps) -- [ ] Copy is consistent and polished -- [ ] Icons are consistent and properly sized -- [ ] All forms properly labeled and validated -- [ ] Error states are helpful -- [ ] Loading states are clear -- [ ] Empty states are welcoming -- [ ] Touch targets are 44x44px minimum -- [ ] Contrast ratios meet WCAG AA -- [ ] Keyboard navigation works -- [ ] Focus indicators visible -- [ ] No console errors or warnings -- [ ] No layout shift on load -- [ ] Works in all supported browsers -- [ ] Respects reduced motion preference -- [ ] Code is clean (no TODOs, console.logs, commented code) - -**IMPORTANT**: Polish is about details. Zoom in. Squint at it. Use it yourself. The little things add up. - -**NEVER**: -- Polish before it's functionally complete -- Spend hours on polish if it ships in 30 minutes (triage) -- Introduce bugs while polishing (test thoroughly) -- Ignore systematic issues (if spacing is off everywhere, fix the system) -- Perfect one thing while leaving others rough (consistent quality level) - -## Final Verification - -Before marking as done: - -- **Use it yourself**: Actually interact with the feature -- **Test on real devices**: Not just browser DevTools -- **Ask someone else to review**: Fresh eyes catch things -- **Compare to design**: Match intended design -- **Check all states**: Don't just test happy path - -Remember: You have impeccable attention to detail and exquisite taste. Polish until it feels effortless, looks intentional, and works flawlessly. Sweat the details - they matter. - diff --git a/.codex/skills/quieter/SKILL.md b/.codex/skills/quieter/SKILL.md deleted file mode 100644 index aa59a967131..00000000000 --- a/.codex/skills/quieter/SKILL.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -name: quieter -description: Tone down overly bold or visually aggressive designs. Reduces intensity while maintaining design quality and impact. -args: - - name: target - description: The feature or component to make quieter (optional) - required: false -user-invokable: true ---- - -Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness. - -## MANDATORY PREPARATION - -### Context Gathering (Do This First) - -You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), brand personality/tone, and everything else that a great human designer would need as well. - -Attempt to gather these from the current thread or codebase. - -1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and {{ask_instruction}} whether you got it right. -2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST {{ask_instruction}} clarifying questions first to complete your context. - -Do NOT proceed until you have answers. Guessing leads to generic design. - -### Use frontend-design skill - -Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts. - ---- - -## Assess Current State - -Analyze what makes the design feel too intense: - -1. **Identify intensity sources**: - - **Color saturation**: Overly bright or saturated colors - - **Contrast extremes**: Too much high-contrast juxtaposition - - **Visual weight**: Too many bold, heavy elements competing - - **Animation excess**: Too much motion or overly dramatic effects - - **Complexity**: Too many visual elements, patterns, or decorations - - **Scale**: Everything is large and loud with no hierarchy - -2. **Understand the context**: - - What's the purpose? (Marketing vs tool vs reading experience) - - Who's the audience? (Some contexts need energy) - - What's working? (Don't throw away good ideas) - - What's the core message? (Preserve what matters) - -If any of these are unclear from the codebase, {{ask_instruction}} - -**CRITICAL**: "Quieter" doesn't mean boring or generic. It means refined, sophisticated, and easier on the eyes. Think luxury, not laziness. - -## Plan Refinement - -Create a strategy to reduce intensity while maintaining impact: - -- **Color approach**: Desaturate or shift to more sophisticated tones? -- **Hierarchy approach**: Which elements should stay bold (very few), which should recede? -- **Simplification approach**: What can be removed entirely? -- **Sophistication approach**: How can we signal quality through restraint? - -**IMPORTANT**: Great quiet design is harder than great bold design. Subtlety requires precision. - -## Refine the Design - -Systematically reduce intensity across these dimensions: - -### Color Refinement -- **Reduce saturation**: Shift from fully saturated to 70-85% saturation -- **Soften palette**: Replace bright colors with muted, sophisticated tones -- **Reduce color variety**: Use fewer colors more thoughtfully -- **Neutral dominance**: Let neutrals do more work, use color as accent (10% rule) -- **Gentler contrasts**: High contrast only where it matters most -- **Tinted grays**: Use warm or cool tinted grays instead of pure gray—adds sophistication without loudness -- **Never gray on color**: If you have gray text on a colored background, use a darker shade of that color or transparency instead - -### Visual Weight Reduction -- **Typography**: Reduce font weights (900 → 600, 700 → 500), decrease sizes where appropriate -- **Hierarchy through subtlety**: Use weight, size, and space instead of color and boldness -- **White space**: Increase breathing room, reduce density -- **Borders & lines**: Reduce thickness, decrease opacity, or remove entirely - -### Simplification -- **Remove decorative elements**: Gradients, shadows, patterns, textures that don't serve purpose -- **Simplify shapes**: Reduce border radius extremes, simplify custom shapes -- **Reduce layering**: Flatten visual hierarchy where possible -- **Clean up effects**: Reduce or remove blur effects, glows, multiple shadows - -### Motion Reduction -- **Reduce animation intensity**: Shorter distances (10-20px instead of 40px), gentler easing -- **Remove decorative animations**: Keep functional motion, remove flourishes -- **Subtle micro-interactions**: Replace dramatic effects with gentle feedback -- **Refined easing**: Use ease-out-quart for smooth, understated motion—never bounce or elastic -- **Remove animations entirely** if they're not serving a clear purpose - -### Composition Refinement -- **Reduce scale jumps**: Smaller contrast between sizes creates calmer feeling -- **Align to grid**: Bring rogue elements back into systematic alignment -- **Even out spacing**: Replace extreme spacing variations with consistent rhythm - -**NEVER**: -- Make everything the same size/weight (hierarchy still matters) -- Remove all color (quiet ≠ grayscale) -- Eliminate all personality (maintain character through refinement) -- Sacrifice usability for aesthetics (functional elements still need clear affordances) -- Make everything small and light (some anchors needed) - -## Verify Quality - -Ensure refinement maintains quality: - -- **Still functional**: Can users still accomplish tasks easily? -- **Still distinctive**: Does it have character, or is it generic now? -- **Better reading**: Is text easier to read for extended periods? -- **Sophistication**: Does it feel more refined and premium? - -Remember: Quiet design is confident design. It doesn't need to shout. Less is more, but less is also harder. Refine with precision and maintain intentionality. diff --git a/.codex/skills/teach-impeccable/SKILL.md b/.codex/skills/teach-impeccable/SKILL.md deleted file mode 100644 index 18f5479f5e6..00000000000 --- a/.codex/skills/teach-impeccable/SKILL.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -name: teach-impeccable -description: One-time setup that gathers design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines. -user-invokable: true ---- - -Gather design context for this project, then persist it for all future sessions. - -## Step 1: Explore the Codebase - -Before asking questions, thoroughly scan the project to discover what you can: - -- **README and docs**: Project purpose, target audience, any stated goals -- **Package.json / config files**: Tech stack, dependencies, existing design libraries -- **Existing components**: Current design patterns, spacing, typography in use -- **Brand assets**: Logos, favicons, color values already defined -- **Design tokens / CSS variables**: Existing color palettes, font stacks, spacing scales -- **Any style guides or brand documentation** - -Note what you've learned and what remains unclear. - -## Step 2: Ask UX-Focused Questions - -{{ask_instruction}} Focus only on what you couldn't infer from the codebase: - -### Users & Purpose -- Who uses this? What's their context when using it? -- What job are they trying to get done? -- What emotions should the interface evoke? (confidence, delight, calm, urgency, etc.) - -### Brand & Personality -- How would you describe the brand personality in 3 words? -- Any reference sites or apps that capture the right feel? What specifically about them? -- What should this explicitly NOT look like? Any anti-references? - -### Aesthetic Preferences -- Any strong preferences for visual direction? (minimal, bold, elegant, playful, technical, organic, etc.) -- Light mode, dark mode, or both? -- Any colors that must be used or avoided? - -### Accessibility & Inclusion -- Specific accessibility requirements? (WCAG level, known user needs) -- Considerations for reduced motion, color blindness, or other accommodations? - -Skip questions where the answer is already clear from the codebase exploration. - -## Step 3: Write Design Context - -Synthesize your findings and the user's answers into a `## Design Context` section: - -```markdown -## Design Context - -### Users -[Who they are, their context, the job to be done] - -### Brand Personality -[Voice, tone, 3-word personality, emotional goals] - -### Aesthetic Direction -[Visual tone, references, anti-references, theme] - -### Design Principles -[3-5 principles derived from the conversation that should guide all design decisions] -``` - -Write this section to {{config_file}} in the project root. If the file exists, append or update the Design Context section. - -Confirm completion and summarize the key design principles that will now guide all future work. From ada255c594960294dd07c1881d3b62c1aec24070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Tue, 21 Apr 2026 21:56:34 +0200 Subject: [PATCH 31/43] remove some skills --- .codex/skills/frontend-design/SKILL.md | 127 ----------------- .../reference/color-and-contrast.md | 132 ------------------ .../reference/interaction-design.md | 123 ---------------- .../reference/motion-design.md | 99 ------------- .../reference/responsive-design.md | 114 --------------- .../reference/spatial-design.md | 100 ------------- .../frontend-design/reference/typography.md | 131 ----------------- .../frontend-design/reference/ux-writing.md | 107 -------------- 8 files changed, 933 deletions(-) delete mode 100644 .codex/skills/frontend-design/SKILL.md delete mode 100644 .codex/skills/frontend-design/reference/color-and-contrast.md delete mode 100644 .codex/skills/frontend-design/reference/interaction-design.md delete mode 100644 .codex/skills/frontend-design/reference/motion-design.md delete mode 100644 .codex/skills/frontend-design/reference/responsive-design.md delete mode 100644 .codex/skills/frontend-design/reference/spatial-design.md delete mode 100644 .codex/skills/frontend-design/reference/typography.md delete mode 100644 .codex/skills/frontend-design/reference/ux-writing.md diff --git a/.codex/skills/frontend-design/SKILL.md b/.codex/skills/frontend-design/SKILL.md deleted file mode 100644 index d0c1173ca7d..00000000000 --- a/.codex/skills/frontend-design/SKILL.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -name: frontend-design -description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics. -license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution. ---- - -This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices. - -## Design Direction - -Commit to a BOLD aesthetic direction: -- **Purpose**: What problem does this interface solve? Who uses it? -- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction. -- **Constraints**: Technical requirements (framework, performance, accessibility). -- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember? - -**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work—the key is intentionality, not intensity. - -Then implement working code that is: -- Production-grade and functional -- Visually striking and memorable -- Cohesive with a clear aesthetic point-of-view -- Meticulously refined in every detail - -## Frontend Aesthetics Guidelines - -### Typography -→ *Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.* - -Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font. - -**DO**: Use a modular type scale with fluid sizing (clamp) -**DO**: Vary font weights and sizes to create clear visual hierarchy -**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults -**DON'T**: Use monospace typography as lazy shorthand for "technical/developer" vibes -**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated - -### Color & Theme -→ *Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.* - -Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes. - -**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes -**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion -**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead -**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature -**DON'T**: Use the AI color palette: cyan-on-dark, purple-to-blue gradients, neon accents on dark backgrounds -**DON'T**: Use gradient text for "impact"—especially on metrics or headings; it's decorative rather than meaningful -**DON'T**: Default to dark mode with glowing accents—it looks "cool" without requiring actual design decisions - -### Layout & Space -→ *Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.* - -Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis. - -**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations -**DO**: Use fluid spacing with clamp() that breathes on larger screens -**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis -**DON'T**: Wrap everything in cards—not everything needs a container -**DON'T**: Nest cards inside cards—visual noise, flatten the hierarchy -**DON'T**: Use identical card grids—same-sized cards with icon + heading + text, repeated endlessly -**DON'T**: Use the hero metric layout template—big number, small label, supporting stats, gradient accent -**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed -**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous - -### Visual Details -**DO**: Use intentional, purposeful decorative elements that reinforce brand -**DON'T**: Use glassmorphism everywhere—blur effects, glass cards, glow borders used decoratively rather than purposefully -**DON'T**: Use rounded elements with thick colored border on one side—a lazy accent that almost never looks intentional -**DON'T**: Use sparklines as decoration—tiny charts that look sophisticated but convey nothing meaningful -**DON'T**: Use rounded rectangles with generic drop shadows—safe, forgettable, could be any AI output -**DON'T**: Use modals unless there's truly no better alternative—modals are lazy - -### Motion -→ *Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.* - -Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions. - -**DO**: Use motion to convey state changes—entrances, exits, feedback -**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration -**DO**: For height animations, use grid-template-rows transitions instead of animating height directly -**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only -**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly - -### Interaction -→ *Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.* - -Make interactions feel fast. Use optimistic UI—update immediately, sync later. - -**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions) -**DO**: Design empty states that teach the interface, not just say "nothing here" -**DO**: Make every interactive surface feel intentional and responsive -**DON'T**: Repeat the same information—redundant headers, intros that restate the heading -**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters - -### Responsive -→ *Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.* - -**DO**: Use container queries (@container) for component-level responsiveness -**DO**: Adapt the interface for different contexts—don't just shrink it -**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it - -### UX Writing -→ *Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.* - -**DO**: Make every word earn its place -**DON'T**: Repeat information users can already see - ---- - -## The AI Slop Test - -**Critical quality check**: If you showed this interface to someone and said "AI made this," would they believe you immediately? If yes, that's the problem. - -A distinctive interface should make someone ask "how was this made?" not "which AI made this?" - -Review the DON'T guidelines above—they are the fingerprints of AI-generated work from 2024-2025. - ---- - -## Implementation Principles - -Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. - -Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations. - -Remember: {{model}} is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision. diff --git a/.codex/skills/frontend-design/reference/color-and-contrast.md b/.codex/skills/frontend-design/reference/color-and-contrast.md deleted file mode 100644 index 77aaf03296e..00000000000 --- a/.codex/skills/frontend-design/reference/color-and-contrast.md +++ /dev/null @@ -1,132 +0,0 @@ -# Color & Contrast - -## Color Spaces: Use OKLCH - -**Stop using HSL.** Use OKLCH (or LCH) instead. It's perceptually uniform, meaning equal steps in lightness *look* equal—unlike HSL where 50% lightness in yellow looks bright while 50% in blue looks dark. - -```css -/* OKLCH: lightness (0-100%), chroma (0-0.4+), hue (0-360) */ ---color-primary: oklch(60% 0.15 250); /* Blue */ ---color-primary-light: oklch(85% 0.08 250); /* Same hue, lighter */ ---color-primary-dark: oklch(35% 0.12 250); /* Same hue, darker */ -``` - -**Key insight**: As you move toward white or black, reduce chroma (saturation). High chroma at extreme lightness looks garish. A light blue at 85% lightness needs ~0.08 chroma, not the 0.15 of your base color. - -## Building Functional Palettes - -### The Tinted Neutral Trap - -**Pure gray is dead.** Add a subtle hint of your brand hue to all neutrals: - -```css -/* Dead grays */ ---gray-100: oklch(95% 0 0); /* No personality */ ---gray-900: oklch(15% 0 0); - -/* Warm-tinted grays (add brand warmth) */ ---gray-100: oklch(95% 0.01 60); /* Hint of warmth */ ---gray-900: oklch(15% 0.01 60); - -/* Cool-tinted grays (tech, professional) */ ---gray-100: oklch(95% 0.01 250); /* Hint of blue */ ---gray-900: oklch(15% 0.01 250); -``` - -The chroma is tiny (0.01) but perceptible. It creates subconscious cohesion between your brand color and your UI. - -### Palette Structure - -A complete system needs: - -| Role | Purpose | Example | -|------|---------|---------| -| **Primary** | Brand, CTAs, key actions | 1 color, 3-5 shades | -| **Neutral** | Text, backgrounds, borders | 9-11 shade scale | -| **Semantic** | Success, error, warning, info | 4 colors, 2-3 shades each | -| **Surface** | Cards, modals, overlays | 2-3 elevation levels | - -**Skip secondary/tertiary unless you need them.** Most apps work fine with one accent color. Adding more creates decision fatigue and visual noise. - -### The 60-30-10 Rule (Applied Correctly) - -This rule is about **visual weight**, not pixel count: - -- **60%**: Neutral backgrounds, white space, base surfaces -- **30%**: Secondary colors—text, borders, inactive states -- **10%**: Accent—CTAs, highlights, focus states - -The common mistake: using the accent color everywhere because it's "the brand color." Accent colors work *because* they're rare. Overuse kills their power. - -## Contrast & Accessibility - -### WCAG Requirements - -| Content Type | AA Minimum | AAA Target | -|--------------|------------|------------| -| Body text | 4.5:1 | 7:1 | -| Large text (18px+ or 14px bold) | 3:1 | 4.5:1 | -| UI components, icons | 3:1 | 4.5:1 | -| Non-essential decorations | None | None | - -**The gotcha**: Placeholder text still needs 4.5:1. That light gray placeholder you see everywhere? Usually fails WCAG. - -### Dangerous Color Combinations - -These commonly fail contrast or cause readability issues: - -- Light gray text on white (the #1 accessibility fail) -- **Gray text on any colored background**—gray looks washed out and dead on color. Use a darker shade of the background color, or transparency -- Red text on green background (or vice versa)—8% of men can't distinguish these -- Blue text on red background (vibrates visually) -- Yellow text on white (almost always fails) -- Thin light text on images (unpredictable contrast) - -### Never Use Pure Gray or Pure Black - -Pure gray (`oklch(50% 0 0)`) and pure black (`#000`) don't exist in nature—real shadows and surfaces always have a color cast. Even a chroma of 0.005-0.01 is enough to feel natural without being obviously tinted. (See tinted neutrals example above.) - -### Testing - -Don't trust your eyes. Use tools: - -- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) -- Browser DevTools → Rendering → Emulate vision deficiencies -- [Polypane](https://polypane.app/) for real-time testing - -## Theming: Light & Dark Mode - -### Dark Mode Is Not Inverted Light Mode - -You can't just swap colors. Dark mode requires different design decisions: - -| Light Mode | Dark Mode | -|------------|-----------| -| Shadows for depth | Lighter surfaces for depth (no shadows) | -| Dark text on light | Light text on dark (reduce font weight) | -| Vibrant accents | Desaturate accents slightly | -| White backgrounds | Never pure black—use dark gray (oklch 12-18%) | - -```css -/* Dark mode depth via surface color, not shadow */ -:root[data-theme="dark"] { - --surface-1: oklch(15% 0.01 250); - --surface-2: oklch(20% 0.01 250); /* "Higher" = lighter */ - --surface-3: oklch(25% 0.01 250); - - /* Reduce text weight slightly */ - --body-weight: 350; /* Instead of 400 */ -} -``` - -### Token Hierarchy - -Use two layers: primitive tokens (`--blue-500`) and semantic tokens (`--color-primary: var(--blue-500)`). For dark mode, only redefine the semantic layer—primitives stay the same. - -## Alpha Is A Design Smell - -Heavy use of transparency (rgba, hsla) usually means an incomplete palette. Alpha creates unpredictable contrast, performance overhead, and inconsistency. Define explicit overlay colors for each context instead. Exception: focus rings and interactive states where see-through is needed. - ---- - -**Avoid**: Relying on color alone to convey information. Creating palettes without clear roles for each color. Using pure black (#000) for large areas. Skipping color blindness testing (8% of men affected). diff --git a/.codex/skills/frontend-design/reference/interaction-design.md b/.codex/skills/frontend-design/reference/interaction-design.md deleted file mode 100644 index 10a77564bc2..00000000000 --- a/.codex/skills/frontend-design/reference/interaction-design.md +++ /dev/null @@ -1,123 +0,0 @@ -# Interaction Design - -## The Eight Interactive States - -Every interactive element needs these states designed: - -| State | When | Visual Treatment | -|-------|------|------------------| -| **Default** | At rest | Base styling | -| **Hover** | Pointer over (not touch) | Subtle lift, color shift | -| **Focus** | Keyboard/programmatic focus | Visible ring (see below) | -| **Active** | Being pressed | Pressed in, darker | -| **Disabled** | Not interactive | Reduced opacity, no pointer | -| **Loading** | Processing | Spinner, skeleton | -| **Error** | Invalid state | Red border, icon, message | -| **Success** | Completed | Green check, confirmation | - -**The common miss**: Designing hover without focus, or vice versa. They're different. Keyboard users never see hover states. - -## Focus Rings: Do Them Right - -**Never `outline: none` without replacement.** It's an accessibility violation. Instead, use `:focus-visible` to show focus only for keyboard users: - -```css -/* Hide focus ring for mouse/touch */ -button:focus { - outline: none; -} - -/* Show focus ring for keyboard */ -button:focus-visible { - outline: 2px solid var(--color-accent); - outline-offset: 2px; -} -``` - -**Focus ring design**: -- High contrast (3:1 minimum against adjacent colors) -- 2-3px thick -- Offset from element (not inside it) -- Consistent across all interactive elements - -## Form Design: The Non-Obvious - -**Placeholders aren't labels**—they disappear on input. Always use visible `